2025-07-08 19:13:35 +08:00
.syntax unified
.cpu cortex- m 4
.fpu softvfp
.thumb
.include " 6 5 0 2 mac_ g c c . S "
.extern NES_RAM
.extern NES_SRAM
.extern spr_ram
.extern debug_6502 / / <EFBFBD> <EFBFBD> Ч <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʱ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.global cpunmi / / cpu<EFBFBD> ж ϱ <EFBFBD> ־
.global cpuirq / / cpu<EFBFBD> ж ϱ <EFBFBD> ־
.global clocks / / apuҪ <EFBFBD> <EFBFBD> c p u ʱ <EFBFBD> <EFBFBD>
.global cpu_data / / <EFBFBD> <EFBFBD> ַ cart. s
.global NMI6502
.global CPU_reset
.global run6502
.global op_table
.equ IRQ_ V E C T O R , 0 x f f f e / / I R Q / B R K <EFBFBD> ж <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ
.equ RES_ V E C T O R , 0 x f f f c / / <EFBFBD> <EFBFBD> λ <EFBFBD> ж <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ
.equ NMI_ V E C T O R , 0 x f f f a / / N M I <EFBFBD> ж <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ
2025-07-09 14:05:30 +08:00
.section .text ._6502_cpu
2025-07-08 19:13:35 +08:00
2025-07-10 00:08:56 +08:00
2025-07-09 23:38:26 +08:00
.type _ 0 0 , % function
2025-07-08 19:13:35 +08:00
_00 :
2025-07-10 00:08:56 +08:00
ldr r0 ,[ g l o b a l p t r ,#l a s t b a n k ]
2025-07-08 19:13:35 +08:00
sub r1 ,m 6 5 0 2 _ p c ,r0
add r0 ,r1 ,#1
2025-07-10 00:08:56 +08:00
push1 6
encodeP ( B + R )
2025-07-08 19:13:35 +08:00
ldr r12 ,=IRQ_VECTOR
bl V e c C o n t
fetch 7
2025-07-10 00:08:56 +08:00
/ / <EFBFBD> ѳ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.ltorg
2025-07-08 19:13:35 +08:00
2025-07-09 23:38:26 +08:00
.type _ 0 1 , % function
2025-07-08 19:13:35 +08:00
_01 : / / ORA ( $ n n ,X )
doIIX
opORA
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 0 5 , % function
2025-07-08 19:13:35 +08:00
_05 : / / ORA $ n n
doZ
opORA
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 0 6 , % function
2025-07-08 19:13:35 +08:00
_06 : / / ASL $ n n
doZ
opASL
fetch_ c 5
2025-07-09 23:38:26 +08:00
.type _ 0 8 , % function
2025-07-08 19:13:35 +08:00
_08 : / / PHP
encodeP ( B + R )
push8 r0
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 0 9 , % function
2025-07-08 19:13:35 +08:00
_09 : / / ORA #$ n n
doIMM
opORA
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 0 A, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_0A : / / ASL
adds m 6 5 0 2 _ a ,m 6 5 0 2 _ a ,m 6 5 0 2 _ a
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ a ,a s r #24 / / N Z
orr c y c l e s ,c y c l e s ,#C Y C _ C / / P r e p a r e C
fetch_ c 2 / / a l s o s u b s c a r r y
2025-07-09 23:38:26 +08:00
.type _ 0 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_0D : / / ORA $ n n n n
doABS
opORA
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 0 E, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_0E : / / ASL $ n n n n
doABS
opASL
fetch_ c 6
2025-07-09 23:38:26 +08:00
.type _ 1 0 , % function
2025-07-08 19:13:35 +08:00
_10 : / / BPL *
tst m 6 5 0 2 _ n z ,#0x80000000
ldrsb r0 ,[ m 6 5 0 2 _ p c ] ,#1
2025-07-09 00:55:12 +08:00
ITT E Q
2025-07-08 19:13:35 +08:00
addeq m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r0
subeq c y c l e s ,c y c l e s ,#256
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 1 1 , % function
2025-07-08 19:13:35 +08:00
_11 : / / ORA ( $ n n ) ,Y
doIIY
opORA
fetch 5
2025-07-09 23:38:26 +08:00
.type _ 1 5 , % function
2025-07-08 19:13:35 +08:00
_15 : / / ORA $ n n ,X
doZIXf
opORA
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 1 6 , % function
2025-07-08 19:13:35 +08:00
_16 : / / ASL $ n n ,X
doZIXf
opASL
fetch_ c 6
2025-07-09 23:38:26 +08:00
.type _ 1 8 , % function
2025-07-08 19:13:35 +08:00
_18 : / / CLC
bic c y c l e s ,c y c l e s ,#C Y C _ C
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 1 9 , % function
2025-07-08 19:13:35 +08:00
_19 : / / ORA $ n n n n ,Y
doAIY
opORA
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 1 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_1D : / / ORA $ n n n n ,X
doAIX
opORA
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 1 E, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_1E : / / ASL $ n n n n ,X
doAIX
opASL
fetch_ c 7
2025-07-09 23:38:26 +08:00
.type _ 2 0 , % function
2025-07-08 19:13:35 +08:00
_20 : / / JSR $ n n n n
ldrb r2 ,[ m 6 5 0 2 _ p c ] ,#1
ldr r1 ,[ g l o b a l p t r ,#l a s t b a n k ]
sub r0 ,m 6 5 0 2 _ p c ,r1
ldrb r1 ,[ m 6 5 0 2 _ p c ]
orr m 6 5 0 2 _ p c ,r2 ,r1 ,l s l #8
push1 6
encodePC
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 2 1 , % function
2025-07-08 19:13:35 +08:00
_21 : / / AND ( $ n n ,X )
doIIX
opAND
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 2 4 , % function
2025-07-08 19:13:35 +08:00
_24 : / / BIT $ n n
doZ
opBIT
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 2 5 , % function
2025-07-08 19:13:35 +08:00
_25 : / / AND $ n n
doZ
opAND
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 2 6 , % function
2025-07-08 19:13:35 +08:00
_26 : / / ROL $ n n
doZ
opROL
fetch 5
2025-07-09 23:38:26 +08:00
.type _ 2 8 , % function
2025-07-08 19:13:35 +08:00
_28 : / / PLP
pop8 r0
decodeP
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 2 9 , % function
2025-07-08 19:13:35 +08:00
_29 : / / AND #$ n n
doIMM
opAND
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 2 A, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_2A : / / ROL
movs c y c l e s ,c y c l e s ,l s r #1 / / g e t C
IT C S
orrcs m 6 5 0 2 _ a ,m 6 5 0 2 _ a ,#0x00800000
adds m 6 5 0 2 _ a ,m 6 5 0 2 _ a ,m 6 5 0 2 _ a
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ a ,a s r #24 / / N Z
adc c y c l e s ,c y c l e s ,c y c l e s / / S e t C
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 2 C, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_2C : / / BIT $ n n n n
doABS
opBIT
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 2 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_2D : / / AND $ n n n n
doABS
opAND
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 2 E, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_2E : / / ROL $ n n n n
doABS
opROL
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 3 0 , % function
2025-07-08 19:13:35 +08:00
_30 : / / BMI *
tst m 6 5 0 2 _ n z ,#0x80000000
ldrsb r0 ,[ m 6 5 0 2 _ p c ] ,#1
2025-07-09 00:55:12 +08:00
ITT N E
2025-07-08 19:13:35 +08:00
addne m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r0
subne c y c l e s ,c y c l e s ,#256
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 3 1 , % function
2025-07-08 19:13:35 +08:00
_31 : / / AND ( $ n n ) ,Y
doIIY
opAND
fetch 5
2025-07-09 23:38:26 +08:00
.type _ 3 5 , % function
2025-07-08 19:13:35 +08:00
_35 : / / AND $ n n ,X
doZIXf
opAND
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 3 6 , % function
2025-07-08 19:13:35 +08:00
_36 : / / ROL $ n n ,X
doZIXf
opROL
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 3 8 , % function
2025-07-08 19:13:35 +08:00
_38 : / / SEC
orr c y c l e s ,c y c l e s ,#C Y C _ C
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 3 9 , % function
2025-07-08 19:13:35 +08:00
_39 : / / AND $ n n n n ,Y
doAIY
opAND
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 3 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_3D : / / AND $ n n n n ,X
doAIX
opAND
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 3 E, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_3E : / / ROL $ n n n n ,X
doAIX
opROL
fetch 7
2025-07-09 23:38:26 +08:00
.type _ 4 0 , % function
2025-07-08 19:13:35 +08:00
_40 : / / RTI
pop8 r0 / / p o p 6 5 0 2 f l a g s a n d d e c o d e
decodeP
pop1 6 / / p o p t h e r e t u r n a d d r e s s
encodePC
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 4 1 , % function
2025-07-08 19:13:35 +08:00
_41 : / / EOR ( $ n n ,X )
doIIX
opEOR
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 4 5 , % function
2025-07-08 19:13:35 +08:00
_45 : / / EOR $ n n
doZ
opEOR
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 4 6 , % function
2025-07-08 19:13:35 +08:00
_46 : / / LSR $ n n
doZ
opLSR
fetch_ c 5
2025-07-09 23:38:26 +08:00
.type _ 4 8 , % function
2025-07-08 19:13:35 +08:00
_48 : / / PHA
mov r0 ,m 6 5 0 2 _ a ,l s r #24
push8 r0
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 4 9 , % function
2025-07-08 19:13:35 +08:00
_49 : / / EOR #$ n n
doIMM
opEOR
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 4 A, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_4A : / / LSR
movs m 6 5 0 2 _ n z ,m 6 5 0 2 _ a ,l s r #25 / / Z , N =0
mov m 6 5 0 2 _ a ,m 6 5 0 2 _ n z ,l s l #24 / / r e s u l t w i t h o u t g a r b a g e
orr c y c l e s ,c y c l e s ,#C Y C _ C / / P r e p a r e C
fetch_ c 2
2025-07-09 23:38:26 +08:00
.type _ 4 C, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_4C : / / JMP $ n n n n
ldrb r0 ,[ m 6 5 0 2 _ p c ] ,#1
ldrb r1 ,[ m 6 5 0 2 _ p c ]
orr m 6 5 0 2 _ p c ,r0 ,r1 ,l s l #8
encodePC
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 4 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_4D : / / EOR $ n n n n
doABS
opEOR
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 4 E, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_4E : / / LSR $ n n n n
doABS
opLSR
fetch_ c 6
2025-07-09 23:38:26 +08:00
.type _ 5 0 , % function
2025-07-08 19:13:35 +08:00
_50 : / / BVC *
tst c y c l e s ,#C Y C _ V
ldrsb r0 ,[ m 6 5 0 2 _ p c ] ,#1
2025-07-09 00:55:12 +08:00
ITT E Q
2025-07-08 19:13:35 +08:00
addeq m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r0
subeq c y c l e s ,c y c l e s ,#256
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 5 1 , % function
2025-07-08 19:13:35 +08:00
_51 : / / EOR ( $ n n ) ,Y
doIIY
opEOR
fetch 5
2025-07-09 23:38:26 +08:00
.type _ 5 5 , % function
2025-07-08 19:13:35 +08:00
_55 : / / EOR $ n n ,X
doZIXf
opEOR
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 5 6 , % function
2025-07-08 19:13:35 +08:00
_56 : / / LSR $ n n ,X
doZIXf
opLSR
fetch_ c 6
2025-07-09 23:38:26 +08:00
.type _ 5 8 , % function
2025-07-08 19:13:35 +08:00
_58 : / / CLI
bic c y c l e s ,c y c l e s ,#C Y C _ I
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 5 9 , % function
2025-07-08 19:13:35 +08:00
_59 : / / EOR $ n n n n ,Y
doAIY
opEOR
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 5 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_5D : / / EOR $ n n n n ,X
doAIX
opEOR
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 5 E, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_5E : / / LSR $ n n n n ,X
doAIX
opLSR
fetch_ c 7
2025-07-09 23:38:26 +08:00
.type _ 6 0 , % function
2025-07-08 19:13:35 +08:00
_60 : / / RTS
pop1 6
add m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,#1
encodePC
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 6 1 , % function
2025-07-08 19:13:35 +08:00
_61 : / / ADC ( $ n n ,X )
doIIX
opADC
fetch_ c 6
2025-07-09 23:38:26 +08:00
.type _ 6 5 , % function
2025-07-08 19:13:35 +08:00
_65 : / / ADC $ n n
doZ
opADC
fetch_ c 3
2025-07-09 23:38:26 +08:00
.type _ 6 6 , % function
2025-07-08 19:13:35 +08:00
_66 : / / ROR $ n n
doZ
opROR
fetch 5
2025-07-09 23:38:26 +08:00
.type _ 6 8 , % function
2025-07-08 19:13:35 +08:00
_68 : / / PLA
pop8 m 6 5 0 2 _ n z
mov m 6 5 0 2 _ a ,m 6 5 0 2 _ n z ,l s l #24
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 6 9 , % function
2025-07-08 19:13:35 +08:00
_69 : / / ADC #$ n n
doIMM
opADC
fetch_ c 2
2025-07-09 23:38:26 +08:00
.type _ 6 A, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_6A : / / ROR
movs c y c l e s ,c y c l e s ,l s r #1 / / g e t C
mov m 6 5 0 2 _ a ,m 6 5 0 2 _ a ,r r x
movs m 6 5 0 2 _ n z ,m 6 5 0 2 _ a ,a s r #24 / / N Z
and m 6 5 0 2 _ a ,m 6 5 0 2 _ a ,#0xff000000
adc c y c l e s ,c y c l e s ,c y c l e s / / S e t C
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 6 C, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_6C : / / JMP ( $ n n n n ) J M P ( $ d a t a16 ) <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѱ ַ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
doABS
2025-07-09 00:55:12 +08:00
add r1 , g l o b a l p t r ,#m e m m a p _ t b l
2025-07-08 19:13:35 +08:00
and r2 ,a d d y ,#0xE000 / /
lsr r0 ,r2 ,#11
ldr r1 ,[ r1 ,r0 ] / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݴ <EFBFBD> <EFBFBD> <EFBFBD> ֮ ǰ ,<EFBFBD> <EFBFBD> ƫ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӵ <EFBFBD> R n <EFBFBD> <EFBFBD> ,<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݵ Ĵ 洢 <EFBFBD> <EFBFBD> ַ
ldrb m 6 5 0 2 _ p c ,[ r1 ,a d d y ] / / / / <EFBFBD> <EFBFBD> ʹ <EFBFBD> ú <EFBFBD> " ! " ,<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> д <EFBFBD> ص <EFBFBD> R n <EFBFBD> <EFBFBD>
add r1 ,r1 ,a d d y
ldrb r0 ,[ r1 ,#1 ]
orr m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r0 ,l s l #8 / / m 6 5 0 2 _ p c =r9ʹ <EFBFBD> <EFBFBD> O R R ָ <EFBFBD> <EFBFBD> <EFBFBD> R 9 <EFBFBD> ĸ <EFBFBD> 8 λ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 뵽 R 0 <EFBFBD> <EFBFBD> 8 λ
encodePC
fetch 5
2025-07-09 23:38:26 +08:00
.type _ 6 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_6D : / / ADC $ n n n n
doABS
opADC
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ 6 E, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_6E : / / ROR $ n n n n
doABS
opROR
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 7 0 , % function
2025-07-08 19:13:35 +08:00
_70 : / / BVS *
tst c y c l e s ,#C Y C _ V
ldrsb r0 ,[ m 6 5 0 2 _ p c ] ,#1
2025-07-09 00:55:12 +08:00
ITT N E
2025-07-08 19:13:35 +08:00
addne m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r0
subne c y c l e s ,c y c l e s ,#256
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 7 1 , % function
2025-07-08 19:13:35 +08:00
_71 : / / ADC ( $ n n ) ,Y
doIIY
opADC
fetch_ c 5
2025-07-09 23:38:26 +08:00
.type _ 7 5 , % function
2025-07-08 19:13:35 +08:00
_75 : / / ADC $ n n ,X
doZIXf
opADC
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ 7 6 , % function
2025-07-08 19:13:35 +08:00
_76 : / / ROR $ n n ,X
doZIXf
opROR
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 7 8 , % function
2025-07-08 19:13:35 +08:00
_78 : / / SEI
orr c y c l e s ,c y c l e s ,#C Y C _ I
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 7 9 , % function
2025-07-08 19:13:35 +08:00
_79 : / / ADC $ n n n n ,Y
doAIY
opADC
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ 7 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_7D : / / ADC $ n n n n ,X
doAIX
opADC
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ 7 E, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_7E : / / ROR $ n n n n ,X
doAIX
opROR
fetch 7
2025-07-09 23:38:26 +08:00
.type _ 8 1 , % function
2025-07-08 19:13:35 +08:00
_81 : / / STA ( $ n n ,X )
doIIX
opSTORE m 6 5 0 2 _ a
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 8 4 , % function
2025-07-08 19:13:35 +08:00
_84 : / / STY $ n n
doZ
opSTORE m 6 5 0 2 _ y
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 8 5 , % function
2025-07-08 19:13:35 +08:00
_85 : / / STA $ n n
doZ
opSTORE m 6 5 0 2 _ a
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 8 6 , % function
2025-07-08 19:13:35 +08:00
_86 : / / STX $ n n
doZ
opSTORE m 6 5 0 2 _ x
fetch 3
2025-07-09 23:38:26 +08:00
.type _ 8 8 , % function
2025-07-08 19:13:35 +08:00
_88 : / / DEY
sub m 6 5 0 2 _ y ,m 6 5 0 2 _ y ,#0x01000000
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ y ,a s r #24
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 8 A, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_8A : / / TXA
mov m 6 5 0 2 _ a ,m 6 5 0 2 _ x
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ x ,a s r #24
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 8 C, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_8C : / / STY $ n n n n
doABS
opSTORE m 6 5 0 2 _ y
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 8 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_8D : / / STA $ n n n n
doABS
opSTORE m 6 5 0 2 _ a
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 8 E, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_8E : / / STX $ n n n n
doABS
opSTORE m 6 5 0 2 _ x
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 9 0 , % function
2025-07-08 19:13:35 +08:00
_90 : / / BCC *
tst c y c l e s ,#C Y C _ C / / T e s t C a r r y
ldrsb r0 ,[ m 6 5 0 2 _ p c ] ,#1
2025-07-09 00:55:12 +08:00
ITT E Q
2025-07-08 19:13:35 +08:00
addeq m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r0
subeq c y c l e s ,c y c l e s ,#256
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 9 1 , % function
2025-07-08 19:13:35 +08:00
_91 : / / STA ( $ n n ) ,Y
doIIY
opSTORE m 6 5 0 2 _ a
fetch 6
2025-07-09 23:38:26 +08:00
.type _ 9 4 , % function
2025-07-08 19:13:35 +08:00
_94 : / / STY $ n n ,X
doZIXf
opSTORE m 6 5 0 2 _ y
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 9 5 , % function
2025-07-08 19:13:35 +08:00
_95 : / / STA $ n n ,X
doZIXf
opSTORE m 6 5 0 2 _ a
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 9 6 , % function
2025-07-08 19:13:35 +08:00
_96 : / / STX $ n n ,Y
doZIYf
opSTORE m 6 5 0 2 _ x
fetch 4
2025-07-09 23:38:26 +08:00
.type _ 9 8 , % function
2025-07-08 19:13:35 +08:00
_98 : / / TYA
mov m 6 5 0 2 _ a ,m 6 5 0 2 _ y
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ y ,a s r #24
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 9 9 , % function
2025-07-08 19:13:35 +08:00
_99 : / / STA $ n n n n ,Y
doAIY
opSTORE m 6 5 0 2 _ a
fetch 5
2025-07-09 23:38:26 +08:00
.type _ 9 A, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_9A : / / TXS
mov r0 ,m 6 5 0 2 _ x ,l s r #24
strb r0 ,[ g l o b a l p t r ,#m 6502 _ s ]
fetch 2
2025-07-09 23:38:26 +08:00
.type _ 9 D, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_9D : / / STA $ n n n n ,X
doAIX
opSTORE m 6 5 0 2 _ a
fetch 5
2025-07-09 23:38:26 +08:00
.type _ A0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_A0 : / / LDY #$ n n
doIMM
opLOAD m 6 5 0 2 _ y
fetch 2
2025-07-09 23:38:26 +08:00
.type _ A1 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_A1 : / / LDA ( $ n n ,X )
doIIX
opLOAD m 6 5 0 2 _ a
fetch 6
2025-07-09 23:38:26 +08:00
.type _ A2 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_A2 : / / LDX #$ n n
doIMM
opLOAD m 6 5 0 2 _ x
fetch 2
2025-07-09 23:38:26 +08:00
.type _ A4 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_A4 : / / LDY $ n n
doZ
opLOAD m 6 5 0 2 _ y
fetch 3
2025-07-09 23:38:26 +08:00
.type _ A5 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_A5 : / / LDA $ n n
doZ
opLOAD m 6 5 0 2 _ a
fetch 3
2025-07-09 23:38:26 +08:00
.type _ A6 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_A6 : / / LDX $ n n
doZ
opLOAD m 6 5 0 2 _ x
fetch 3
2025-07-09 23:38:26 +08:00
.type _ A8 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_A8 : / / TAY
mov m 6 5 0 2 _ y ,m 6 5 0 2 _ a
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ y ,a s r #24
fetch 2
2025-07-09 23:38:26 +08:00
.type _ A9 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_A9 : / / LDA #$ n n
doIMM
opLOAD m 6 5 0 2 _ a
fetch 2
2025-07-09 23:38:26 +08:00
.type _ AA, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_AA : / / TAX
mov m 6 5 0 2 _ x ,m 6 5 0 2 _ a
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ x ,a s r #24
fetch 2
2025-07-09 23:38:26 +08:00
.type _ AC, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_AC : / / LDY $ n n n n
doABS
opLOAD m 6 5 0 2 _ y
fetch 4
2025-07-09 23:38:26 +08:00
.type _ AD, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_AD : / / LDA $ n n n n
doABS
opLOAD m 6 5 0 2 _ a
fetch 4
2025-07-09 23:38:26 +08:00
.type _ AE, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_AE : / / LDX $ n n n n
doABS
opLOAD m 6 5 0 2 _ x
fetch 4
2025-07-09 23:38:26 +08:00
.type _ B0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_B0 : / / BCS *
tst c y c l e s ,#C Y C _ C / / T e s t C a r r y
ldrsb r0 ,[ m 6 5 0 2 _ p c ] ,#1
2025-07-09 00:55:12 +08:00
ITT N E
2025-07-08 19:13:35 +08:00
addne m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r0
subne c y c l e s ,c y c l e s ,#256
fetch 2
2025-07-09 23:38:26 +08:00
.type _ B1 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_B1 : / / LDA ( $ n n ) ,Y
doIIY
opLOAD m 6 5 0 2 _ a
fetch 5
2025-07-09 23:38:26 +08:00
.type _ B4 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_B4 : / / LDY $ n n ,X
doZIX
opLOAD m 6 5 0 2 _ y
fetch 4
2025-07-09 23:38:26 +08:00
.type _ B5 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_B5 : / / LDA $ n n ,X
doZIX
opLOAD m 6 5 0 2 _ a
fetch 4
2025-07-09 23:38:26 +08:00
.type _ B6 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_B6 : / / LDX $ n n ,Y
doZIY
opLOAD m 6 5 0 2 _ x
fetch 4
2025-07-09 23:38:26 +08:00
.type _ B8 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_B8 : / / CLV
bic c y c l e s ,c y c l e s ,#C Y C _ V
fetch 2
2025-07-09 23:38:26 +08:00
.type _ B9 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_B9 : / / LDA $ n n n n ,Y
doAIY
opLOAD m 6 5 0 2 _ a
fetch 4
2025-07-09 23:38:26 +08:00
.type _ BA, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_BA : / / TSX
ldrb m 6 5 0 2 _ x ,[ g l o b a l p t r ,#m 6502 _ s ]
mov m 6 5 0 2 _ x ,m 6 5 0 2 _ x ,l s l #24
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ x ,a s r #24
fetch 2
2025-07-09 23:38:26 +08:00
.type _ BC, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_BC : / / LDY $ n n n n ,X
doAIX
opLOAD m 6 5 0 2 _ y
fetch 4
2025-07-09 23:38:26 +08:00
.type _ BD, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_BD : / / LDA $ n n n n ,X
doAIX
opLOAD m 6 5 0 2 _ a
fetch 4
2025-07-09 23:38:26 +08:00
.type _ BE, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_BE : / / LDX $ n n n n ,Y
doAIY
opLOAD m 6 5 0 2 _ x
fetch 4
2025-07-09 23:38:26 +08:00
.type _ C0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_C0 : / / CPY #$ n n
doIMM
opCOMP m 6 5 0 2 _ y
fetch_ c 2
2025-07-09 23:38:26 +08:00
.type _ C1 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_C1 : / / CMP ( $ n n ,X )
doIIX
opCOMP m 6 5 0 2 _ a
fetch_ c 6
2025-07-09 23:38:26 +08:00
.type _ C4 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_C4 : / / CPY $ n n
doZ
opCOMP m 6 5 0 2 _ y
fetch_ c 3
2025-07-09 23:38:26 +08:00
.type _ C5 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_C5 : / / CMP $ n n
doZ
opCOMP m 6 5 0 2 _ a
fetch_ c 3
2025-07-09 23:38:26 +08:00
.type _ C6 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_C6 : / / DEC $ n n
doZ
opDEC
fetch 5
2025-07-09 23:38:26 +08:00
.type _ C8 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_C8 : / / INY
add m 6 5 0 2 _ y ,m 6 5 0 2 _ y ,#0x01000000
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ y ,a s r #24
fetch 2
2025-07-09 23:38:26 +08:00
.type _ C9 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_C9 : / / CMP #$ n n
doIMM
opCOMP m 6 5 0 2 _ a
fetch_ c 2
2025-07-09 23:38:26 +08:00
.type _ CA, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_CA : / / DEX
sub m 6 5 0 2 _ x ,m 6 5 0 2 _ x ,#0x01000000
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ x ,a s r #24
fetch 2
2025-07-09 23:38:26 +08:00
.type _ CC, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_CC : / / CPY $ n n n n
doABS
opCOMP m 6 5 0 2 _ y
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ CD, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_CD : / / CMP $ n n n n
doABS
opCOMP m 6 5 0 2 _ a
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ CE, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_CE : / / DEC $ n n n n
doABS
opDEC
fetch 6
2025-07-09 23:38:26 +08:00
.type _ D0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_D0 : / / BNE *
tst m 6 5 0 2 _ n z ,#0xff
ldrsb r0 ,[ m 6 5 0 2 _ p c ] ,#1
2025-07-09 00:55:12 +08:00
ITT N E
2025-07-08 19:13:35 +08:00
addne m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r0
subne c y c l e s ,c y c l e s ,#256
fetch 2
2025-07-09 23:38:26 +08:00
.type _ D1 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_D1 : / / CMP ( $ n n ) ,Y
doIIY
opCOMP m 6 5 0 2 _ a
fetch_ c 5
2025-07-09 23:38:26 +08:00
.type _ D5 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_D5 : / / CMP $ n n ,X
doZIXf
opCOMP m 6 5 0 2 _ a
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ D6 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_D6 : / / DEC $ n n ,X
doZIXf
opDEC
fetch 6
2025-07-09 23:38:26 +08:00
.type _ D8 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_D8 : / / CLD
bic c y c l e s ,c y c l e s ,#C Y C _ D
fetch 2
2025-07-09 23:38:26 +08:00
.type _ D9 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_D9 : / / CMP $ n n n n ,Y
doAIY
opCOMP m 6 5 0 2 _ a
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ DD, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_DD : / / CMP $ n n n n ,X
doAIX
opCOMP m 6 5 0 2 _ a
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ DE, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_DE : / / DEC $ n n n n ,X
doAIX
opDEC
fetch 7
2025-07-09 23:38:26 +08:00
.type _ E0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_E0 : / / CPX #$ n n
doIMM
opCOMP m 6 5 0 2 _ x
fetch_ c 2
2025-07-09 23:38:26 +08:00
.type _ E1 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_E1 : / / SBC ( $ n n ,X )
doIIX
opSBC
fetch_ c 6
2025-07-09 23:38:26 +08:00
.type _ E4 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_E4 : / / CPX $ n n
doZ
opCOMP m 6 5 0 2 _ x
fetch_ c 3
2025-07-09 23:38:26 +08:00
.type _ E5 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_E5 : / / SBC $ n n
doZ
opSBC
fetch_ c 3
2025-07-09 23:38:26 +08:00
.type _ E6 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_E6 : / / INC $ n n
doZ
opINC
fetch 5
2025-07-09 23:38:26 +08:00
.type _ E8 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_E8 : / / INX
add m 6 5 0 2 _ x ,m 6 5 0 2 _ x ,#0x01000000
mov m 6 5 0 2 _ n z ,m 6 5 0 2 _ x ,a s r #24
fetch 2
2025-07-09 23:38:26 +08:00
.type _ E9 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_E9 : / / SBC #$ n n
doIMM
opSBC
fetch_ c 2
2025-07-09 23:38:26 +08:00
.type _ EA, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_EA : / / NOP
fetch 2
2025-07-09 23:38:26 +08:00
.type _ EC, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_EC : / / CPX $ n n n n
doABS
opCOMP m 6 5 0 2 _ x
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ ED, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_ED : / / SBC $ n n n n
doABS
opSBC
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ EE, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_EE : / / INC $ n n n n
doABS
opINC
fetch 6
2025-07-09 23:38:26 +08:00
.type _ F0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_F0 : / / BEQ *
tst m 6 5 0 2 _ n z ,#0xff
ldrsb r0 ,[ m 6 5 0 2 _ p c ] ,#1
2025-07-09 00:55:12 +08:00
ITT E Q
2025-07-08 19:13:35 +08:00
addeq m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r0
subeq c y c l e s ,c y c l e s ,#256
fetch 2
2025-07-09 23:38:26 +08:00
.type _ F1 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_F1 : / / SBC ( $ n n ) ,Y
doIIY
opSBC
fetch_ c 5
2025-07-09 23:38:26 +08:00
.type _ F5 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_F5 : / / SBC $ n n ,X
doZIXf
opSBC
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ F6 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_F6 : / / INC $ n n ,X
doZIXf
opINC
fetch 6
2025-07-09 23:38:26 +08:00
.type _ F8 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_F8 : / / SED
orr c y c l e s ,c y c l e s ,#C Y C _ D
fetch 2
2025-07-09 23:38:26 +08:00
.type _ F9 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
_F9 : / / SBC $ n n n n ,Y
doAIY
opSBC
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ FD, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_FD : / / SBC $ n n n n ,X
doAIX
opSBC
fetch_ c 4
2025-07-09 23:38:26 +08:00
.type _ FE, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_FE : / / INC $ n n n n ,X
doAIX
opINC
fetch 7
2025-07-09 23:38:26 +08:00
2025-07-08 19:13:35 +08:00
/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ Щ HACK<EFBFBD> <EFBFBD> Ϸ <EFBFBD> <EFBFBD> Ҫ * * * * * * * * * * * * * * * * * *
2025-07-09 23:38:26 +08:00
.type _ FF, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_FF : / / ISB $ ? ? ? ? ,X <EFBFBD> ӵ ģ <EFBFBD> <EFBFBD> <EFBFBD> ȷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߴ <EFBFBD> 2 <EFBFBD> <EFBFBD> H A C K <EFBFBD> <EFBFBD> Ҫ
2025-07-09 23:38:26 +08:00
doAIX
opSBC
fetch 5
.type _ FB, % f u n c t i o n
2025-07-08 19:13:35 +08:00
_FB : / / ISB $ ? ? ? ? ,X <EFBFBD> ӵ ģ <EFBFBD> <EFBFBD> <EFBFBD> ȷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߴ <EFBFBD> 2 <EFBFBD> <EFBFBD> H A C K <EFBFBD> <EFBFBD> Ҫ
2025-07-09 23:38:26 +08:00
doAIY
opSBC
fetch 5
.type _ 1 4 , % function
2025-07-08 19:13:35 +08:00
_14 : / / <EFBFBD> ӵ ģ <EFBFBD> <EFBFBD> <EFBFBD> ȷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ߴ <EFBFBD> 2 <EFBFBD> <EFBFBD> HACK<EFBFBD> <EFBFBD> Ҫ
2025-07-09 23:38:26 +08:00
add m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,#1
fetch 4
.type _ 6 7 , % function
_67 : / / <EFBFBD> ۹ <EFBFBD> ս <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> HACK<EFBFBD> <EFBFBD> Ҫ
doZ
opADC
fetch 5
2025-07-08 19:13:35 +08:00
2025-07-09 23:38:26 +08:00
.type _ 0 3 , % function
_03 : / / <EFBFBD> ۹ <EFBFBD> ս <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> HACK<EFBFBD> <EFBFBD> Ҫ
doIIX
fetch 8
.type _ 0 7 , % function
_07 :
doZ
fetch 5
.type _ xx, % f u n c t i o n
_xx : / / invalid o p c o d e <EFBFBD> <EFBFBD> Ч <EFBFBD> IJ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov r1 ,#1 / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> d e b u g <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֱ <EFBFBD> <EFBFBD> ע <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
bl d e b u g _ 6 5 0 2
2025-07-08 19:13:35 +08:00
fetch 2
2025-07-09 23:38:26 +08:00
.type run6 5 0 2 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
run6502 :
stmfd s p ! ,{ r4 - r11 ,l r } / / <EFBFBD> <EFBFBD> <EFBFBD> ⼸ <EFBFBD> <EFBFBD> <EFBFBD> Ĵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> е <EFBFBD> ֵ <EFBFBD> <EFBFBD> <EFBFBD> 浽 <EFBFBD> <EFBFBD> ջ <EFBFBD> <EFBFBD>
ldr g l o b a l p t r ,=cpu_data / / r10 w r a m _ g l o b a l s : <EFBFBD> <EFBFBD> ȡ <EFBFBD> <EFBFBD> ַ
ldr c p u _ z p a g e ,=NES_RAM / / r11
ldr c p u _ z p a g e ,[ c p u _ z p a g e ] / / N E S _ R A M <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ <EFBFBD> <EFBFBD>
2025-07-09 00:55:12 +08:00
add r1 , g l o b a l p t r ,#c p u r e g s
2025-07-08 19:13:35 +08:00
ldmia r1 ,{ m 6 5 0 2 _ n z - m 6 5 0 2 _ p c } / / r e s t o r e 6 5 0 2 s t a t e <EFBFBD> ָ <EFBFBD> 6 5 0 2 ״ ̬ r3 - r9
add c y c l e s ,c y c l e s ,r0
ldrb r0 ,[ g l o b a l p t r ,#c p u i r q f ] / / c p u <EFBFBD> ж ϱ <EFBFBD> ־
cmp r0 ,#0x01
beq C h e c k I / / E Q <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ( E Q u a l ) i r q65 0 2 ;
fetch 0 / / <EFBFBD> <EFBFBD> ȡ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 벢 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2025-07-09 23:38:26 +08:00
.type exit_ r u n , % f u n c t i o n
2025-07-08 19:13:35 +08:00
exit_run :
ldrb r0 ,[ g l o b a l p t r ,#c p u n m i f ] / / c p u <EFBFBD> ж ϱ <EFBFBD> ־
cmp r0 ,#0x01 ;
beq N M I 6 5 0 2 / / E Q <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ( E Q u a l )
exit_nmi :
2025-07-09 00:55:12 +08:00
add r0 , g l o b a l p t r ,#c p u r e g s
2025-07-08 19:13:35 +08:00
stmia r0 ,{ m 6 5 0 2 _ n z - m 6 5 0 2 _ p c } / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 6 5 0 2 ״ ̬ r3 - r9
ldmfd s p ! ,{ r4 - r11 ,p c } / / e x i t
2025-07-09 23:38:26 +08:00
2025-07-08 19:13:35 +08:00
NMI6502 :
mov r0 ,#0
str r0 ,[ g l o b a l p t r ,#c p u n m i f ] / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> c p u <EFBFBD> ж ϱ <EFBFBD> ־
ldr r12 ,=NMI_VECTOR / / N M I ? a d d y
bl V e c65 0 2
sub c y c l e s ,c y c l e s ,#7 * 2 5 6 / / C Y C L E =256 6 5 0 2 <EFBFBD> <EFBFBD> <EFBFBD> ж <EFBFBD> DZ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ <EFBFBD> <EFBFBD> ( 7 ) <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
/ / <EFBFBD> <EFBFBD> ; <20> <> Ҳ<EFBFBD> <D2B2> <EFBFBD> <EFBFBD> ˵<EFBFBD> <CBB5> Ҫ<EFBFBD> <D2AA> Ҫ<EFBFBD> <D2AA> (7) <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƴ<EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> ж<EFBFBD>
b e x i t _ n m i / / r e t u r n
2025-07-09 23:38:26 +08:00
2025-07-08 19:13:35 +08:00
default_scanlinehook :
fetch 0
CheckI :
/ / Check I n t e r r u p t D i s a b l e <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ж Ͻ <EFBFBD> <EFBFBD> <EFBFBD>
tst c y c l e s ,#C Y C _ I
bne d e f a u l t _ s c a n l i n e h o o k / / w e d o n t w a n t n o s t i n k i n i r q s <EFBFBD> <EFBFBD> <EFBFBD> Dz <EFBFBD> <EFBFBD> <EFBFBD> Ҫ û <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> I R Q
irq6502 :
mov r0 ,#0
str r0 ,[ g l o b a l p t r ,#c p u i r q f ] / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> c p u <EFBFBD> ж ϱ <EFBFBD> ־
ldr r12 ,=IRQ_VECTOR
bl V e c65 0 2
fetch 7
Vec6502 :
ldr r0 ,[ g l o b a l p t r ,l a s t b a n k ]
sub r0 ,m 6 5 0 2 _ p c ,r0
push1 6 / / s a v e P C
encodeP ( R ) / / s a v e P
VecCont :
push8 r0
orr c y c l e s ,c y c l e s ,#C Y C _ I / / d i s a b l e I R Q <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> I R Q
ldr r0 ,[ g l o b a l p t r ,#m e m m a p _ t b l + 28 ] / / 7 * 4
/ / ldrb m 6 5 0 2 _ p c ,[ r0 ,r12 ] !
ldrb m 6 5 0 2 _ p c ,[ r0 ,r12 ] / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݴ <EFBFBD> <EFBFBD> <EFBFBD> ֮ ǰ ,<EFBFBD> <EFBFBD> ƫ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӵ <EFBFBD> R n <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> <EFBFBD> д <EFBFBD> ص <EFBFBD> Rn<EFBFBD> <EFBFBD>
add r0 ,r0 ,r12 / / R 1 2 =0xfffc <EFBFBD> <EFBFBD> λ <EFBFBD> ж <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ
ldrb r2 ,[ r0 ,#1 ]
orr m 6 5 0 2 _ p c ,m 6 5 0 2 _ p c ,r2 ,l s l #8
encodePC / / g e t I R Q v e c t o r <EFBFBD> õ <EFBFBD> 6 5 0 2 P C R O M <EFBFBD> <EFBFBD> ƫ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
bx l r
2025-07-09 23:38:26 +08:00
.type CPU_ r e s e t , % f u n c t i o n
2025-07-08 19:13:35 +08:00
CPU_reset : / / called b y l o a d c a r t ( r0 - r9 a r e f r e e t o u s e )
str l r ,[ s p ,#- 4 ] !
mov m 6 5 0 2 _ a ,#0
mov m 6 5 0 2 _ x ,#0
mov m 6 5 0 2 _ y ,#0
mov m 6 5 0 2 _ n z ,#0
2025-07-09 00:55:12 +08:00
add m 6 5 0 2 _ r m e m , g l o b a l p t r ,#r e a d m e m _ t b l / / <EFBFBD> <EFBFBD> r e a d m e m _ t b l <EFBFBD> ĵ <EFBFBD> ַ <EFBFBD> <EFBFBD> <EFBFBD> ص <EFBFBD> m 6502 _ r m e m
2025-07-08 19:13:35 +08:00
ldr r0 ,=NES_RAM / / N E S _ R A M <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ <EFBFBD> <EFBFBD>
ldr r0 ,[ r0 ]
add r0 ,#0x100
str r0 ,[ g l o b a l p t r ,#m 6502 _ s ] / / S =0xFD ( 0 x10 0 - 3 ) <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> Ĵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ִ 洢 <EFBFBD> <EFBFBD> <EFBFBD> 洢 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov r0 ,#0
str r0 ,[ g l o b a l p t r ,#c p u n m i f ] / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> c p u <EFBFBD> ж ϱ <EFBFBD> ־
str r0 ,[ g l o b a l p t r ,#c p u i r q f ] / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> c p u <EFBFBD> ж ϱ <EFBFBD> ־
mov c y c l e s ,#0 / / D =0 , C =0 , V =0 , I =1 d i s a b l e I R Q .
ldr r12 ,=RES_VECTOR / / <EFBFBD> <EFBFBD> λ <EFBFBD> ж <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ
bl V e c65 0 2
2025-07-09 00:55:12 +08:00
add r0 , g l o b a l p t r ,#c p u r e g s / / <EFBFBD> <EFBFBD> ȡ <EFBFBD> <EFBFBD> ַ
2025-07-08 19:13:35 +08:00
stmia r0 ,{ m 6 5 0 2 _ n z - m 6 5 0 2 _ p c } / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 6 5 0 2 ״ ̬
ldr r1 ,=exit_run
str r1 ,[ g l o b a l p t r ,#n e x t t i m e o u t ] / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ <EFBFBD> <EFBFBD> ִ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> P C <EFBFBD> <EFBFBD> ַ
ldr p c ,[ s p ] ,#4
2025-07-09 23:38:26 +08:00
.type empty_ R , % f u n c t i o n
2025-07-08 19:13:35 +08:00
empty_R : / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȷ read b a d a d d r e s s ( e r r o r )
mov r0 ,r12
mov r1 ,#2
bl d e b u g _ 6 5 0 2
mov r0 ,#0
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type void, % f u n c t i o n
2025-07-08 19:13:35 +08:00
void : / / - - - - - - - - - <EFBFBD> պ <EFBFBD> <EFBFBD> <EFBFBD>
mov r0 ,#0
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type ram_ R , % f u n c t i o n
2025-07-08 19:13:35 +08:00
ram_R : / / ram r e a d ( $ 0 0 0 0 - $ 1 F F F )
bic a d d y ,a d d y ,#0x1f800 / / o n l y 0 x07 F F i s R A M
ldrb r0 ,[ c p u _ z p a g e ,a d d y ]
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type ram_ W , % f u n c t i o n
2025-07-08 19:13:35 +08:00
ram_W : / / ram w r i t e ( $ 0 0 0 0 - $ 1 F F F )
bic a d d y ,a d d y ,#0x1f800 / / o n l y 0 x07 F F i s R A M
strb r0 ,[ c p u _ z p a g e ,a d d y ] / / c p u _ z p a g e R N r11 ;=CPU_RAM
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type sram_ R , % f u n c t i o n
2025-07-08 19:13:35 +08:00
sram_R : / / sram r e a d ( $ 6 0 0 0 - $ 7 F F F )
sub r1 ,a d d y ,#0x6000
ldr r2 ,[ g l o b a l p t r ,#m e m m a p _ t b l + 12 ]
ldrb r0 ,[ r2 ,r1 ]
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type sram_ W , % f u n c t i o n
2025-07-08 19:13:35 +08:00
sram_W : / / sram w r i t e ( $ 6 0 0 0 - $ 7 F F F )
sub a d d y ,a d d y ,#0x6000
ldr r1 ,[ g l o b a l p t r ,#m e m m a p _ t b l + 12 ]
strb r0 ,[ r1 ,a d d y ]
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type rom_ R 6 0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
rom_R60 : / / rom r e a d ( $ 6 0 0 0 - $ 7 F F F )
ldr r1 ,[ g l o b a l p t r ,#m e m m a p _ t b l + 12 ]
ldrb r0 ,[ r1 ,a d d y ]
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type rom_ R 8 0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
rom_R80 : / / rom r e a d ( $ 8 0 0 0 - $ 9 F F F )
ldr r1 ,[ g l o b a l p t r ,#m e m m a p _ t b l + 16 ]
ldrb r0 ,[ r1 ,a d d y ]
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type rom_ R A 0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
rom_RA0 : / / rom r e a d ( $ A 0 0 0 - $ B F F F )
ldr r1 ,[ g l o b a l p t r ,#m e m m a p _ t b l + 20 ]
ldrb r0 ,[ r1 ,a d d y ]
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type rom_ R C 0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
rom_RC0 : / / rom r e a d ( $ C 0 0 0 - $ D F F F )
ldr r1 ,[ g l o b a l p t r ,#m e m m a p _ t b l + 24 ]
ldrb r0 ,[ r1 ,a d d y ]
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type rom_ R E 0 , % f u n c t i o n
2025-07-08 19:13:35 +08:00
rom_RE0 : / / ;rom read ($E000-$FFFF)
ldr r1 ,[ g l o b a l p t r ,#m e m m a p _ t b l + 28 ]
ldrb r0 ,[ r1 ,a d d y ]
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type IO_ R , % f u n c t i o n
2025-07-08 19:13:35 +08:00
IO_R : / / I/ O r e a d
mov r2 ,#0x4018 / / $ 4 0 1 8 - $ 6 0 0 0
cmp r12 ,r2
bhi R e a d _ L o w / / H I <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> C = =1 & & Z = =0
sub r1 ,r12 ,#0x4000 / / a d d y =r12
subs r1 ,r1 ,#0x15
bmi e m p t y _ R / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȷ M I <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ( M I n u s ) N = =1
cmp r1 ,#3
ldr r2 ,=io_read_tbl / / <EFBFBD> Ĺ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 3 <EFBFBD> <EFBFBD>
add r2 ,r2 ,r1 ,l s l #2 / / < < 2
IT M I
ldrmi p c ,[ r2 ]
b e m p t y _ R / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȷ
2025-07-09 14:05:30 +08:00
.type io_ r e a d _ t b l , % o b j e c t
2025-07-08 19:13:35 +08:00
io_read_tbl :
.word apu_4015R / / void_ 4 0 1 5 r ;4015 (sound)
.word joy0_R / / 4016 : controller 1
.word joy1_R / / 4017 : controller 2
2025-07-09 14:05:30 +08:00
2025-07-09 23:38:26 +08:00
.type IO_ W , % f u n c t i o n
2025-07-08 19:13:35 +08:00
IO_W : / / I/ O w r i t e
mov r2 ,#0x4018 / / $ 4 0 1 8 - $ 6 0 0 0
cmp r12 ,r2
bhi W r i t e _ L o w / / H I <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> C = =1 & & Z = =0
sub r1 ,r12 ,#0x4000 / / a d d y =r12
cmp r1 ,#0x18
ldr r2 ,=io_write_tbl / / <EFBFBD> Ĺ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 3 <EFBFBD> <EFBFBD>
add r2 ,r2 ,r1 ,l s l #2 / / < < 2
IT M I
ldrmi p c ,[ r2 ] / / ֱ <EFBFBD> Ӳ <EFBFBD> <EFBFBD> <EFBFBD> p c ̫ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Σ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
b e m p t y _ R / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȷ
2025-07-09 14:05:30 +08:00
.type io_ w r i t e _ t b l , % o b j e c t
2025-07-08 19:13:35 +08:00
io_write_tbl :
.word apu_w / / void_ 4 0 0 0 w
.word apu_w / / _ 4 0 0 1 w
.word apu_w / / _ 4 0 0 2 w
.word apu_w / / _ 4 0 0 3 w
.word apu_w / / _ 4 0 0 4 w
.word apu_w / / _ 4 0 0 5 w
.word apu_w / / _ 4 0 0 6 w
.word apu_w / / _ 4 0 0 7 w
.word apu_w / / _ 4 0 0 8 w
.word apu_w / / void
.word apu_w / / _ 4 0 0 aw
.word apu_w / / void_ 4 0 0 b w
.word apu_w / / void_ 4 0 0 c w
.word apu_w / / void
.word apu_w / / void_ 4 0 0 e w
.word apu_w / / void_ 4 0 0 f w
.word apu_w / / void_ 4 0 1 0 w
.word apu_w / / void_ 4 0 1 1 w
.word apu_w / / void_ 4 0 1 2 w
.word apu_w / / void_ 4 0 1 3 w
.word dma_W / / $ 4014 : Sprite D M A t r a n s f e r
.word apu_4015w / / void_ 4 0 1 5 w <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͨ <EFBFBD> <EFBFBD> <EFBFBD> л <EFBFBD>
.word joy0_W / / $ 4016 : Joypad 0 w r i t e j o y p a d _ w r i t e _ p t r
.word void / / joy1 _ W $ 4 0 1 7 :
.extern asm_Mapper_ReadLow
2025-07-09 23:38:26 +08:00
.type Read_ L o w , % f u n c t i o n
2025-07-08 19:13:35 +08:00
Read_Low : / / $ 5 0 0 0 - $ 6 0 0 0 mapper- > M e m o r y R e a d L o w ( a d d r ) ;
stmfd s p ! ,{ r3 ,l r } / / L R <EFBFBD> Ĵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ջ
mov r0 ,r12
bl a s m _ M a p p e r _ R e a d L o w
ldmfd s p ! ,{ r3 ,l r }
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
.extern asm_Mapper_WriteLow
2025-07-09 23:38:26 +08:00
.type Write_ L o w , % f u n c t i o n
2025-07-08 19:13:35 +08:00
Write_Low : / / $ 5 0 0 0 - $ 6 0 0 0 mapper- > M e m o r y W r i t e L o w ( d a t a , a d d r ) ;
stmfd s p ! ,{ r3 ,l r } / / L R <EFBFBD> Ĵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ջ
mov r1 ,r12
bl a s m _ M a p p e r _ W r i t e L o w
ldmfd s p ! ,{ r3 ,l r }
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
.extern Apu_Write
.extern Apu_Write4015
2025-07-09 23:38:26 +08:00
.type apu_ w , % f u n c t i o n
2025-07-08 19:13:35 +08:00
apu_w : / / 0 x4 0 0 0 - - 0 x40 1 3
stmfd s p ! ,{ r3 ,l r } / / L R <EFBFBD> Ĵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ջ
bl A p u _ W r i t e
ldmfd s p ! ,{ r3 ,l r }
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type apu_ 4 0 1 5 w , % f u n c t i o n
2025-07-08 19:13:35 +08:00
apu_4015w :
stmfd s p ! ,{ r3 ,l r }
bl A p u _ W r i t e 4 0 1 5
ldmfd s p ! ,{ r3 ,l r }
orr l r ,#0x01
bx l r
.extern Apu_Read4015
2025-07-09 23:38:26 +08:00
.type apu_ 4 0 1 5 R , % f u n c t i o n
2025-07-08 19:13:35 +08:00
apu_4015R :
stmfd s p ! ,{ r3 ,l r }
add r0 ,r1 ,#0x15
bl A p u _ R e a d40 1 5
ldmfd s p ! ,{ r3 ,l r }
orr l r ,#0x01
bx l r
2025-07-09 23:38:26 +08:00
.type dma_ W , % f u n c t i o n
2025-07-08 19:13:35 +08:00
dma_W : / / ( 4 0 1 4 ) sprite D M A t r a n s f e r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> D M A <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> D M A <EFBFBD> <EFBFBD> <EFBFBD> ʾ <EFBFBD> <EFBFBD> <EFBFBD> R A M <EFBFBD> <EFBFBD>
/ / ͨ <EFBFBD> <EFBFBD> д һ <EFBFBD> <EFBFBD> ֵ xx<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˿ ڣ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> C P U <EFBFBD> ڴ <EFBFBD> <EFBFBD> <EFBFBD> ַ Ϊ $ x x00 <EFBFBD> <EFBFBD> $ x x F F <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͵ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڴ <EFBFBD>
sub c y c l e s ,c y c l e s ,#512 * 2 5 6
stmfd s p ! ,{ r3 ,l r }
and r1 ,r0 ,#0xe0
2025-07-09 00:55:12 +08:00
add r2 , g l o b a l p t r ,#m e m m a p _ t b l
2025-07-08 19:13:35 +08:00
lsr r1 ,r1 ,#3
ldr r2 ,[ r2 ,r1 ]
and r0 ,r0 ,#0xff
add r2 ,r2 ,r0 ,l s l #8 / / a d d y r2 =DMA s o u r c e Դ
ldr r1 ,=spr_ram / / r1 D M A <EFBFBD> <EFBFBD> Ŀ <EFBFBD> ĵ <EFBFBD> p p u . c
ldr r1 ,[ r1 ] / / s p r _ r a m <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ <EFBFBD> <EFBFBD>
mov r0 ,#64 / / 2 5 6 / 4 / 8
copy_ :
subs r0 ,r0 ,#1 / / - 1
ldr r3 ,[ r2 ,r0 ,l s l #2 ]
str r3 ,[ r1 ,r0 ,l s l #2 ] / / < < 2 * 4
bne c o p y _
ldmfd s p ! ,{ r3 ,l r }
orr l r ,#0x01
bx l r
.extern PADdata
.extern PADdata1
2025-07-09 23:38:26 +08:00
.type joy0 _ W , % f u n c t i o n
2025-07-08 19:13:35 +08:00
joy0_W : / / 4 0 1 6 <EFBFBD> ֱ <EFBFBD> 1 <EFBFBD> <EFBFBD> ֵ [ 7 : 0 ] <EFBFBD> <EFBFBD> 7 <EFBFBD> <EFBFBD> 6 <EFBFBD> <EFBFBD> 5 <EFBFBD> <EFBFBD> 4 Start3 S e l e c t 2 B 1 A 0 )
tst r0 ,#1 / / 0 <EFBFBD> <EFBFBD> д <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
IT N E
bxne l r / / N E <EFBFBD> <EFBFBD> <EFBFBD> ȣ <EFBFBD> N o t E q u a l <EFBFBD> <EFBFBD>
ldr r1 ,=PADdata ; // <20> ֱ<EFBFBD> 1<EFBFBD> <31> ֵ
ldr r1 ,[ r1 ]
str r1 ,[ g l o b a l p t r ,#j o y 0 d a t a ]
ldr r1 ,=PADdata1 ; // <20> ֱ<EFBFBD> 1<EFBFBD> <31> ֵ
ldr r1 ,[ r1 ]
str r1 ,[ g l o b a l p t r ,#j o y 1 d a t a ]
bx l r
/ / <EFBFBD> <EFBFBD> <EFBFBD> ֱ <EFBFBD> 0 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֱ <EFBFBD> 1 <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> Ҫ <EFBFBD> <EFBFBD>
joy1_W : / / 4 0 1 7 <EFBFBD> ֱ <EFBFBD> 1 <EFBFBD> <EFBFBD> ֵ [ 7 : 0 ] <EFBFBD> <EFBFBD> 7 <EFBFBD> <EFBFBD> 6 <EFBFBD> <EFBFBD> 5 <EFBFBD> <EFBFBD> 4 Start3 S e l e c t 2 B 1 A 0 )
/ / tst r0 ,#1 ; 0<> <30> ??<3F> <> 1<EFBFBD> <31> <EFBFBD> <EFBFBD>
/ / orr l r ,#0x01 ;lr<6C> <72> <EFBFBD> <EFBFBD> λ<EFBFBD> <CEBB> 1<EFBFBD> <31> ֹ<EFBFBD> <D6B9> <EFBFBD> <EFBFBD> arm״̬
/ / bxne l r ;NE <20> <> <EFBFBD> ȣ <EFBFBD> NotEqual<61> <6C>
bx l r
2025-07-09 23:38:26 +08:00
.type joy0 _ R , % f u n c t i o n
2025-07-08 19:13:35 +08:00
joy0_R :
ldr r0 ,[ g l o b a l p t r ,#j o y 0 d a t a ] / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ <EFBFBD> <EFBFBD> ȡ λ ;joy0data<74> Ǽ<EFBFBD> ֵ
mov r1 ,r0 ,l s r #1 / / > > 1
str r1 ,[ g l o b a l p t r ,#j o y 0 d a t a ]
and r0 ,r0 ,#1 / / & 1
orr r0 ,r0 ,#0x40 / / | 0 x40
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
2025-07-09 23:38:26 +08:00
.type joy1 _ R , % f u n c t i o n
2025-07-08 19:13:35 +08:00
joy1_R :
ldr r0 ,[ g l o b a l p t r ,#j o y 1 d a t a ] / / <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ <EFBFBD> <EFBFBD> ȡ λ ;joy0data<74> Ǽ<EFBFBD> ֵ
mov r1 ,r0 ,l s r #1 / / > > 1
str r1 ,[ g l o b a l p t r ,#j o y 1 d a t a ]
and r0 ,r0 ,#1 / / & 1
orr r0 ,r0 ,#0x40 / / | 0 x80 <EFBFBD> <EFBFBD> 0 x f8 ?
orr l r ,#0x01 / / l r <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ <EFBFBD> <EFBFBD> 1 <EFBFBD> <EFBFBD> ֹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> a r m ״ ̬
bx l r
.global K6502_Read
2025-07-09 23:38:26 +08:00
.type K6 5 0 2 _ R e a d , % f u n c t i o n
2025-07-08 19:13:35 +08:00
K6502_Read :
/ / apu R e n d e r i n g D P C M c h a n n e l #5 r0 =APU - > A p u C 5 A d d r e s s <EFBFBD> <EFBFBD> ȷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȷ *
stmfd s p ! ,{ l r }
mov r1 ,r0 ,l s r #13 / / > > 1 3 = & 0 x e 0 0 0
ldr r2 ,=CPU_RAM / / <EFBFBD> 洢 <EFBFBD> <EFBFBD> ӳ <EFBFBD> <EFBFBD> r a m + r o m
ldr r1 ,[ r2 ,r1 ,l s l #2 ] / / l o o k u p r o m p t r . . <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> p t r
bic r0 ,r0 ,#0xe000 / / a n d r0 ,#0x1fff & 0 x1 f f f
ldrb r0 ,[ r1 ,r0 ]
ldmfd s p ! ,{ l r }
bx l r
.extern PPU_WriteToPort
.extern PPU_ReadFromPort
2025-07-09 23:38:26 +08:00
.type PPU_ W , % f u n c t i o n
2025-07-08 19:13:35 +08:00
PPU_W :
stmfd s p ! ,{ r3 ,l r }
mov r1 ,r12
bl P P U _ W r i t e T o P o r t
ldmfd s p ! ,{ r3 ,l r }
orr l r ,#0x01
bx l r
2025-07-09 23:38:26 +08:00
.type PPU_ R , % f u n c t i o n
2025-07-08 19:13:35 +08:00
PPU_R :
stmfd s p ! ,{ r3 ,l r }
mov r0 ,r12
bl P P U _ R e a d F r o m P o r t
ldmfd s p ! ,{ r3 ,l r }
orr l r ,#0x01
bx l r
2025-07-09 14:05:30 +08:00
.type op_ t a b l e , % o b j e c t
2025-07-08 19:13:35 +08:00
op_table :
.word _ 0 0 , _ 0 1 , _ xx,_ 0 3 ,_ x x ,_ 0 5 ,_ 0 6 ,_ 0 7 ,_ 0 8 ,_ 0 9 ,_ 0 A ,_ x x ,_ x x ,_ 0 D ,_ 0 E ,_ x x
.word _ 1 0 , _ 1 1 , _ xx,_ x x ,_ 1 4 ,_ 1 5 ,_ 1 6 ,_ x x ,_ 1 8 ,_ 1 9 ,_ x x ,_ x x ,_ x x ,_ 1 D ,_ 1 E ,_ x x
.word _ 2 0 , _ 2 1 , _ xx,_ x x ,_ 2 4 ,_ 2 5 ,_ 2 6 ,_ x x ,_ 2 8 ,_ 2 9 ,_ 2 A ,_ x x ,_ 2 C ,_ 2 D ,_ 2 E ,_ x x
.word _ 3 0 , _ 3 1 , _ xx,_ x x ,_ x x ,_ 3 5 ,_ 3 6 ,_ x x ,_ 3 8 ,_ 3 9 ,_ x x ,_ x x ,_ x x ,_ 3 D ,_ 3 E ,_ x x
.word _ 4 0 , _ 4 1 , _ xx,_ x x ,_ x x ,_ 4 5 ,_ 4 6 ,_ x x ,_ 4 8 ,_ 4 9 ,_ 4 A ,_ x x ,_ 4 C ,_ 4 D ,_ 4 E ,_ x x
.word _ 5 0 , _ 5 1 , _ xx,_ x x ,_ x x ,_ 5 5 ,_ 5 6 ,_ x x ,_ 5 8 ,_ 5 9 ,_ x x ,_ x x ,_ x x ,_ 5 D ,_ 5 E ,_ x x
.word _ 6 0 , _ 6 1 , _ xx,_ x x ,_ x x ,_ 6 5 ,_ 6 6 ,_ 6 7 ,_ 6 8 ,_ 6 9 ,_ 6 A ,_ x x ,_ 6 C ,_ 6 D ,_ 6 E ,_ x x
.word _ 7 0 , _ 7 1 , _ xx,_ x x ,_ x x ,_ 7 5 ,_ 7 6 ,_ x x ,_ 7 8 ,_ 7 9 ,_ x x ,_ x x ,_ x x ,_ 7 D ,_ 7 E ,_ x x
.word _ xx,_ 8 1 ,_ x x ,_ x x ,_ 8 4 ,_ 8 5 ,_ 8 6 ,_ x x ,_ 8 8 ,_ x x ,_ 8 A ,_ x x ,_ 8 C ,_ 8 D ,_ 8 E ,_ x x
.word _ 9 0 , _ 9 1 , _ xx,_ x x ,_ 9 4 ,_ 9 5 ,_ 9 6 ,_ x x ,_ 9 8 ,_ 9 9 ,_ 9 A ,_ x x ,_ x x ,_ 9 D ,_ x x ,_ x x
.word _ A0 ,_ A 1 ,_ A 2 ,_ x x ,_ A 4 ,_ A 5 ,_ A 6 ,_ x x ,_ A 8 ,_ A 9 ,_ A A ,_ x x ,_ A C ,_ A D ,_ A E ,_ x x
.word _ B0 ,_ B 1 ,_ x x ,_ x x ,_ B 4 ,_ B 5 ,_ B 6 ,_ x x ,_ B 8 ,_ B 9 ,_ B A ,_ x x ,_ B C ,_ B D ,_ B E ,_ x x
.word _ C0 ,_ C 1 ,_ x x ,_ x x ,_ C 4 ,_ C 5 ,_ C 6 ,_ x x ,_ C 8 ,_ C 9 ,_ C A ,_ x x ,_ C C ,_ C D ,_ C E ,_ x x
.word _ D0 ,_ D 1 ,_ x x ,_ x x ,_ x x ,_ D 5 ,_ D 6 ,_ x x ,_ D 8 ,_ D 9 ,_ x x ,_ x x ,_ x x ,_ D D ,_ D E ,_ x x
.word _ E0 ,_ E 1 ,_ x x ,_ x x ,_ E 4 ,_ E 5 ,_ E 6 ,_ x x ,_ E 8 ,_ E 9 ,_ E A ,_ x x ,_ E C ,_ E D ,_ E E ,_ x x
.word _ F0 ,_ F 1 ,_ x x ,_ x x ,_ x x ,_ F 5 ,_ F 6 ,_ x x ,_ F 8 ,_ F 9 ,_ x x ,_ F B ,_ x x ,_ F D ,_ F E ,_ F F
2025-07-09 14:05:30 +08:00
.section .data ._6502_cpu_data
2025-07-08 19:13:35 +08:00
.type cpu_ d a t a , % o b j e c t
cpu_data :
.word 0 / / opz # 4 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ
/ / readmem_ t b l
.word ram_R / / $ 0 0 0 0
.word PPU_R / / $ 2 0 0 0
.word IO_R / / $ 4 0 0 0
.word sram_R / / $ 6 0 0 0
.word rom_R80 / / $ 8 0 0 0
.word rom_RA0 / / $ A0 0 0
.word rom_RC0 / / $ C0 0 0
.word rom_RE0 / / $ E0 0 0
/ / writemem_ t b l
.word ram_W / / $ 0 0 0 0
.word PPU_W / / $ 2 0 0 0 r0 <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.word IO_W / / $ 4 0 0 0
.word sram_W / / $ 6 0 0 0
.word void / / $ 8 0 0 0
.word void / / $ A0 0 0
.word void / / $ C0 0 0
.word void / / $ E0 0 0
CPU_RAM : / / memmap_ t b l <EFBFBD> 洢 <EFBFBD> <EFBFBD> ӳ <EFBFBD> <EFBFBD>
.word NES_RAM / / $ 0 0 0 0 0 0 0 0 - 7 fff k e e p $ 4 0 0 b y t e a l i g n e d f o r 6 5 0 2 s t a c k s h i t
.word NES_RAM / / $ 2 0 0 0 should <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 0 2 4 <EFBFBD> ֽ ڶ <EFBFBD> <EFBFBD> <EFBFBD>
.word NES_RAM / / $ 4 0 0 0 never
.word NES_SRAM / / NES_ R A M - 0 x58 0 0 ;$6000 change<67> ı <EFBFBD>
rommap :
.space 4 * 4 / / $ 8 0 0 0 - FFFF m e m m a p _ t b l + 1 6
cpustate :
/ / group t h e s e t o g e t h e r f o r s a v e / l o a d s t a t e
.space 7 * 4 / / cpuregs ( n z ,c ,a ,x ,y ,c y c l e s ,p c )
.word 0 / / m6502_s :
.word 0 / / lastbank : <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> MEMMAP<EFBFBD> <EFBFBD> <EFBFBD> ӵ <EFBFBD> P C <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڼ <EFBFBD> <EFBFBD> 㵱 ǰ <EFBFBD> <EFBFBD> P C <EFBFBD> <EFBFBD>
.word 0 / / nexttimeout : jump h e r e w h e n c y c l e s r u n s o u t <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <EFBFBD> ʱ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.word 0 / / rombase # 4 ;//ROM<4F> <4D> ʼ <EFBFBD> <CABC> ַ
.word 0 / / romnumber # 4 ;//
.word 0 / / rommask # 4 ;//ROM<4F> <4D> Ĥ rommask=romsize-1
.word 0 / / joy0 d a t a # 4 ;//<2F> ֱ<EFBFBD> 1<EFBFBD> <31> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.word 0 / / joy1 d a t a # 4 ;//<2F> ֱ<EFBFBD> 2<EFBFBD> <32> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
clocks :
.word 0 / / clocksh # 4 ;//ִ<> е <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> apu<70> <75>
cpunmi :
.word 0 / / cpunmif # 4 ;cpu<70> жϱ <D0B6> ־
cpuirq :
.word 0 / / cpuirqf # 4 ;cpu<70> жϱ <D0B6> ־