Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; 0x0000 = Emulator space and for your code uploading stuff.
- ; 0x8000 = VRAM (repeatedly uploaded by 0xC100-0xC403)
- ; 0xC000 = Buffer (RAM + code, code begins at 0xC800)
- ; (stack = 0xC080 - 0xC0FF)
- ; From 6502 code, buffer begins at $0000 and ends at $7FFF: first byte of code
- ; should be located at $1000.
- ; Stack is $0100-$01FF and VRAM location is $0200-$0503.
- ; A, X, Y are in the DCPU-16 A,X,Y
- ;[Z + Instructions]
- ;It doesn't support interrupts or BCD, but that's intentional.
- ;Illegal opcodes are handled as illegal instructions and are therefore not supported.
- SET PC, Run6502
- ;OPTIONS
- :Emu_IndJMPBug
- DAT 0x0000 ;Set to 0x0000 to not emulate the infamous indirect JMP bug: set to 0x0001 to do so.
- ;Setting to anything else will glitch indirect JMPs.
- ;UPLOADING CODE
- ;In this :Code label, write your own 6502-code uploading code.
- ;To be sure, you can replace every line between :Code and END OF UPLOADING CODE comment.
- ;Uploaded data should start at 0xC800 (DCPU-16 offset)
- :Code
- SET A, 0x0010
- SET B, 0
- SET C, 32
- SET X, 0xC800
- HWI [Floppy]
- SET A, 0x0004
- :FloppyLoop
- HWI [Floppy]
- IFN B, 0x0002
- SET PC, FloppyLoop
- SET PC, POP
- :FindFloppy
- HWN I
- :FindFloppyLoop
- HWQ I
- IFN A, 0x24C5
- SET PC, FindFloppyMatch
- SET [Floppy], I
- SET PC, POP
- :FindFloppyMatch
- SUB I, 1
- IFN I, 0xFFFF
- SET PC, FindFloppyLoop
- SET PC, End
- :Floppy
- DAT 0xFFFF ;0x008D
- ;END OF UPLOADING CODE
- ;EMULATOR CODE
- :Run6502
- IFE [Loop], 0x0001
- SET PC, InfLoop
- SET [Loop], 0x0001
- JSR Code
- JSR InitLEM
- SET A, 0
- SET X, 0
- SET Y, 0
- IAS InterruptRecv
- SET [6502PC], 0x0000
- :Run6502Instruction
- SET Z, [6502PC]
- DIV Z, 2
- ADD Z, 0xC800
- SET C, [Z]
- SET Z, [6502PC]
- MOD Z, 2
- SET B, 0x00FF
- IFE Z, 0
- SHL B, 8
- AND C, B
- IFE Z, 0
- SHR C, 8
- SET [Instruction], C
- SET I, [C+AddrPerInstruction]
- IFE I, 0x000F
- SET PC, IllegalInstruction
- SET I, [I+AddressingModes]
- SET [BAPC], I
- SET EX, 0
- SET Z, 1
- SET J, [Z+6502PC]
- JSR LoadPC
- SET [arg1], I
- ADD J, 1
- JSR LoadPC
- SET [arg2], I
- SET C, [Instruction]
- JSR [C+Instructions]
- IFE [6502B], 1
- SET PC, BRK
- ADD [6502PC], 1
- ADD [6502PC], [BAPC]
- SET PC, Run6502Instruction
- :IndJMPBug
- SET Z, J
- AND Z, 0xFF00
- ADD J, 1
- AND J, 0x00FF
- BOR J, Z
- SET PC, POP
- :JumpBranch
- ; B is tne input.
- IFG B, 0x7F
- BOR B, 0xFF00
- ADD [6502PC], B
- SET PC, POP
- :LoadRAM
- ; J is the address.
- ; I has the result.
- SET C, J
- MOD C, 2
- DIV J, 2
- ADD J, 0xC000
- SET I, [J]
- IFE C, 0
- SHR I, 8
- IFE C, 1
- AND I, 0x00FF
- SET PC, POP
- :StoreRAM
- ; J is the address.
- ; I is the value.
- SET C, J
- MOD C, 2
- DIV J, 2
- ADD J, 0xC000
- SET Z, [J]
- IFE C, 0
- AND Z, 0x00FF
- IFE C, 0
- SHL I, 8
- IFE C, 1
- AND Z, 0xFF00
- IFE C, 1
- AND I, 0x00FF
- BOR I, Z
- SET [J], I
- SET PC, POP
- :LoadPC
- ; J is the address.
- ; I has the result.
- SET C, J
- MOD C, 2
- DIV J, 2
- ADD J, 0xC800
- SET I, [J]
- IFE C, 0
- SHR I, 8
- IFE C, 1
- AND I, 0x00FF
- SET PC, POP
- :ADC
- ;I is what to add.
- SET C, [6502P]
- SET Z, C
- AND Z, 0x40
- AND C, 0x01
- ADD A, I
- ADD A, C
- SHL A, 8
- SET PUSH, EX
- SHR A, 8
- SET C, POP
- AND [6502P], 0xBE
- BOR [6502P], C
- JSR CheckA
- SET C, [6502P]
- AND C, 0x40
- IFN C, Z
- BOR [6502P], 0x40
- SET PC, POP
- :SBC
- ;I is what to subtract.
- SET C, [6502P]
- SET Z, C
- AND Z, 0x40
- AND C, 0x01
- XOR C, 0x01
- SUB A, I
- SUB A, C
- SHL A, 8
- SET PUSH, EX
- SHR A, 8
- SET C, POP
- AND [6502P], 0xBE
- BOR [6502P], C
- XOR [6502P], 0x01
- JSR CheckA
- SET C, [6502P]
- AND C, 0x40
- IFN C, Z
- BOR [6502P], 0x40
- JSR CheckA
- SET PC, POP
- :CMP
- ;I is what to compare
- SET PUSH, A
- SUB A, I
- JSR CheckA
- SET C, A
- SET A, POP
- BOR [6502P], 0x01
- IFL A, I
- AND [6502P], 0xFE
- SET PC, POP
- :CPX
- ;I is what to compare
- SET PUSH, X
- SUB X, I
- JSR CheckX
- SET C, X
- SET X, POP
- BOR [6502P], 0x01
- IFL X, I
- AND [6502P], 0xFE
- SET PC, POP
- :CPY
- ;I is what to compare
- SET PUSH, Y
- SUB Y, I
- JSR CheckY
- SET C, Y
- SET Y, POP
- BOR [6502P], 0x01
- IFL Y, I
- AND [6502P], 0xFE
- SET PC, POP
- :BRK
- ;Okay, it's over successfully!
- SET C, 0xF000
- SET J, Message2
- SET B, 0x0000
- JSR Print
- SET C, 0xF000
- SET Z, 6502PC
- SET B, 0x0020
- JSR PrintHex
- SET PC, End
- :InfLoop
- ;Oops!
- SET C, 0xF000
- SET J, Message3
- SET B, 0x0000
- JSR Print
- SET C, 0xF000
- SET Z, 6502PC
- SET B, 0x0020
- JSR PrintHex
- SET PC, End
- :IllegalInstruction
- ;Oops!
- SET C, 0xF000
- SET J, Message
- SET B, 0x0000
- JSR Print
- SET C, 0xF000
- SET Z, 6502PC
- SET B, 0x0020
- JSR PrintHex
- SET C, 0xF000
- SET Z, Instruction
- SET B, 0x003E
- JSR PrintHex
- SET C, 0xF000
- SET J, Message4
- SET B, 0x0043
- JSR Print
- :End
- SET PC, End
- :CheckA
- AND [6502P], 0x7D
- IFE A, 0
- BOR [6502P], 0x02
- IFG A, 127
- BOR [6502P], 0x80
- SET PC, POP
- :CheckI
- AND [6502P], 0x7D
- IFE I, 0
- BOR [6502P], 0x02
- IFG I, 127
- BOR [6502P], 0x80
- SET PC, POP
- :CheckX
- AND [6502P], 0x7D
- IFE X, 0
- BOR [6502P], 0x02
- IFG X, 127
- BOR [6502P], 0x80
- SET PC, POP
- :CheckY
- AND [6502P], 0x7D
- IFE Y, 0
- BOR [6502P], 0x02
- IFG Y, 127
- BOR [6502P], 0x80
- SET PC, POP
- :Confirm
- AND A, 0xFF
- AND X, 0xFF
- AND Y, 0xFF
- AND [6502P], 0xFF
- SET PC, POP
- :PushB
- SET C, [6502SP]
- SET J, [0x0100+C]
- SET I, B
- JSR StoreRAM
- SUB [6502SP], 1
- SET PC, POP
- :PushA
- SET C, [6502SP]
- SET J, [0x0100+C]
- SET I, A
- JSR StoreRAM
- SUB [6502SP], 1
- SET PC, POP
- :PushP
- SET C, [6502SP]
- SET J, [0x0100+C]
- SET I, [6502P]
- JSR StoreRAM
- SUB [6502SP], 1
- SET PC, POP
- :PullA
- ADD [6502SP], 1
- SET C, [6502SP]
- SET J, [0x0100+C]
- JSR LoadRAM
- SET A, I
- JSR CheckA
- SET PC, POP
- :PullP
- ADD [6502SP], 1
- SET C, [6502SP]
- SET J, [0x0100+C]
- JSR LoadRAM
- SET [6502P], I
- SET PC, POP
- :PullB
- ADD [6502SP], 1
- SET C, [6502SP]
- SET J, [0x0100+C]
- JSR LoadRAM
- SET B, I
- SET PC, POP
- :IndX
- ; Generate ($I,x) to J.
- SET C, I
- ADD C, X
- AND C, 0x00FF
- SET I, C
- JSR LoadRAM
- SET Z, J
- ADD I, 1
- JSR LoadRAM
- SHL J, 8
- BOR Z, J
- SET J, Z
- SET PC, POP
- :IndY
- ; Generate ($I),y to J.
- JSR LoadRAM
- SET Z, J
- ADD I, 1
- JSR LoadRAM
- SHL J, 8
- BOR Z, J
- SET J, Z
- ADD J, Y
- SET PC, POP
- :InitLEM
- JSR FindLEM
- IFE [LEM], 0
- SET PC, FoundNoLEM
- SET B, 0x1000
- SET A, 0
- HWI [LEM]
- SET B, 0
- SET A, 1
- HWI [LEM]
- SET A, 2
- HWI [LEM]
- SET B, 0x000B
- SET A, 3
- HWI [LEM]
- SET X, 0
- ;JSR LEMDelay
- SET A, 0x8000
- SET [LEMState], 0x0000
- SET PC, POP
- :FoundNoLEM
- SET [LEMState], 0x0001
- SET PC, POP
- :PrintHex
- SET PUSH, C
- SET J, [Z]
- SET I, J
- SHR I, 12
- AND I, 0x000F
- SET [HexMessage], [I+HexDigits]
- SET I, J
- SHR I, 8
- AND I, 0x000F
- SET [HexMessage1], [I+HexDigits]
- SET I, J
- SHR I, 4
- AND I, 0x000F
- SET [HexMessage2], [I+HexDigits]
- AND J, 0x000F
- SET [HexMessage3], [J+HexDigits]
- SET Z, HexMessage
- SET J, Z
- SET C, POP
- :Print
- SET Z, [J]
- AND Z, 0x007F
- BOR Z, C
- SET [0x8000+B], Z
- ADD B, 1
- ADD J, 1
- IFN [J], 0
- SET PC, Print
- SET PC, POP
- :InterruptRecv
- RFI X
- :LEMDelay
- ADD X, 1
- IFN 0, X
- SET PC, LEMDelay
- SET X, 0
- :LEMDelay2
- ADD X, 1
- IFN 0, X
- SET PC, LEMDelay2
- SET PC, POP
- :FindLEM
- HWN I
- :FindLEMLoop
- HWQ I
- IFN B, 0xF615
- SET PC, FindLEMMatch
- SET [LEM], I
- SET PC, POP
- :FindLEMMatch
- SUB I, 1
- IFN I, 0xFFFF
- SET PC, FindLEMLoop
- SET PC, POP
- :LEM
- DAT 0xFFFF ;0x008E
- ;0xFFFF = not set
- :LEMState
- DAT 0xFFFF ;0x0091
- ;0xFFFF = no init, 0x0000 = found and init,
- ;0x0001 = not found
- :AddrPerInstruction
- ; Addressing mode per instruction table.
- ; 0x000F (15) = Illegal Instruction
- ; 0x0000 = Implicit
- ; 0x0001 = Implicit Accumulator
- ; 0x0002 = Immediate
- ; 0x0003 = Zeropage
- ; 0x0004 = Zeropage, X index
- ; 0x0005 = Zeropage, Y index
- ; 0x0006 = Relative (branch)
- ; 0x0007 = Absolute
- ; 0x0008 = Absolute, X index
- ; 0x0009 = Absolute, Y index
- ; 0x000A (10) = Indirect
- ; 0x000B (11) = Indirect, (value + X)
- ; 0x000C (12) = (Indirect, value) + Y
- DAT 0, 11, 15, 15, 15, 3, 3, 15, 0, 2, 1, 15, 15, 7, 7, 15
- DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 12, 15, 15, 15, 8, 8, 15
- DAT 7, 11, 15, 15, 3, 3, 3, 15, 0, 2, 1, 15, 7, 7, 7, 15
- DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
- DAT 0, 11, 15, 15, 15, 4, 4, 15, 0, 2, 1, 15, 7, 7, 7, 15
- DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
- DAT 0, 11, 15, 15, 15, 3, 3, 15, 0, 2, 1, 15, 10, 7, 7, 15
- DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
- DAT 15, 11, 15, 15, 3, 3, 3, 15, 0, 15, 0, 15, 7, 7, 7, 15
- DAT 6, 12, 15, 15, 4, 4, 5, 15, 0, 9, 0, 15, 15, 8, 15, 15
- DAT 2, 11, 2, 15, 3, 3, 3, 15, 0, 2, 0, 15, 7, 7, 7, 15
- DAT 6, 12, 15, 15, 4, 4, 5, 15, 0, 9, 0, 15, 8, 8, 9, 15
- DAT 2, 11, 15, 15, 3, 3, 3, 15, 0, 2, 0, 15, 7, 7, 7, 15
- DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
- DAT 2, 11, 15, 15, 3, 3, 3, 15, 0, 2, 0, 15, 7, 7, 7, 15
- DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
- :Instructions
- ; The table of instruction subroutines, used with JSR.
- DAT i00, i01, iii, iii, iii, i05, i06, iii, i08, i09, i0a, iii, iii, i0d, i0e, iii
- DAT i10, i11, iii, iii, iii, i15, i16, iii, i18, i19, iii, iii, iii, i1d, i1e, iii
- DAT i20, i21, iii, iii, i24, i25, i26, iii, i28, i29, i2a, iii, i2c, i2d, i2e, iii
- DAT i30, i31, iii, iii, iii, i35, i36, iii, i38, i39, iii, iii, iii, i3d, i3e, iii
- DAT i40, i41, iii, iii, iii, i45, i46, iii, i48, i49, i4a, iii, i4c, i4d, i4e, iii
- DAT i50, i51, iii, iii, iii, i55, i56, iii, i58, i95, iii, iii, iii, i5d, i5e, iii
- DAT i60, i61, iii, iii, iii, i65, i66, iii, i68, i69, i6a, iii, i6c, i6d, i6e, iii
- DAT i70, i71, iii, iii, iii, i75, i76, iii, i78, i79, iii, iii, iii, i7d, i7e, iii
- DAT iii, i81, iii, iii, i84, i85, i86, iii, i88, iii, i8a, iii, i8c, i8d, i8e, iii
- DAT i90, i91, iii, iii, i94, i95, i96, iii, i98, i99, i9a, iii, iii, i9d, iii, iii
- DAT ia0, ia1, ia2, iii, ia4, ia5, ia6, iii, ia8, ia9, iaa, iii, iac, iad, iae, iii
- DAT ib0, ib1, iii, iii, ib4, ib5, ib6, iii, ib8, ib9, iba, iii, ibc, ibd, ibe, iii
- DAT ic0, ic1, iii, iii, ic4, ic5, ic6, iii, ic8, ic9, ica, iii, icc, icd, ice, iii
- DAT id0, id1, iii, iii, iii, id5, id6, iii, id8, id9, iii, iii, iii, idd, ide, iii
- DAT ie0, ie1, iii, iii, ie4, ie5, ie6, iii, ie8, ie9, iea, iii, iec, ied, iee, iii
- DAT if0, if1, iii, iii, iii, if5, if6, iii, if8, if9, iii, iii, iii, ifd, ife, iii
- :AddressingModes
- ; The amount of bytes - 1 a instruction with addressing mode takes.
- ; IMPLIC, ACCUM , IMMED , ZEROP , ZEROPX, ZEROPY, RL(BR), ABSOL
- DAT 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002
- ; ABSOLX, ABSOLY, INDIRC, ZPINDX, ZPINDY
- DAT 0x0002, 0x0002, 0x0002, 0x0001, 0x0001
- :6502P
- DAT 0x002C
- :6502SP
- DAT 0x0000
- ; Unspecified when booting. Setting it to FF is highly recommended, but
- ; this is done by the code itself (by LDX #$FF : TXS)
- :6502PC
- DAT 0x0000
- ; PC is as bytes from 0x1000 words from the beginning of the buffer.
- :6502B
- DAT 0x0000
- ; set to 0x0001 upon BRK
- :BAPC
- DAT 0x0000
- ; Bytes to be Added to PC
- :Loop
- DAT 0x0000
- ; set to 0x0001 upon init, to avoid infinite loop to beginning
- :HexMessage
- DAT "0"
- :HexMessage1
- DAT "0"
- :HexMessage2
- DAT "0"
- :HexMessage3
- DAT "0", 0x0000
- :Message
- DAT "ILLEGAL INSTRUCTION", 0x0000
- :Message2
- DAT "BRK STOP", 0x0000
- :Message3
- DAT "INTERNAL ERROR", 0x0000
- :Message4
- DAT "IS NOT AN INSTRUCTION", 0x0000
- :HexDigits
- DAT "0123456789ABCDEF"
- :Instruction
- DAT 0x0000
- :Arg1
- DAT 0x0000
- :Arg2
- DAT 0x0000
- :iii
- SET PC, IllegalInstruction
- :i00
- SET PC, BRK
- :i01
- SET I, [Arg1]
- JSR IndX
- JSR LoadRAM
- BOR A, I
- JSR CheckA
- SET PC, POP
- :i05
- SET J, [Arg1]
- JSR LoadRAM
- BOR A, I
- JSR CheckA
- SET PC, POP
- :i06
- SET J, [Arg1]
- JSR LoadRAM
- SET EX, 0
- SHL I, 1
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, [Arg1]
- JSR StoreRAM
- SET PC, POP
- :i08
- JSR PushP
- SET PC, POP
- :i09
- BOR A, [Arg1]
- JSR CheckA
- SET PC, POP
- :i0a
- SET EX, 0
- SHL A, 1
- AND [6502P], 0xFE
- BOR [6502P], EX
- JSR CheckA
- SET PC, POP
- :i0d
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- JSR LoadRAM
- BOR A, I
- JSR CheckA
- SET PC, POP
- SET PC, POP
- :i0e
- SET Z, [Arg2]
- SHL Z, 8
- SET B, [Arg1]
- BOR B, Z
- SET J, B
- JSR LoadRAM
- SET EX, 0
- SHL I, 1
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, B
- JSR StoreRAM
- SET PC, POP
- :i10
- SET Z, [6502P]
- AND Z, 0x80
- SET B, [arg1]
- IFE Z, 0
- JSR JumpBranch
- SET PC, POP
- :i11
- SET I, [Arg1]
- JSR IndY
- JSR LoadRAM
- BOR A, I
- SET PC, POP
- :i15
- SET J, [Arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- BOR A, I
- JSR CheckA
- SET PC, POP
- :i16
- SET B, [Arg1]
- ADD B, X
- AND B, 0xFF
- SET J, B
- JSR LoadRAM
- SET EX, 0
- SHL I, 1
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, B
- JSR StoreRAM
- SET PC, POP
- :i18
- AND [6502P], 0xFE
- SET PC, POP
- :i19
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, Y
- JSR LoadRAM
- BOR A, I
- JSR CheckA
- SET PC, POP
- :i1d
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, X
- JSR LoadRAM
- BOR A, I
- JSR CheckA
- SET PC, POP
- :i1e
- SET Z, [Arg2]
- SHL Z, 8
- SET B, [Arg1]
- BOR B, Z
- SET J, B
- ADD B, X
- JSR LoadRAM
- SET EX, 0
- SHL I, 1
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, B
- JSR StoreRAM
- SET PC, POP
- SET PC, POP
- :i20
- SET Z, [6502PC]
- ADD Z, 2
- SET B, Z
- AND B, 0x00FF
- JSR PushB
- SET B, Z
- AND B, 0xFF00
- SHR B, 8
- JSR PushB
- SET B, [arg1]
- SET C, [arg2]
- SHL C, 8
- BOR B, C
- SUB B, 3
- SET [6502PC], B
- SET PC, POP
- :i21
- SET I, [Arg1]
- JSR IndX
- JSR LoadRAM
- AND A, I
- JSR CheckA
- SET PC, POP
- :i24
- ;nv-bdizc
- SET J, [Arg1]
- JSR LoadRAM
- SET C, A
- AND C, I
- AND [6502P], 0x3D
- IFE C, 0
- BOR [6502P], 0x02
- SET B, I
- AND B, 0x80
- IFN B, 0
- BOR [6502P], 0x80
- AND I, 0x40
- IFN I, 0
- BOR [6502P], 0x40
- SET PC, POP
- :i25
- SET J, [Arg1]
- JSR LoadRAM
- AND A, I
- JSR CheckA
- SET PC, POP
- :i26
- SET C, [6502P]
- AND C, 0x01
- SET J, [Arg1]
- JSR LoadRAM
- SET EX, 0
- SHL I, 1
- BOR I, C
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, [Arg1]
- JSR StoreRAM
- SET PC, POP
- :i28
- JSR PullP
- SET PC, POP
- :i29
- AND A, [Arg1]
- JSR CheckA
- SET PC, POP
- :i2a
- SET C, [6502P]
- AND C, 0x01
- SET EX, 0
- SHL A, 1
- BOR A, C
- AND [6502P], 0xFE
- BOR [6502P], EX
- JSR CheckA
- SET PC, POP
- :i2c
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- JSR LoadRAM
- SET C, A
- AND C, I
- AND [6502P], 0x3D
- IFE C, 0
- BOR [6502P], 0x02
- SET B, I
- AND B, 0x80
- IFN B, 0
- BOR [6502P], 0x80
- AND I, 0x40
- IFN I, 0
- BOR [6502P], 0x40
- SET PC, POP
- :i2d
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- JSR LoadRAM
- AND A, I
- JSR CheckA
- SET PC, POP
- :i2e
- SET C, [6502P]
- AND C, 0x01
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- JSR LoadRAM
- SET EX, 0
- SHL I, 1
- BOR I, C
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, [Arg1]
- JSR StoreRAM
- SET PC, POP
- :i30
- SET Z, [6502P]
- AND Z, 0x80
- SET B, [arg1]
- IFN Z, 0
- JSR JumpBranch
- SET PC, POP
- :i31
- SET I, [Arg1]
- JSR IndY
- JSR LoadRAM
- AND A, I
- JSR CheckA
- SET PC, POP
- :i35
- SET J, [Arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- AND A, I
- JSR CheckA
- SET PC, POP
- :i36
- SET C, [6502P]
- AND C, 0x01
- SET J, [Arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- SET EX, 0
- SHL I, 1
- BOR I, C
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, [Arg1]
- JSR StoreRAM
- SET PC, POP
- :i38
- BOR [6502P], 0x01
- SET PC, POP
- :i39
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, Y
- JSR LoadRAM
- AND A, I
- JSR CheckA
- SET PC, POP
- :i3d
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, X
- JSR LoadRAM
- AND A, I
- JSR CheckA
- SET PC, POP
- :i3e
- SET C, [6502P]
- AND C, 0x01
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, X
- JSR LoadRAM
- SET EX, 0
- SHL I, 1
- BOR I, C
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, [Arg1]
- JSR StoreRAM
- SET PC, POP
- :i40
- ; Interrupts aren't supported.
- SET PC, POP
- :i41
- SET I, [Arg1]
- JSR IndX
- JSR LoadRAM
- XOR A, I
- JSR CheckA
- SET PC, POP
- :i45
- SET J, [Arg1]
- JSR LoadRAM
- XOR A, I
- JSR CheckA
- SET PC, POP
- :i46
- SET J, [Arg1]
- JSR LoadRAM
- SET EX, 0
- SHR I, 1
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, [Arg1]
- JSR StoreRAM
- SET PC, POP
- :i48
- JSR PushA
- SET PC, POP
- :i49
- XOR A, [Arg1]
- JSR CheckA
- SET PC, POP
- :i4a
- SET EX, 0
- SHR A, 1
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- JSR CheckA
- SET PC, POP
- :i4c
- SET Z, [arg2]
- SHL Z, 8
- SET J, [arg1]
- BOR J, Z
- SET [6502PC], J
- SUB [6502PC], 3
- SET PC, POP
- :i4d
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- JSR LoadRAM
- XOR A, I
- JSR CheckA
- SET PC, POP
- :i4e
- SET Z, [Arg2]
- SHL Z, 8
- SET B, [Arg1]
- BOR B, Z
- SET J, B
- JSR LoadRAM
- SET EX, 0
- SHR I, 1
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, B
- JSR StoreRAM
- SET PC, POP
- :i50
- SET Z, [6502P]
- AND Z, 0x40
- SET B, [arg1]
- IFE Z, 0
- JSR JumpBranch
- SET PC, POP
- :i51
- SET I, [Arg1]
- JSR IndY
- JSR LoadRAM
- XOR A, I
- JSR CheckA
- SET PC, POP
- :i55
- SET J, [Arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- XOR A, I
- JSR CheckA
- SET PC, POP
- :i56
- SET J, [Arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- SET EX, 0
- SHR I, 1
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, [Arg1]
- JSR StoreRAM
- SET PC, POP
- :i58
- AND [6502P], 0xFB
- SET PC, POP
- :i59
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, Y
- JSR LoadRAM
- XOR A, I
- JSR CheckA
- SET PC, POP
- :i5d
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, X
- JSR LoadRAM
- XOR A, I
- JSR CheckA
- SET PC, POP
- :i5e
- SET Z, [Arg2]
- SHL Z, 8
- SET B, [Arg1]
- BOR B, Z
- SET J, B
- ADD J, X
- JSR LoadRAM
- SET EX, 0
- SHR I, 1
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, B
- JSR StoreRAM
- SET PC, POP
- :i60
- JSR PullB ; high byte
- SET Z, B
- JSR PullB ; low byte
- SHL Z, 8
- BOR B, Z
- SET [6502PC], B
- SET PC, POP
- :i61
- SET I, [Arg1]
- JSR IndX
- JSR LoadRAM
- JSR ADC
- JSR CheckA
- SET PC, POP
- :i65
- SET J, [Arg1]
- JSR LoadRAM
- JSR ADC
- JSR CheckA
- SET PC, POP
- :i66
- SET C, [6502P]
- AND C, 0x01
- SHL C, 7
- SET J, [Arg1]
- JSR LoadRAM
- SET EX, 0
- SHR I, 1
- BOR I, C
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, [Arg1]
- JSR StoreRAM
- SET PC, POP
- :i68
- JSR PullA
- SET PC, POP
- :i69
- SET I, [arg1]
- JSR ADC
- JSR CheckA
- SET PC, POP
- :i6a
- SET C, [6502P]
- AND C, 0x01
- SHL C, 7
- SET EX, 0
- SHR A, 1
- BOR I, C
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- JSR CheckA
- SET PC, POP
- :i6c
- SET Z, [arg2]
- SHL Z, 8
- SET J, [arg1]
- BOR J, Z
- JSR LoadRAM
- SET B, I
- IFE [Emu_IndJMPBug], 0
- ADD J, 1
- IFE [Emu_IndJMPBug], 1
- JSR IndJMPBug
- JSR LoadRAM
- SET Z, I
- SHL Z, 8
- BOR B, Z
- SET [6502PC], B
- SUB [6502PC], 3
- SET PC, POP
- :i6d
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- JSR LoadRAM
- JSR ADC
- JSR CheckA
- SET PC, POP
- :i6e
- SET B, [arg1]
- SET Z, [arg2]
- SHL Z, 8
- BOR B, Z
- SET C, [6502P]
- AND C, 0x01
- SHL C, 7
- SET J, B
- JSR LoadRAM
- SET EX, 0
- SHR I, 1
- BOR I, C
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, B
- JSR StoreRAM
- SET PC, POP
- :i70
- SET Z, [6502P]
- AND Z, 0x40
- SET B, [arg1]
- IFN Z, 0
- JSR JumpBranch
- SET PC, POP
- :i71
- SET I, [Arg1]
- JSR IndY
- JSR LoadRAM
- JSR ADC
- JSR CheckA
- SET PC, POP
- :i75
- SET J, [Arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- JSR ADC
- JSR CheckA
- SET PC, POP
- :i76
- SET C, [6502P]
- AND C, 0x01
- SHL C, 7
- SET J, [Arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- SET EX, 0
- SHR I, 1
- BOR I, C
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, [Arg1]
- JSR StoreRAM
- SET PC, POP
- :i78
- BOR [6502P], 0x04
- SET PC, POP
- :i79
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, Y
- JSR LoadRAM
- JSR ADC
- JSR CheckA
- SET PC, POP
- :i7d
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, X
- JSR LoadRAM
- JSR ADC
- JSR CheckA
- SET PC, POP
- :i7e
- SET B, [arg1]
- SET Z, [arg2]
- SHL Z, 8
- BOR B, Z
- SET C, [6502P]
- AND C, 0x01
- SHL C, 7
- SET J, B
- ADD J, X
- JSR LoadRAM
- SET EX, 0
- SHR I, 1
- BOR I, C
- SHR EX, 15
- AND [6502P], 0xFE
- BOR [6502P], EX
- SET J, B
- JSR StoreRAM
- SET PC, POP
- :i81
- SET I, [Arg1]
- JSR IndX
- SET J, I
- SET I, A
- JSR StoreRAM
- SET PC, POP
- :i84
- SET J, [arg1]
- SET I, Y
- JSR StoreRAM
- SET PC, POP
- :i85
- SET J, [arg1]
- SET I, A
- JSR StoreRAM
- SET PC, POP
- :i86
- SET J, [arg1]
- SET I, X
- JSR StoreRAM
- SET PC, POP
- :i88
- SUB Y, 1
- AND Y, 0xFF
- JSR CheckY
- SET PC, POP
- :i8a
- SET A, X
- JSR CheckA
- SET PC, POP
- :i8c
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- SET I, Y
- JSR StoreRAM
- SET PC, POP
- :i8d
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- SET I, A
- JSR StoreRAM
- SET PC, POP
- :i8e
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- SET I, X
- JSR StoreRAM
- SET PC, POP
- :i90
- SET Z, [6502P]
- AND Z, 0x01
- SET B, [arg1]
- IFE Z, 0
- JSR JumpBranch
- SET PC, POP
- :i91
- SET I, [Arg1]
- JSR IndY
- SET J, I
- SET I, A
- JSR StoreRAM
- SET PC, POP
- :i94
- SET J, [arg1]
- ADD J, X
- AND J, 0xFF
- SET I, Y
- JSR StoreRAM
- SET PC, POP
- :i95
- SET J, [arg1]
- ADD J, X
- AND J, 0xFF
- SET I, A
- JSR StoreRAM
- SET PC, POP
- :i96
- SET J, [arg1]
- ADD J, Y
- AND J, 0xFF
- SET I, X
- JSR StoreRAM
- SET PC, POP
- :i98
- SET A, Y
- JSR CheckA
- SET PC, POP
- :i99
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- ADD J, Y
- SET I, A
- JSR StoreRAM
- SET PC, POP
- :i9a
- SET [6502SP], X
- SET PC, POP
- :i9d
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- ADD J, X
- SET I, A
- JSR StoreRAM
- SET PC, POP
- :ia0
- SET Y, [arg1]
- JSR CheckY
- SET PC, POP
- :ia1
- SET I, [Arg1]
- JSR IndX
- JSR LoadRAM
- SET A, I
- JSR CheckA
- SET PC, POP
- :ia2
- SET X, [arg1]
- JSR CheckX
- SET PC, POP
- :ia4
- SET J, [arg1]
- JSR LoadRAM
- SET Y, I
- JSR CheckY
- SET PC, POP
- :ia5
- SET J, [arg1]
- JSR LoadRAM
- SET A, I
- JSR CheckA
- SET PC, POP
- :ia6
- SET J, [arg1]
- JSR LoadRAM
- SET X, I
- JSR CheckX
- SET PC, POP
- :ia8
- SET Y, A
- JSR CheckY
- SET PC, POP
- :ia9
- SET A, [arg1]
- JSR CheckA
- SET PC, POP
- :iaa
- SET X, A
- JSR CheckX
- SET PC, POP
- :iac
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- JSR LoadRAM
- SET Y, I
- JSR CheckY
- SET PC, POP
- :iad
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- JSR LoadRAM
- SET A, I
- JSR CheckA
- SET PC, POP
- :iae
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- JSR LoadRAM
- SET X, I
- JSR CheckX
- SET PC, POP
- :ib0
- SET Z, [6502P]
- AND Z, 0x01
- SET B, [arg1]
- IFN Z, 0
- JSR JumpBranch
- SET PC, POP
- :ib1
- SET I, [Arg1]
- JSR IndY
- JSR LoadRAM
- SET A, I
- JSR CheckA
- SET PC, POP
- :ib4
- SET J, [arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- SET Y, I
- JSR CheckY
- SET PC, POP
- :ib5
- SET J, [arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- SET A, I
- JSR CheckA
- SET PC, POP
- :ib6
- SET J, [arg1]
- ADD J, Y
- AND J, 0xFF
- JSR LoadRAM
- SET X, I
- JSR CheckX
- SET PC, POP
- :ib8
- AND [6502P], 0xbf
- SET PC, POP
- :ib9
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- ADD J, Y
- JSR LoadRAM
- SET A, I
- JSR CheckA
- SET PC, POP
- :iba
- SET X, [6502SP]
- JSR CheckX
- SET PC, POP
- :ibc
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- ADD J, X
- JSR LoadRAM
- SET Y, I
- JSR CheckY
- SET PC, POP
- :ibd
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- ADD J, X
- JSR LoadRAM
- SET A, I
- JSR CheckA
- SET PC, POP
- :ibe
- SET C, [arg2]
- SHL C, 8
- SET J, [arg1]
- BOR J, C
- ADD J, Y
- JSR LoadRAM
- SET X, I
- JSR CheckX
- SET PC, POP
- :ic0
- SET I, [arg1]
- JSR CPY
- SET PC, POP
- :ic1
- SET I, [Arg1]
- JSR IndX
- SET I, J
- JSR CMP
- SET PC, POP
- :ic4
- SET J, [arg1]
- JSR LoadRAM
- JSR CPY
- SET PC, POP
- :ic5
- SET J, [arg1]
- JSR LoadRAM
- JSR CMP
- SET PC, POP
- :ic6
- SET J, [arg1]
- JSR LoadRAM
- SUB I, 1
- AND I, 0xFF
- JSR CheckI
- JSR StoreRAM
- SET PC, POP
- :ic8
- ADD Y, 1
- AND Y, 0xFF
- JSR CheckY
- SET PC, POP
- :ic9
- SET I, [arg1]
- JSR CMP
- SET PC, POP
- :ica
- SUB X, 1
- AND X, 0xFF
- JSR CheckX
- SET PC, POP
- :icc
- SET J, [arg1]
- SET B, [arg2]
- SHL B, 8
- BOR J, B
- JSR LoadRAM
- JSR CPY
- SET PC, POP
- :icd
- SET J, [arg1]
- SET B, [arg2]
- SHL B, 8
- BOR J, B
- JSR LoadRAM
- JSR CMP
- SET PC, POP
- :ice
- SET J, [arg1]
- SET B, [arg2]
- SHL B, 8
- BOR J, B
- JSR LoadRAM
- SUB I, 1
- AND I, 0xFF
- JSR CheckI
- JSR StoreRAM
- SET PC, POP
- :id0
- SET Z, [6502P]
- AND Z, 0x02
- SET B, [arg1]
- IFE Z, 0
- JSR JumpBranch
- SET PC, POP
- :id1
- SET I, [Arg1]
- JSR IndY
- SET I, J
- JSR CMP
- SET PC, POP
- :id5
- SET J, [arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- JSR CMP
- SET PC, POP
- :id6
- SET J, [arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- SUB I, 1
- AND I, 0xFF
- JSR CheckI
- JSR StoreRAM
- SET PC, POP
- :id8
- AND [6502P], 0xef
- SET PC, POP
- :id9
- SET J, [arg1]
- SET B, [arg2]
- SHL B, 8
- BOR J, B
- ADD J, Y
- JSR LoadRAM
- JSR CMP
- SET PC, POP
- :idd
- SET J, [arg1]
- SET B, [arg2]
- SHL B, 8
- BOR J, B
- ADD J, X
- JSR LoadRAM
- JSR CMP
- SET PC, POP
- :ide
- SET J, [arg1]
- SET B, [arg2]
- SHL B, 8
- BOR J, B
- ADD J, X
- JSR LoadRAM
- SUB I, 1
- AND I, 0xFF
- JSR CheckI
- JSR StoreRAM
- SET PC, POP
- :ie0
- SET I, [arg1]
- JSR CPX
- SET PC, POP
- :ie1
- SET I, [Arg1]
- JSR IndX
- JSR LoadRAM
- JSR SBC
- JSR CheckA
- SET PC, POP
- :ie4
- SET J, [arg1]
- JSR LoadRAM
- JSR CPX
- SET PC, POP
- :ie5
- SET J, [Arg1]
- JSR LoadRAM
- JSR SBC
- JSR CheckA
- SET PC, POP
- :ie6
- SET J, [arg1]
- JSR LoadRAM
- ADD I, 1
- AND I, 0xFF
- JSR CheckI
- JSR StoreRAM
- SET PC, POP
- :ie8
- ADD X, 1
- AND X, 0xFF
- JSR CheckX
- SET PC, POP
- :ie9
- SET I, [arg1]
- JSR SBC
- JSR CheckA
- SET PC, POP
- :iea
- ADD 0, 0
- ADD 0, 0
- ADD 0, 0
- SET PC, POP
- :iec
- SET J, [arg1]
- SET B, [arg2]
- SHL B, 8
- BOR J, B
- JSR LoadRAM
- JSR CPX
- SET PC, POP
- :ied
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- JSR LoadRAM
- JSR SBC
- JSR CheckA
- SET PC, POP
- :iee
- SET J, [arg1]
- SET B, [arg2]
- SHL B, 8
- BOR J, B
- JSR LoadRAM
- ADD I, 1
- AND I, 0xFF
- JSR CheckI
- JSR StoreRAM
- SET PC, POP
- :if0
- SET Z, [6502P]
- AND Z, 0x02
- SET B, [arg1]
- IFN Z, 0
- JSR JumpBranch
- SET PC, POP
- :if1
- SET I, [Arg1]
- JSR IndY
- JSR LoadRAM
- JSR SBC
- JSR CheckA
- SET PC, POP
- :if5
- SET J, [Arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- JSR SBC
- JSR CheckA
- SET PC, POP
- :if6
- SET J, [arg1]
- ADD J, X
- AND J, 0xFF
- JSR LoadRAM
- ADD I, 1
- AND I, 0xFF
- JSR CheckI
- JSR StoreRAM
- SET PC, POP
- :if8
- BOR [6502P], 0x10
- SET PC, POP
- :if9
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, Y
- JSR LoadRAM
- JSR SBC
- JSR CheckA
- SET PC, POP
- :ifd
- SET Z, [Arg2]
- SHL Z, 8
- SET J, [Arg1]
- BOR J, Z
- ADD J, X
- JSR LoadRAM
- JSR SBC
- JSR CheckA
- SET PC, POP
- :ife
- SET J, [arg1]
- SET B, [arg2]
- SHL B, 8
- BOR J, B
- ADD J, X
- JSR LoadRAM
- ADD I, 1
- AND I, 0xFF
- JSR CheckI
- JSR StoreRAM
- SET PC, POP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement