添加gcc版的nes汇编文件 未验证
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#include "mywin_inc.h"
|
||||
#include "ff.h"
|
||||
// #include "nes_main.h"
|
||||
#include "nes_main.h"
|
||||
#include "gif.h"
|
||||
#include "system_updata.h"
|
||||
#include "avi.h"
|
||||
@@ -347,7 +347,7 @@ void FILDER_OpenFile(WIN_FilderStruct *filder)
|
||||
{
|
||||
FILDER_GetFileRoute(filder);
|
||||
WIN_KeyShieldOn();
|
||||
// nes_load ((u8*)filder->fileName,LCD_GetShowAddr(),LCD_GetLcdSizeX()/2-128,LCD_GetLcdSizeY()/2-120);
|
||||
nes_load ((u8*)filder->fileName,LCD_GetShowAddr(),LCD_GetLcdSizeX()/2-128,LCD_GetLcdSizeY()/2-120);
|
||||
WIN_KeyShieldOff();
|
||||
}
|
||||
else if (strcmp(p_str, ".avi") == 0)
|
||||
|
1533
Project/Src/NES/6502_gcc.S
Normal file
1533
Project/Src/NES/6502_gcc.S
Normal file
File diff suppressed because it is too large
Load Diff
211
Project/Src/NES/6502cart_gcc.S
Normal file
211
Project/Src/NES/6502cart_gcc.S
Normal file
@@ -0,0 +1,211 @@
|
||||
.syntax unified
|
||||
.cpu cortex-m4
|
||||
.fpu softvfp
|
||||
.thumb
|
||||
.text
|
||||
|
||||
|
||||
.include "6502def.s"
|
||||
|
||||
|
||||
|
||||
.extern NES_RAM
|
||||
.extern NES_SRAM
|
||||
.extern CPU_reset
|
||||
.extern romfile
|
||||
.extern cpu_data
|
||||
.extern op_table
|
||||
|
||||
.global cpu6502_init
|
||||
.global map67_
|
||||
.global map89_
|
||||
.global mapAB_
|
||||
.global mapCD_
|
||||
.global mapEF_
|
||||
|
||||
|
||||
|
||||
@ .thumb_func
|
||||
cpu6502_init:
|
||||
// ѹջ
|
||||
stmfd sp!,{r4-r11,lr}
|
||||
// <EFBFBD>Ѷ<EFBFBD>ȡcpu<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ldr r10,=cpu_data
|
||||
// <EFBFBD><EFBFBD>NES_RAM<EFBFBD><EFBFBD>ַָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>r11<EFBFBD><EFBFBD>
|
||||
ldr r11,=NES_RAM
|
||||
ldr r11,[r11]
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ӳ<EFBFBD><EFBFBD>
|
||||
str r11,[globalptr,#memmap_tbl]
|
||||
str r11,[globalptr,#memmap_tbl+4]
|
||||
str r11,[globalptr,#memmap_tbl+8]
|
||||
ldr r0,=NES_SRAM
|
||||
ldr r0,[r0]
|
||||
str r0,[globalptr,#memmap_tbl+12]
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַָ<EFBFBD><EFBFBD>
|
||||
ldr r0,=op_table
|
||||
str r0,[globalptr,#opz]
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>rom<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
ldr r0,=romfile
|
||||
ldr r0,[r0] // R0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ROMӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>
|
||||
add r3,r0,#16 // r3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>rom<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>
|
||||
str r3,[globalptr,#rombase] // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>rom<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
|
||||
mov r2,#1
|
||||
ldrb r1,[r3,#-12] // 16kB PROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ 2
|
||||
rsb r0,r2,r1,lsl#14 // romsize=X*16KB <<14 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD> r0=0x7fff
|
||||
str r0,[globalptr,#rommask] // rommask=promsize-1 32768-1
|
||||
|
||||
mov r9,#0 // (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>encodePC<EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>*<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĴ<EFBFBD><EFBFBD><EFBFBD>)
|
||||
str r9,[globalptr,#lastbank] // 6502PC<EFBFBD><EFBFBD> ROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д0
|
||||
|
||||
mov r0,#0 // Ĭ<EFBFBD><EFBFBD>romӳ<EFBFBD><EFBFBD>
|
||||
bl map89AB_ // 89AB=1st 16k
|
||||
mov r0,#-1
|
||||
bl mapCDEF_ // CDEF=last 16k
|
||||
|
||||
ldrb r1,[r3,#-10] // get mapper
|
||||
ldrb r2,[r3,#-9]
|
||||
tst r2,#0x0e // long live DiskDude!
|
||||
and r1,r1,#0xf0
|
||||
and r2,r2,#0xf0
|
||||
orr r0,r2,r1,lsr#4
|
||||
IT NE
|
||||
movne r0,r1,lsr#4 // ignore high nibble if header looks bad <EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// r0=mapper<EFBFBD><EFBFBD>
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>дrom<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
ldr r0,=Mapper_W
|
||||
str r0,[globalptr,#writemem_tbl+16]
|
||||
str r0,[globalptr,#writemem_tbl+20]
|
||||
str r0,[globalptr,#writemem_tbl+24]
|
||||
str r0,[globalptr,#writemem_tbl+28]
|
||||
|
||||
// cpu<EFBFBD><EFBFBD>λ
|
||||
bl CPU_reset
|
||||
ldmfd sp!,{r4-r11,lr}
|
||||
bx lr
|
||||
@ .end
|
||||
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
map67_: // rom paging.. r0=page#
|
||||
// ----------------------------------------------------------------------------
|
||||
ldr r1,[globalptr,#rommask]
|
||||
and r0,r1,r0,lsl#13
|
||||
ldr r1,[globalptr,#rombase]
|
||||
add r0,r1,r0
|
||||
sub r0,r0,#0x6000
|
||||
str r0,[globalptr,#memmap_tbl+12]
|
||||
b flush
|
||||
// ----------------------------------------------------------------------------
|
||||
map89_: // rom paging.. r0=page# ROM<EFBFBD><EFBFBD>ҳ
|
||||
// ----------------------------------------------------------------------------
|
||||
ldr r1,[globalptr,#rombase] // rom<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ
|
||||
sub r1,r1,#0x8000
|
||||
ldr r2,[globalptr,#rommask]
|
||||
and r0,r2,r0,lsl#13
|
||||
add r0,r1,r0
|
||||
str r0,[globalptr,#memmap_tbl+16]
|
||||
b flush
|
||||
// ----------------------------------------------------------------------------
|
||||
mapAB_:
|
||||
// ----------------------------------------------------------------------------
|
||||
ldr r1,[globalptr,#rombase]
|
||||
sub r1,r1,#0xa000
|
||||
ldr r2,[globalptr,#rommask]
|
||||
and r0,r2,r0,lsl#13
|
||||
add r0,r1,r0
|
||||
str r0,[globalptr,#memmap_tbl+20]
|
||||
b flush
|
||||
// ----------------------------------------------------------------------------
|
||||
mapCD_:
|
||||
// ----------------------------------------------------------------------------
|
||||
ldr r1,[globalptr,#rombase]
|
||||
sub r1,r1,#0xc000
|
||||
ldr r2,[globalptr,#rommask]
|
||||
and r0,r2,r0,lsl#13
|
||||
add r0,r1,r0
|
||||
str r0,[globalptr,#memmap_tbl+24]
|
||||
b flush
|
||||
// ----------------------------------------------------------------------------
|
||||
mapEF_:
|
||||
// ----------------------------------------------------------------------------
|
||||
ldr r1,[globalptr,#rombase]
|
||||
sub r1,r1,#0xe000
|
||||
ldr r2,[globalptr,#rommask]
|
||||
and r0,r2,r0,lsl#13
|
||||
add r0,r1,r0
|
||||
str r0,[globalptr,#memmap_tbl+28]
|
||||
b flush
|
||||
// ----------------------------------------------------------------------------
|
||||
map89AB_:
|
||||
// ----------------------------------------------------------------------------
|
||||
ldr r1,[globalptr,#rombase] // rom<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>
|
||||
sub r1,r1,#0x8000
|
||||
ldr r2,[globalptr,#rommask]
|
||||
and r0,r2,r0,lsl#14
|
||||
add r0,r1,r0
|
||||
str r0,[globalptr,#memmap_tbl+16]
|
||||
str r0,[globalptr,#memmap_tbl+20]
|
||||
|
||||
flush: // update m6502_pc & lastbank
|
||||
ldr r1,[globalptr,#lastbank]
|
||||
sub r9,r9,r1
|
||||
and r1,r9,#0xE000 // //r9<EFBFBD><EFBFBD>0xe000<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ldr r2, =memmap_tbl
|
||||
add r2, globalptr // //<EFBFBD>Ѵ洢<EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>r2
|
||||
lsr r1,r1,#11 // //>>11λ r1/2048
|
||||
ldr r0,[r2,r1] // //<EFBFBD><EFBFBD>ȡr2<EFBFBD><EFBFBD>ַ+r1ƫ<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>r0
|
||||
|
||||
str r0,[globalptr,#lastbank] // //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>6502PC<EFBFBD><EFBFBD> ROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
add r9,r9,r0 // //m6502_pc+r0
|
||||
orr lr,#0x01 // lr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>arm״̬
|
||||
bx lr
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
mapCDEF_:
|
||||
// ----------------------------------------------------------------------------
|
||||
ldr r1,[globalptr,#rombase]
|
||||
sub r1,r1,#0xc000
|
||||
ldr r2,[globalptr,#rommask]
|
||||
and r0,r2,r0,lsl#14
|
||||
add r0,r1,r0
|
||||
str r0,[globalptr,#memmap_tbl+24]
|
||||
str r0,[globalptr,#memmap_tbl+28]
|
||||
b flush
|
||||
// ----------------------------------------------------------------------------
|
||||
map89ABCDEF_:
|
||||
// ----------------------------------------------------------------------------
|
||||
ldr r1,[globalptr,#rombase]
|
||||
sub r1,r1,#0x8000
|
||||
ldr r2,[globalptr,#rommask]
|
||||
and r0,r2,r0,lsl#15
|
||||
add r0,r1,r0
|
||||
str r0,[globalptr,#memmap_tbl+16]
|
||||
str r0,[globalptr,#memmap_tbl+20]
|
||||
str r0,[globalptr,#memmap_tbl+24]
|
||||
str r0,[globalptr,#memmap_tbl+28]
|
||||
b flush
|
||||
|
||||
|
||||
.extern asm_Mapper_Write
|
||||
.type Mapper_W, %function
|
||||
Mapper_W:
|
||||
stmfd sp!,{r3,lr} // LR <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ
|
||||
mov r1,r12
|
||||
bl asm_Mapper_Write
|
||||
ldmfd sp!,{r3,lr}
|
||||
orr lr,#0x01 // lr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>arm״̬
|
||||
bx lr
|
||||
|
||||
|
||||
|
||||
@ .global main
|
||||
@ .type main, %function
|
||||
@ mian:
|
||||
@ b cpu6502_init
|
||||
|
64
Project/Src/NES/6502def.s
Normal file
64
Project/Src/NES/6502def.s
Normal file
@@ -0,0 +1,64 @@
|
||||
|
||||
|
||||
m6502_nz .req r3 // bit 31=N, Z=1 if bits 0-7=0 ;RN<52><4E><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
m6502_rmem .req r4 // readmem_tbl
|
||||
m6502_a .req r5 // bits 0-23=0, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
m6502_x .req r6 // bits 0-23=0
|
||||
m6502_y .req r7 // bits 0-23=0
|
||||
cycles .req r8 // also VDIC flagsҲVDIC<EFBFBD><EFBFBD>־
|
||||
m6502_pc .req r9
|
||||
globalptr .req r10 // =wram_globals* ptr
|
||||
m6502_optbl .req r10
|
||||
cpu_zpage .req r11 // =CPU_RAM
|
||||
addy .req r12 // keep this at r12 (<EFBFBD><EFBFBD>ͷ APCS) //addr :<EFBFBD><EFBFBD><EFBFBD><EFBFBD>8λ<EFBFBD><EFBFBD>ַ
|
||||
|
||||
|
||||
|
||||
|
||||
// equates.s - GCC/GAS version
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD>⣺GAS <EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD> RN<EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>ʹ<EFBFBD>üĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
|
||||
// globalptr, r10
|
||||
// cpu_zpage <EFBFBD><EFBFBD>Ӧ r11<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹƫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>൱<EFBFBD><EFBFBD> MAP 0, globalptr<EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> globalptr ָ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>ƫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
.equ opz, 0 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
.equ readmem_tbl, opz + 4 // <EFBFBD><EFBFBD><EFBFBD>ڴ溯<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
.equ writemem_tbl, readmem_tbl + 32 // д<EFBFBD>ڴ溯<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
.equ memmap_tbl, writemem_tbl + 32 // ROM/RAM ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
.equ cpuregs, memmap_tbl + 32 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6502 <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>ʼƫ<EFBFBD><EFBFBD>
|
||||
.equ m6502_s, cpuregs + 28 // ջָ<EFBFBD><EFBFBD> s
|
||||
.equ lastbank, m6502_s + 4 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> ROM bank <EFBFBD><EFBFBD>ַ
|
||||
.equ nexttimeout, lastbank + 4 // <EFBFBD>´γ<EFBFBD>ʱ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ַ
|
||||
.equ rombase, nexttimeout + 4 // ROM <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ
|
||||
.equ romnumber, rombase + 4 // ROM <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.equ rommask, romnumber + 4 // ROM <EFBFBD><EFBFBD><EFBFBD>루romsize-1<EFBFBD><EFBFBD>
|
||||
.equ joy0data, rommask + 4 // <EFBFBD>ֱ<EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.equ joy1data, joy0data + 4 // <EFBFBD>ֱ<EFBFBD> 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.equ clocksh, joy1data + 4 // APU ʱ<EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
.equ cpunmif, clocksh + 4 // NMI <EFBFBD>жϱ<EFBFBD>־
|
||||
.equ cpuirqf, cpunmif + 4 // IRQ <EFBFBD>жϱ<EFBFBD>־
|
||||
|
||||
|
||||
|
||||
.equ C, 0x01 // 6502 flags 6502<EFBFBD><EFBFBD>־
|
||||
.equ Z, 0x02
|
||||
.equ I, 0x04
|
||||
.equ D, 0x08
|
||||
.equ B, 0x10 // (always 1 except when IRQ pushes it) IRQ<EFBFBD>ⲿ<EFBFBD>ж<EFBFBD>
|
||||
.equ R, 0x20 // (locked at 1)
|
||||
.equ V, 0x40
|
||||
.equ N, 0x80
|
||||
|
||||
|
||||
.equ CYC_C, 0x01 // Carry bit <EFBFBD><EFBFBD>λ
|
||||
.equ BRANCH, 0x02 // branch instruction encountered <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ֧<EFBFBD><EFBFBD>
|
||||
.equ CYC_I, 0x04 // IRQ mask
|
||||
.equ CYC_D, 0x08 // Decimal bit С<EFBFBD><EFBFBD>λ
|
||||
.equ CYC_V, 0x40 // Overflow bit <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
.equ CYC_MASK, 0xFF // CYCLE-1 ;Mask
|
||||
|
||||
|
||||
|
||||
|
548
Project/Src/NES/6502mac_gcc.S
Normal file
548
Project/Src/NES/6502mac_gcc.S
Normal file
@@ -0,0 +1,548 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.include "6502def.s"
|
||||
|
||||
|
||||
// <EFBFBD><EFBFBD> 6502 PC <EFBFBD><EFBFBD>ַת<EFBFBD><EFBFBD>Ϊ ROM ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
.macro encodePC
|
||||
and r1, m6502_pc, #0xE000 // r9 & 0xE000
|
||||
ldr r2, =memmap_tbl
|
||||
add r2, globalptr // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD> r2
|
||||
lsr r0, r1, #11 // >>11λ
|
||||
ldr r0, [r2, r0] // <EFBFBD><EFBFBD> r2 + r0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD> r0
|
||||
str r0, [globalptr,#lastbank] // <EFBFBD><EFBFBD><EFBFBD>浱ǰ bank ƫ<EFBFBD><EFBFBD>
|
||||
add m6502_pc, m6502_pc, r0 // m6502_pc += r0
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6502 <EFBFBD><EFBFBD>־<EFBFBD><EFBFBD> r0
|
||||
.macro encodeP extra
|
||||
and r0, r8, #0x4F // CYC_V+CYC_D+CYC_I+CYC_C
|
||||
tst r3, #0x80000000 // PSR_N
|
||||
IT NE
|
||||
orrne r0, r0, #N // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> N <EFBFBD><EFBFBD>־
|
||||
tst r3, #0xFF // Z <EFBFBD><EFBFBD>־
|
||||
IT EQ
|
||||
orreq r0, r0, #Z // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Z <EFBFBD><EFBFBD>־
|
||||
orr r0, r0, \extra // <EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ (B/R)
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> r0 <EFBFBD>е<EFBFBD> 6502 <EFBFBD><EFBFBD>־
|
||||
.macro decodeP
|
||||
bic r8, r8, #0x4F // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> CYC_V+CYC_D+CYC_I+CYC_C
|
||||
and r1, r0, #V+D+I+C // <EFBFBD><EFBFBD>ȡ V/D/I/C <EFBFBD><EFBFBD>־
|
||||
orr r8, r8, r1 // д<EFBFBD><EFBFBD> cycles
|
||||
bic r3, r0, #0xFD // r0 is signed
|
||||
eor r3, r3, #Z // <EFBFBD><EFBFBD>ת Z λ
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ָ<EFBFBD>ִ<EFBFBD><EFBFBD>
|
||||
.macro fetch count
|
||||
ldr r0, [globalptr,#clocksh]
|
||||
add r0, r0, \count
|
||||
str r0, [globalptr,#clocksh]
|
||||
|
||||
ldr r1, [globalptr,#opz]
|
||||
subs r8, r8, \count * 256
|
||||
|
||||
IT PL
|
||||
ldrbpl r0, [r9], #1
|
||||
|
||||
IT PL
|
||||
ldrpl pc, [r1, r0, lsl #2]
|
||||
|
||||
ldr pc, [globalptr,#nexttimeout]
|
||||
.endm
|
||||
|
||||
// ͬ<EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Carry λ
|
||||
.macro fetch_c count
|
||||
ldr r0, [globalptr,#clocksh]
|
||||
add r0, r0, \count
|
||||
str r0, [globalptr,#clocksh]
|
||||
|
||||
ldr r1, [globalptr,#opz]
|
||||
sbcs r8, r8, \count * 256
|
||||
|
||||
IT PL
|
||||
ldrbpl r0, [r9], #1
|
||||
|
||||
IT PL
|
||||
ldrpl pc, [r1, r0, lsl #2]
|
||||
|
||||
ldr pc, [globalptr,#nexttimeout]
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD>־
|
||||
.macro clearcycles
|
||||
and r8, r8, #0xFF // CYC_MASK
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>ַ<EFBFBD><EFBFBD>ȡ
|
||||
.macro readmemabs
|
||||
and r1, r12, #0xE000
|
||||
adr lr, 0f
|
||||
lsr r1, r1, #11
|
||||
ldr pc, [r4, r1]
|
||||
0:
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>ȡ
|
||||
.macro readmemzp
|
||||
ldrb r0, [r11, r12]
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
||||
.macro readmemzpi
|
||||
lsr r0, r12, #24
|
||||
ldrb r0, [r11, r0]
|
||||
.endm
|
||||
|
||||
// RAM <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NZ
|
||||
.macro readmemzps
|
||||
ldrsb r3, [r11, r12]
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
|
||||
.macro readmemimm
|
||||
ldrb r0, [r9], #1
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NZ
|
||||
.macro readmemimms
|
||||
ldrsb r3, [r9], #1
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʽ
|
||||
.macro readmem
|
||||
.if _type == _ABS
|
||||
readmemabs
|
||||
.elseif _type == _ZP
|
||||
readmemzp
|
||||
.elseif _type == _ZPI
|
||||
readmemzpi
|
||||
.elseif _type == _IMM
|
||||
readmemimm
|
||||
.endif
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD>Ķ<EFBFBD>ȡ
|
||||
.macro readmems
|
||||
.if _type == _ABS
|
||||
readmemabs
|
||||
orr r3, r0, r0, lsl #24
|
||||
.elseif _type == _ZP
|
||||
readmemzps
|
||||
.elseif _type == _IMM
|
||||
readmemimms
|
||||
.endif
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>ַд<EFBFBD><EFBFBD>
|
||||
.macro writememabs
|
||||
and r1, r12, #0xE000
|
||||
// adr r2, writemem_tbl
|
||||
ldr r2, =writemem_tbl
|
||||
add r2, r10
|
||||
|
||||
lsr r1, r1, #11
|
||||
ldr pc, [r2, r1]
|
||||
0:
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳд<EFBFBD><EFBFBD>
|
||||
.macro writememzp
|
||||
strb r0, [r11, r12]
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>
|
||||
.macro writememzpi
|
||||
lsr r1, r12, #24
|
||||
strb r0, [r11, r1]
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>д<EFBFBD>뷽ʽ
|
||||
.macro writemem
|
||||
.if _type == _ABS
|
||||
writememabs
|
||||
.elseif _type == _ZP
|
||||
writememzp
|
||||
.elseif _type == _ZPI
|
||||
writememzpi
|
||||
.endif
|
||||
.endm
|
||||
|
||||
// 16λѹջ
|
||||
.macro push16
|
||||
mov r1, r0, lsr #8
|
||||
ldr r2, [globalptr,#m6502_s]
|
||||
strb r1, [r2], #-1
|
||||
orr r2, r2, #0x100
|
||||
strb r0, [r2], #-1
|
||||
strb r2, [globalptr,#m6502_s]
|
||||
.endm
|
||||
|
||||
// 8λѹջ
|
||||
.macro push8 x
|
||||
ldr r2, [globalptr,#m6502_s]
|
||||
strb \x, [r2], #-1
|
||||
strb r2, [globalptr,#m6502_s]
|
||||
.endm
|
||||
|
||||
// 16λ<EFBFBD><EFBFBD>ջ
|
||||
.macro pop16
|
||||
ldrb r2, [globalptr,#m6502_s]
|
||||
add r2, r2, #2
|
||||
strb r2, [globalptr,#m6502_s]
|
||||
ldr r2, [globalptr,#m6502_s]
|
||||
ldrb r0, [r2], #-1
|
||||
orr r2, r2, #0x100
|
||||
ldrb r9, [r2]
|
||||
orr r9, r9, r0, lsl #8
|
||||
.endm
|
||||
|
||||
// 8λ<EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>
|
||||
.macro pop8 x
|
||||
ldrb r2, [globalptr,#m6502_s]
|
||||
add r2, r2, #1
|
||||
strb r2, [globalptr,#m6502_s]
|
||||
orr r2, r2, #0x100
|
||||
ldrsb \x, [r11, r2]
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱַģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.equ _IMM, 1
|
||||
.equ _ZP, 2
|
||||
.equ _ZPI, 3
|
||||
.equ _ABS, 4
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱַ
|
||||
.macro doABS
|
||||
.set _type, _ABS
|
||||
ldrb r12, [r9], #1
|
||||
ldrb r0, [r9], #1
|
||||
orr r12, r12, r0, lsl #8
|
||||
.endm
|
||||
|
||||
// X<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro doAIX
|
||||
.set _type, _ABS
|
||||
ldrb r12, [r9], #1
|
||||
ldrb r0, [r9], #1
|
||||
orr r12, r12, r0, lsl #8
|
||||
add r12, r12, r6, lsr #24
|
||||
.endm
|
||||
|
||||
// Y<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro doAIY
|
||||
.set _type, _ABS
|
||||
ldrb r12, [r9], #1
|
||||
ldrb r0, [r9], #1
|
||||
orr r12, r12, r0, lsl #8
|
||||
add r12, r12, r7, lsr #24
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱַ
|
||||
.macro doIMM
|
||||
.set _type, _IMM
|
||||
.endm
|
||||
|
||||
// X<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱַ
|
||||
.macro doIIX
|
||||
.set _type, _ABS
|
||||
ldrb r0, [r9], #1
|
||||
add r0, r6, r0, lsl #24
|
||||
lsr r12, r0, #24
|
||||
ldrb r12, [r11, r12]
|
||||
add r0, r0, #0x01000000
|
||||
lsr r1, r0, #24
|
||||
ldrb r1, [r11, r1]
|
||||
orr r12, r12, r1, lsl #8
|
||||
.endm
|
||||
|
||||
// Y<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱַ
|
||||
.macro doIIY
|
||||
.set _type, _ABS
|
||||
ldrb r0, [r9], #1
|
||||
ldrb r12, [r11, r0]
|
||||
add r0, r0, r11
|
||||
ldrb r1, [r0, #1]
|
||||
orr r12, r12, r1, lsl #8
|
||||
add r12, r12, r7, lsr #24
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱַ
|
||||
.macro doZPI
|
||||
.set _type, _ABS
|
||||
ldrb r0, [r9], #1
|
||||
ldrb r12, [r11, r0]
|
||||
add r0, r0, r11
|
||||
ldrb r1, [r0, #1]
|
||||
orr r12, r12, r1, lsl #8
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳѰַ
|
||||
.macro doZ
|
||||
.set _type, _ZP
|
||||
ldrb r12, [r9], #1
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳ˫<EFBFBD>ֽ<EFBFBD>Ѱַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bbr/bbs<EFBFBD><EFBFBD>
|
||||
.macro doZ2
|
||||
.set _type, _ZP
|
||||
ldrb r12, [r9], #2
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳX<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro doZIX
|
||||
.set _type, _ZP
|
||||
ldrb r12, [r9], #1
|
||||
add r12, r12, r6, lsr #24
|
||||
and r12, r12, #0xff
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳX<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
|
||||
.macro doZIXf
|
||||
.set _type, _ZPI
|
||||
ldrb r12, [r9], #1
|
||||
add r12, r6, r12, lsl #24
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳY<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro doZIY
|
||||
.set _type, _ZP
|
||||
ldrb r12, [r9], #1
|
||||
add r12, r12, r7, lsr #24
|
||||
and r12, r12, #0xff
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳY<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
|
||||
.macro doZIYf
|
||||
.set _type, _ZPI
|
||||
ldrb r12, [r9], #1
|
||||
add r12, r7, r12, lsl #24
|
||||
.endm
|
||||
|
||||
// ADC <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opADC
|
||||
readmem
|
||||
movs r1, r8, lsr #1
|
||||
|
||||
IT CS
|
||||
subcs r0, r0, #0x00000100
|
||||
adcs r5, r5, r0, ror #8
|
||||
|
||||
mov r3, r5, asr #24
|
||||
orr r8, r8, #CYC_C+CYC_V
|
||||
|
||||
IT VC
|
||||
bicvc r8, r8, #CYC_V
|
||||
.endm
|
||||
|
||||
// AND <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opAND
|
||||
readmem
|
||||
and r5, r5, r0, lsl #24
|
||||
mov r3, r5, asr #24
|
||||
.endm
|
||||
|
||||
// ASL <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opASL
|
||||
readmem
|
||||
add r0, r0, r0
|
||||
orrs r3, r0, r0, lsl #24
|
||||
orr r8, r8, #CYC_C
|
||||
writemem
|
||||
.endm
|
||||
|
||||
// BIT <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opBIT
|
||||
readmem
|
||||
bic r8, r8, #CYC_V
|
||||
tst r0, #V
|
||||
|
||||
IT NE
|
||||
orrne r8, r8, #CYC_V
|
||||
|
||||
and r3, r0, r5, lsr #24
|
||||
orr r3, r3, r0, lsl #24
|
||||
.endm
|
||||
|
||||
// <EFBFBD>Ƚϲ<EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opCOMP x
|
||||
readmem
|
||||
subs r3, \x, r0, lsl #24
|
||||
mov r3, r3, asr #24
|
||||
orr r8, r8, #CYC_C
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opDEC
|
||||
readmem
|
||||
sub r0, r0, #1
|
||||
orr r3, r0, r0, lsl #24
|
||||
writemem
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opEOR
|
||||
readmem
|
||||
eor r5, r5, r0, lsl #24
|
||||
mov r3, r5, asr #24
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opINC
|
||||
readmem
|
||||
add r0, r0, #1
|
||||
orr r3, r0, r0, lsl #24
|
||||
writemem
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opLOAD x
|
||||
readmems
|
||||
mov \x, r3, lsl #24
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opLSR
|
||||
.if _type == _ABS
|
||||
readmemabs
|
||||
movs r0, r0, lsr #1
|
||||
orr r8, r8, #CYC_C
|
||||
mov r3, r0
|
||||
writememabs
|
||||
.elseif _type == _ZP
|
||||
ldrb r3, [r11, r12]
|
||||
movs r3, r3, lsr #1
|
||||
orr r8, r8, #CYC_C
|
||||
strb r3, [r11, r12]
|
||||
.elseif _type == _ZPI
|
||||
lsr r3, r12, #24
|
||||
ldrb r3, [r11, r3]
|
||||
movs r3, r3, lsr #1
|
||||
orr r8, r8, #CYC_C
|
||||
lsr r1, r12, #24
|
||||
strb r3, [r11, r1]
|
||||
.endif
|
||||
.endm
|
||||
|
||||
// OR <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opORA
|
||||
readmem
|
||||
orr r5, r5, r0, lsl #24
|
||||
mov r3, r5, asr #24
|
||||
.endm
|
||||
|
||||
// ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opROL
|
||||
readmem
|
||||
movs r8, r8, lsr #1
|
||||
adc r0, r0, r0
|
||||
orrs r3, r0, r0, lsl #24
|
||||
adc r8, r8, r8
|
||||
writemem
|
||||
.endm
|
||||
|
||||
// ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opROR
|
||||
readmem
|
||||
movs r8, r8, lsr #1
|
||||
|
||||
IT CS
|
||||
orrcs r0, r0, #0x100
|
||||
|
||||
movs r0, r0, lsr #1
|
||||
orr r3, r0, r0, lsl #24
|
||||
adc r8, r8, r8
|
||||
writemem
|
||||
.endm
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
.macro opSBC
|
||||
readmem
|
||||
movs r1, cycles, lsr #1
|
||||
sbcs m6502_a, m6502_a, r0, lsl #24
|
||||
and m6502_a, m6502_a, #0xff000000
|
||||
mov m6502_nz, m6502_a, asr #24
|
||||
orr cycles, cycles, #CYC_C | CYC_V
|
||||
|
||||
IT VC
|
||||
bicvc cycles, cycles, #CYC_V
|
||||
.endm
|
||||
|
||||
|
||||
.macro opSTORE x
|
||||
mov r0, \x, lsr #24
|
||||
writemem
|
||||
.endm
|
||||
|
||||
@ .global main
|
||||
@ .type main, %function
|
||||
@ mian:
|
||||
@ encodePC
|
||||
@ encodeP (B+R)
|
||||
@ encodeP (R)
|
||||
@ decodeP
|
||||
@ fetch 10
|
||||
@ fetch_c 10
|
||||
|
||||
@ clearcycles
|
||||
@ readmemabs
|
||||
@ readmemzp
|
||||
@ readmemzpi
|
||||
@ readmemzps
|
||||
@ readmemimm
|
||||
@ readmemimms
|
||||
@ readmem
|
||||
@ readmems
|
||||
@ writememabs
|
||||
@ writememzp
|
||||
@ writememzpi
|
||||
@ writemem
|
||||
@ push16
|
||||
@ push8 r0
|
||||
@ pop16
|
||||
@ pop8 r0
|
||||
@ doABS
|
||||
@ doAIX
|
||||
@ doAIY
|
||||
@ doIMM
|
||||
@ doIIX
|
||||
@ doIIY
|
||||
@ doZPI
|
||||
@ doZ
|
||||
@ doZ2
|
||||
@ doZIX
|
||||
@ doZIXf
|
||||
@ doZIY
|
||||
@ doZIYf
|
||||
@ opADC
|
||||
@ opAND
|
||||
@ opASL
|
||||
@ opBIT
|
||||
@ opCOMP r5
|
||||
@ opDEC
|
||||
@ opEOR
|
||||
@ opINC
|
||||
@ opLOAD r5
|
||||
@ opLSR
|
||||
@ opORA
|
||||
@ opROL
|
||||
@ opROR
|
||||
@ opSBC
|
||||
@ opSTORE r5
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -70,7 +70,8 @@ INC=[
|
||||
'-ISrc/rt-thread',
|
||||
'-ISrc/rt-thread/include',
|
||||
# '-ISrc/sqlite3',
|
||||
'-ISrc/zlib'
|
||||
'-ISrc/zlib',
|
||||
'-ISrc/NES'
|
||||
]
|
||||
|
||||
SRC_DIR=[
|
||||
@@ -128,6 +129,13 @@ SRC=[
|
||||
'Src/MP3/helix/arm/asmmisc_gcc.s',
|
||||
'Src/MP3/helix/arm/asmpoly_thumb2_gcc.s',
|
||||
'Src/MY/syscalls.c',
|
||||
|
||||
'Src/NES/6502_gcc.S',
|
||||
'Src/NES/6502cart_gcc.S',
|
||||
'Src/NES/nes_apu.c',
|
||||
'Src/NES/nes_main.c',
|
||||
'Src/NES/nes_ppu.c',
|
||||
'Src/NES/nes_mapper.c',
|
||||
]
|
||||
|
||||
LD_FILE="stm32f429ighx_flash.ld"
|
||||
@@ -303,7 +311,7 @@ def build_target(src:list):
|
||||
if(check_rebuild(dst,obj_list)):
|
||||
rsp=f"{' '.join(obj_list)} -o {dst} {flags} \
|
||||
-T{LD_FILE} -lc -lm -lnosys -Wl,-Map={OUTPUT}/{TARGET}.map,--cref -Wl,--gc-sections \
|
||||
-Wl,--no-warn-rwx-segments -Wl,-print-memory-usage"
|
||||
-Wl,-print-memory-usage"
|
||||
print(f"链接 {dst}")
|
||||
with open(f"{OUTPUT}/{TARGET}.rsp",'w+') as f:
|
||||
f.write(rsp.replace('\\','/'))
|
||||
|
Reference in New Issue
Block a user