From: Leslie Ayling Date: Thu, 30 Sep 1999 22:12:45 +1000 Here is the source code for a 6502 emulator core in 680x0 assembler. It will run on 68020 and up machines. This is the core that I use in an emulator for the OSI Superboard II (another early 6502 single board machine) that runs on the AMIGA platform. There are a few AMIGA specifics in the code, and also some stuff to support the OSI superboard although it is relatively easy to understand for anyone fluent in 680x0 assembler. All the best, Leslie. ---- MACHINE 68020 SECTION 6502,CODE XDEF _JUMPTBL XDEF _START00 XDEF _RESET00 XDEF _PAUSE00 XREF _rom XREF _scrn XREF _chars XDEF _screenwrite XREF _SIGMASK XREF _PROGCOUNT XREF _CINST XREF _READY XREF _TRACE XREF _CA XREF _CX XREF _CY XREF _CSP XREF _CP XREF _keyrows DEEBUG EQU 1 ; MAKE 0 TO DISABLE DEBUG CODE P65C02 EQU 0 ; MAKE 1 TO ALLOW 65C02 OPCODES _START00: MOVEM.L A0-A6/D0-D7,-(SP) MOVE.L 4,A6 MOVE.B #-1,D0 JSR -$014A(A6) ; ALLOCSIGNAL MOVEQ #0,D1 BSET D0,D1 MOVE.L D1,_SIGMASK ; SAVE IN _SIGMASK IN MAIN PROG BSR.B RESTRT ; SET UP 6502 JUMPS move.l _JUMPTBL,a3 adda.l #$20000,a3 MOVE.L #_rom,a0 MOVE.L #FLAGTABL,A6 ; SET UP FLAG CONVERSION TABLE MOVEQ.L #0,D0 ; A=0 ZERO ALL REGS MOVEQ.L #0,D1 MOVEQ.L #0,D2 ; X=0 MOVEQ.L #0,D3 ; Y=0 MOVEQ.L #0,D4 ; SP=0 MOVEQ.L #0,D5 ; FLAGS=00 MOVEQ.L #0,D6 ; EXT FLAGS =00 MOVE.W ($0000FFFC,A0),D7 ; GET RESET VECTOR ROR.W #8,D7 MOVE.L D7,A2 ADDA.L A0,A2 MOVE.L A0,a4 ADDA.L #$100,A4 ; SET SP BASE TO ADD $0100 move.w (a2)+,d1 ; LOAD INSTRUCTION IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF NMI: ; RESET BUTTON COMES HERE BSR.B RESTRT ; SET UP 6502 JUMPS move.l _JUMPTBL,a3 adda.l #$20000,a3 MOVE.L #_rom,a0 MOVE.L #FLAGTABL,A6 ; SET UP FLAG CONVERSION TABLE MOVE.L A0,a4 ; ADDA.L #$100,A4 ; SET SP BASE TO ADD $0100 MOVEQ.L #0,D0 ; A=0 ZERO ALL REGS MOVEQ.L #0,D1 MOVEQ.L #0,D2 ; X=0 MOVEQ.L #0,D3 ; Y=0 MOVEQ.L #0,D4 ; SP=0 MOVEQ.L #0,D5 ; FLAGS=00 MOVEQ.L #0,D6 ; EXT FLAGS =00 MOVE.W ($0000FFFC,A0),D7 ; GET RESET VECTOR ROR.W #8,D7 MOVE.L D7,A2 ADDA.L A0,A2 move.w (a2)+,d1 ; LOAD INSTRUCTION AT 0000 JMP ([A3,D1.W*4]) ; AND AWAY WE GO!!!!!! PAUSE: ; PAUSE BUTTON COMES HERE MOVEM.L A0-A6/D0-D7,-(SP);SAVE ALL REGS SUBQ.L #2,A2 ; SET PC BACK BEFORE THIS INST. SUBA.L A0,A2 ; REMOVE AMIGA BASE ADD. MOVE.W A2,_PROGCOUNT BSR.B RESTRT ; SET UP 6502 JUMPS MOVE.L 4,A6 MOVE.L _SIGMASK,D0 JSR -$013E(A6) ; WAIT FOR SIG FROM MAIN PROG MOVEM.L (SP)+,A0-A6/D0-D7 MOVEQ #0,D7 MOVE.W _PROGCOUNT,D7 MOVE.L A0,A2 ADDA.L D7,A2 MOVE.W (A2)+,D1 JMP ([A3,D1.W*4]) ; AND AWAY WE GO!!!!!! IF DEEBUG DEBUG: ; SINGLESTEP DEBUG CODE MOVEM.L A0-A6/D0-D7,-(SP);SAVE ALL REGS SUBQ.L #2,A2 ; SET PC BACK BEFORE THIS INST. MOVE.L (A2),_CINST ; SAVE 4 BYTES AT 6502 PC FOR DEBUGGING SUBA.L A0,A2 ; REMOVE AMIGA BASE ADD. MOVE.W A2,_PROGCOUNT MOVE.B D0,_CA MOVE.B D2,_CX MOVE.B D3,_CY MOVE.W D4,_CSP MOVE.B (A6,D5.W),D7 ; GET 6502 EQUIV OF 680X0 REGS OR.B D6,D7 MOVE.B D7,_CP MOVEQ #1,D7 MOVE.W D7,_READY ; READY TO READ VARIABLES MOVE.W _TRACE,D7 ; IS SINGLESTEP ON? BEQ.S NOTRCE MOVE.L 4,A6 MOVE.L _SIGMASK,D0 JSR -$013E(A6) ; WAIT FOR SIG FROM MAIN PROG NOTRCE: MOVEM.L (SP)+,A0-A6/D0-D7 ; RESTORE ALL REGS JMP ([A3,D1.W*4]) ; AND AWAY WE GO!!!!!! ENDIF * A0 = amiga address of 6502 $0000 (CONSTANT) * A2 = amiga address of current 6502 PC (not the actual 6502 PC) * A3 = base address of instruction vector table * A4 = AMIGA address of SP BASE $0100 * A6 = BASE ADDRESS OF LOOKUP TABLES FOR FLAGS,H FLAG,PARITY. * D1.W = current opcode + following single byte operand * (ALSO AVAILABLE FOR TEMPORARY USE WITHIN AN EMULATED INSTRUCTION) * D0.B = current A value * D2.B = current X value * D3.B = current Y value * D4.B = CURRENT SP value * D5.B = FLAGS (680X0 FLAGS NOT 6502) * D6.L = FLAGS (EXTENDED 6502 B,D,I) * D7.L = TEMPORARY WORK REGISTER 2 * 7 6 5 4 3 2 1 0 * 680x0 FLAG BITS - - - X N Z V C * 6502 FLAG BITS N V - B D I Z C * B,D,I are saved in D6.B RESTRT: MOVE.L 4,A6 JSR -$0084(A6) ; Forbid() MOVE.L #MNTBL,A0 ; SET UP MAIN INSTRUCTION VECTORS MOVE.L _JUMPTBL,A1 MOVE.W #$00FF,D1 .L1: MOVE.W #$00FF,D0 MOVE.L (A0)+,A5 .L2: MOVE.L A5,(A1)+ DBRA D0,.L2 DBRA D1,.L1 .L3: MOVE.L 4,A6 JSR -$008A(A6) ; Permit() RTS _RESET00: ; RESETS THE 6502 AFTER THE CURRENT INSTRUCTION (CALLED FROM MAIN PROCESS) MOVEM.L A0-A6/D0-D7,-(SP) MOVE.L 4,A6 JSR -$0084(A6) ; Forbid() MOVE.L _JUMPTBL,A1 MOVE.W #$00FF,D1 .L1: MOVE.W #$00FF,D0 MOVE.L #NMI,A5 .L2: MOVE.L A5,(A1)+ DBRA D0,.L2 DBRA D1,.L1 MOVE.L 4,A6 JSR -$008A(A6) ; Permit() MOVEM.L (SP)+,A0-A6/D0-D7 RTS _PAUSE00: ; PAUSES THE 6502 AFTER THE CURRENT INSTRUCTION (CALLED FROM MAIN PROCESS) MOVEM.L A0-A6/D0-D7,-(SP) MOVE.L 4,A6 JSR -$0084(A6) ; Forbid() MOVE.L _JUMPTBL,A1 MOVE.W #$00FF,D1 .L1: MOVE.W #$00FF,D0 MOVE.L #PAUSE,A5 .L2: MOVE.L A5,(A1)+ DBRA D0,.L2 DBRA D1,.L1 MOVE.L 4,A6 JSR -$008A(A6) ; Permit() MOVEM.L (SP)+,A0-A6/D0-D7 RTS _screenwrite: ************************************************* * ON ENTRY D1.W HOLDS #$XXXX (D000-D3FF) (D000-D7FF FOR 64x32) * D7.B HOLDS ASCII CHAR 00-FF MOVEM.L A0/A2,-(A7) ; ANDI.W #$03FF,D1 ; GET SCREEN POS LEA _scrn,A0 MOVE.L (A0,D1.L*4),A0 ;PTR FOR CURRENT CHAR SCREEN LINE MOVEQ.L #$0,D1 ; MOVE.B D7,D1 ;CURRENT CHAR VAL EXT.L D1 ; MULTIPLY BY 8 TO GET INTO CHARS ASL.L #$3,D1 ; ARRAY LEA _chars,A2 ;CHARS ARRAY PTR ADDA.L D1,A2 MOVE.W #$40,D1 ; 64 CHARS / LINE MOVE.B (A2)+,(A0) ;MOVE TO SCREEN MEM ADD.W D1,A0 MOVE.B (A2)+,(A0) ADD.W D1,A0 MOVE.B (A2)+,(A0) ADD.W D1,A0 MOVE.B (A2)+,(A0) ADD.W D1,A0 MOVE.B (A2)+,(A0) ADD.W D1,A0 MOVE.B (A2)+,(A0) ADD.W D1,A0 MOVE.B (A2)+,(A0) ADD.W D1,A0 MOVE.B (A2)+,(A0) MOVEM.L (A7)+,A0/A2 RTS GETKEY: ******************************************************************************** * GETS VALUE TO STORE IN $DF00 FOR THE KEY(S) PRESSED * DEPENDING ON VAL IN D0 (A) RETURNS VALUE IN D7.B MOVEM.L A0/D0,-(A7) ; SAVE REGS MOVE.B #$FF,D7 ; START WITH NO KEYS PRESSED LEA _keyrows,A0 ; START OF 8 BYTE ARRAY LSR.B #1,D0 ; HAS THIS KBD ROW BEEN SELECTED? BCS.B .1 ; CARRY BIT CLEAR IF THIS ROW IS SELECTED AND.B (A0),D7 ; MASK ANY SELECTED ROWS IN D7 .1: ADDQ.L #1,A0 LSR.B #1,D0 ; AND DO IT 8 TIMES BCS.B .2 ; ONCE FOR EACH ROW AND.B (A0),D7 .2: ADDQ.L #1,A0 LSR.B #1,D0 BCS.B .3 AND.B (A0),D7 .3: ADDQ.L #1,A0 LSR.B #1,D0 BCS.B .4 AND.B (A0),D7 .4: ADDQ.L #1,A0 LSR.B #1,D0 BCS.B .5 AND.B (A0),D7 .5: ADDQ.L #1,A0 LSR.B #1,D0 BCS.B .6 AND.B (A0),D7 .6: ADDQ.L #1,A0 LSR.B #1,D0 BCS.B .7 AND.B (A0),D7 .7: ADDQ.L #1,A0 LSR.B #1,D0 BCS.B .8 AND.B (A0),D7 ; D7 NOW HOLDS VAL TO STORE IN $DF00 .8: MOVEM.L (A7)+,A0/D0 ; RESTORE RTS ****************************************************************************************** ILLEGAL: ; ILLEGAL INSTRUCTION MOVEM.L (SP)+,A0-A6/D0-D7 rts MAIN00: ; 6502 BRK ORI.B #$14,D6 ; SET B,I IN FLAGS SUBQ.L #1,A2 ; POSITION PC TO NEXT INSTR. SUBA.L A0,A2 MOVE.L A2,D7 ROL.W #8,D7 MOVE.B D7,(A4,D4.W) ; PUSH MSB SUBQ.B #1,D4 ROL.W #8,D7 MOVE.B D7,(A4,D4.W) ; PUSH LSB SUBQ.B #1,D4 MOVE.B (A6,D5.W),D7 ; GET 6502 EQUIV OF 680X0 REGS OR.B D6,D7 MOVE.B D7,(A4,D4.W) ; PUSH FLAGS SUBQ.B #1,D4 MOVE.W ($0000FFFE,A0),D7 ; GET IRQ VECTOR ROR.W #8,D7 MOVE.L D7,A2 ADDA.L A0,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN01: ; 6502 ORA (n,X) ANDI.B #$F3,D5 ANDI.L #$FF,D1 ADD.B D2,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 OR.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN05: ; 6502 ORA n ANDI.B #$F3,D5 ANDI.W #$FF,D1 OR.B (A0,D1.W),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN06: ; 6502 ASL n ANDI.B #$E2,D5 ANDI.W #$FF,D1 SWAP D4 MOVE.B (A0,D1.W),D4 LSL.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.W) SWAP D4 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN08: ; 6502 PHP MOVE.B (A6,D5.W),D7 ; GET 6502 EQUIV OF 680X0 REGS OR.B D6,D7 MOVE.B D7,(A4,D4.W) SUBQ.B #1,D4 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN09: ; 6502 ORA #n ANDI.B #$F3,D5 OR.B D1,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN0A: ; 6502 ASL A ANDI.B #$E2,D5 LSL.B #1,D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN0D: ; 6502 ORA nn ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.B #$F3,D5 OR.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN0E: ; 6502 ASL nn *************** ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 BPL.B .1 ANDI.B #$E2,D5 ; ADDRESS IS 8000-FFFF COND FLAGS BUT DONT CHANGE MEM MOVE.B (A0,D1.L),D7 ASL.B #1,D7 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: ANDI.B #$E2,D5 SWAP D4 MOVE.B (A0,D1.L),D4 ASL.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.L) SWAP D4 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN10: ; 6502 BPL n EXT.W D1 MOVE.W D5,CCR BMI.B M101 ADDA.W D1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF M101: MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN11: ; 6502 ORA (n),Y ANDI.B #$F3,D5 ANDI.L #$FF,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 ADD.W D3,D1 OR.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN15: ; 6502 ORA n,X ANDI.B #$F3,D5 ADD.B D2,D1 ANDI.W #$FF,D1 OR.B (A0,D1.W),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN16: ; 6502 ASL n,X ANDI.B #$E2,D5 ADD.B D2,D1 ANDI.W #$FF,D1 SWAP D4 MOVE.B (A0,D1.W),D4 LSL.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.W) SWAP D4 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN18: ; 6502 CLC ANDI.B #$EE,D5 ; CLEAR X,C IN D5 (CCR) SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN19: ; 6502 ORA nn,Y ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D3,D1 ANDI.B #$F3,D5 OR.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF IF P65C02 MAIN1A: ; 6502 INA A (65C02 ONLY) ANDI.B #$F3,D5 ADDQ.B #1,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF ENDIF MAIN1D: ; 6502 ORA nn,X ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 ANDI.B #$F3,D5 OR.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN1E: ; 6502 ASL nn,X *************** ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 BPL.B .1 ANDI.B #$E2,D5 ; ADDRESS IS 8000-FFFF COND FLAGS BUT DONT CHANGE MEM MOVE.B (A0,D1.L),D7 ASL.B #1,D7 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: ANDI.B #$E2,D5 SWAP D4 MOVE.B (A0,D1.L),D4 ASL.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.L) SWAP D4 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN20: ; 6502 JSR nn ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 SUBQ.L #1,A2 SUBA.L A0,A2 MOVE.L A2,D7 ROL.W #8,D7 MOVE.B D7,(A4,D4.W) ; PUSH MSB SUBQ.B #1,D4 ROL.W #8,D7 MOVE.B D7,(A4,D4.W) ; PUSH LSB SUBQ.B #1,D4 MOVE.L A0,A2 MOVE.W D1,D7 ADDA.L D7,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN21: ; 6502 AND (n,X) ANDI.B #$F3,D5 ANDI.L #$FF,D1 ADD.B D2,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 AND.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN24: ; 6502 BIT n ANDI.B #$F1,D5 ; CLEAR N,Z,V ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D1 AND.B D0,D1 MOVE.W CCR,D7 ; SET Z IF RESULT OF AND =0 ANDI.B #$04,D7 ; MASK ALL BUT Z OR.B D7,D5 MOVE.B D1,D7 ANDI.B #$40,D7 ; GET BIT 6 TO MOVE TO V FLG LSR.B #5,D7 ; MOVE TO 680X0 V FLG POSITION OR.B D7,D5 ; SET V FLG IF BIT6 WAS SET ANDI.B #$80,D1 ; GET BIT 7 TO MOVE TO N FLG LSR.B #4,D1 ; MOVE TO 680X0 N FLG POSITION OR.B D1,D5 ; SET N FLG IF BIT7 WAS SET MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN25: ; 6502 AND n ANDI.B #$F3,D5 ANDI.W #$FF,D1 AND.B (A0,D1.W),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN26: ; 6502 ROL n ANDI.W #$FF,D1 SWAP D4 MOVE.B (A0,D1.W),D4 MOVE.W D5,CCR ROXL.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.W) SWAP D4 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN28: ; 6502 PLP ADDQ.B #1,D4 MOVE.B (A4,D4.W),D6 MOVE.B $20(A6,D6.W),D5 ; GET 680X0 EQUIV OF 6502 REGS ANDI.W #$1C,D6 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN29: ; 6502 AND #n ANDI.B #$F3,D5 AND.B D1,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN2A: ; 6502 ROL A MOVE.W D5,CCR ROXL.B #1,D0 MOVE.W CCR,D7 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN2C: ; 6502 BIT nn ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ; GET nn IN D1.W ANDI.B #$F1,D5 ; CLEAR N,Z,V MOVE.B (A0,D1.L),D1 AND.B D0,D1 MOVE.W CCR,D7 ; SET Z IF RESULT OF AND =0 ANDI.B #$04,D7 ; MASK ALL BUT Z OR.B D7,D5 MOVE.B D1,D7 ANDI.B #$40,D7 ; GET BIT 6 TO MOVE TO V FLG LSR.B #5,D7 ; MOVE TO 680X0 V FLG POSITION OR.B D7,D5 ; SET V FLG IF BIT6 WAS SET ANDI.B #$80,D1 ; GET BIT 7 TO MOVE TO N FLG LSR.B #4,D1 ; MOVE TO 680X0 N FLG POSITION OR.B D1,D5 ; SET N FLG IF BIT7 WAS SET MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN2D: ; 6502 AND nn ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.B #$F3,D5 AND.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN2E: ; 6502 ROL nn *************** ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 BPL.B .1 MOVE.B (A0,D1.L),D7 ; ADDRESS IS 8000-FFFF COND FLAGS BUT DONT CHANGE MEM MOVE.W D5,CCR ROXL.B #1,D7 MOVE.W CCR,D7 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: SWAP D4 MOVE.B (A0,D1.L),D4 MOVE.W D5,CCR ROXL.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.L) SWAP D4 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN30: ; 6502 BMI n EXT.W D1 MOVE.W D5,CCR BPL.B M301 ADDA.W D1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF M301: MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN31: ; 6502 AND (n),Y ANDI.B #$F3,D5 ANDI.L #$FF,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 ADD.W D3,D1 AND.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN35: ; 6502 AND n,X ANDI.B #$F3,D5 ADD.B D2,D1 ANDI.W #$FF,D1 AND.B (A0,D1.W),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN36: ; 6502 ROL n,X ADD.B D2,D1 ANDI.W #$FF,D1 SWAP D4 MOVE.B (A0,D1.W),D4 MOVE.W D5,CCR ROXL.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.W) SWAP D4 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN38: ; 6502 SEC ORI.B #$11,D5 ; SET X,C IN D5.B (CCR) SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN39: ; 6502 AND nn,Y ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D3,D1 ANDI.B #$F3,D5 AND.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF IF P65C02 MAIN3A: ; 6502 DEA A (65C02 ONLY) ANDI.B #$F3,D5 SUBQ.B #1,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF ENDIF MAIN3D: ; 6502 AND nn,X ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 ANDI.B #$F3,D5 AND.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN3E: ; 6502 ROL nn,X *************** ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 BPL.B .1 MOVE.B (A0,D1.L),D7 ; ADDRESS IS 8000-FFFF COND FLAGS BUT DONT CHANGE MEM MOVE.W D5,CCR ROXL.B #1,D7 MOVE.W CCR,D7 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: SWAP D4 MOVE.B (A0,D1.L),D4 MOVE.W D5,CCR ROXL.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.L) SWAP D4 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN40: ; 6502 RTI ADDQ.B #1,D4 ; POP FLAGS MOVE.B (A4,D4.W),D6 MOVE.B $20(A6,D6.W),D5 ; GET 680X0 EQUIV OF 6502 REGS ANDI.W #$1C,D6 MOVEQ #0,D7 ADDQ.B #1,D4 MOVE.B (A4,D4.W),D7 ; PULL LSB ROL.W #8,D7 ADDQ.B #1,D4 MOVE.B (A4,D4.W),D7 ; PULL MSB ROL.W #8,D7 MOVE.L A0,A2 ; DONT INC PC AS ALREADY AT RIGHT PLACE ADDA.L D7,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN41: ; 6502 EOR (n,X) ANDI.B #$F3,D5 ANDI.L #$FF,D1 ADD.B D2,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 MOVE.B (A0,D1.L),D7 EOR.B D7,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN45: ; 6502 EOR n ANDI.B #$F3,D5 ANDI.W #$FF,D1 MOVE.B (A0,D1.L),D7 EOR.B D7,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN46: ; 6502 LSR n ANDI.B #$E2,D5 ANDI.W #$FF,D1 SWAP D4 MOVE.B (A0,D1.W),D4 LSR.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.W) SWAP D4 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN48: ; 6502 PHA MOVE.B D0,(A4,D4.W) SUBQ.B #1,D4 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN49: ; 6502 EOR #n ANDI.B #$F3,D5 EOR.B D1,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN4A: ; 6502 LSR A ANDI.B #$E2,D5 LSR.B #1,D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN4C: ; 6502 JMP XXXX ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 MOVEQ #0,D7 MOVE.W D1,D7 MOVE.L A0,A2 ADDA.L D7,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN4D: ; 6502 EOR nn ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.B #$F3,D5 MOVE.B (A0,D1.L),D7 EOR.B D7,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN4E: ; 6502 LSR nn *************** ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 BPL.B .1 ANDI.B #$E2,D5 ; ADDRESS IS 8000-FFFF COND FLAGS BUT DONT CHANGE MEM MOVE.B (A0,D1.L),D7 LSR.B #1,D7 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: ANDI.B #$E2,D5 SWAP D4 MOVE.B (A0,D1.L),D4 LSR.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.L) SWAP D4 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN50: ; 6502 BVC n EXT.W D1 MOVE.W D5,CCR BVS.B M501 ADDA.W D1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF M501: MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN51: ; 6502 EOR (n),Y ANDI.B #$F3,D5 ANDI.L #$FF,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 ADD.W D3,D1 MOVE.B (A0,D1.L),D7 EOR.B D7,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN55: ; 6502 EOR n,X ANDI.B #$F3,D5 ADD.B D2,D1 MOVE.B (A0,D1.L),D7 EOR.B D7,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN56: ; 6502 LSR n,X ANDI.B #$E2,D5 ADD.B D2,D1 ANDI.W #$FF,D1 SWAP D4 MOVE.B (A0,D1.W),D4 LSR.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.W) SWAP D4 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN58: ; 6502 CLI ANDI.B #$FB,D6 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN59: ; 6502 EOR nn,Y ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D3,D1 ANDI.B #$F3,D5 MOVE.B (A0,D1.L),D7 EOR.B D7,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF IF P65C02 MAIN5A: ; 6502 PHY (65C02 ONLY) MOVE.B D3,(A4,D4.W) SUBQ.B #1,D4 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF ENDIF MAIN5D: ; 6502 EOR nn,X ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 ANDI.B #$F3,D5 MOVE.B (A0,D1.L),D7 EOR.B D7,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN5E: ; 6502 LSR nn,X *************** ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 BPL.B .1 ANDI.B #$E2,D5 ; ADDRESS IS 8000-FFFF COND FLAGS BUT DONT CHANGE MEM MOVE.B (A0,D1.L),D7 LSR.B #1,D7 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: ANDI.B #$E2,D5 SWAP D4 MOVE.B (A0,D1.L),D4 LSR.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.L) SWAP D4 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN60: ; 6502 RTS MOVEQ #0,D7 ADDQ.B #1,D4 MOVE.B (A4,D4.W),D7 ; PULL LSB ROL.W #8,D7 ADDQ.B #1,D4 MOVE.B (A4,D4.W),D7 ; PULL MSB ROL.W #8,D7 MOVE.L A0,A2 ADDA.L D7,A2 ADDQ.L #1,A2 ; ADD 1 TO GET NEXT INSTRUCTION MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN61: ; 6502 ADC (n,X) ORI.B #$04,D5 ; SET Z ANDI.L #$FF,D1 ADD.B D2,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 MOVE.B (A0,D1.L),D7 MOVE.W D5,CCR ADDX.B D7,D0 MOVE.W CCR,D5 ; NO NEED TO MASK ALL REGS ARE AFFECTED MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN65: ; 6502 ADC n ORI.B #$04,D5 ; SET Z ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D7 MOVE.W D5,CCR ADDX.B D7,D0 MOVE.W CCR,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN66: ; 6502 ROR n ANDI.W #$FF,D1 SWAP D4 MOVE.B (A0,D1.W),D4 MOVE.W D5,CCR ROXR.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.W) SWAP D4 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN68: ; 6502 PLA ANDI.B #$F3,D5 ; zero N and Z ADDQ.B #1,D4 MOVE.B (A4,D4.W),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 ; find N and Z only OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN69: ; 6502 ADC #n ORI.B #$04,D5 ; SET Z MOVE.W D5,CCR ADDX.B D1,D0 MOVE.W CCR,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN6A: ; 6502 ROR A MOVE.W D5,CCR ROXR.B #1,D0 MOVE.W CCR,D7 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN6C: ; 6502 JMP (nn) ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 MOVEQ #0,D7 MOVE.W D1,D7 MOVE.W (A0,D7.L),D7 ROL.W #8,D7 MOVE.L A0,A2 ADDA.L D7,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN6D: ; 6502 ADC nn ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ORI.B #$04,D5 ; SET Z MOVE.B (A0,D1.L),D7 MOVE.W D5,CCR ADDX.B D7,D0 MOVE.W CCR,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN6E: ; 6502 ROR nn *************** ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 BPL.B .1 MOVE.B (A0,D1.L),D7 ; ADDRESS IS 8000-FFFF COND FLAGS BUT DONT CHANGE MEM MOVE.W D5,CCR ROXR.B #1,D7 MOVE.W CCR,D7 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: SWAP D4 MOVE.B (A0,D1.L),D4 MOVE.W D5,CCR ROXR.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.L) SWAP D4 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN70: ; 6502 BVS n EXT.W D1 MOVE.W D5,CCR BVC.B M701 ADDA.W D1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF M701: MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN71: ; 6502 ADC (n),Y ANDI.L #$FF,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 ADD.W D3,D1 ORI.B #$04,D5 ; SET Z MOVE.B (A0,D1.L),D7 MOVE.W D5,CCR ADDX.B D7,D0 MOVE.W CCR,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN75: ; 6502 ADC n,X ADD.B D2,D1 ANDI.W #$FF,D1 ORI.B #$04,D5 ; SET Z MOVE.B (A0,D1.L),D7 MOVE.W D5,CCR ADDX.B D7,D0 MOVE.W CCR,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN76: ; 6502 ROR n,X ADD.B D2,D1 ANDI.W #$FF,D1 SWAP D4 MOVE.B (A0,D1.W),D4 MOVE.W D5,CCR ROXR.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.W) SWAP D4 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN78: ; 6502 SEI ORI.B #$04,D6 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN79: ; 6502 ADC nn,Y ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D3,D1 ORI.B #$04,D5 ; SET Z MOVE.B (A0,D1.L),D7 MOVE.W D5,CCR ADDX.B D7,D0 MOVE.W CCR,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF IF P65C02 MAIN7A: ; 6502 PLY (65C02 ONLY) ADDQ.B #1,D4 MOVE.B (A4,D4.W),D3 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF ENDIF MAIN7D: ; 6502 ADC nn,X ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 ORI.B #$04,D5 ; SET Z MOVE.B (A0,D1.L),D7 MOVE.W D5,CCR ADDX.B D7,D0 MOVE.W CCR,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN7E: ; 6502 ROR nn,X *************** ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 BPL.B .1 MOVE.B (A0,D1.L),D7 ; ADDRESS IS 8000-FFFF COND FLAGS BUT DONT CHANGE MEM MOVE.W D5,CCR ROXR.B #1,D7 MOVE.W CCR,D7 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: SWAP D4 MOVE.B (A0,D1.L),D4 MOVE.W D5,CCR ROXR.B #1,D4 MOVE.W CCR,D7 MOVE.B D4,(A0,D1.L) SWAP D4 ANDI.B #$E2,D5 ANDI.B #$1D,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF IF P65C02 MAIN80: ; 6502 BRA n (65C02 ONLY) EXT.W D1 MOVE.W D5,CCR ADDA.W D1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF ENDIF MAIN81: ; 6502 STA (n,X)************************* KBD ANDI.L #$FF,D1 ADD.B D2,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 BPL.B .1 CMPI.W #$D400,D1 BCC.B .2 CMPI.W #$CFFF,D1 BHI.B .3 .2: MOVE.W (A2)+,D1 ; pointing at ROM do nothing IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .3: MOVE.B D0,D7 ; MOVE A TO D7 FOR SCREENWRITE MOVE.B D0,(A0,D1.L) ; SAVE BYTE TO REAL MEM BSR _screenwrite MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: MOVE.B D0,(A0,D1.L) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN84: ; 6502 STY n ANDI.W #$FF,D1 MOVE.B D3,(A0,D1.W) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN85: ; 6502 STA n ANDI.W #$FF,D1 MOVE.B D0,(A0,D1.W) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN86: ; 6502 STX n ANDI.W #$FF,D1 MOVE.B D2,(A0,D1.W) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN88: ; 6502 DEY ANDI.B #$F3,D5 SUBQ.B #1,D3 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN8A: ; 6502 TXA ANDI.B #$F3,D5 MOVE.B D2,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN8C: ; 6502 STY nn********************* no kbd ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 BPL.B .1 CMPI.W #$D400,D1 ; check for screen mem BCC.B .2 CMPI.W #$CFFF,D1 BHI.B .3 .2: MOVE.W (A2)+,D1 ; pointing at ROM do nothing IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .3: MOVE.B D3,D7 ; MOVE Y TO D7 FOR SCREENWRITE MOVE.B D3,(A0,D1.L) ; SAVE BYTE TO REAL MEM BSR _screenwrite MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: MOVE.B D3,(A0,D1.L) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN8D: ; 6502 STA nn****************** still no KBD support. ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 BPL.B .1 ; branch if <$8000 (in ram) CMPI.W #$D400,D1 BCC.B .2 CMPI.W #$CFFF,D1 BHI.B .3 .2: CMPI.W #$DF00,D1 ; POINTING AT KEYBOARD LOC? BNE.B .4 BSR GETKEY ; GET KEYPRESSES MOVE.B D7,(A0,D1.L) ; SAVE BYTE TO REAL MEM .4: MOVE.W (A2)+,D1 ; pointing at ROM do nothing IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .3: MOVE.B D0,D7 ; MOVE A TO D7 FOR SCREENWRITE MOVE.B D0,(A0,D1.L) ; SAVE BYTE TO REAL MEM BSR _screenwrite MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: MOVE.B D0,(A0,D1.L) ; pointing at RAM do normal STA MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN8E: ; 6502 STX nn************* NO KBD ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 BPL.B .1 CMPI.W #$D400,D1 BCC.B .2 CMPI.W #$CFFF,D1 BHI.B .3 .2: MOVE.W (A2)+,D1 ; pointing at ROM do nothing IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .3: MOVE.B D2,D7 ; MOVE X TO D7 FOR SCREENWRITE MOVE.B D2,(A0,D1.L) ; SAVE BYTE TO REAL MEM BSR _screenwrite MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: MOVE.B D2,(A0,D1.L) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN90: ; 6502 BCC n EXT.W D1 MOVE.W D5,CCR BCS.B M901 ADDA.W D1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF M901: MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN91: ; 6502 STA (n),Y****************** KBD ANDI.L #$FF,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 ADD.W D3,D1 BPL.B .1 CMPI.W #$D400,D1 BCC.B .2 CMPI.W #$CFFF,D1 BHI.B .3 .2: MOVE.W (A2)+,D1 ; pointing at ROM do nothing IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .3: MOVE.B D0,D7 ; MOVE A TO D7 FOR SCREENWRITE MOVE.B D0,(A0,D1.L) ; SAVE BYTE TO REAL MEM BSR _screenwrite MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: MOVE.B D0,(A0,D1.L) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN94: ; 6502 STY n,X ADD.B D2,D1 ANDI.W #$FF,D1 MOVE.B D3,(A0,D1.W) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN95: ; 6502 STA n,X ADD.B D2,D1 ANDI.W #$FF,D1 MOVE.B D0,(A0,D1.W) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN96: ; 6502 STX n,Y ADD.B D3,D1 ANDI.W #$FF,D1 MOVE.B D2,(A0,D1.W) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN98: ; 6502 TYA ANDI.B #$F3,D5 MOVE.B D3,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN99: ; 6502 STA nn,Y************** KBD ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D3,D1 BPL.B .1 CMPI.W #$D400,D1 BCC.B .2 CMPI.W #$CFFF,D1 BHI.B .3 .2: MOVE.W (A2)+,D1 ; pointing at ROM do nothing IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .3: MOVE.B D0,D7 ; MOVE A TO D7 FOR SCREENWRITE MOVE.B D0,(A0,D1.L) ; SAVE BYTE TO REAL MEM BSR _screenwrite MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: MOVE.B D0,(A0,D1.L) MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN9A: ; 6502 TXS MOVE.B D2,D4 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIN9D: ; 6502 STA nn,X************** ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 BPL.B .1 CMPI.W #$D400,D1 BCC.B .2 CMPI.W #$CFFF,D1 BHI.B .3 .2: MOVE.W (A2)+,D1 ; pointing at ROM do nothing IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .3: MOVE.B D0,D7 ; MOVE A TO D7 FOR SCREENWRITE MOVE.B D0,(A0,D1.L) ; SAVE BYTE TO REAL MEM BSR _screenwrite MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: MOVE.B D0,(A0,D1.L) ; POINTING AT RAM -> DO INST MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINA0: ; 6502 LDY #n ANDI.B #$F3,D5 MOVE.B D1,D3 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINA1: ; 6502 LDA (n,X) ANDI.B #$F3,D5 ANDI.L #$FF,D1 ADD.B D2,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 MOVE.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINA2: ; 6502 LDX #n ANDI.B #$F3,D5 MOVE.B D1,D2 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINA4: ; 6502 LDY n ANDI.B #$F3,D5 ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D3 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINA5: ; 6502 LDA n ANDI.B #$F3,D5 ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINA6: ; 6502 LDX n ANDI.B #$F3,D5 ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D2 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINA8: ; 6502 TAY ANDI.B #$F3,D5 MOVE.B D0,D3 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINA9: ; 6502 LDA #n ANDI.B #$F3,D5 MOVE.B D1,D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINAA: ; 6502 TAX ANDI.B #$F3,D5 MOVE.B D0,D2 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINAC: ; 6502 LDY nn ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.L #$FFFF,D1 MOVE.B (A0,D1.L),D3 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINAD: ; 6502 LDA nn ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.L #$FFFF,D1 MOVE.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINAE: ; 6502 LDX nn ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.L #$FFFF,D1 MOVE.B (A0,D1.L),D2 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINB0: ; 6502 BCS n EXT.W D1 MOVE.W D5,CCR BCC.B MB01 ADDA.W D1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MB01: MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINB1: ; 6502 LDA (n),Y ANDI.B #$F3,D5 ANDI.L #$FF,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 ADD.W D3,D1 MOVE.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINB4: ; 6502 LDY n,X ANDI.B #$F3,D5 ADD.B D2,D1 ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D3 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINB5: ; 6502 LDA n,X ANDI.B #$F3,D5 ADD.B D2,D1 ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINB6: ; 6502 LDX n,Y ANDI.B #$F3,D5 ADD.B D3,D1 ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D2 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINB8: ; 6502 CLV ANDI.B #$FD,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINB9: ; 6502 LDA nn,Y ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.L #$FFFF,D1 ADD.W D3,D1 MOVE.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINBA: ; 6502 TSX ANDI.B #$F3,D5 MOVE.B D4,D2 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINBC: ; 6502 LDY nn,X ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.L #$FFFF,D1 ADD.W D2,D1 MOVE.B (A0,D1.L),D3 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINBD: ; 6502 LDA nn,X ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.L #$FFFF,D1 ADD.W D2,D1 MOVE.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINBE: ; 6502 LDX nn,Y ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ANDI.L #$FFFF,D1 ADD.W D3,D1 MOVE.B (A0,D1.L),D2 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINC0: ; 6502 CPY #n ANDI.B #$E2,D5 CMP.B D1,D3 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINC1: ; 6502 CMP (n,X) ANDI.B #$E2,D5 ANDI.L #$FF,D1 ADD.B D2,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 CMP.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINC4: ; 6502 CPY n ANDI.B #$E2,D5 ANDI.W #$FF,D1 CMP.B (A0,D1.W),D3 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINC5: ; 6502 CMP n ANDI.B #$E2,D5 ANDI.W #$FF,D1 CMP.B (A0,D1.W),D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINC6: ; 6502 DEC n ANDI.B #$F3,D5 ANDI.W #$FF,D1 SUBI.B #1,(A0,D1.W) MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINC8: ; 6502 INY ANDI.B #$F3,D5 ADDQ.B #1,D3 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINC9: ; 6502 CMP #n ANDI.B #$E2,D5 CMP.B D1,D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINCA: ; 6502 DEX ANDI.B #$F3,D5 SUBQ.B #1,D2 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINCC: ; 6502 CPY nn ANDI.B #$E2,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 CMP.B (A0,D1.L),D3 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINCD: ; 6502 CMP nn ANDI.B #$E2,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 CMP.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINCE: ; 6502 DEC nn********************* ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 BPL.B .1 MOVE.B (A0,D1.L),D7 ; COND FLAGS BUT DONT CHANGE BYTE SUBQ.B #1,D7 ; AS ADD IS 8000-FFFF MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: SUBI.B #1,(A0,D1.L) MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIND0: ; 6502 BNE n EXT.W D1 MOVE.W D5,CCR BEQ.B MD01 ADDA.W D1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MD01: MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIND1: ; 6502 CMP (n),Y ANDI.B #$E2,D5 ANDI.L #$FF,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 ADD.W D3,D1 CMP.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIND5: ; 6502 CMP n,X ANDI.B #$E2,D5 ADD.B D2,D1 ANDI.W #$FF,D1 CMP.B (A0,D1.W),D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIND6: ; 6502 DEC n,X ANDI.B #$F3,D5 ADD.B D2,D1 ANDI.W #$FF,D1 SUBI.B #1,(A0,D1.W) MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIND8: ; 6502 CLD ANDI.B #$F7,D6 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAIND9: ; 6502 CMP nn,Y ANDI.B #$E2,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D3,D1 CMP.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF IF P65C02 MAINDA: ; 6502 PHX (65C02 ONLY) MOVE.B D2,(A4,D4.W) SUBQ.B #1,D4 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF ENDIF MAINDD: ; 6502 CMP nn,X ANDI.B #$E2,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 CMP.B (A0,D1.L),D0 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINDE: ; 6502 DEC nn,X********************* ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 BPL.B .1 MOVE.B (A0,D1.L),D7 ; COND FLAGS BUT DONT CHANGE BYTE SUBQ.B #1,D7 ; AS ADD IS 8000-FFFF MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: SUBI.B #1,(A0,D1.L) MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINE0: ; 6502 CPX #n ANDI.B #$E2,D5 CMP.B D1,D2 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINE1: ; 6502 SBC (n,X) ANDI.W #$FF,D1 ADD.B D2,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 MOVE.B (A0,D1.L),D7 ; GET (n,X) ORI.B #$04,D5 ; SET Z FOR SUBX INSTR EORI.B #$11,D5 ; INVERT X,C TO SUIT 680x0 MOVE.W D5,CCR SUBX.B D7,D0 MOVE.W CCR,D5 ; ALL 6502 FLAGS AFFECTED EORI.B #$11,D5 ; INVERT X,C AS 6502 HAS REVERSED MEANING MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINE4: ; 6502 CPX n ANDI.B #$E2,D5 ANDI.W #$FF,D1 CMP.B (A0,D1.W),D2 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINE5: ; 6502 SBC n ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D7 ; GET (n) ORI.B #$04,D5 ; SET Z FOR SUBX INSTR EORI.B #$11,D5 ; INVERT X,C TO SUIT 680x0 MOVE.W D5,CCR SUBX.B D7,D0 MOVE.W CCR,D5 ; ALL 6502 FLAGS AFFECTED EORI.B #$11,D5 ; INVERT X,C AS 6502 HAS REVERSED MEANING MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINE6: ; 6502 INC n ANDI.B #$F3,D5 ANDI.W #$FF,D1 ADDI.B #1,(A0,D1.W) MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINE8: ; 6502 INX ANDI.B #$F3,D5 ADDQ.B #1,D2 MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINE9: ; 6502 SBC #n ORI.B #$04,D5 ; SET Z FOR SUBX INSTR EORI.B #$11,D5 ; INVERT X,C TO SUIT 680x0 MOVE.W D5,CCR SUBX.B D1,D0 MOVE.W CCR,D5 ; ALL 6502 FLAGS AFFECTED EORI.B #$11,D5 ; INVERT X,C AS 6502 HAS REVERSED MEANING MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINEA: ; 6502 NOP SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINEC: ; 6502 CPX nn ANDI.B #$E2,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 CMP.B (A0,D1.L),D2 MOVE.W CCR,D7 ANDI.B #$1D,D7 OR.B D7,D5 ANDI.B #$01,D7 ; SET X IF C IS SET ROL.B #4,D7 OR.B D7,D5 EORI.B #$11,D5 ; INVERT X,C FOR 6502 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINED: ; 6502 SBC nn ROL.W #8,D1 ; GET nn MOVE.B (A2)+,D1 ROL.W #8,D1 MOVE.B (A0,D1.L),D7 ; GET (nn) ORI.B #$04,D5 ; SET Z FOR SUBX INSTR EORI.B #$11,D5 ; INVERT X,C TO SUIT 680x0 MOVE.W D5,CCR SUBX.B D7,D0 MOVE.W CCR,D5 ; ALL 6502 FLAGS AFFECTED EORI.B #$11,D5 ; INVERT X,C AS 6502 HAS REVERSED MEANING MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINEE: ; 6502 INC nn********************* ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 BPL.B .1 MOVE.B (A0,D1.L),D7 ; COND FLAGS BUT DONT CHANGE BYTE ADDQ.B #1,D7 ; AS ADD IS 8000-FFFF MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: ADDI.B #1,(A0,D1.L) MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINF0: ; 6502 BEQ n EXT.W D1 MOVE.W D5,CCR BNE.B MF01 ADDA.W D1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MF01: MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINF1: ; 6502 SBC (n),Y ANDI.L #$FF,D1 MOVE.W (A0,D1.W),D1 ROL.W #8,D1 ADD.W D3,D1 MOVE.B (A0,D1.L),D7 ; GET (n,X) ORI.B #$04,D5 ; SET Z FOR SUBX INSTR EORI.B #$11,D5 ; INVERT X,C TO SUIT 680x0 MOVE.W D5,CCR SUBX.B D7,D0 MOVE.W CCR,D5 ; ALL 6502 FLAGS AFFECTED EORI.B #$11,D5 ; INVERT X,C AS 6502 HAS REVERSED MEANING MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINF5: ; 6502 SBC n,X ADD.B D2,D1 ; compute n,X ANDI.W #$FF,D1 MOVE.B (A0,D1.W),D7 ; GET (n,X) ORI.B #$04,D5 ; SET Z FOR SUBX INSTR EORI.B #$11,D5 ; INVERT X,C TO SUIT 680x0 MOVE.W D5,CCR SUBX.B D7,D0 MOVE.W CCR,D5 ; ALL 6502 FLAGS AFFECTED EORI.B #$11,D5 ; INVERT X,C AS 6502 HAS REVERSED MEANING MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINF6: ; 6502 INC n,X ANDI.B #$F3,D5 ADD.B D2,D1 ANDI.W #$FF,D1 ADDI.B #1,(A0,D1.W) MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINF8: ; 6502 SED ORI.B #$08,D6 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINF9: ; 6502 SBC nn,Y ROL.W #8,D1 ; GET nn MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D3,D1 ; ADD Y MOVE.B (A0,D1.L),D7 ; GET (nn,Y) ORI.B #$04,D5 ; SET Z FOR SUBX INSTR EORI.B #$11,D5 ; INVERT X,C TO SUIT 680x0 MOVE.W D5,CCR SUBX.B D7,D0 MOVE.W CCR,D5 ; ALL 6502 FLAGS AFFECTED EORI.B #$11,D5 ; INVERT X,C AS 6502 HAS REVERSED MEANING MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF IF P65C02 MAINFA: ; 6502 PLX (65C02 ONLY) ADDQ.B #1,D4 MOVE.B (A4,D4.W),D2 SUBQ.L #1,A2 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF ENDIF MAINFD: ; 6502 SBC nn,X ROL.W #8,D1 ; GET nn MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 ; ADD X MOVE.B (A0,D1.L),D7 ; GET (nn,X) ORI.B #$04,D5 ; SET Z FOR SUBX INSTR EORI.B #$11,D5 ; INVERT X,C TO SUIT 680x0 MOVE.W D5,CCR SUBX.B D7,D0 MOVE.W CCR,D5 ; ALL 6502 FLAGS AFFECTED EORI.B #$11,D5 ; INVERT X,C AS 6502 HAS REVERSED MEANING MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF MAINFE: ; 6502 INC nn,X ********************* ANDI.B #$F3,D5 ROL.W #8,D1 MOVE.B (A2)+,D1 ROL.W #8,D1 ADD.W D2,D1 BPL.B .1 MOVE.B (A0,D1.L),D7 ; COND FLAGS BUT DONT CHANGE BYTE ADDQ.B #1,D7 ; AS ADD IS 8000-FFFF MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF .1: ADDI.B #1,(A0,D1.L) MOVE.W CCR,D7 ANDI.B #$0C,D7 OR.B D7,D5 MOVE.W (A2)+,D1 IF DEEBUG BRA DEBUG ELSE JMP ([A3,D1.W*4]) ENDIF SECTION 6502DATA,DATA MNTBL: IF P65C02 DC.L MAIN80 ; 65C02 JMP TABLE DC.L MAIN81 DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN84 DC.L MAIN85 DC.L MAIN86 DC.L ILLEGAL DC.L MAIN88 DC.L ILLEGAL DC.L MAIN8A DC.L ILLEGAL DC.L MAIN8C DC.L MAIN8D DC.L MAIN8E DC.L ILLEGAL DC.L MAIN90 DC.L MAIN91 DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN94 DC.L MAIN95 DC.L MAIN96 DC.L ILLEGAL DC.L MAIN98 DC.L MAIN99 DC.L MAIN9A DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN9D DC.L ILLEGAL DC.L ILLEGAL DC.L MAINA0 DC.L MAINA1 DC.L MAINA2 DC.L ILLEGAL DC.L MAINA4 DC.L MAINA5 DC.L MAINA6 DC.L ILLEGAL DC.L MAINA8 DC.L MAINA9 DC.L MAINAA DC.L ILLEGAL DC.L MAINAC DC.L MAINAD DC.L MAINAE DC.L ILLEGAL DC.L MAINB0 DC.L MAINB1 DC.L ILLEGAL DC.L ILLEGAL DC.L MAINB4 DC.L MAINB5 DC.L MAINB6 DC.L ILLEGAL DC.L MAINB8 DC.L MAINB9 DC.L MAINBA DC.L ILLEGAL DC.L MAINBC DC.L MAINBD DC.L MAINBE DC.L ILLEGAL DC.L MAINC0 DC.L MAINC1 DC.L ILLEGAL DC.L ILLEGAL DC.L MAINC4 DC.L MAINC5 DC.L MAINC6 DC.L ILLEGAL DC.L MAINC8 DC.L MAINC9 DC.L MAINCA DC.L ILLEGAL DC.L MAINCC DC.L MAINCD DC.L MAINCE DC.L ILLEGAL DC.L MAIND0 DC.L MAIND1 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIND5 DC.L MAIND6 DC.L ILLEGAL DC.L MAIND8 DC.L MAIND9 DC.L MAINDA DC.L ILLEGAL DC.L ILLEGAL DC.L MAINDD DC.L MAINDE DC.L ILLEGAL DC.L MAINE0 DC.L MAINE1 DC.L ILLEGAL DC.L ILLEGAL DC.L MAINE4 DC.L MAINE5 DC.L MAINE6 DC.L ILLEGAL DC.L MAINE8 DC.L MAINE9 DC.L MAINEA DC.L ILLEGAL DC.L MAINEC DC.L MAINED DC.L MAINEE DC.L ILLEGAL DC.L MAINF0 DC.L MAINF1 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAINF5 DC.L MAINF6 DC.L ILLEGAL DC.L MAINF8 DC.L MAINF9 DC.L MAINFA DC.L ILLEGAL DC.L ILLEGAL DC.L MAINFD DC.L MAINFE DC.L ILLEGAL DC.L MAIN00 DC.L MAIN01 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN05 DC.L MAIN06 DC.L ILLEGAL DC.L MAIN08 DC.L MAIN09 DC.L MAIN0A DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN0D DC.L MAIN0E DC.L ILLEGAL DC.L MAIN10 DC.L MAIN11 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN15 DC.L MAIN16 DC.L ILLEGAL DC.L MAIN18 DC.L MAIN19 DC.L MAIN1A DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN1D DC.L MAIN1E DC.L ILLEGAL DC.L MAIN20 DC.L MAIN21 DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN24 DC.L MAIN25 DC.L MAIN26 DC.L ILLEGAL DC.L MAIN28 DC.L MAIN29 DC.L MAIN2A DC.L ILLEGAL DC.L MAIN2C DC.L MAIN2D DC.L MAIN2E DC.L ILLEGAL DC.L MAIN30 DC.L MAIN31 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN35 DC.L MAIN36 DC.L ILLEGAL DC.L MAIN38 DC.L MAIN39 DC.L MAIN3A DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN3D DC.L MAIN3E DC.L ILLEGAL DC.L MAIN40 DC.L MAIN41 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN45 DC.L MAIN46 DC.L ILLEGAL DC.L MAIN48 DC.L MAIN49 DC.L MAIN4A DC.L ILLEGAL DC.L MAIN4C DC.L MAIN4D DC.L MAIN4E DC.L ILLEGAL DC.L MAIN50 DC.L MAIN51 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN55 DC.L MAIN56 DC.L ILLEGAL DC.L MAIN58 DC.L MAIN59 DC.L MAIN5A DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN5D DC.L MAIN5E DC.L ILLEGAL DC.L MAIN60 DC.L MAIN61 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN65 DC.L MAIN66 DC.L ILLEGAL DC.L MAIN68 DC.L MAIN69 DC.L MAIN6A DC.L ILLEGAL DC.L MAIN6C DC.L MAIN6D DC.L MAIN6E DC.L ILLEGAL DC.L MAIN70 DC.L MAIN71 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN75 DC.L MAIN76 DC.L ILLEGAL DC.L MAIN78 DC.L MAIN79 DC.L MAIN7A DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN7D DC.L MAIN7E DC.L ILLEGAL ELSE DC.L ILLEGAL ; STANDARD 6502 JMP TABLE DC.L MAIN81 DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN84 DC.L MAIN85 DC.L MAIN86 DC.L ILLEGAL DC.L MAIN88 DC.L ILLEGAL DC.L MAIN8A DC.L ILLEGAL DC.L MAIN8C DC.L MAIN8D DC.L MAIN8E DC.L ILLEGAL DC.L MAIN90 DC.L MAIN91 DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN94 DC.L MAIN95 DC.L MAIN96 DC.L ILLEGAL DC.L MAIN98 DC.L MAIN99 DC.L MAIN9A DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN9D DC.L ILLEGAL DC.L ILLEGAL DC.L MAINA0 DC.L MAINA1 DC.L MAINA2 DC.L ILLEGAL DC.L MAINA4 DC.L MAINA5 DC.L MAINA6 DC.L ILLEGAL DC.L MAINA8 DC.L MAINA9 DC.L MAINAA DC.L ILLEGAL DC.L MAINAC DC.L MAINAD DC.L MAINAE DC.L ILLEGAL DC.L MAINB0 DC.L MAINB1 DC.L ILLEGAL DC.L ILLEGAL DC.L MAINB4 DC.L MAINB5 DC.L MAINB6 DC.L ILLEGAL DC.L MAINB8 DC.L MAINB9 DC.L MAINBA DC.L ILLEGAL DC.L MAINBC DC.L MAINBD DC.L MAINBE DC.L ILLEGAL DC.L MAINC0 DC.L MAINC1 DC.L ILLEGAL DC.L ILLEGAL DC.L MAINC4 DC.L MAINC5 DC.L MAINC6 DC.L ILLEGAL DC.L MAINC8 DC.L MAINC9 DC.L MAINCA DC.L ILLEGAL DC.L MAINCC DC.L MAINCD DC.L MAINCE DC.L ILLEGAL DC.L MAIND0 DC.L MAIND1 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIND5 DC.L MAIND6 DC.L ILLEGAL DC.L MAIND8 DC.L MAIND9 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAINDD DC.L MAINDE DC.L ILLEGAL DC.L MAINE0 DC.L MAINE1 DC.L ILLEGAL DC.L ILLEGAL DC.L MAINE4 DC.L MAINE5 DC.L MAINE6 DC.L ILLEGAL DC.L MAINE8 DC.L MAINE9 DC.L MAINEA DC.L ILLEGAL DC.L MAINEC DC.L MAINED DC.L MAINEE DC.L ILLEGAL DC.L MAINF0 DC.L MAINF1 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAINF5 DC.L MAINF6 DC.L ILLEGAL DC.L MAINF8 DC.L MAINF9 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAINFD DC.L MAINFE DC.L ILLEGAL DC.L MAIN00 DC.L MAIN01 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN05 DC.L MAIN06 DC.L ILLEGAL DC.L MAIN08 DC.L MAIN09 DC.L MAIN0A DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN0D DC.L MAIN0E DC.L ILLEGAL DC.L MAIN10 DC.L MAIN11 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN15 DC.L MAIN16 DC.L ILLEGAL DC.L MAIN18 DC.L MAIN19 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN1D DC.L MAIN1E DC.L ILLEGAL DC.L MAIN20 DC.L MAIN21 DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN24 DC.L MAIN25 DC.L MAIN26 DC.L ILLEGAL DC.L MAIN28 DC.L MAIN29 DC.L MAIN2A DC.L ILLEGAL DC.L MAIN2C DC.L MAIN2D DC.L MAIN2E DC.L ILLEGAL DC.L MAIN30 DC.L MAIN31 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN35 DC.L MAIN36 DC.L ILLEGAL DC.L MAIN38 DC.L MAIN39 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN3D DC.L MAIN3E DC.L ILLEGAL DC.L MAIN40 DC.L MAIN41 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN45 DC.L MAIN46 DC.L ILLEGAL DC.L MAIN48 DC.L MAIN49 DC.L MAIN4A DC.L ILLEGAL DC.L MAIN4C DC.L MAIN4D DC.L MAIN4E DC.L ILLEGAL DC.L MAIN50 DC.L MAIN51 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN55 DC.L MAIN56 DC.L ILLEGAL DC.L MAIN58 DC.L MAIN59 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN5D DC.L MAIN5E DC.L ILLEGAL DC.L MAIN60 DC.L MAIN61 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN65 DC.L MAIN66 DC.L ILLEGAL DC.L MAIN68 DC.L MAIN69 DC.L MAIN6A DC.L ILLEGAL DC.L MAIN6C DC.L MAIN6D DC.L MAIN6E DC.L ILLEGAL DC.L MAIN70 DC.L MAIN71 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN75 DC.L MAIN76 DC.L ILLEGAL DC.L MAIN78 DC.L MAIN79 DC.L ILLEGAL DC.L ILLEGAL DC.L ILLEGAL DC.L MAIN7D DC.L MAIN7E DC.L ILLEGAL ENDIF _JUMPTBL: DS.L 1 FLAGTABL: ; 680x0 -> 6502 flag conversion ($00-$1F) DC.B $20,$21,$60,$61,$22,$23,$62,$63,$A0,$A1,$E0,$E1,$A2,$A3,$E2,$E3 ; SET UNUSED FLAG BIT 5 DC.B $20,$21,$60,$61,$22,$23,$62,$63,$A0,$A1,$E0,$E1,$A2,$A3,$E2,$E3 ; 6502 -> 680x0 FLAG CONVERSION ($00-$FF) DC.B $00,$11,$04,$15,$00,$11,$04,$15,$00,$11,$04,$15,$00,$11,$04,$15 DC.B $00,$11,$04,$15,$00,$11,$04,$15,$00,$11,$04,$15,$00,$11,$04,$15 DC.B $00,$11,$04,$15,$00,$11,$04,$15,$00,$11,$04,$15,$00,$11,$04,$15 DC.B $00,$11,$04,$15,$00,$11,$04,$15,$00,$11,$04,$15,$00,$11,$04,$15 DC.B $02,$13,$06,$17,$02,$13,$06,$17,$02,$13,$06,$17,$02,$13,$06,$17 DC.B $02,$13,$06,$17,$02,$13,$06,$17,$02,$13,$06,$17,$02,$13,$06,$17 DC.B $02,$13,$06,$17,$02,$13,$06,$17,$02,$13,$06,$17,$02,$13,$06,$17 DC.B $02,$13,$06,$17,$02,$13,$06,$17,$02,$13,$06,$17,$02,$13,$06,$17 DC.B $08,$19,$0C,$1D,$08,$19,$0C,$1D,$08,$19,$0C,$1D,$08,$19,$0C,$1D DC.B $08,$19,$0C,$1D,$08,$19,$0C,$1D,$08,$19,$0C,$1D,$08,$19,$0C,$1D DC.B $08,$19,$0C,$1D,$08,$19,$0C,$1D,$08,$19,$0C,$1D,$08,$19,$0C,$1D DC.B $08,$19,$0C,$1D,$08,$19,$0C,$1D,$08,$19,$0C,$1D,$08,$19,$0C,$1D DC.B $0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F DC.B $0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F DC.B $0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F DC.B $0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F,$0A,$1B,$0E,$1F