Advertisement
Guest User

6502 emulator in DCPU-16... Version Alpha 1

a guest
Jun 15th, 2013
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
DCPU-16 31.40 KB | None | 0 0
  1. ; 0x0000 = Emulator space and for your code uploading stuff.
  2. ; 0x8000 = VRAM (repeatedly uploaded by 0xC100-0xC403)
  3. ; 0xC000 = Buffer (RAM + code, code begins at 0xC800)
  4. ; (stack = 0xC080 - 0xC0FF)
  5. ; From 6502 code, buffer begins at $0000 and ends at $7FFF: first byte of code
  6. ; should be located at $1000.
  7. ; Stack is $0100-$01FF and VRAM location is $0200-$0503.
  8. ; A, X, Y are in the DCPU-16 A,X,Y
  9.  
  10. ;[Z + Instructions]
  11.  
  12. ;It doesn't support interrupts or BCD, but that's intentional.
  13. ;Illegal opcodes are handled as illegal instructions and are therefore not supported.
  14.  
  15. SET PC, Run6502
  16. ;OPTIONS
  17. :Emu_IndJMPBug
  18.     DAT 0x0000 ;Set to 0x0000 to not emulate the infamous indirect JMP bug: set to 0x0001 to do so.
  19.                ;Setting to anything else will glitch indirect JMPs.
  20. ;UPLOADING CODE
  21.                ;In this :Code label, write your own 6502-code uploading code.
  22.                ;To be sure, you can replace every line between :Code and END OF UPLOADING CODE comment.
  23.                ;Uploaded data should start at 0xC800 (DCPU-16 offset)
  24. :Code
  25.     SET A, 0x0010
  26.     SET B, 0
  27.     SET C, 32
  28.     SET X, 0xC800
  29.     HWI [Floppy]
  30.     SET A, 0x0004
  31. :FloppyLoop
  32.     HWI [Floppy]
  33.     IFN B, 0x0002
  34.      SET PC, FloppyLoop
  35.     SET PC, POP
  36.  
  37. :FindFloppy
  38.         HWN I
  39. :FindFloppyLoop
  40.         HWQ I
  41.         IFN A, 0x24C5
  42.             SET PC, FindFloppyMatch
  43.         SET [Floppy], I
  44.         SET PC, POP
  45. :FindFloppyMatch
  46.         SUB I, 1
  47.         IFN I, 0xFFFF
  48.             SET PC, FindFloppyLoop
  49.        
  50.         SET PC, End
  51.        
  52.  
  53. :Floppy
  54.         DAT 0xFFFF ;0x008D
  55. ;END OF UPLOADING CODE
  56.  
  57. ;EMULATOR CODE
  58.  
  59.  
  60. :Run6502
  61.     IFE [Loop], 0x0001
  62.      SET PC, InfLoop
  63.     SET [Loop], 0x0001
  64.     JSR Code
  65.     JSR InitLEM
  66.     SET A, 0
  67.     SET X, 0
  68.     SET Y, 0
  69.     IAS InterruptRecv
  70.     SET [6502PC], 0x0000
  71.  
  72. :Run6502Instruction
  73.     SET Z, [6502PC]
  74.     DIV Z, 2
  75.     ADD Z, 0xC800
  76.     SET C, [Z]
  77.     SET Z, [6502PC]
  78.     MOD Z, 2
  79.     SET B, 0x00FF
  80.     IFE Z, 0
  81.      SHL B, 8
  82.     AND C, B
  83.     IFE Z, 0
  84.      SHR C, 8
  85.     SET [Instruction], C
  86.     SET I, [C+AddrPerInstruction]
  87.     IFE I, 0x000F
  88.      SET PC, IllegalInstruction
  89.     SET I, [I+AddressingModes]
  90.     SET [BAPC], I
  91.     SET EX, 0
  92.     SET Z, 1
  93.     SET J, [Z+6502PC]
  94.     JSR LoadPC
  95.     SET [arg1], I
  96.     ADD J, 1
  97.     JSR LoadPC
  98.     SET [arg2], I
  99.     SET C, [Instruction]
  100.     JSR [C+Instructions]
  101.     IFE [6502B], 1
  102.      SET PC, BRK
  103.     ADD [6502PC], 1
  104.     ADD [6502PC], [BAPC]
  105.    
  106.  
  107.     SET PC, Run6502Instruction
  108.  
  109.  
  110. :IndJMPBug
  111.     SET Z, J
  112.     AND Z, 0xFF00
  113.     ADD J, 1
  114.     AND J, 0x00FF
  115.     BOR J, Z
  116.     SET PC, POP
  117. :JumpBranch
  118.     ; B is tne input.
  119.     IFG B, 0x7F
  120.      BOR B, 0xFF00
  121.     ADD [6502PC], B
  122.     SET PC, POP
  123.  
  124. :LoadRAM
  125. ; J is the address.
  126. ; I has the result.
  127.     SET C, J
  128.     MOD C, 2
  129.     DIV J, 2
  130.     ADD J, 0xC000
  131.     SET I, [J]
  132.     IFE C, 0
  133.      SHR I, 8
  134.     IFE C, 1
  135.      AND I, 0x00FF
  136.     SET PC, POP
  137. :StoreRAM
  138. ; J is the address.
  139. ; I is the value.
  140.     SET C, J
  141.     MOD C, 2
  142.     DIV J, 2
  143.     ADD J, 0xC000
  144.     SET Z, [J]
  145.     IFE C, 0
  146.      AND Z, 0x00FF
  147.     IFE C, 0
  148.      SHL I, 8
  149.     IFE C, 1
  150.      AND Z, 0xFF00
  151.     IFE C, 1
  152.      AND I, 0x00FF
  153.     BOR I, Z
  154.     SET [J], I
  155.     SET PC, POP
  156. :LoadPC
  157. ; J is the address.
  158. ; I has the result.
  159.     SET C, J
  160.     MOD C, 2
  161.     DIV J, 2
  162.     ADD J, 0xC800
  163.     SET I, [J]
  164.     IFE C, 0
  165.      SHR I, 8
  166.     IFE C, 1
  167.      AND I, 0x00FF
  168.     SET PC, POP
  169.  
  170. :ADC
  171.     ;I is what to add.
  172.     SET C, [6502P]
  173.     SET Z, C
  174.     AND Z, 0x40
  175.     AND C, 0x01
  176.     ADD A, I
  177.     ADD A, C
  178.     SHL A, 8
  179.     SET PUSH, EX
  180.     SHR A, 8
  181.     SET C, POP
  182.     AND [6502P], 0xBE
  183.     BOR [6502P], C
  184.     JSR CheckA
  185.     SET C, [6502P]
  186.     AND C, 0x40
  187.     IFN C, Z
  188.      BOR [6502P], 0x40
  189.     SET PC, POP
  190.  
  191. :SBC
  192.     ;I is what to subtract.
  193.     SET C, [6502P]
  194.     SET Z, C
  195.     AND Z, 0x40
  196.     AND C, 0x01
  197.     XOR C, 0x01
  198.     SUB A, I
  199.     SUB A, C
  200.     SHL A, 8
  201.     SET PUSH, EX
  202.     SHR A, 8
  203.     SET C, POP
  204.     AND [6502P], 0xBE
  205.     BOR [6502P], C
  206.     XOR [6502P], 0x01
  207.     JSR CheckA
  208.     SET C, [6502P]
  209.     AND C, 0x40
  210.     IFN C, Z
  211.      BOR [6502P], 0x40
  212.     JSR CheckA
  213.    
  214.     SET PC, POP
  215.  
  216. :CMP
  217.     ;I is what to compare
  218.     SET PUSH, A    
  219.     SUB A, I
  220.     JSR CheckA
  221.     SET C, A
  222.     SET A, POP
  223.     BOR [6502P], 0x01
  224.     IFL A, I
  225.      AND [6502P], 0xFE
  226.     SET PC, POP
  227.  
  228. :CPX
  229.     ;I is what to compare
  230.     SET PUSH, X
  231.     SUB X, I
  232.     JSR CheckX
  233.     SET C, X
  234.     SET X, POP
  235.     BOR [6502P], 0x01
  236.     IFL X, I
  237.      AND [6502P], 0xFE
  238.     SET PC, POP
  239.  
  240. :CPY
  241.     ;I is what to compare
  242.     SET PUSH, Y
  243.     SUB Y, I
  244.     JSR CheckY
  245.     SET C, Y
  246.     SET Y, POP
  247.     BOR [6502P], 0x01
  248.     IFL Y, I
  249.      AND [6502P], 0xFE
  250.     SET PC, POP
  251.  
  252. :BRK
  253.     ;Okay, it's over successfully!
  254.     SET C, 0xF000
  255.     SET J, Message2
  256.     SET B, 0x0000
  257.     JSR Print
  258.  
  259.     SET C, 0xF000
  260.     SET Z, 6502PC
  261.     SET B, 0x0020
  262.     JSR PrintHex
  263.  
  264.     SET PC, End
  265.  
  266. :InfLoop
  267.     ;Oops!
  268.     SET C, 0xF000
  269.     SET J, Message3
  270.     SET B, 0x0000
  271.     JSR Print
  272.  
  273.     SET C, 0xF000
  274.     SET Z, 6502PC
  275.     SET B, 0x0020
  276.     JSR PrintHex
  277.     SET PC, End
  278.  
  279. :IllegalInstruction
  280.     ;Oops!
  281.     SET C, 0xF000
  282.     SET J, Message
  283.     SET B, 0x0000
  284.     JSR Print
  285.  
  286.     SET C, 0xF000
  287.     SET Z, 6502PC
  288.     SET B, 0x0020
  289.     JSR PrintHex
  290.  
  291.     SET C, 0xF000
  292.     SET Z, Instruction
  293.     SET B, 0x003E
  294.     JSR PrintHex
  295.  
  296.     SET C, 0xF000
  297.     SET J, Message4
  298.     SET B, 0x0043
  299.     JSR Print
  300. :End
  301.     SET PC, End
  302.  
  303. :CheckA
  304.     AND [6502P], 0x7D
  305.     IFE A, 0
  306.      BOR [6502P], 0x02
  307.     IFG A, 127
  308.      BOR [6502P], 0x80
  309.     SET PC, POP
  310.  
  311. :CheckI
  312.     AND [6502P], 0x7D
  313.     IFE I, 0
  314.      BOR [6502P], 0x02
  315.     IFG I, 127
  316.      BOR [6502P], 0x80
  317.     SET PC, POP
  318.  
  319. :CheckX
  320.     AND [6502P], 0x7D
  321.     IFE X, 0
  322.      BOR [6502P], 0x02
  323.     IFG X, 127
  324.      BOR [6502P], 0x80
  325.     SET PC, POP
  326.  
  327. :CheckY
  328.     AND [6502P], 0x7D
  329.     IFE Y, 0
  330.      BOR [6502P], 0x02
  331.     IFG Y, 127
  332.      BOR [6502P], 0x80
  333.     SET PC, POP
  334.  
  335. :Confirm
  336.     AND A, 0xFF
  337.     AND X, 0xFF
  338.     AND Y, 0xFF
  339.     AND [6502P], 0xFF
  340.     SET PC, POP
  341.  
  342. :PushB
  343.     SET C, [6502SP]
  344.     SET J, [0x0100+C]
  345.     SET I, B
  346.     JSR StoreRAM
  347.     SUB [6502SP], 1
  348.     SET PC, POP
  349. :PushA
  350.     SET C, [6502SP]
  351.     SET J, [0x0100+C]
  352.     SET I, A
  353.     JSR StoreRAM
  354.     SUB [6502SP], 1
  355.     SET PC, POP
  356. :PushP
  357.     SET C, [6502SP]
  358.     SET J, [0x0100+C]
  359.     SET I, [6502P]
  360.     JSR StoreRAM
  361.     SUB [6502SP], 1
  362.     SET PC, POP
  363. :PullA
  364.     ADD [6502SP], 1
  365.     SET C, [6502SP]
  366.     SET J, [0x0100+C]
  367.     JSR LoadRAM
  368.     SET A, I
  369.     JSR CheckA
  370.     SET PC, POP
  371. :PullP
  372.     ADD [6502SP], 1
  373.     SET C, [6502SP]
  374.     SET J, [0x0100+C]
  375.     JSR LoadRAM
  376.     SET [6502P], I
  377.     SET PC, POP
  378. :PullB
  379.     ADD [6502SP], 1
  380.     SET C, [6502SP]
  381.     SET J, [0x0100+C]
  382.     JSR LoadRAM
  383.     SET B, I
  384.     SET PC, POP
  385.  
  386. :IndX
  387.     ; Generate ($I,x) to J.
  388.     SET C, I
  389.     ADD C, X
  390.     AND C, 0x00FF
  391.     SET I, C
  392.     JSR LoadRAM
  393.     SET Z, J
  394.     ADD I, 1
  395.     JSR LoadRAM
  396.     SHL J, 8
  397.     BOR Z, J
  398.     SET J, Z
  399.     SET PC, POP
  400.  
  401. :IndY
  402.     ; Generate ($I),y to J.
  403.     JSR LoadRAM
  404.     SET Z, J
  405.     ADD I, 1
  406.     JSR LoadRAM
  407.     SHL J, 8
  408.     BOR Z, J
  409.     SET J, Z
  410.     ADD J, Y
  411.     SET PC, POP
  412.  
  413. :InitLEM
  414.         JSR FindLEM
  415.         IFE [LEM], 0
  416.             SET PC, FoundNoLEM
  417.         SET B, 0x1000
  418.         SET A, 0
  419.         HWI [LEM]
  420.         SET B, 0
  421.         SET A, 1
  422.         HWI [LEM]
  423.         SET A, 2
  424.         HWI [LEM]
  425.         SET B, 0x000B
  426.         SET A, 3
  427.         HWI [LEM]
  428.         SET X, 0
  429.         ;JSR LEMDelay
  430.         SET A, 0x8000
  431.         SET [LEMState], 0x0000
  432.         SET PC, POP
  433.    
  434.  
  435. :FoundNoLEM
  436.         SET [LEMState], 0x0001
  437.         SET PC, POP
  438.  
  439. :PrintHex
  440.         SET PUSH, C
  441.         SET J, [Z]
  442.         SET I, J
  443.         SHR I, 12
  444.         AND I, 0x000F
  445.         SET [HexMessage], [I+HexDigits]
  446.         SET I, J
  447.         SHR I, 8
  448.         AND I, 0x000F
  449.         SET [HexMessage1], [I+HexDigits]
  450.         SET I, J
  451.         SHR I, 4
  452.         AND I, 0x000F
  453.         SET [HexMessage2], [I+HexDigits]
  454.         AND J, 0x000F
  455.         SET [HexMessage3], [J+HexDigits]
  456.         SET Z, HexMessage
  457.         SET J, Z
  458.         SET C, POP
  459. :Print
  460.         SET Z, [J]
  461.         AND Z, 0x007F
  462.         BOR Z, C
  463.         SET [0x8000+B], Z
  464.         ADD B, 1
  465.         ADD J, 1
  466.         IFN [J], 0
  467.             SET PC, Print
  468.         SET PC, POP
  469.  
  470. :InterruptRecv
  471.         RFI X
  472.        
  473. :LEMDelay
  474.         ADD X, 1
  475.         IFN 0, X
  476.             SET PC, LEMDelay
  477.         SET X, 0
  478. :LEMDelay2
  479.         ADD X, 1
  480.         IFN 0, X
  481.             SET PC, LEMDelay2
  482.         SET PC, POP
  483.  
  484.  
  485.        
  486. :FindLEM
  487.         HWN I
  488. :FindLEMLoop
  489.         HWQ I
  490.         IFN B, 0xF615
  491.             SET PC, FindLEMMatch
  492.         SET [LEM], I
  493.         SET PC, POP
  494. :FindLEMMatch
  495.         SUB I, 1
  496.         IFN I, 0xFFFF
  497.             SET PC, FindLEMLoop
  498.         SET PC, POP
  499.  
  500. :LEM
  501.         DAT 0xFFFF ;0x008E
  502. ;0xFFFF = not set
  503. :LEMState
  504.         DAT 0xFFFF ;0x0091
  505. ;0xFFFF = no init, 0x0000 = found and init,
  506. ;0x0001 = not found
  507.  
  508.  
  509.  
  510. :AddrPerInstruction
  511.     ; Addressing mode per instruction table.
  512.     ; 0x000F (15) = Illegal Instruction
  513.     ; 0x0000 = Implicit
  514.     ; 0x0001 = Implicit Accumulator
  515.     ; 0x0002 = Immediate
  516.     ; 0x0003 = Zeropage
  517.     ; 0x0004 = Zeropage, X index
  518.     ; 0x0005 = Zeropage, Y index
  519.     ; 0x0006 = Relative (branch)
  520.     ; 0x0007 = Absolute
  521.     ; 0x0008 = Absolute, X index
  522.     ; 0x0009 = Absolute, Y index
  523.     ; 0x000A (10) = Indirect
  524.     ; 0x000B (11) = Indirect, (value + X)
  525.     ; 0x000C (12) = (Indirect, value) + Y
  526.     DAT 0, 11, 15, 15, 15, 3, 3, 15, 0, 2, 1, 15, 15, 7, 7, 15
  527.     DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 12, 15, 15, 15, 8, 8, 15
  528.     DAT 7, 11, 15, 15, 3, 3, 3, 15, 0, 2, 1, 15, 7, 7, 7, 15
  529.     DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
  530.     DAT 0, 11, 15, 15, 15, 4, 4, 15, 0, 2, 1, 15, 7, 7, 7, 15
  531.     DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
  532.     DAT 0, 11, 15, 15, 15, 3, 3, 15, 0, 2, 1, 15, 10, 7, 7, 15
  533.     DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
  534.     DAT 15, 11, 15, 15, 3, 3, 3, 15, 0, 15, 0, 15, 7, 7, 7, 15
  535.     DAT 6, 12, 15, 15, 4, 4, 5, 15, 0, 9, 0, 15, 15, 8, 15, 15
  536.     DAT 2, 11, 2, 15, 3, 3, 3, 15, 0, 2, 0, 15, 7, 7, 7, 15
  537.     DAT 6, 12, 15, 15, 4, 4, 5, 15, 0, 9, 0, 15, 8, 8, 9, 15
  538.     DAT 2, 11, 15, 15, 3, 3, 3, 15, 0, 2, 0, 15, 7, 7, 7, 15
  539.     DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
  540.     DAT 2, 11, 15, 15, 3, 3, 3, 15, 0, 2, 0, 15, 7, 7, 7, 15
  541.     DAT 6, 12, 15, 15, 15, 4, 4, 15, 0, 9, 15, 15, 15, 8, 8, 15
  542.  
  543. :Instructions
  544.     ; The table of instruction subroutines, used with JSR.
  545.     DAT i00, i01, iii, iii, iii, i05, i06, iii, i08, i09, i0a, iii, iii, i0d, i0e, iii
  546.     DAT i10, i11, iii, iii, iii, i15, i16, iii, i18, i19, iii, iii, iii, i1d, i1e, iii
  547.     DAT i20, i21, iii, iii, i24, i25, i26, iii, i28, i29, i2a, iii, i2c, i2d, i2e, iii
  548.     DAT i30, i31, iii, iii, iii, i35, i36, iii, i38, i39, iii, iii, iii, i3d, i3e, iii
  549.     DAT i40, i41, iii, iii, iii, i45, i46, iii, i48, i49, i4a, iii, i4c, i4d, i4e, iii
  550.     DAT i50, i51, iii, iii, iii, i55, i56, iii, i58, i95, iii, iii, iii, i5d, i5e, iii
  551.     DAT i60, i61, iii, iii, iii, i65, i66, iii, i68, i69, i6a, iii, i6c, i6d, i6e, iii
  552.     DAT i70, i71, iii, iii, iii, i75, i76, iii, i78, i79, iii, iii, iii, i7d, i7e, iii
  553.     DAT iii, i81, iii, iii, i84, i85, i86, iii, i88, iii, i8a, iii, i8c, i8d, i8e, iii
  554.     DAT i90, i91, iii, iii, i94, i95, i96, iii, i98, i99, i9a, iii, iii, i9d, iii, iii
  555.     DAT ia0, ia1, ia2, iii, ia4, ia5, ia6, iii, ia8, ia9, iaa, iii, iac, iad, iae, iii
  556.     DAT ib0, ib1, iii, iii, ib4, ib5, ib6, iii, ib8, ib9, iba, iii, ibc, ibd, ibe, iii
  557.     DAT ic0, ic1, iii, iii, ic4, ic5, ic6, iii, ic8, ic9, ica, iii, icc, icd, ice, iii
  558.     DAT id0, id1, iii, iii, iii, id5, id6, iii, id8, id9, iii, iii, iii, idd, ide, iii
  559.     DAT ie0, ie1, iii, iii, ie4, ie5, ie6, iii, ie8, ie9, iea, iii, iec, ied, iee, iii
  560.     DAT if0, if1, iii, iii, iii, if5, if6, iii, if8, if9, iii, iii, iii, ifd, ife, iii
  561.  
  562. :AddressingModes
  563.     ; The amount of bytes - 1 a instruction with addressing mode takes.
  564.     ;   IMPLIC, ACCUM , IMMED , ZEROP , ZEROPX, ZEROPY, RL(BR), ABSOL
  565.     DAT 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002
  566.     ;   ABSOLX, ABSOLY, INDIRC, ZPINDX, ZPINDY
  567.     DAT 0x0002, 0x0002, 0x0002, 0x0001, 0x0001
  568. :6502P
  569.     DAT 0x002C
  570. :6502SP
  571.     DAT 0x0000
  572.     ; Unspecified when booting. Setting it to FF is highly recommended, but
  573.     ; this is done by the code itself (by LDX #$FF : TXS)
  574. :6502PC
  575.     DAT 0x0000
  576.     ; PC is as bytes from 0x1000 words from the beginning of the buffer.
  577. :6502B
  578.     DAT 0x0000
  579.     ; set to 0x0001 upon BRK
  580. :BAPC
  581.     DAT 0x0000
  582.     ; Bytes to be Added to PC
  583. :Loop
  584.     DAT 0x0000
  585.     ; set to 0x0001 upon init, to avoid infinite loop to beginning
  586.  
  587. :HexMessage
  588.     DAT "0"
  589. :HexMessage1
  590.     DAT "0"
  591. :HexMessage2
  592.     DAT "0"
  593. :HexMessage3
  594.     DAT "0", 0x0000
  595. :Message
  596.     DAT "ILLEGAL INSTRUCTION", 0x0000
  597. :Message2
  598.     DAT "BRK STOP", 0x0000
  599. :Message3
  600.     DAT "INTERNAL ERROR", 0x0000
  601. :Message4
  602.     DAT "IS NOT AN INSTRUCTION", 0x0000
  603. :HexDigits
  604.     DAT "0123456789ABCDEF"
  605.  
  606. :Instruction
  607.     DAT 0x0000
  608. :Arg1
  609.     DAT 0x0000
  610. :Arg2
  611.     DAT 0x0000
  612.  
  613. :iii
  614.     SET PC, IllegalInstruction
  615. :i00
  616.     SET PC, BRK
  617. :i01
  618.     SET I, [Arg1]
  619.     JSR IndX
  620.     JSR LoadRAM
  621.     BOR A, I
  622.     JSR CheckA
  623.     SET PC, POP
  624. :i05
  625.     SET J, [Arg1]
  626.     JSR LoadRAM
  627.     BOR A, I
  628.     JSR CheckA
  629.     SET PC, POP
  630. :i06
  631.     SET J, [Arg1]
  632.     JSR LoadRAM
  633.     SET EX, 0
  634.     SHL I, 1
  635.     AND [6502P], 0xFE
  636.     BOR [6502P], EX
  637.     SET J, [Arg1]
  638.     JSR StoreRAM
  639.     SET PC, POP
  640. :i08
  641.     JSR PushP
  642.     SET PC, POP
  643. :i09
  644.     BOR A, [Arg1]
  645.     JSR CheckA
  646.     SET PC, POP
  647. :i0a
  648.     SET EX, 0
  649.     SHL A, 1
  650.     AND [6502P], 0xFE
  651.     BOR [6502P], EX
  652.     JSR CheckA
  653.     SET PC, POP
  654. :i0d
  655.     SET Z, [Arg2]
  656.     SHL Z, 8
  657.     SET J, [Arg1]
  658.     BOR J, Z
  659.     JSR LoadRAM
  660.     BOR A, I
  661.     JSR CheckA
  662.     SET PC, POP
  663.     SET PC, POP
  664. :i0e
  665.     SET Z, [Arg2]
  666.     SHL Z, 8
  667.     SET B, [Arg1]
  668.     BOR B, Z
  669.     SET J, B
  670.     JSR LoadRAM
  671.     SET EX, 0
  672.     SHL I, 1
  673.     AND [6502P], 0xFE
  674.     BOR [6502P], EX
  675.     SET J, B
  676.     JSR StoreRAM
  677.     SET PC, POP
  678. :i10
  679.     SET Z, [6502P]
  680.     AND Z, 0x80
  681.     SET B, [arg1]
  682.     IFE Z, 0
  683.      JSR JumpBranch
  684.     SET PC, POP
  685. :i11
  686.     SET I, [Arg1]
  687.     JSR IndY
  688.     JSR LoadRAM
  689.     BOR A, I
  690.     SET PC, POP
  691. :i15
  692.     SET J, [Arg1]
  693.     ADD J, X
  694.     AND J, 0xFF
  695.     JSR LoadRAM
  696.     BOR A, I
  697.     JSR CheckA
  698.     SET PC, POP
  699. :i16
  700.     SET B, [Arg1]
  701.     ADD B, X
  702.     AND B, 0xFF
  703.     SET J, B
  704.     JSR LoadRAM
  705.     SET EX, 0
  706.     SHL I, 1
  707.     AND [6502P], 0xFE
  708.     BOR [6502P], EX
  709.     SET J, B
  710.     JSR StoreRAM
  711.     SET PC, POP
  712. :i18
  713.     AND [6502P], 0xFE
  714.     SET PC, POP
  715. :i19
  716.     SET Z, [Arg2]
  717.     SHL Z, 8
  718.     SET J, [Arg1]
  719.     BOR J, Z
  720.     ADD J, Y
  721.     JSR LoadRAM
  722.     BOR A, I
  723.     JSR CheckA
  724.     SET PC, POP
  725. :i1d
  726.     SET Z, [Arg2]
  727.     SHL Z, 8
  728.     SET J, [Arg1]
  729.     BOR J, Z
  730.     ADD J, X
  731.     JSR LoadRAM
  732.     BOR A, I
  733.     JSR CheckA
  734.     SET PC, POP
  735. :i1e
  736.     SET Z, [Arg2]
  737.     SHL Z, 8
  738.     SET B, [Arg1]
  739.     BOR B, Z
  740.     SET J, B
  741.     ADD B, X
  742.     JSR LoadRAM
  743.     SET EX, 0
  744.     SHL I, 1
  745.     AND [6502P], 0xFE
  746.     BOR [6502P], EX
  747.     SET J, B
  748.     JSR StoreRAM
  749.     SET PC, POP
  750.     SET PC, POP
  751. :i20
  752.     SET Z, [6502PC]
  753.     ADD Z, 2
  754.     SET B, Z
  755.     AND B, 0x00FF
  756.     JSR PushB
  757.     SET B, Z
  758.     AND B, 0xFF00
  759.     SHR B, 8
  760.     JSR PushB
  761.     SET B, [arg1]
  762.     SET C, [arg2]
  763.     SHL C, 8
  764.     BOR B, C
  765.     SUB B, 3
  766.     SET [6502PC], B
  767.     SET PC, POP
  768. :i21
  769.     SET I, [Arg1]
  770.     JSR IndX
  771.     JSR LoadRAM
  772.     AND A, I
  773.     JSR CheckA
  774.     SET PC, POP
  775. :i24
  776.     ;nv-bdizc
  777.     SET J, [Arg1]
  778.     JSR LoadRAM
  779.     SET C, A
  780.     AND C, I
  781.     AND [6502P], 0x3D
  782.     IFE C, 0
  783.      BOR [6502P], 0x02
  784.     SET B, I
  785.     AND B, 0x80
  786.     IFN B, 0
  787.      BOR [6502P], 0x80
  788.     AND I, 0x40
  789.     IFN I, 0
  790.      BOR [6502P], 0x40
  791.     SET PC, POP
  792. :i25
  793.     SET J, [Arg1]
  794.     JSR LoadRAM
  795.     AND A, I
  796.     JSR CheckA
  797.     SET PC, POP
  798. :i26
  799.     SET C, [6502P]
  800.     AND C, 0x01
  801.     SET J, [Arg1]
  802.     JSR LoadRAM
  803.     SET EX, 0
  804.     SHL I, 1
  805.     BOR I, C
  806.     AND [6502P], 0xFE
  807.     BOR [6502P], EX
  808.     SET J, [Arg1]
  809.     JSR StoreRAM
  810.     SET PC, POP
  811. :i28
  812.     JSR PullP
  813.     SET PC, POP
  814. :i29
  815.     AND A, [Arg1]
  816.     JSR CheckA
  817.     SET PC, POP
  818. :i2a
  819.     SET C, [6502P]
  820.     AND C, 0x01
  821.     SET EX, 0
  822.     SHL A, 1
  823.     BOR A, C
  824.     AND [6502P], 0xFE
  825.     BOR [6502P], EX
  826.     JSR CheckA
  827.     SET PC, POP
  828. :i2c
  829.     SET Z, [Arg2]
  830.     SHL Z, 8
  831.     SET J, [Arg1]
  832.     BOR J, Z
  833.     JSR LoadRAM
  834.     SET C, A
  835.     AND C, I
  836.     AND [6502P], 0x3D
  837.     IFE C, 0
  838.      BOR [6502P], 0x02
  839.     SET B, I
  840.     AND B, 0x80
  841.     IFN B, 0
  842.      BOR [6502P], 0x80
  843.     AND I, 0x40
  844.     IFN I, 0
  845.      BOR [6502P], 0x40
  846.     SET PC, POP
  847. :i2d
  848.     SET Z, [Arg2]
  849.     SHL Z, 8
  850.     SET J, [Arg1]
  851.     BOR J, Z
  852.     JSR LoadRAM
  853.     AND A, I
  854.     JSR CheckA
  855.     SET PC, POP
  856. :i2e
  857.     SET C, [6502P]
  858.     AND C, 0x01
  859.     SET Z, [Arg2]
  860.     SHL Z, 8
  861.     SET J, [Arg1]
  862.     BOR J, Z
  863.     JSR LoadRAM
  864.     SET EX, 0
  865.     SHL I, 1
  866.     BOR I, C
  867.     AND [6502P], 0xFE
  868.     BOR [6502P], EX
  869.     SET J, [Arg1]
  870.     JSR StoreRAM
  871.     SET PC, POP
  872. :i30
  873.     SET Z, [6502P]
  874.     AND Z, 0x80
  875.     SET B, [arg1]
  876.     IFN Z, 0
  877.      JSR JumpBranch
  878.     SET PC, POP
  879. :i31
  880.     SET I, [Arg1]
  881.     JSR IndY
  882.     JSR LoadRAM
  883.     AND A, I
  884.     JSR CheckA
  885.     SET PC, POP
  886. :i35
  887.     SET J, [Arg1]
  888.     ADD J, X
  889.     AND J, 0xFF
  890.     JSR LoadRAM
  891.     AND A, I
  892.     JSR CheckA
  893.     SET PC, POP
  894. :i36
  895.     SET C, [6502P]
  896.     AND C, 0x01
  897.     SET J, [Arg1]
  898.     ADD J, X
  899.     AND J, 0xFF
  900.     JSR LoadRAM
  901.     SET EX, 0
  902.     SHL I, 1
  903.     BOR I, C
  904.     AND [6502P], 0xFE
  905.     BOR [6502P], EX
  906.     SET J, [Arg1]
  907.     JSR StoreRAM
  908.     SET PC, POP
  909. :i38
  910.     BOR [6502P], 0x01
  911.     SET PC, POP
  912. :i39
  913.     SET Z, [Arg2]
  914.     SHL Z, 8
  915.     SET J, [Arg1]
  916.     BOR J, Z
  917.     ADD J, Y
  918.     JSR LoadRAM
  919.     AND A, I
  920.     JSR CheckA
  921.     SET PC, POP
  922. :i3d
  923.     SET Z, [Arg2]
  924.     SHL Z, 8
  925.     SET J, [Arg1]
  926.     BOR J, Z
  927.     ADD J, X
  928.     JSR LoadRAM
  929.     AND A, I
  930.     JSR CheckA
  931.     SET PC, POP
  932. :i3e
  933.     SET C, [6502P]
  934.     AND C, 0x01
  935.     SET Z, [Arg2]
  936.     SHL Z, 8
  937.     SET J, [Arg1]
  938.     BOR J, Z
  939.     ADD J, X
  940.     JSR LoadRAM
  941.     SET EX, 0
  942.     SHL I, 1
  943.     BOR I, C
  944.     AND [6502P], 0xFE
  945.     BOR [6502P], EX
  946.     SET J, [Arg1]
  947.     JSR StoreRAM
  948.     SET PC, POP
  949. :i40
  950.     ; Interrupts aren't supported.
  951.     SET PC, POP
  952. :i41
  953.     SET I, [Arg1]
  954.     JSR IndX
  955.     JSR LoadRAM
  956.     XOR A, I
  957.     JSR CheckA
  958.     SET PC, POP
  959. :i45
  960.     SET J, [Arg1]
  961.     JSR LoadRAM
  962.     XOR A, I
  963.     JSR CheckA
  964.     SET PC, POP
  965. :i46
  966.     SET J, [Arg1]
  967.     JSR LoadRAM
  968.     SET EX, 0
  969.     SHR I, 1
  970.     SHR EX, 15
  971.     AND [6502P], 0xFE
  972.     BOR [6502P], EX
  973.     SET J, [Arg1]
  974.     JSR StoreRAM
  975.     SET PC, POP
  976. :i48
  977.     JSR PushA
  978.     SET PC, POP
  979. :i49
  980.     XOR A, [Arg1]
  981.     JSR CheckA
  982.     SET PC, POP
  983. :i4a
  984.     SET EX, 0
  985.     SHR A, 1
  986.     SHR EX, 15
  987.     AND [6502P], 0xFE
  988.     BOR [6502P], EX
  989.     JSR CheckA
  990.     SET PC, POP
  991. :i4c
  992.     SET Z, [arg2]
  993.     SHL Z, 8
  994.     SET J, [arg1]
  995.     BOR J, Z
  996.     SET [6502PC], J
  997.     SUB [6502PC], 3
  998.     SET PC, POP
  999. :i4d
  1000.     SET Z, [Arg2]
  1001.     SHL Z, 8
  1002.     SET J, [Arg1]
  1003.     BOR J, Z
  1004.     JSR LoadRAM
  1005.     XOR A, I
  1006.     JSR CheckA
  1007.     SET PC, POP
  1008. :i4e
  1009.     SET Z, [Arg2]
  1010.     SHL Z, 8
  1011.     SET B, [Arg1]
  1012.     BOR B, Z
  1013.     SET J, B
  1014.     JSR LoadRAM
  1015.     SET EX, 0
  1016.     SHR I, 1
  1017.     SHR EX, 15
  1018.     AND [6502P], 0xFE
  1019.     BOR [6502P], EX
  1020.     SET J, B
  1021.     JSR StoreRAM
  1022.     SET PC, POP
  1023. :i50
  1024.     SET Z, [6502P]
  1025.     AND Z, 0x40
  1026.     SET B, [arg1]
  1027.     IFE Z, 0
  1028.      JSR JumpBranch
  1029.     SET PC, POP
  1030. :i51
  1031.     SET I, [Arg1]
  1032.     JSR IndY
  1033.     JSR LoadRAM
  1034.     XOR A, I
  1035.     JSR CheckA
  1036.     SET PC, POP
  1037. :i55
  1038.     SET J, [Arg1]
  1039.     ADD J, X
  1040.     AND J, 0xFF
  1041.     JSR LoadRAM
  1042.     XOR A, I
  1043.     JSR CheckA
  1044.     SET PC, POP
  1045. :i56
  1046.     SET J, [Arg1]
  1047.     ADD J, X
  1048.     AND J, 0xFF
  1049.     JSR LoadRAM
  1050.     SET EX, 0
  1051.     SHR I, 1
  1052.     SHR EX, 15
  1053.     AND [6502P], 0xFE
  1054.     BOR [6502P], EX
  1055.     SET J, [Arg1]
  1056.     JSR StoreRAM
  1057.     SET PC, POP
  1058. :i58
  1059.     AND [6502P], 0xFB
  1060.     SET PC, POP
  1061. :i59
  1062.     SET Z, [Arg2]
  1063.     SHL Z, 8
  1064.     SET J, [Arg1]
  1065.     BOR J, Z
  1066.     ADD J, Y
  1067.     JSR LoadRAM
  1068.     XOR A, I
  1069.     JSR CheckA
  1070.     SET PC, POP
  1071. :i5d
  1072.     SET Z, [Arg2]
  1073.     SHL Z, 8
  1074.     SET J, [Arg1]
  1075.     BOR J, Z
  1076.     ADD J, X
  1077.     JSR LoadRAM
  1078.     XOR A, I
  1079.     JSR CheckA
  1080.     SET PC, POP
  1081. :i5e
  1082.     SET Z, [Arg2]
  1083.     SHL Z, 8
  1084.     SET B, [Arg1]
  1085.     BOR B, Z
  1086.     SET J, B
  1087.     ADD J, X
  1088.     JSR LoadRAM
  1089.     SET EX, 0
  1090.     SHR I, 1
  1091.     SHR EX, 15
  1092.     AND [6502P], 0xFE
  1093.     BOR [6502P], EX
  1094.     SET J, B
  1095.     JSR StoreRAM
  1096.     SET PC, POP
  1097. :i60
  1098.     JSR PullB ; high byte
  1099.     SET Z, B
  1100.     JSR PullB ; low byte
  1101.     SHL Z, 8
  1102.     BOR B, Z
  1103.     SET [6502PC], B
  1104.     SET PC, POP
  1105. :i61
  1106.     SET I, [Arg1]
  1107.     JSR IndX
  1108.     JSR LoadRAM
  1109.     JSR ADC
  1110.     JSR CheckA
  1111.     SET PC, POP
  1112. :i65
  1113.     SET J, [Arg1]
  1114.     JSR LoadRAM
  1115.     JSR ADC
  1116.     JSR CheckA
  1117.     SET PC, POP
  1118. :i66
  1119.     SET C, [6502P]
  1120.     AND C, 0x01
  1121.     SHL C, 7
  1122.     SET J, [Arg1]
  1123.     JSR LoadRAM
  1124.     SET EX, 0
  1125.     SHR I, 1
  1126.     BOR I, C
  1127.     SHR EX, 15
  1128.     AND [6502P], 0xFE
  1129.     BOR [6502P], EX
  1130.     SET J, [Arg1]
  1131.     JSR StoreRAM
  1132.     SET PC, POP
  1133. :i68
  1134.     JSR PullA
  1135.     SET PC, POP
  1136. :i69
  1137.     SET I, [arg1]
  1138.     JSR ADC
  1139.     JSR CheckA
  1140.     SET PC, POP
  1141. :i6a
  1142.     SET C, [6502P]
  1143.     AND C, 0x01
  1144.     SHL C, 7
  1145.     SET EX, 0
  1146.     SHR A, 1
  1147.     BOR I, C
  1148.     SHR EX, 15
  1149.     AND [6502P], 0xFE
  1150.     BOR [6502P], EX
  1151.     JSR CheckA
  1152.     SET PC, POP
  1153. :i6c
  1154.     SET Z, [arg2]
  1155.     SHL Z, 8
  1156.     SET J, [arg1]
  1157.     BOR J, Z
  1158.     JSR LoadRAM
  1159.     SET B, I
  1160.     IFE [Emu_IndJMPBug], 0
  1161.      ADD J, 1
  1162.     IFE [Emu_IndJMPBug], 1
  1163.      JSR IndJMPBug
  1164.     JSR LoadRAM
  1165.     SET Z, I
  1166.     SHL Z, 8
  1167.     BOR B, Z
  1168.     SET [6502PC], B
  1169.     SUB [6502PC], 3
  1170.     SET PC, POP
  1171. :i6d
  1172.     SET Z, [Arg2]
  1173.     SHL Z, 8
  1174.     SET J, [Arg1]
  1175.     BOR J, Z
  1176.     JSR LoadRAM
  1177.     JSR ADC
  1178.     JSR CheckA
  1179.     SET PC, POP
  1180. :i6e
  1181.     SET B, [arg1]
  1182.     SET Z, [arg2]
  1183.     SHL Z, 8
  1184.     BOR B, Z
  1185.     SET C, [6502P]
  1186.     AND C, 0x01
  1187.     SHL C, 7
  1188.     SET J, B
  1189.     JSR LoadRAM
  1190.     SET EX, 0
  1191.     SHR I, 1
  1192.     BOR I, C
  1193.     SHR EX, 15
  1194.     AND [6502P], 0xFE
  1195.     BOR [6502P], EX
  1196.     SET J, B
  1197.     JSR StoreRAM
  1198.     SET PC, POP
  1199. :i70
  1200.     SET Z, [6502P]
  1201.     AND Z, 0x40
  1202.     SET B, [arg1]
  1203.     IFN Z, 0
  1204.      JSR JumpBranch
  1205.     SET PC, POP
  1206. :i71
  1207.     SET I, [Arg1]
  1208.     JSR IndY
  1209.     JSR LoadRAM
  1210.     JSR ADC
  1211.     JSR CheckA
  1212.     SET PC, POP
  1213. :i75
  1214.     SET J, [Arg1]
  1215.     ADD J, X
  1216.     AND J, 0xFF
  1217.     JSR LoadRAM
  1218.     JSR ADC
  1219.     JSR CheckA
  1220.     SET PC, POP
  1221. :i76
  1222.     SET C, [6502P]
  1223.     AND C, 0x01
  1224.     SHL C, 7
  1225.     SET J, [Arg1]
  1226.     ADD J, X
  1227.     AND J, 0xFF
  1228.     JSR LoadRAM
  1229.     SET EX, 0
  1230.     SHR I, 1
  1231.     BOR I, C
  1232.     SHR EX, 15
  1233.     AND [6502P], 0xFE
  1234.     BOR [6502P], EX
  1235.     SET J, [Arg1]
  1236.     JSR StoreRAM
  1237.     SET PC, POP
  1238. :i78
  1239.     BOR [6502P], 0x04
  1240.     SET PC, POP
  1241. :i79
  1242.     SET Z, [Arg2]
  1243.     SHL Z, 8
  1244.     SET J, [Arg1]
  1245.     BOR J, Z
  1246.     ADD J, Y
  1247.     JSR LoadRAM
  1248.     JSR ADC
  1249.     JSR CheckA
  1250.     SET PC, POP
  1251. :i7d
  1252.     SET Z, [Arg2]
  1253.     SHL Z, 8
  1254.     SET J, [Arg1]
  1255.     BOR J, Z
  1256.     ADD J, X
  1257.     JSR LoadRAM
  1258.     JSR ADC
  1259.     JSR CheckA
  1260.     SET PC, POP
  1261. :i7e
  1262.     SET B, [arg1]
  1263.     SET Z, [arg2]
  1264.     SHL Z, 8
  1265.     BOR B, Z
  1266.     SET C, [6502P]
  1267.     AND C, 0x01
  1268.     SHL C, 7
  1269.     SET J, B
  1270.     ADD J, X
  1271.     JSR LoadRAM
  1272.     SET EX, 0
  1273.     SHR I, 1
  1274.     BOR I, C
  1275.     SHR EX, 15
  1276.     AND [6502P], 0xFE
  1277.     BOR [6502P], EX
  1278.     SET J, B
  1279.     JSR StoreRAM
  1280.     SET PC, POP
  1281. :i81
  1282.     SET I, [Arg1]
  1283.     JSR IndX
  1284.     SET J, I
  1285.     SET I, A
  1286.     JSR StoreRAM
  1287.     SET PC, POP
  1288. :i84
  1289.     SET J, [arg1]
  1290.     SET I, Y
  1291.     JSR StoreRAM
  1292.     SET PC, POP
  1293. :i85
  1294.     SET J, [arg1]
  1295.     SET I, A
  1296.     JSR StoreRAM
  1297.     SET PC, POP
  1298. :i86
  1299.     SET J, [arg1]
  1300.     SET I, X
  1301.     JSR StoreRAM
  1302.     SET PC, POP
  1303. :i88
  1304.     SUB Y, 1
  1305.     AND Y, 0xFF
  1306.     JSR CheckY
  1307.     SET PC, POP
  1308. :i8a
  1309.     SET A, X
  1310.     JSR CheckA
  1311.     SET PC, POP
  1312. :i8c
  1313.     SET C, [arg2]
  1314.     SHL C, 8
  1315.     SET J, [arg1]
  1316.     BOR J, C
  1317.     SET I, Y
  1318.     JSR StoreRAM
  1319.     SET PC, POP
  1320. :i8d
  1321.     SET C, [arg2]
  1322.     SHL C, 8
  1323.     SET J, [arg1]
  1324.     BOR J, C
  1325.     SET I, A
  1326.     JSR StoreRAM
  1327.     SET PC, POP
  1328. :i8e
  1329.     SET C, [arg2]
  1330.     SHL C, 8
  1331.     SET J, [arg1]
  1332.     BOR J, C
  1333.     SET I, X
  1334.     JSR StoreRAM
  1335.     SET PC, POP
  1336. :i90
  1337.     SET Z, [6502P]
  1338.     AND Z, 0x01
  1339.     SET B, [arg1]
  1340.     IFE Z, 0
  1341.      JSR JumpBranch
  1342.     SET PC, POP
  1343. :i91
  1344.     SET I, [Arg1]
  1345.     JSR IndY
  1346.     SET J, I
  1347.     SET I, A
  1348.     JSR StoreRAM
  1349.     SET PC, POP
  1350. :i94
  1351.     SET J, [arg1]
  1352.     ADD J, X
  1353.     AND J, 0xFF
  1354.     SET I, Y
  1355.     JSR StoreRAM
  1356.     SET PC, POP
  1357. :i95
  1358.     SET J, [arg1]
  1359.     ADD J, X
  1360.     AND J, 0xFF
  1361.     SET I, A
  1362.     JSR StoreRAM
  1363.     SET PC, POP
  1364. :i96
  1365.     SET J, [arg1]
  1366.     ADD J, Y
  1367.     AND J, 0xFF
  1368.     SET I, X
  1369.     JSR StoreRAM
  1370.     SET PC, POP
  1371. :i98
  1372.     SET A, Y
  1373.     JSR CheckA
  1374.     SET PC, POP
  1375. :i99
  1376.     SET C, [arg2]
  1377.     SHL C, 8
  1378.     SET J, [arg1]
  1379.     BOR J, C
  1380.     ADD J, Y
  1381.     SET I, A
  1382.     JSR StoreRAM
  1383.     SET PC, POP
  1384. :i9a
  1385.     SET [6502SP], X
  1386.     SET PC, POP
  1387. :i9d
  1388.     SET C, [arg2]
  1389.     SHL C, 8
  1390.     SET J, [arg1]
  1391.     BOR J, C
  1392.     ADD J, X
  1393.     SET I, A
  1394.     JSR StoreRAM
  1395.     SET PC, POP
  1396. :ia0
  1397.     SET Y, [arg1]
  1398.     JSR CheckY
  1399.     SET PC, POP
  1400. :ia1
  1401.     SET I, [Arg1]
  1402.     JSR IndX
  1403.     JSR LoadRAM
  1404.     SET A, I
  1405.     JSR CheckA
  1406.     SET PC, POP
  1407. :ia2
  1408.     SET X, [arg1]
  1409.     JSR CheckX
  1410.     SET PC, POP
  1411. :ia4
  1412.     SET J, [arg1]
  1413.     JSR LoadRAM
  1414.     SET Y, I
  1415.     JSR CheckY
  1416.     SET PC, POP
  1417. :ia5
  1418.     SET J, [arg1]
  1419.     JSR LoadRAM
  1420.     SET A, I
  1421.     JSR CheckA
  1422.     SET PC, POP
  1423. :ia6
  1424.     SET J, [arg1]
  1425.     JSR LoadRAM
  1426.     SET X, I
  1427.     JSR CheckX
  1428.     SET PC, POP
  1429. :ia8
  1430.     SET Y, A
  1431.     JSR CheckY
  1432.     SET PC, POP
  1433. :ia9
  1434.     SET A, [arg1]
  1435.     JSR CheckA
  1436.     SET PC, POP
  1437. :iaa
  1438.     SET X, A
  1439.     JSR CheckX
  1440.     SET PC, POP
  1441. :iac
  1442.     SET C, [arg2]
  1443.     SHL C, 8
  1444.     SET J, [arg1]
  1445.     BOR J, C
  1446.     JSR LoadRAM
  1447.     SET Y, I
  1448.     JSR CheckY
  1449.     SET PC, POP
  1450. :iad
  1451.     SET C, [arg2]
  1452.     SHL C, 8
  1453.     SET J, [arg1]
  1454.     BOR J, C
  1455.     JSR LoadRAM
  1456.     SET A, I
  1457.     JSR CheckA
  1458.     SET PC, POP
  1459. :iae
  1460.     SET C, [arg2]
  1461.     SHL C, 8
  1462.     SET J, [arg1]
  1463.     BOR J, C
  1464.     JSR LoadRAM
  1465.     SET X, I
  1466.     JSR CheckX
  1467.     SET PC, POP
  1468. :ib0
  1469.     SET Z, [6502P]
  1470.     AND Z, 0x01
  1471.     SET B, [arg1]
  1472.     IFN Z, 0
  1473.      JSR JumpBranch
  1474.     SET PC, POP
  1475. :ib1
  1476.     SET I, [Arg1]
  1477.     JSR IndY
  1478.     JSR LoadRAM
  1479.     SET A, I
  1480.     JSR CheckA
  1481.     SET PC, POP
  1482. :ib4
  1483.     SET J, [arg1]
  1484.     ADD J, X
  1485.     AND J, 0xFF
  1486.     JSR LoadRAM
  1487.     SET Y, I
  1488.     JSR CheckY
  1489.     SET PC, POP
  1490. :ib5
  1491.     SET J, [arg1]
  1492.     ADD J, X
  1493.     AND J, 0xFF
  1494.     JSR LoadRAM
  1495.     SET A, I
  1496.     JSR CheckA
  1497.     SET PC, POP
  1498. :ib6
  1499.     SET J, [arg1]
  1500.     ADD J, Y
  1501.     AND J, 0xFF
  1502.     JSR LoadRAM
  1503.     SET X, I
  1504.     JSR CheckX
  1505.     SET PC, POP
  1506. :ib8
  1507.     AND [6502P], 0xbf
  1508.     SET PC, POP
  1509. :ib9
  1510.     SET C, [arg2]
  1511.     SHL C, 8
  1512.     SET J, [arg1]
  1513.     BOR J, C
  1514.     ADD J, Y
  1515.     JSR LoadRAM
  1516.     SET A, I
  1517.     JSR CheckA
  1518.     SET PC, POP
  1519. :iba
  1520.     SET X, [6502SP]
  1521.     JSR CheckX
  1522.     SET PC, POP
  1523. :ibc
  1524.     SET C, [arg2]
  1525.     SHL C, 8
  1526.     SET J, [arg1]
  1527.     BOR J, C
  1528.     ADD J, X
  1529.     JSR LoadRAM
  1530.     SET Y, I
  1531.     JSR CheckY
  1532.     SET PC, POP
  1533. :ibd
  1534.     SET C, [arg2]
  1535.     SHL C, 8
  1536.     SET J, [arg1]
  1537.     BOR J, C
  1538.     ADD J, X
  1539.     JSR LoadRAM
  1540.     SET A, I
  1541.     JSR CheckA
  1542.     SET PC, POP
  1543. :ibe
  1544.     SET C, [arg2]
  1545.     SHL C, 8
  1546.     SET J, [arg1]
  1547.     BOR J, C
  1548.     ADD J, Y
  1549.     JSR LoadRAM
  1550.     SET X, I
  1551.     JSR CheckX
  1552.     SET PC, POP
  1553. :ic0
  1554.     SET I, [arg1]
  1555.     JSR CPY
  1556.     SET PC, POP
  1557. :ic1
  1558.     SET I, [Arg1]
  1559.     JSR IndX
  1560.     SET I, J
  1561.     JSR CMP
  1562.     SET PC, POP
  1563. :ic4
  1564.     SET J, [arg1]
  1565.     JSR LoadRAM
  1566.     JSR CPY
  1567.     SET PC, POP
  1568. :ic5
  1569.     SET J, [arg1]
  1570.     JSR LoadRAM
  1571.     JSR CMP
  1572.     SET PC, POP
  1573. :ic6
  1574.     SET J, [arg1]
  1575.     JSR LoadRAM
  1576.     SUB I, 1
  1577.     AND I, 0xFF
  1578.     JSR CheckI
  1579.     JSR StoreRAM
  1580.     SET PC, POP
  1581. :ic8
  1582.     ADD Y, 1
  1583.     AND Y, 0xFF
  1584.     JSR CheckY
  1585.     SET PC, POP
  1586. :ic9
  1587.     SET I, [arg1]
  1588.     JSR CMP
  1589.     SET PC, POP
  1590. :ica
  1591.     SUB X, 1
  1592.     AND X, 0xFF
  1593.     JSR CheckX
  1594.     SET PC, POP
  1595. :icc
  1596.     SET J, [arg1]
  1597.     SET B, [arg2]
  1598.     SHL B, 8
  1599.     BOR J, B
  1600.     JSR LoadRAM
  1601.     JSR CPY
  1602.     SET PC, POP
  1603. :icd
  1604.     SET J, [arg1]
  1605.     SET B, [arg2]
  1606.     SHL B, 8
  1607.     BOR J, B
  1608.     JSR LoadRAM
  1609.     JSR CMP
  1610.     SET PC, POP
  1611. :ice
  1612.     SET J, [arg1]
  1613.     SET B, [arg2]
  1614.     SHL B, 8
  1615.     BOR J, B
  1616.     JSR LoadRAM
  1617.     SUB I, 1
  1618.     AND I, 0xFF
  1619.     JSR CheckI
  1620.     JSR StoreRAM
  1621.     SET PC, POP
  1622. :id0
  1623.     SET Z, [6502P]
  1624.     AND Z, 0x02
  1625.     SET B, [arg1]
  1626.     IFE Z, 0
  1627.      JSR JumpBranch
  1628.     SET PC, POP
  1629. :id1
  1630.     SET I, [Arg1]
  1631.     JSR IndY
  1632.     SET I, J
  1633.     JSR CMP
  1634.     SET PC, POP
  1635. :id5
  1636.     SET J, [arg1]
  1637.     ADD J, X
  1638.     AND J, 0xFF
  1639.     JSR LoadRAM
  1640.     JSR CMP
  1641.     SET PC, POP
  1642. :id6
  1643.     SET J, [arg1]
  1644.     ADD J, X
  1645.     AND J, 0xFF
  1646.     JSR LoadRAM
  1647.     SUB I, 1
  1648.     AND I, 0xFF
  1649.     JSR CheckI
  1650.     JSR StoreRAM
  1651.     SET PC, POP
  1652. :id8
  1653.     AND [6502P], 0xef
  1654.     SET PC, POP
  1655. :id9
  1656.     SET J, [arg1]
  1657.     SET B, [arg2]
  1658.     SHL B, 8
  1659.     BOR J, B
  1660.     ADD J, Y
  1661.     JSR LoadRAM
  1662.     JSR CMP
  1663.     SET PC, POP
  1664. :idd
  1665.     SET J, [arg1]
  1666.     SET B, [arg2]
  1667.     SHL B, 8
  1668.     BOR J, B
  1669.     ADD J, X
  1670.     JSR LoadRAM
  1671.     JSR CMP
  1672.     SET PC, POP
  1673. :ide
  1674.     SET J, [arg1]
  1675.     SET B, [arg2]
  1676.     SHL B, 8
  1677.     BOR J, B
  1678.     ADD J, X
  1679.     JSR LoadRAM
  1680.     SUB I, 1
  1681.     AND I, 0xFF
  1682.     JSR CheckI
  1683.     JSR StoreRAM
  1684.     SET PC, POP
  1685. :ie0
  1686.     SET I, [arg1]
  1687.     JSR CPX
  1688.     SET PC, POP
  1689. :ie1
  1690.     SET I, [Arg1]
  1691.     JSR IndX
  1692.     JSR LoadRAM
  1693.     JSR SBC
  1694.     JSR CheckA
  1695.     SET PC, POP
  1696. :ie4
  1697.     SET J, [arg1]
  1698.     JSR LoadRAM
  1699.     JSR CPX
  1700.     SET PC, POP
  1701. :ie5
  1702.     SET J, [Arg1]
  1703.     JSR LoadRAM
  1704.     JSR SBC
  1705.     JSR CheckA
  1706.     SET PC, POP
  1707. :ie6
  1708.     SET J, [arg1]
  1709.     JSR LoadRAM
  1710.     ADD I, 1
  1711.     AND I, 0xFF
  1712.     JSR CheckI
  1713.     JSR StoreRAM
  1714.     SET PC, POP
  1715. :ie8
  1716.     ADD X, 1
  1717.     AND X, 0xFF
  1718.     JSR CheckX
  1719.     SET PC, POP
  1720. :ie9
  1721.     SET I, [arg1]
  1722.     JSR SBC
  1723.     JSR CheckA
  1724.     SET PC, POP
  1725. :iea
  1726.     ADD 0, 0
  1727.     ADD 0, 0
  1728.     ADD 0, 0
  1729.     SET PC, POP
  1730. :iec
  1731.     SET J, [arg1]
  1732.     SET B, [arg2]
  1733.     SHL B, 8
  1734.     BOR J, B
  1735.     JSR LoadRAM
  1736.     JSR CPX
  1737.     SET PC, POP
  1738. :ied
  1739.     SET Z, [Arg2]
  1740.     SHL Z, 8
  1741.     SET J, [Arg1]
  1742.     BOR J, Z
  1743.     JSR LoadRAM
  1744.     JSR SBC
  1745.     JSR CheckA
  1746.     SET PC, POP
  1747. :iee
  1748.     SET J, [arg1]
  1749.     SET B, [arg2]
  1750.     SHL B, 8
  1751.     BOR J, B
  1752.     JSR LoadRAM
  1753.     ADD I, 1
  1754.     AND I, 0xFF
  1755.     JSR CheckI
  1756.     JSR StoreRAM
  1757.     SET PC, POP
  1758. :if0
  1759.     SET Z, [6502P]
  1760.     AND Z, 0x02
  1761.     SET B, [arg1]
  1762.     IFN Z, 0
  1763.      JSR JumpBranch
  1764.     SET PC, POP
  1765. :if1
  1766.     SET I, [Arg1]
  1767.     JSR IndY
  1768.     JSR LoadRAM
  1769.     JSR SBC
  1770.     JSR CheckA
  1771.     SET PC, POP
  1772. :if5
  1773.     SET J, [Arg1]
  1774.     ADD J, X
  1775.     AND J, 0xFF
  1776.     JSR LoadRAM
  1777.     JSR SBC
  1778.     JSR CheckA
  1779.     SET PC, POP
  1780. :if6
  1781.     SET J, [arg1]
  1782.     ADD J, X
  1783.     AND J, 0xFF
  1784.     JSR LoadRAM
  1785.     ADD I, 1
  1786.     AND I, 0xFF
  1787.     JSR CheckI
  1788.     JSR StoreRAM
  1789.     SET PC, POP
  1790. :if8
  1791.     BOR [6502P], 0x10
  1792.     SET PC, POP
  1793. :if9
  1794.     SET Z, [Arg2]
  1795.     SHL Z, 8
  1796.     SET J, [Arg1]
  1797.     BOR J, Z
  1798.     ADD J, Y
  1799.     JSR LoadRAM
  1800.     JSR SBC
  1801.     JSR CheckA
  1802.     SET PC, POP
  1803. :ifd
  1804.     SET Z, [Arg2]
  1805.     SHL Z, 8
  1806.     SET J, [Arg1]
  1807.     BOR J, Z
  1808.     ADD J, X
  1809.     JSR LoadRAM
  1810.     JSR SBC
  1811.     JSR CheckA
  1812.     SET PC, POP
  1813. :ife
  1814.     SET J, [arg1]
  1815.     SET B, [arg2]
  1816.     SHL B, 8
  1817.     BOR J, B
  1818.     ADD J, X
  1819.     JSR LoadRAM
  1820.     ADD I, 1
  1821.     AND I, 0xFF
  1822.     JSR CheckI
  1823.     JSR StoreRAM
  1824.     SET PC, POP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement