Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #cpudef "CPU_65C02_NS"
- {
- #bits 8
- ;------------------------------------------------------------------------------ (++ means new Instruction, +* means new Addressing Mode)
- ; () <- Absolute Address
- ; [] <- Zeropage Address
- ;
- ; example:
- ; LD A, [0x76,X]
- ; This loads into Register A, from a Zeropage location pointed by 0x76 + Register X
- ;------------------------------------------------------------------------------
- ; Add with Carry
- ADD {src} -> 0x69[7:0] @ src[7:0]
- ADD [{src}] -> 0x65[7:0] @ src[7:0]
- ADD [{src},X] -> 0x75[7:0] @ src[7:0]
- ADD ({src}) -> 0x6D[7:0] @ src[7:0] @ src[15:8]
- ADD ({src},X) -> 0x7D[7:0] @ src[7:0] @ src[15:8]
- ADD ({src},Y) -> 0x79[7:0] @ src[7:0] @ src[15:8]
- ADD ([{src},X]) -> 0x61[7:0] @ src[7:0]
- ADD ([{src}],Y) -> 0x71[7:0] @ src[7:0]
- ADD ([{src}]) -> 0x72[7:0] @ src[7:0] ; +*
- ;------------------------------------------------------------------------------
- ; Logic AND
- AND {src} -> 0x29[7:0] @ src[7:0]
- AND [{src}] -> 0x25[7:0] @ src[7:0]
- AND [{src},X] -> 0x35[7:0] @ src[7:0]
- AND ({src}) -> 0x2D[7:0] @ src[7:0] @ src[15:8]
- AND ({src},X) -> 0x3D[7:0] @ src[7:0] @ src[15:8]
- AND ({src},Y) -> 0x39[7:0] @ src[7:0] @ src[15:8]
- AND ([{src},X]) -> 0x21[7:0] @ src[7:0]
- AND ([{src}],Y) -> 0x31[7:0] @ src[7:0]
- AND ([{src}]) -> 0x32[7:0] @ src[7:0] ; +*
- ;------------------------------------------------------------------------------
- ; Arithmetic Shift Left
- SFL A -> 0x0A[7:0]
- SFL [{src}] -> 0x07[7:0] @ src[7:0]
- SFL [{src},X] -> 0x16[7:0] @ src[7:0]
- SFL ({src}) -> 0x0E[7:0] @ src[7:0] @ src[15:8]
- SFL ({src},X) -> 0x1E[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Branch Always ++
- JR {src} -> 0x80[7:0] @ (src - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Branch on Bit Clear/Reset ++
- JR NB0 {src},{src1} -> 0x0F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR NB1 {src},{src1} -> 0x1F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR NB2 {src},{src1} -> 0x2F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR NB3 {src},{src1} -> 0x3F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR NB4 {src},{src1} -> 0x4F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR NB5 {src},{src1} -> 0x5F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR NB6 {src},{src1} -> 0x6F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR NB7 {src},{src1} -> 0x7F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Branch on Bit Set ++
- JR B0 {src},{src1} -> 0x8F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR B1 {src},{src1} -> 0x9F[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR B2 {src},{src1} -> 0xAF[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR B3 {src},{src1} -> 0xBF[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR B4 {src},{src1} -> 0xCF[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR B5 {src},{src1} -> 0xDF[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR B6 {src},{src1} -> 0xEF[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- JR B7 {src},{src1} -> 0xFF[7:0] @ src[7:0] @ (src1 - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Branch on Carry Clear
- JR NC {src} -> 0x90[7:0] @ (src - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Branch on Carry Set
- JR C {src} -> 0xB0[7:0] @ (src - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Branch on Equal (Zero Set)
- JR Z {src} -> 0xF0[7:0] @ (src - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Bit Test
- BIT {src} -> 0x89[7:0] @ src[7:0] ; +*
- BIT [{src}] -> 0x24[7:0] @ src[7:0]
- BIT [{src},X] -> 0x34[7:0] @ src[7:0] ; +*
- BIT ({src}) -> 0x2C[7:0] @ src[7:0] @ src[15:8]
- BIT ({src},X) -> 0x3C[7:0] @ src[7:0] @ src[15:8] ; +*
- ;------------------------------------------------------------------------------
- ; Branch on Minus (Negative Set)
- JR N {src} -> 0x30[7:0] @ (src - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Branch on Not Equal (Zero Clear)
- JR NZ {src} -> 0xD0[7:0] @ (src - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Branch on Plus (Negative Clear)
- JR NN {src} -> 0x10[7:0] @ (src - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Break (Interrupt)
- BRK -> 0x00[7:0]
- INT -> 0x00[7:0]
- ;------------------------------------------------------------------------------
- ; Branch on Overflow Clear
- JR NV {src} -> 0x50[7:0] @ (src - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Branch on Overflow Set
- JR V {src} -> 0x70[7:0] @ (src - (pc - 2))[7:0]
- ;------------------------------------------------------------------------------
- ; Clear Carry
- CLR C -> 0x18[7:0]
- ;------------------------------------------------------------------------------
- ; Clear Decimal
- CLR D -> 0xD8[7:0]
- ;------------------------------------------------------------------------------
- ; Clear Interrupt Disable
- CLR I -> 0x58[7:0]
- ;------------------------------------------------------------------------------
- ; Clear Overflow
- CLR V -> 0xB8[7:0]
- ;------------------------------------------------------------------------------
- ; Compare with Accumulator
- CMP {src} -> 0xC9[7:0] @ src[7:0]
- CMP [{src} -> 0xC5[7:0] @ src[7:0]
- CMP [{src},X -> 0xD5[7:0] @ src[7:0]
- CMP ({src}) -> 0xCD[7:0] @ src[7:0] @ src[15:8]
- CMP ({src},X) -> 0xDD[7:0] @ src[7:0] @ src[15:8]
- CMP ({src},Y) -> 0xD9[7:0] @ src[7:0] @ src[15:8]
- CMP ([{src},X]) -> 0xC1[7:0] @ src[7:0]
- CMP ([{src}],Y) -> 0xD1[7:0] @ src[7:0]
- CMP ([{src}]) -> 0xD2[7:0] @ src[7:0] ; +*
- ;------------------------------------------------------------------------------
- ; Compare with X
- CPX {src} -> 0xE0[7:0] @ src[7:0]
- CPX [{src}] -> 0xE4[7:0] @ src[7:0]
- CPX ({src}) -> 0xEC[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Compare with Y
- CPY {src} -> 0xC0[7:0] @ src[7:0]
- CPY [{src}] -> 0xC4[7:0] @ src[7:0]
- CPY ({src}) -> 0xCC[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Decrement
- DEC A -> 0x1A[7:0] ; +*
- DEC [{src}] -> 0xC6[7:0] @ src[7:0]
- DEC [{src},X] -> 0xD6[7:0] @ src[7:0]
- DEC ({src}) -> 0xCE[7:0] @ src[7:0] @ src[15:8]
- DEC ({src},X) -> 0xDE[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Decrement X
- DEC X -> 0xCA[7:0]
- ;------------------------------------------------------------------------------
- ; Decrement Y
- DEC Y -> 0x88[7:0]
- ;------------------------------------------------------------------------------
- ; Logic XOR
- XOR {src} -> 0x49[7:0] @ src[7:0]
- XOR [{src}] -> 0x45[7:0] @ src[7:0]
- XOR [{src},X] -> 0x55[7:0] @ src[7:0]
- XOR ({src}) -> 0x4D[7:0] @ src[7:0] @ src[15:8]
- XOR ({src},X) -> 0x5D[7:0] @ src[7:0] @ src[15:8]
- XOR ({src},Y) -> 0x59[7:0] @ src[7:0] @ src[15:8]
- XOR ({src},X) -> 0x41[7:0] @ src[7:0]
- XOR ({src},Y) -> 0x51[7:0] @ src[7:0]
- XOR ({src}) -> 0x52[7:0] @ src[7:0] ; +*
- ;------------------------------------------------------------------------------
- ; Increment
- INC A -> 0x3A[7:0] ; +*
- INC [{src}] -> 0xE6[7:0] @ src[7:0]
- INC [{src},X] -> 0xF6[7:0] @ src[7:0]
- INC ({src}) -> 0xEE[7:0] @ src[7:0] @ src[15:8]
- INC ({src},X) -> 0xFE[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Increment X
- INC X -> 0xE8[7:0]
- ;------------------------------------------------------------------------------
- ; Increment Y
- INC Y -> 0xC8[7:0]
- ;------------------------------------------------------------------------------
- ; Jump
- JMP {src} -> 0x4C[7:0] @ src[7:0] @ src[15:8]
- JMP ({src}) -> 0x6C[7:0] @ src[7:0] @ src[15:8]
- JMP ({src},X) -> 0x7C[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Jump Subroutine
- CALL {src} -> 0x20[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Load Accumulator
- LD A, {src} -> 0xA9[7:0] @ src[7:0]
- LD A, [{src}] -> 0xA5[7:0] @ src[7:0]
- LD A, [{src},X] -> 0xB5[7:0] @ src[7:0]
- LD A, ({src}) -> 0xAD[7:0] @ src[7:0] @ src[15:8]
- LD A, ({src},X) -> 0xBD[7:0] @ src[7:0] @ src[15:8]
- LD A, ({src},Y) -> 0xB9[7:0] @ src[7:0] @ src[15:8]
- LD A, ([{src},X]) -> 0xA1[7:0] @ src[7:0]
- LD A, ([{src}],Y) -> 0xB1[7:0] @ src[7:0]
- LD A, ([{src}]) -> 0xB2[7:0] @ src[7:0] ; +*
- ;------------------------------------------------------------------------------
- ; Load X
- LD X, {src} -> 0xA2[7:0] @ src[7:0]
- LD X, [{src}] -> 0xA6[7:0] @ src[7:0]
- LD X, [{src},Y] -> 0xB6[7:0] @ src[7:0]
- LD X, ({src}) -> 0xAE[7:0] @ src[7:0] @ src[15:8]
- LD X, ({src},Y) -> 0xBE[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Load Y
- LD Y, {src} -> 0xA0[7:0] @ src[7:0]
- LD Y, [{src}] -> {assert({src} <= 0xFF), 0xA4[7:0] @ src[7:0]}
- LD Y, [{src},X] -> {assert({src} <= 0xFF), 0xB4[7:0] @ src[7:0]}
- LD Y, ({src}) -> {assert({src} > 0xFF), 0xAC[7:0] @ src[7:0] @ src[15:8]}
- LD Y, ({src},X) -> {assert({src} > 0xFF), 0xBE[7:0] @ src[7:0] @ src[15:8]}
- ;------------------------------------------------------------------------------
- ; Logical Shift Right
- SFR A -> 0x4A[7:0]
- SFR [{src}] -> 0x46[7:0] @ src[7:0]
- SFR [{src},X] -> 0x56[7:0] @ src[7:0]
- SFR ({src}) -> 0x4E[7:0] @ src[7:0] @ src[15:8]
- SFR ({src},X) -> 0x5E[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; No Operation
- NOP -> 0xEA[7:0]
- ;------------------------------------------------------------------------------
- ; Logic OR
- OR {src} -> 0x09[7:0] @ src[7:0]
- OR [{src}] -> 0x06[7:0] @ src[7:0]
- OR [{src},X] -> 0x15[7:0] @ src[7:0]
- OR ({src}) -> 0x0D[7:0] @ src[7:0] @ src[15:8]
- OR ({src},X) -> 0x1D[7:0] @ src[7:0] @ src[15:8]
- OR ({src},Y) -> 0x19[7:0] @ src[7:0] @ src[15:8]
- OR ([{src},X]) -> 0x01[7:0] @ src[7:0]
- OR ([{src}],Y) -> 0x11[7:0] @ src[7:0]
- OR ([{src}]) -> 0x12[7:0] @ src[7:0] ; +*
- ;------------------------------------------------------------------------------
- ; Push Accumulator
- PUSH A -> 0x48[7:0]
- ;------------------------------------------------------------------------------
- ; Push Processor Status
- PUSH SR -> 0x08[7:0]
- ;------------------------------------------------------------------------------
- ; Push X Register ++
- PUSH X -> 0xDA[7:0]
- ;------------------------------------------------------------------------------
- ; Push Y Register ++
- PUSH Y -> 0x5A[7:0]
- ;------------------------------------------------------------------------------
- ; Pull Accumulator
- POP A -> 0x68[7:0]
- ;------------------------------------------------------------------------------
- ; Pull Processor Status
- POP SR -> 0x28[7:0]
- ;------------------------------------------------------------------------------
- ; Pull X Register ++
- POP X -> 0xFA[7:0]
- ;------------------------------------------------------------------------------
- ; Pull Y Register ++
- POP Y -> 0x7A[7:0]
- ;------------------------------------------------------------------------------
- ; Reset Memory Bit ++
- CLR B0, [{src}] -> 0x07[7:0] @ src[7:0]
- CLR B1, [{src}] -> 0x17[7:0] @ src[7:0]
- CLR B2, [{src}] -> 0x27[7:0] @ src[7:0]
- CLR B3, [{src}] -> 0x37[7:0] @ src[7:0]
- CLR B4, [{src}] -> 0x47[7:0] @ src[7:0]
- CLR B5, [{src}] -> 0x57[7:0] @ src[7:0]
- CLR B6, [{src}] -> 0x67[7:0] @ src[7:0]
- CLR B7, [{src}] -> 0x77[7:0] @ src[7:0]
- ;------------------------------------------------------------------------------
- ; Rotate Left
- ROL A -> 0x2A[7:0]
- ROL [{src}] -> 0x26[7:0] @ src[7:0]
- ROL [{src},X] -> 0x36[7:0] @ src[7:0]
- ROL ({src}) -> 0x2E[7:0] @ src[7:0] @ src[15:8]
- ROL ({src},X) -> 0x3E[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Rotate Right
- ROR A -> 0x6A[7:0]
- ROR [{src}] -> 0x66[7:0] @ src[7:0]
- ROR [{src},X] -> 0x76[7:0] @ src[7:0]
- ROR ({src}) -> 0x6E[7:0] @ src[7:0] @ src[15:8]
- ROR ({src},X) -> 0x7E[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Return from Interrupt
- RETI -> 0x40[7:0]
- ;------------------------------------------------------------------------------
- ; Return from Subroutine
- RET -> 0x60[7:0]
- ;------------------------------------------------------------------------------
- ; Subtract with Carry
- SUB {src} -> 0xE9[7:0] @ src[7:0]
- SUB [{src}] -> 0xE5[7:0] @ src[7:0]
- SUB [{src},X] -> 0xF5[7:0] @ src[7:0]
- SUB ({src}) -> 0xED[7:0] @ src[7:0] @ src[15:8]
- SUB ({src},X) -> 0xFD[7:0] @ src[7:0] @ src[15:8]
- SUB ({src},Y) -> 0xF9[7:0] @ src[7:0] @ src[15:8]
- SUB ([{src},X]) -> 0xE1[7:0] @ src[7:0]
- SUB ([{src}],Y) -> 0xF1[7:0] @ src[7:0]
- SUB ([{src}]) -> 0xF2[7:0] @ src[7:0] ; +*
- ;------------------------------------------------------------------------------
- ; Set Carry
- SET C -> 0x38[7:0]
- ;------------------------------------------------------------------------------
- ; Set Decimal
- SET D -> 0xF8[7:0]
- ;------------------------------------------------------------------------------
- ; Set Interrupt Disable
- SET I -> 0x78[7:0]
- ;------------------------------------------------------------------------------
- ; Set Memory Bit ++
- SET B0, [{src}] -> 0x87[7:0] @ src[7:0]
- SET B1, [{src}] -> 0x97[7:0] @ src[7:0]
- SET B2, [{src}] -> 0xA7[7:0] @ src[7:0]
- SET B3, [{src}] -> 0xB7[7:0] @ src[7:0]
- SET B4, [{src}] -> 0xC7[7:0] @ src[7:0]
- SET B5, [{src}] -> 0xD7[7:0] @ src[7:0]
- SET B6, [{src}] -> 0xE7[7:0] @ src[7:0]
- SET B7, [{src}] -> 0xF7[7:0] @ src[7:0]
- ;------------------------------------------------------------------------------
- ; Store Accumulator
- LD [{src}], A -> 0x85[7:0] @ src[7:0]
- LD [{src},X], A -> 0x95[7:0] @ src[7:0]
- LD ({src}), A -> 0x8D[7:0] @ src[7:0] @ src[15:8]
- LD ({src},X), A -> 0x9D[7:0] @ src[7:0] @ src[15:8]
- LD ({src},Y), A -> 0x99[7:0] @ src[7:0] @ src[15:8]
- LD ([{src},X]), A -> 0x81[7:0] @ src[7:0]
- LD ([{src}],Y), A -> 0x91[7:0] @ src[7:0]
- LD ([{src}]), A -> 0x92[7:0] @ src[7:0] ; +*
- ;------------------------------------------------------------------------------
- ; Stop Processor (Halt) ++
- HALT -> 0xDB[7:0]
- ;------------------------------------------------------------------------------
- ; Store X
- LD [{src}], X -> 0x86[7:0] @ src[7:0]
- LD [{src},Y], X -> 0x96[7:0] @ src[7:0]
- LD ({src}), X -> 0x8E[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Store Y
- LD [{src}], Y -> 0x84[7:0] @ src[7:0]
- LD [{src},X], Y -> 0x94[7:0] @ src[7:0]
- LD ({src}), Y -> 0x8C[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Store Zero in Memory ++
- LD [{src}], NUL -> 0x64[7:0] @ src[7:0]
- LD [{src},X], NUL -> 0x74[7:0] @ src[7:0]
- LD ({src}), NUL -> 0x9C[7:0] @ src[7:0] @ src[15:8]
- LD ({src},X), NUL -> 0x9E[7:0] @ src[7:0] @ src[15:8]
- LD [{src}], 0 -> 0x64[7:0] @ src[7:0]
- LD [{src},X], 0 -> 0x74[7:0] @ src[7:0]
- LD ({src}), 0 -> 0x9C[7:0] @ src[7:0] @ src[15:8]
- LD ({src},X), 0 -> 0x9E[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Transfer Accumulator to X
- LD X, A -> 0xAA[7:0]
- ;------------------------------------------------------------------------------
- ; Transfer Accumulator to Y
- LD Y, A -> 0xA8[7:0]
- ;------------------------------------------------------------------------------
- ; Test and Reset memory Bit ++
- TRB [{src}] -> 0x14[7:0] @ src[7:0]
- TRB ({src}) -> 0x1C[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Test and Set memory Bit ++
- TSB [{src}] -> 0x04[7:0] @ src[7:0]
- TSB ({src}) -> 0x0C[7:0] @ src[7:0] @ src[15:8]
- ;------------------------------------------------------------------------------
- ; Transfer Stack Pointer to X
- LD X, SP -> 0xBA[7:0]
- ;------------------------------------------------------------------------------
- ; Transfer X to Accumulator
- LD A, X -> 0x8A[7:0]
- ;------------------------------------------------------------------------------
- ; Transfer X to Stack Pointer
- LD SP, X -> 0x9A[7:0]
- ;------------------------------------------------------------------------------
- ; Transfer Y to Accumulator
- LD A, Y -> 0x98[7:0]
- ;------------------------------------------------------------------------------
- ; Wait for Interrupt ++
- WAIT -> 0xCB[7:0]
- }
Add Comment
Please, Sign In to add comment