Implement op -0x4f

This commit is contained in:
Takashi Toyoshima 2014-12-06 23:08:34 +09:00
parent fb81353de3
commit 4c3a822893

157
6502.S
View File

@ -83,6 +83,18 @@
_ldb _ldb
.endm .endm
.macro _popw
mov T0, SP
adds r0, T0, #1
_ldb
mov T1, r0
adds r0, T0, #2
mov SP, r0
_ldb
lsls r0, r0, #8
adds r0, r0, T1
.endm
.macro _decode .macro _decode
bl dump bl dump
mov r0, PC mov r0, PC
@ -114,14 +126,14 @@
_ldb _ldb
.endm .endm
.macro _fromImm8 .macro _fromImmb
adds PC, PC, #1 adds PC, PC, #1
mov r0, PC mov r0, PC
_ldb _ldb
.endm .endm
.macro _fromIndexedIndirect .macro _fromIndexedIndirect
_fromImm8 _fromImmb
mov r1, RX mov r1, RX
adds r0, r0, R1 adds r0, r0, R1
uxtb r0, r0 uxtb r0, r0
@ -138,7 +150,7 @@
.endm .endm
.macro _fromIndirectIndex .macro _fromIndirectIndex
_fromImm8 _fromImmb
mov T0, r0 mov T0, r0
_ldb _ldb
mov T1, r0 mov T1, r0
@ -158,14 +170,14 @@
.endm .endm
.macro _fromZero .macro _fromZero
_fromImm8 _fromImmb
mov ADDR, r0 mov ADDR, r0
_ldb _ldb
.endm .endm
.macro _fromZeroIndex reg .macro _fromZeroIndex reg
_fromImm8 _fromImmb
add r0, r0, \reg add r0, r0, \reg
uxtb r0, r0 uxtb r0, r0
mov ADDR, r0 mov ADDR, r0
@ -183,7 +195,7 @@
.endm .endm
.macro _toZero .macro _toZero
_fromImm8 _fromImmb
mov r1, T0 mov r1, T0
_stb _stb
.endm .endm
@ -260,11 +272,15 @@
.endm .endm
.macro _bxx .macro _bxx
_fromImm8 _fromImmb
sxtb r0, r0 sxtb r0, r0
add PC, PC, r0 add PC, PC, r0
.endm .endm
.macro _jmp
mov PC, r0
.endm
.macro _ld reg .macro _ld reg
mov \reg, r0 mov \reg, r0
_flag_nz _flag_nz
@ -279,6 +295,25 @@
adds PC, PC, #1 adds PC, PC, #1
.endm .endm
.macro _lsr
__cl (FLAG_N | FLAG_Z | FLAG_C)
movs r1, #0x01
tst r0, r1
beq 1f
__se FLAG_C
1:
lsrs r0, r0, #1
bne 1f
__se FLAG_Z
1:
movs r1, #0x80
tst r0, r1
beq 1f
__se FLAG_N
1:
adds PC, PC, #1
.endm
.macro _nop .macro _nop
adds PC, PC, #1 adds PC, PC, #1
.endm .endm
@ -328,6 +363,13 @@
adds PC, PC, #1 adds PC, PC, #1
.endm .endm
.macro _rti
_popb
mov SR, r0
_popw
mov PC, r0
.endm
.macro _resume .macro _resume
ldr r0, =#r_pc ldr r0, =#r_pc
ldr PC, [r0] ldr PC, [r0]
@ -396,6 +438,12 @@ op3a:
op3b: op3b:
op3c: op3c:
op3f: op3f:
op42:
op43:
op44:
op47:
op4b:
op4f:
_nop _nop
_decode _decode
@ -432,7 +480,7 @@ op08: // PHP
_decode _decode
op09: // ORA - Immediate op09: // ORA - Immediate
_fromImm8 _fromImmb
_lop orrs _lop orrs
_decode _decode
@ -533,7 +581,7 @@ op28: // PLP
_decode _decode
op29: // AND - Immediate op29: // AND - Immediate
_fromImm8 _fromImmb
_lop ands _lop ands
_decode _decode
@ -603,38 +651,59 @@ op3e: // ROL - Absolute, X
_toAddr _toAddr
_decode _decode
op40: op40: // RTI
b quit _rti
op41: _decode
b quit
op42: op41: // EOR - (Indirect), X
b quit _fromIndexedIndirect
op43: _lop eors
b quit _decode
op44:
b quit op45: // EOR - Zero Page
op45: _fromZero
b quit _lop eors
op46: _decode
b quit
op47: op46: // LSR - Zero Page
b quit _fromZero
op48: _lsr
b quit _toAddr
op49: _decode
b quit
op4a: op48: // PHA
b quit _pushb RA
op4b: adds PC, PC, #1
b quit _decode
op4c:
b quit op49: // EOR - Immediate
op4d: _fromImmb
b quit _lop eors
op4e: _decode
b quit
op4f: op4a: // LSR - Accumulator
b quit _fromReg RA
_lsr
_toReg RA
_decode
op4c: // JMP - Absolute
adds r0, PC, #1
_ldw
_jmp
_decode
op4d: // EOR - Absolute
_fromAbsb
_lop eors
_decode
op4e: // LSR - Absolute
_fromAbsb
_lsr
_toAddr
_decode
op50: op50:
b quit b quit
op51: op51:
@ -801,13 +870,13 @@ op9e:
op9f: op9f:
b quit b quit
opa0: // LDY - Immediate opa0: // LDY - Immediate
_fromImm8 _fromImmb
_ld RY _ld RY
_decode _decode
opa1: opa1:
b quit b quit
opa2: // LDX - Immediate opa2: // LDX - Immediate
_fromImm8 _fromImmb
_ld RX _ld RX
_decode _decode
opa3: opa3:
@ -823,7 +892,7 @@ opa7:
opa8: opa8:
b quit b quit
opa9: // LDA - Immediate opa9: // LDA - Immediate
_fromImm8 _fromImmb
_ld RA _ld RA
_decode _decode
opaa: opaa: