home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <term.h>
-
- fortran unsigned short tty$in(),
- t1in();
-
- int troff=0,
- tracepoint,
- trace=0,
- brkpoint=0xFA86,
- antalarg,
- soundcounter=0,
- RTScounter=0,
- code,
- STACKcounter,
- old_address,
- old_radflg,
- keycounter=0;
-
- typedef struct
- {
- unsigned dummy : 9;
- unsigned bit6 : 1; /* N */
- unsigned bit5 : 1; /* V */
- unsigned bit4 : 1; /* B */
- unsigned bit3 : 1; /* D */
- unsigned bit2 : 1; /* I */
- unsigned bit1 : 1; /* Z */
- unsigned bit0 : 1; /* C */
- }
- bitreg; /* are define to bit 0 - 6 */
-
-
- typedef struct
- {
- unsigned int high : 8;
- unsigned int low : 8;
- }
- progcounterbyte; /* are define to high and low byre */
-
-
- typedef union
- {
- unsigned short byte;
- bitreg bit;
- }
- reg; /* are define to variable for bitreg */
-
- typedef union
- {
- unsigned short byte;
- progcounterbyte hilo;
- }
- PCbyte; /* are define to variable for progcounterbyte */
-
- reg status_register; /* 'reg status_register;' = Ex. 'int A' */
- PCbyte program_counter;
- int stack_pointer;
- int Accumulator;
- int indexX;
- int indexY;
-
- #define P status_register.byte
- #define C status_register.bit.bit0
- #define Z status_register.bit.bit1
- #define I status_register.bit.bit2
- #define D status_register.bit.bit3
- #define B status_register.bit.bit4
- #define V status_register.bit.bit5
- #define N status_register.bit.bit6
-
- #define PC program_counter.byte
- #define PCH program_counter.hilo.high
- #define PCL program_counter.hilo.low
-
- #define S stack_pointer
-
- #define A Accumulator
- #define X indexX
- #define Y indexY
-
- char MEMORY [65536];
-
- char MEMORY$F8 []=
- {
- /* F800: ORG $F800 */
- /* F800: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* F810: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* F820: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* F830: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* F840: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* F850: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* F860: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* F870: RTS */ 0x60,
- /* F871: SCRN LSR A */ 0x4A,
- /* F872: PHP */ 0x08,
- /* F873: JSR GBASCALC*/ 0x20,0x47,0xF8,
- /* F876: LDA (GBASL),Y*/ 0xB1,0x26,
- /* F878: PLP */ 0x28,
- /* F879: SCRN2 BCC RTMSKZ */ 0x90,0x04,
- /* F87B: LSR A */ 0x4A,
- /* F87C: LSR A */ 0x4A,
- /* F87D: LSR A */ 0x4A,
- /* F87E: LSR A */ 0x4A,
- /* F87F: RTMSKZ AND #$0F */ 0x29,0x0F,
- /* F881: RTS */ 0x60,
- /* F882: INSDS1 LDX PCL */ 0xA6,0x3A,
- /* F884: LDY PCH */ 0xA4,0x3B,
- /* F886: JSR PRYX2 */ 0x20,0x96,0xFD,
- /* F889: JSR PRBLNK */ 0x20,0x48,0xF9,
- /* F88C: LDA (PCL,X)*/ 0xA1,0x3A,
- /* F88E: INSDS2 TAY */ 0xA8,
- /* F88F: LSR A */ 0x4A,
- /* F890: BCC IEVEN */ 0x90,0x09,
- /* F892: ROR A */ 0x6A,
- /* F893: BCS ERR */ 0xB0,0x10,
- /* F895: CMP #$A2 */ 0xC9,0xA2,
- /* F897: BEQ ERR */ 0xF0,0x0C,
- /* F899: AND #$87 */ 0x29,0x87,
- /* F89B: IEVEN LSR A */ 0x4A,
- /* F89C: TAX */ 0xAA,
- /* F89D: LDA FMT1,X */ 0xBD,0x62,0xF9,
- /* F8A0: JSR SCRN2 */ 0x20,0x79,0xF8,
- /* F8A3: BNE GETFMT */ 0xD0,0x04,
- /* F8A5: ERR LDY #$80 */ 0xA0,0x80,
- /* F8A7: LDA #$0 */ 0xA9,0x00,
- /* F8A9: GETFMT TAX */ 0xAA,
- /* F8AA: LDA FMT2,X */ 0xBD,0xA6,0xF9,
- /* F8AD: STA FORMAT */ 0x85,0x2E,
- /* F8AF: AND #$03 */ 0x29,0x03,
- /* * (P=1 BYTE, 1=2 BYTE, 2=3 BYTE)
- /* F8B1: STA LENGTH */ 0x85,0x2F,
- /* F8B3: TYA */ 0x98,
- /* F8B4: AND #$8F */ 0x29,0x8F,
- /* F8B6: TAX */ 0xAA,
- /* F8B7: TYA */ 0x98,
- /* F8B8: LDX #$03 */ 0xA0,0x03,
- /* F8BA: CPX #$8A */ 0xE0,0x8A,
- /* F8BC: BEQ MNNDX3 */ 0xF0,0x0B,
- /* F8BE: MNNDX1 LSR A */ 0x4A,
- /* F8BF: BCC MNNDX3 */ 0x90,0x08,
- /* F8C1: LSR A */ 0x4A,
- /* F8C2: MNNDX2 LSR A */ 0x4A,
- /* F8C3: ORA #$20 */ 0x09,0x20,
- /* F8C5: DEY */ 0x88,
- /* F8C6: BNE MNNDX2 */ 0xD0,0xFA,
- /* F8C8: INY */ 0xC8,
- /* F8C9: MNNDX3 DEY */ 0x88,
- /* F8CA: BNE MNNDX1 */ 0xD0,0xF2,
- /* F8CC: RTS */ 0x60,
- /* F8CD: DFB -03- */ 0xFF,0xFF,0xFF,
- /* F8D0: INSTDSP JSR INSDS1 */ 0x20,0x82,0xF8,
- /* F8D3: PHA */ 0x48,
- /* F8D4: PRNTOP LDA (PCL),Y*/ 0xB1,0x3A,
- /* F8D6: JSR PRBYTE */ 0x20,0xDA,0xFD,
- /* F8D9: LDX #$01 */ 0xA2,0x01,
- /* F8DB: PRNTBL JSR PRBL2 */ 0x20,0x4A,0xF9,
- /* F8DE: CPY LENGTH */ 0xC4,0x2F,
- /* F8E0: INY */ 0xC8,
- /* F8E1: BCC PRNTOP */ 0x90,0xF1,
- /* F8E3: LDX #$03 */ 0xA2,0x03,
- /* F8E5: CPY #$04 */ 0xC0,0x04,
- /* F8E7: BCC PRNTBL */ 0x90,0xF2,
- /* F8E9: PLA */ 0x68,
- /* F8EA: TAY */ 0xA8,
- /* F8EB: LDA MNEML,Y*/ 0xB9,0xC0,0xF9,
- /* F8EE: STA LMNEM */ 0x85,0x2C,
- /* F8F0: LDA MNEMR,Y*/ 0xB9,0x00,0xFA,
- /* F8F3: STA RMNEM */ 0x85,0x2D,
- /* F8F5: PRMN1 LDA #$00 */ 0xA9,0x00,
- /* F8F7: LDY #$05 */ 0xA0,0x05,
- /* F8F9: PRMN2 ASL RMNEM */ 0x06,0x2D,
- /* F8FB: ROL LMNEM */ 0x26,0x2C,
- /* F8FD: ROL A */ 0x2A,
- /* F8FE: DEY */ 0x88,
- /* F8FF: BNE PRMN2 */ 0xD0,0xF8,
- /* F901: ADC #$BF */ 0x69,0xBF,
- /* F903: JSR COUT */ 0x20,0xED,0xFD,
- /* F906: DEX */ 0xCA,
- /* F907: BNE PRMN1 */ 0xD0,0xEC,
- /* F909: JSR PRBLNK */ 0x20,0x48,0xF9,
- /* F90C: LDY LENGTH */ 0xA4,0x2F,
- /* F90E: LDX #$06 */ 0xA2,0x06,
- /* F910: PRADR1 CPX #$03 */ 0xE0,0x03,
- /* F912: BEQ PRADR5 */ 0xF0,0x1C,
- /* F914: PRADR2 ASL FORMAT */ 0x06,0x2E,
- /* F916: BCC PRADR3 */ 0x90,0x0E,
- /* F918: LDA CHAR1-1,X*/ 0xBD,0xB3,0xF9,
- /* F91B: JSR COUT */ 0x20,0xED,0xFD,
- /* F91E: LDA CHAR2-1,X*/ 0xBD,0xB9,0xF9,
- /* F921: BEQ PRADR3 */ 0xF0,0x03,
- /* F923: JSR COUT */ 0x20,0xED,0xFD,
- /* F926: PRADR3 DEX */ 0xCA,
- /* F927: BNE PRADR1 */ 0xD0,0xE7,
- /* F929: RTS */ 0x60,
- /* F92A: PRADR4 DEY */ 0x88,
- /* F92B: BMI PRADR2 */ 0x30,0xE7,
- /* F92D: JSR PRBYTE */ 0x20,0xDA,0xFD,
- /* F930: PRADR5 LDA FORMAT */ 0xA5,0x2E,
- /* F932: CMP #$E8 */ 0xC9,0xE8,
- /* F934: LDA (PCL),Y*/ 0xB1,0x3A,
- /* F936: BCC PRADR4 */ 0x90,0xF2,
- /* F938: RELADR JSR PCADJ3 */ 0x20,0x56,0xF9,
- /* F93B: TAX */ 0xAA,
- /* F93C: INX */ 0xE8,
- /* F93D: BNE PRNTYX */ 0xD0,0x01,
- /* F93F: INY */ 0xC8,
- /* F940: PRNTYX TYA */ 0x98,
- /* F941: PRNTAX JSR PRBYTE */ 0x20,0xDA,0xFD,
- /* F944: PRNTX TXA */ 0x8A,
- /* F945: JMP PRBYTE */ 0x4C,0xDA,0xFD,
- /* F948: PRBLNK LDX #$03 */ 0xA2,0x03,
- /* F94A: PRBL2 LDA #$A0 */ 0xA9,0xA0,
- /* F94C: PRBL3 JSR COUT */ 0x20,0xED,0xFD,
- /* F94F: DEX */ 0xCA,
- /* F950: BNE PRBL2 */ 0xD0,0xF8,
- /* F952: RTS */ 0x60,
- /* F953: PCADJ SEC */ 0x38,
- /* F954: PCADJ2 LDA LENGTH */ 0xA5,0x2F,
- /* F956: PCADJ3 LDY PCH */ 0xA4,0x3B,
- /* F958: TAX */ 0xAA,
- /* F959: BPL PCADJ4 */ 0x10,0x01,
- /* F95B: DEY */ 0x88,
- /* F95C: PCADJ4 ADC PCL */ 0x65,0x3A,
- /* F95E: BCC RTS2 */ 0x90,0x01,
- /* F960: INY */ 0xC8,
- /* F961: RTS2 RTS */ 0x60,
- /* * FMT1 BYTES: XXXXXXY0 INSTRS
- * IF Y=0 THEN LEFT HALF BYTE
- * IF Y=1 THEN RIGHT HALF BYTE
- * (X=INDEX)
- /* F962: FMT1
- /* F962: DFB */ 0x04,0x20,0x54,0x30,
- /* F966: DFB */ 0x0D,0x80,
- /* F968: DFB */ 0x04,0x90,
- /* F96A: DFB */ 0x03,0x22,0x54,0x33,
- /* F96E: DFB */ 0x0D,0x80,
- /* F970: DFB */ 0x04,0x90,
- /* F972: DFB */ 0x04,0x20,0x54,0x33,
- /* F976: DFB */ 0x0D,0x80,
- /* F978: DFB */ 0x04,0x90,
- /* F97A: DFB */ 0x04,0x20,0x54,0x3B,
- /* F97E: DFB */ 0x0D,0x80,
- /* F980: DFB */ 0x04,0x90,
- /* F982: DFB */ 0x00,0x22,0x44,0x33,
- /* F986: DFB */ 0x0D,0xC8,0x44,
- /* F989: DFB */ 0x00,0x11,0x22,0x44,0x33,
- /* F98E: DFB */ 0x0D,0xC8,0x44,0xA9,
- /* F992: DFB */ 0x01,0x22,0x44,0x33,
- /* F996: DFB */ 0x0D,0x80,
- /* F998: DFB */ 0x04,0x90,
- /* F99A: DFB */ 0x01,0x22,0x44,0x33,
- /* F99E: DFB */ 0x0D,0x80,
- /* F9A0: DFB */ 0x04,0x90,0x26,0x31,0x87,
- /* F9A5: DFB -01- */ 0x9A,
- /* $ZZXXXY01 INSTR'S
- /* F9A6: FMT2
- /* F9A6: ERR DFB -01- */ 0x00,
- /* F9A7: IMM DFB -01- */ 0x21,
- /* F9A8: Z-PAGE DFB -01- */ 0x81,
- /* F9A9: ABS DFB -01- */ 0x82,
- /* F9AA: IMPLIED DFB -01- */ 0x00,
- /* F9AB: ACCUMULATOR DFB -01- */ 0x00,
- /* F9AC: (ZPAG,X) DFB -01- */ 0x59,
- /* F9AD: (ZPAG),Y DFB -01- */ 0x4D,
- /* F9AE: ZPAG,X DFB -01- */ 0x91,
- /* F9AF: ABS,X DFB -01- */ 0x92,
- /* F9B0: ABS,Y DFB -01- */ 0x86,
- /* F9B1: (ABS) DFB -01- */ 0x4A,
- /* F9B2: ZPAG,Y DFB -01- */ 0x85,
- /* F9B3: RELATIVE DFB -01- */ 0x9D,
- /* F9B4: ',),#($' ASC -06- */ 0xAC,0xA9,0xAC,0xA3,0xA8,0xA4,
- /* F9BA: 'Y',0,'X$$',0 DFB -06- */ 0xD9,0x00,0xD8,0xA4,0xA4,0x00,
- /* (A) XXXXX000
- /* (B) XXXYY100
- /* (C) 1XXX1010
- /* (D) XXXYYY10
- /* (E) XXXYYY01
- /* (X = INDEX)
- /* F9C0: DFB */ 0x1C,0x8A,
- /* F9C2: DFB */ 0x1C,0x23,0x5D,0x8B,
- /* F9C6: DFB */ 0x1B,0xA1,0x9B,0x8A,
- /* F9CA: DFB */ 0x1D,0x23,0x9D,0x8B,
- /* F9CE: DFB */ 0x1D,0xA1,0x00,0x29,
- /* F9D2: DFB */ 0x19,0xAE,0x69,0xA8,
- /* F9D6: DFB */ 0x19,0x23,0x24,0x53,
- /* F9DA: DFB */ 0x1B,
- /* F9DB: DFB */ 0x23,0x24,0x53,
- /* F9DE: DFB */ 0x19,0xA1, /* (A) FORMAT
- /* F9E0: DFB */ 0x00,0x1A,0x5B, /* ABOVE
- /* F9E3: DFB */ 0x5B,0xA5,0x69,
- /* F9E6: DFB */ 0x24,0x24, /* (B) FORMAT
- /* F9E8: DFB */ 0xAE,0xAE,0xA8,
- /* F9EB: DFB */ 0xAD,0x29,0x00,
- /* F9EE: DFB */ 0x7C,0x00, /* (C) FORMAT
- /* F9F0: DFB */ 0x15,0x9C,0x6D,
- /* F9F3: DFB */ 0x9C,0xA5,0x69,
- /* F9F6: DFB */ 0x29,0x53, /* (D) FORMAT
- /* F9F8: DFB */ 0x84,0x13,0x34,
- /* F9FB: DFB */ 0x11,0xA5,0x69,
- /* F9FE: DFB */ 0x23,0xA0, /* (E) FORMAT
- /* FA00: MNEMR DFB */ 0xD8,0x62,0x5A,
- /* FA03: DFB */ 0x48,0x26,0x62,
- /* FA06: DFB */ 0x94,0x88,0x54,
- /* FA09: DFB */ 0x44,0xC8,0x54,
- /* FA0C: DFB */ 0x68,0x44,0xE8,
- /* FA0F: DFB */ 0x94,0x00,0xB4,
- /* FA12: DFB */ 0x08,0x84,0x74,
- /* FA15: DFB */ 0xB4,0x28,0x6E,
- /* FA18: DFB */ 0x74,0xF4,0xCC,
- /* FA1B: DFB */ 0x4A,0x72,0xF2,
- /* FA1E: DFB */ 0xA4,0x8A, /* (A) FORMAT
- /* FA20: DFB */ 0x00,0xAA,0xA2,
- /* FA23: DFB */ 0xA2,0x74,0x74,
- /* FA26: DFB */ 0x74,0x72, /* (B) FORMAT
- /* FA28: DFB */ 0x44,0x68,0xB2,
- /* FA2B: DFB */ 0x32,0xB2,0x00,
- /* FA2E: DFB */ 0x22,0x00, /* (C) FORMAT
- /* FA30: DFB */ 0x1A,0x1A,0x26,
- /* FA33: DFB */ 0x26,0x72,0x72,
- /* FA36: DFB */ 0x88,0xC8, /* (D) FORMAT
- /* FA38: DFB */ 0xC4,0xCA,0x26,
- /* FA3B: DFB */ 0x48,0x44,0x44,
- /* FA3E: DFB */ 0xA2,0xC8, /* (E) FORMAT
- /* FA40: DFB */ 0xFF,0xFF,0xFF,
- /* FA43: DFB */ 0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FA50: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FA60: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FA70: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FA80: DFB */ 0,0,0,0,0,0,
- /* FA86: IRQ STA ACC */ 0x85,0x45,
- /* FA88: PLA */ 0x68,
- /* FA89: PHA */ 0x48,
- /* FA8A: ASL A */ 0x0A,
- /* FA8B: ASL A */ 0x0A,
- /* FA8C: ASL A */ 0x0A,
- /* FA8D: BMI BREAK */ 0x30,0x03,
- /* FA8F: JMP (IRQLOC)*/ 0x6C,0xFE,0x03,
- /* FA92: BREAK PLP */ 0x28,
- /* FA93: JSR SAV1 */ 0x20,0x4C,0xFF,
- /* FA96: PLA */ 0x68,
- /* FA97: STA PCL */ 0x85,0x3A,
- /* FA99: PLA */ 0x68,
- /* FA9A: STA PCH */ 0x85,0x3B,
- /* FA9C: XBRK JSR INSDS1 */ 0x20,0x82,0xF8,
- /* FA9F: JSR RGDSP1 */ 0x20,0xDA,0xFA,
- /* FAA2: JMP MON */ 0x4C,0x65,0xFF,
- /* FAA5: DFB */ 0,0,0,0,0,0,0,0,0,0,0,
- /* FAB0: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FAC0: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FAD0: DFB */ 0,0,0,0,0,0,0,
- /* FAD7: REGDSP JSR CROUT */ 0x20,0x8E,0xFD,
- /* FADA: RGDSP1 LDA #ACC */ 0xA9,0x45,
- /* FADC: STA A3L */ 0x85,0x40,
- /* FADE: LDA #ACC/256*/ 0xA9,0x00,
- /* FAE0: STA A3H */ 0x85,0x41,
- /* FAE2: LDX #$FB */ 0xA2,0xFB,
- /* FAE4: RDSP1 LDA #$A0 */ 0xA9,0xA0,
- /* FAE6: JSR COUT */ 0x20,0xED,0xFD,
- /* FAE9: LDA RTBL-$FB,X*/ 0xBD,0x1E,0xFA,
- /* FAEC: JSR COUT */ 0x20,0xED,0xFD,
- /* FAEF: LDA #$BD */ 0xA9,0xBD,
- /* FAF1: JSR COUT */ 0x20,0xED,0xFD,
- /* FAF4: LDA ACC+5,X*/ 0xB5,0x4A,
- /* FAF6: JSR PRBYTE */ 0x20,0xDA,0xFD,
- /* FAF9: INX */ 0xE8,
- /* FAFA: BMI RDSP1 */ 0x30,0xE8,
- /* FAFC: RTS */ 0x60,
- /* FAFD: BRANCH CLC */ 0x18,
- /* FAFE: LDY #$01 */ 0xA0,0x01,
- /* FB00: LDA (PCL),Y*/ 0xB1,0x3A,
- /* FB02: JSR PCADJ3 */ 0x20,0x56,0xF9,
- /* FB05: STA PCL */ 0x85,0x3A,
- /* FB07: TYA */ 0x98,
- /* FB08: SEC */ 0x38,
- /* FB09: BCS PCINC2 */ 0xB0,0xA2,
- /* FB0B: NBRNCH JSR SAVE */ 0x20,0x4A,0xFF,
- /* FB0E: SEC */ 0x38,
- /* FB0F: BCS PCINC3 */ 0xB0,0x9E,
- /* FB11: INITBL NOP */ 0xEA,
- /* FB12: NOP */ 0xEA,
- /* FB13: JMP NBRNCH */ 0x4C,0x0B,0xFB,
- /* FB16: JMP BRANCH */ 0x4C,0xFD,0xFA,
- /* FB19: RTBL DFB 'AXYPS'*/ 0xC1,0xD8,0xD9,0xD0,0xD3,
- /* FB1E: PREAD LDA PTRIG */ 0xAD,0x70,0xC0,
- /* FB21: LDY #$00 */ 0xA0,0x00,
- /* FB23: NOP */ 0xEA,
- /* FB24: NOP */ 0xEA,
- /* FB25: PREAD2 LDA PADDL0,X*/ 0xBD,0x64,0xC0,
- /* FB28: BPL RTS2D */ 0x10,0x04,
- /* FB2A: INY */ 0xC8,
- /* FB2B: BNE PREAD2 */ 0xD0,0xF8,
- /* FB2D: DEY */ 0x88,
- /* FB2E: RTS2D RTS */ 0x60,
- /* FB2F: INIT LDA #$00 */ 0xA9,0x00,
- /* FB31: STA STATUS */ 0x85,0x48,
- /* FB33: LDA LORES */ 0xAD,0x56,0xC0,
- /* FB36: LDA LOWSCR */ 0xAD,0x54,0xc0,
- /* FB39: SETTXT LDA TXTSET */ 0xAD,0x51,0xc0,
- /* FB3C: LDA #$00 */ 0xA9,0x00,
- /* FB3E: BEQ SETWND */ 0xF0,0x0B,
- /* FB40: SETGR LDA TXTCLR */ 0xAD,0x50,0xC0,
- /* FB43: LDA MIXSET */ 0xAD,0x53,0xC0,
- /* FB46: JSR CLRTOP */ 0x20,0x36,0xF8,
- /* FB49: LDA #$14 */ 0xA9,0x14,
- /* FB4B: SETWND STA WNDTOP */ 0x85,0x22,
- /* FB4D: LDA #$00 */ 0xA9,0x00,
- /* FB4F: STA WNDLFT */ 0x85,0x20,
- /* FB51: LDA #$28 */ 0xA9,0x28,
- /* FB53: STA WNDWDTH*/ 0x85,0x21,
- /* FB55: LDA #$18 */ 0xA9,0x18,
- /* FB57: STA WNDBTM */ 0x85,0x23,
- /* FB59: LDA #$17 */ 0xA9,0x17,
- /* FB5B: TABV STA CV */ 0x85,0x25,
- /* FB5D: JMP VTAB */ 0x4C,0x22,0xFC,
- /* FB60: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FB70: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FB80: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FB90: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FBA0: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FBB0: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FBC0: DFB */ 0,
- /* FBC1: BASCALC PHA */ 0x48,
- /* FBC2: LSR A */ 0x4A,
- /* FBC3: AND #$03 */ 0x29,0x03,
- /* FBC5: ORA #$04 */ 0x09,0x04,
- /* FBC7: STA BASH */ 0x85,0x29,
- /* FBC9: PLA */ 0x68,
- /* FBCA: AND #$18 */ 0x29,0x18,
- /* FBCC: BCC BSCLC2 */ 0x90,0x02,
- /* FBCE: ADC #$7F */ 0x69,0x7F,
- /* FBD0: BSCLC2 STA BASL */ 0x85,0x28,
- /* FBD2: ASL A */ 0x0A,
- /* FBD3: ASL A */ 0x0A,
- /* FBD4: ORA BASL */ 0x05,0x28,
- /* FBD6: STA BASL */ 0x85,0x28,
- /* FBD8: RTS */ 0x60,
- /* FBD9: BELL1 CMP #$87 */ 0xC9,0x87,
- /* FBDB: BNE RTS2B */ 0xD0,0x12,
- /* FBDD: LDA #$40 */ 0xA9,0x40,
- /* FBDF: JSR WAIT */ 0x20,0xA8,0xFC,
- /* FBE2: LDY #$C0 */ 0xA0,0xC0,
- /* FBE4: BELL2 LDA #$0C */ 0xA9,0x0C,
- /* FBE6: JSR WAIT */ 0x20,0xA8,0xFC,
- /* FBE9: LDA SPKR */ 0xAD,0x30,0xC0,
- /* FBEC: DEY */ 0x88,
- /* FBED: BNE BELL2 */ 0xD0,0xF5,
- /* FBEF: RTS2B RTS */ 0x60,
- /* FBF0: STOADV LDY CH */ 0xA4,0x24,
- /* FBF2: STA (BASL),Y*/ 0x91,0x28,
- /* FBF4: ADVANCE INC CH */ 0xE6,0x24,
- /* FBF6: LDA CH */ 0xA5,0x24,
- /* FBF8: CMP WNDWDTH*/ 0xC5,0x21,
- /* FBFA: BCS CR */ 0xB0,0x66,
- /* FBFC: RTS3 RTS */ 0x60,
- /* FBFD: VIDOUT CMP #$A0 */ 0xC9,0xA0,
- /* FBFF: BCS STOADV */ 0xB0,0xEF,
- /* FC01: TAY */ 0xA8,
- /* FC02: BPL STOADV */ 0x10,0xEC,
- /* FC04: CMP #$8D */ 0xC9,0x8D,
- /* FC06: BEQ CR */ 0xF0,0x5A,
- /* FC08: CMP #$8A */ 0xC9,0x8A,
- /* FC0A: BEQ LF */ 0xF0,0x5A,
- /* FC0C: CMP #$88 */ 0xC9,0x88,
- /* FC0E: BNE BELL1 */ 0xD0,0xC9,
- /* FC10: BS DEC CH */ 0xC6,0x24,
- /* FC12: BPL RTS3 */ 0x10,0xE8,
- /* FC14: LDA WNDWDTH*/ 0xA5,0x21,
- /* FC16: STA CH */ 0x85,0x24,
- /* FC18: DEC CH */ 0xC6,0x24,
- /* FC1A: UP LDA WNDTOP */ 0xA5,0x22,
- /* FC1C: CMP CV */ 0xC5,0x25,
- /* FC1E: BCS RTS4 */ 0xB0,0x0B,
- /* FC20: DEC CV */ 0xC6,0x25,
- /* FC22: VTAB LDA CV */ 0xA5,0x25,
- /* FC24: VTABZ JSR BASCALC*/ 0x20,0xC1,0xFB,
- /* FC27: ADC WNDLFT */ 0x65,0x20,
- /* FC29: STA BASL */ 0x85,0x28,
- /* FC2B: RTS4 RTS */ 0x60,
- /* FC2C: ESC1 EOR #$C0 */ 0x49,0xC0,
- /* FC2E: BEQ HOME */ 0xF0,0x28,
- /* FC30: ADC #$FD */ 0x69,0xFD,
- /* FC32: BCC ADVANCE*/ 0x90,0xC0,
- /* FC34: BEQ BS */ 0xF0,0xDA,
- /* FC36: ADC #$FD */ 0x69,0xFD,
- /* FC38: BCC LF */ 0x90,0x2C,
- /* FC3A: BEQ UP */ 0xF0,0xDE,
- /* FC3C: ADC #$FD */ 0x69,0xFD,
- /* FC3E: BCC CLREOL */ 0x90,0x5C,
- /* FC40: BNE RTS4 */ 0xD0,0xE9,
- /* FC42: CLREOP LDY CH */ 0xA4,0x24,
- /* FC44: LDA CV */ 0xA5,0x25,
- /* FC46: CLEOP1 PHA */ 0x48,
- /* FC47: JSR VTABZ */ 0x20,0x24,0xFC,
- /* FC4A: JSR CLEOLZ */ 0x20,0x9E,0xFC,
- /* FC4D: LDY #$00 */ 0xA0,0x00,
- /* FC4F: PLA */ 0x68,
- /* FC50: ADC #$00 */ 0x69,0x00,
- /* FC52: CMP WNDBTM */ 0xC5,0x23,
- /* FC54: BCC CLEOP1 */ 0x90,0xF0,
- /* FC56: BCS VTAB */ 0xB0,0xCA,
- /* FC58: HOME LDA WNDTOP */ 0xA5,0x22,
- /* FC5A: STA CV */ 0x85,0x25,
- /* FC5C: LDY #$00 */ 0xA0,0x00,
- /* FC5E: STY CH */ 0x84,0x24,
- /* FC60: BEQ CLEOP1 */ 0xF0,0xE4,
- /* FC62: CR LDA #$00 */ 0xA9,0x00,
- /* FC64: STA CH */ 0x85,0x24,
- /* FC66: LF INC CV */ 0xE6,0x25,
- /* FC68: LDA CV */ 0xA5,0x25,
- /* FC6A: CMP WNDBTM */ 0xC5,0x23,
- /* FC6C: BCC VTABZ */ 0x90,0xB6,
- /* FC6E: DEC CV */ 0xC6,0x25,
- /* FC70: SCROLL LDA WNDTOP */ 0xA5,0x22,
- /* FC72: PHA */ 0x48,
- /* FC73: JSR VTABZ */ 0x20,0x24,0xFC,
- /* FC76: SCRL1 LDA BASL */ 0xA5,0x28,
- /* FC78: STA BAS2L */ 0x85,0x2A,
- /* FC7A: LDA BASH */ 0xA5,0x29,
- /* FC7C: STA BAS2H */ 0x85,0x2B,
- /* FC7E: LDY WNDWDTH*/ 0xA4,0x21,
- /* FC80: DEY */ 0x88,
- /* FC81: PLA */ 0x68,
- /* FC82: ADC #$01 */ 0x69,0x01,
- /* FC84: CMP WNDBTM */ 0xC5,0x23,
- /* FC86: BCS SCRL3 */ 0xB0,0x0D,
- /* FC88: PHA */ 0x48,
- /* FC89: JSR VTABZ */ 0x20,0x24,0xFC,
- /* FC8C: SCRL2 LDA (BASL),Y*/ 0xB1,0x28,
- /* FC81: STA (BAS2L),Y*/ 0x91,0x2A,
- /* FC90: DEY */ 0x88,
- /* FC91: BPL SCRL2 */ 0x10,0xF9,
- /* FC93: BMI SCRL1 */ 0x30,0xE1,
- /* FC95: SCRL3 LDY #$00 */ 0xA0,0x00,
- /* FC97: JSR CLEOLZ */ 0x20,0x9E,0xFC,
- /* FC9A: BCS VTAB */ 0xB0,0x86,
- /* FC9C: CLREOL LDY CH */ 0xA4,0x24,
- /* FC9E: CLEOLZ LDA #$A0 */ 0xA9,0xA0,
- /* FCA0: CLEOL2 STA (BASL),Y*/ 0x91,0x28,
- /* FCA2: INY */ 0xC8,
- /* FCA3: CPY WNDWDTH*/ 0xC4,0x21,
- /* FCA5: BCC CLEOL2 */ 0x90,0xF9,
- /* FCA7: RTS */ 0x60,
- /* FCA8: WAIT SEC */ 0x38,
- /* FCA9: WAIT2 PHA */ 0x48,
- /* FCAA: WAIT3 SBC #$01 */ 0xE9,0x01,
- /* FCAC: BNE WAIT3 */ 0xD0,0xFC,
- /* FCAE: PLA */ 0x68,
- /* FCAF: SBC #$01 */ 0xE9,0x01,
- /* FCB1: BNE WAIT2 */ 0xD0,0xF6,
- /* FCB3: RTS */ 0x60,
- /* FCB4: NXTA4 INC A4L */ 0xE6,0x42,
- /* FCB6: BNE NXTA1 */ 0xD0,0x02,
- /* FCB8: INC A4H */ 0xE6,0x43,
- /* FCBA: NXTA1 LDA A1L */ 0xA5,0x3C,
- /* FCBC: CMP A2L */ 0xC5,0x3E,
- /* FCBE: LDA A1H */ 0xA5,0x3D,
- /* FCC0: SBC A2H */ 0xE5,0x3F,
- /* FCC2: INC A1L */ 0xE6,0x3C,
- /* FCC4: BNE RTS4B */ 0xD0,0x02,
- /* FCC6: INC A1H */ 0xE6,0x3D,
- /* FCC8: RTS4B RTS */ 0x60,
- /* FCC9: DFB */ 0,0,0,0,0,0,0,
- /* FCD0: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FCE0: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FCF0: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FD00: DFB */ 0,0,0,0,0,0,0,0,0,0,0,0,
- /* FD0C: RDKEY LDY CH */ 0xA4,0x24,
- /* FD0E: LDA (BASL),Y*/ 0xB1,0x28,
- /* FD10: PHA */ 0x48,
- /* FD11: AND #$3F */ 0x29,0x3F,
- /* FD13: ORA #$40 */ 0x09,0x40,
- /* FD15: STA (BASL),Y*/ 0x91,0x28,
- /* FD17: PLA */ 0x68,
- /* FD18: JMP (KSWL) */ 0x6C,0x38,0x00,
- /* FD1B: KEYIN INC RNDL */ 0xE6,0x4E,
- /* FD1D: BNE KEYIN2 */ 0xD0,0x02,
- /* FD1F: INC RNDH */ 0xE6,0x4F,
- /* FD21: KEYIN2 BIT KBD */ 0x2C,0x00,0xC0,
- /* FD24: BPL KEYIN */ 0x10,0xF5,
- /* FD26: STA (BASL),Y*/ 0x91,0x28,
- /* FD28: LDA KBD */ 0xAD,0x00,0xC0,
- /* FD2B: BIT KBDSTROB*/ 0x2C,0x10,0xC0,
- /* FD2E: RTS */ 0x60,
- /* FD2F: ESC JSR RDKEY */ 0x20,0x0C,0xFD,
- /* FD32: JSR ESC1 */ 0x20,0x2C,0xFC,
- /* FD35: RDCHAR JSR RDKEY */ 0x20,0x0C,0xFD,
- /* FD38: CMP #$9B */ 0xC9,0x9B,
- /* FD3A: BEQ ESC */ 0xF0,0xF3,
- /* FD3C: RTS */ 0x60,
- /* FD3D: NOTCR LDA INVFLG */ 0xA5,0x32,
- /* FD3F: PHA */ 0x48,
- /* FD40: LDA #$FF */ 0xA9,0xFF,
- /* FD42: STA INVFLG */ 0x85,0x32,
- /* FD44: LDA IN,X */ 0xBD,0x00,0x02,
- /* FD74: JSR COUT */ 0x20,0xED,0xFD,
- /* FD4A: PLA PLA */ 0x68,
- /* FD4B: STA INVFLG */ 0x85,0x32,
- /* FD4D: LDA IN,X */ 0xBD,0x00,0x02,
- /* FD50: CMP #$88 */ 0xC9,0x88,
- /* FD52: BEQ BCKSPC */ 0xF0,0x1D,
- /* FD54: CMP #$98 */ 0xC9,0x98,
- /* FD56: BEQ CANCEL */ 0xF0,0x0A,
- /* FD58: CPX #$F8 */ 0xE0,0xF8,
- /* FD5A: BCC NOTCR1 */ 0x90,0x03,
- /* FD5C: JSR BELL */ 0x20,0x3A,0xFF,
- /* FD5F: NOTCR1 INX */ 0xE8,
- /* FD60: BNE NXTCHAR*/ 0xD0,0x13,
- /* FD62: CANCEL LDA #$DC */ 0xA9,0xDC,
- /* FD64: JSR COUT */ 0x20,0xED,0xFD,
- /* FD67: GETLINZ JSR CROUT */ 0x20,0x8E,0xFD,
- /* FD6A: GETLN LDA PROMPT */ 0xA5,0x33,
- /* FD6C: JSR COUT */ 0x20,0xED,0xFD,
- /* FD6F: LDX #$01 */ 0xA2,0x01,
- /* FD71: BCKSPC TXA */ 0x8A,
- /* FD72: BEQ GETLNZ */ 0xF0,0xF3,
- /* FD74: DEX */ 0xCA,
- /* FD75: NXTCHAR JSR RDCHAR */ 0x20,0x35,0xFD,
- /* FD78: CMP #PICK */ 0xC9,0x95,
- /* FD7A: BNE CAPTST */ 0xD0,0x02,
- /* FD7C: LDA (BASL),Y*/ 0xB1,0x28,
- /* FD7E: CAPTST CMP #$E0 */ 0xC9,0xE0,
- /* FD80: BCC ADDINP */ 0x90,0x02,
- /* FD82: AND #$DF */ 0x29,0xDF,
- /* FD84: ADDINP STA IN,X */ 0x9D,0x00,0x02,
- /* FD87: CMP #$8D */ 0xC9,0x8D,
- /* FD89: BNE NOTCR */ 0xD0,0xB2,
- /* FD8B: JSR CLREOL */ 0x20,0x9C,0xFC,
- /* FD8E: CROUT LDA #$8D */ 0xA9,0x8D,
- /* FD90: BNE COUT */ 0xD0,0x5B,
- /* FD92: PRA1 LDY A1H */ 0xA4,0x3D,
- /* FD94: LDX A1L */ 0xA6,0x3C,
- /* FD96: PRYX2 JSR CROUT */ 0x20,0x8E,0xFD,
- /* FD99: JSR PRNTYA */ 0x20,0x40,0xF9,
- /* FD9C: JSR #$00 */ 0xA0,0x00,
- /* FD9E: LDA #$AD */ 0xA9,0xAD,
- /* FDA0: JMP COUT */ 0x4C,0xED,0xFD,
- /* FDA3: XAM8 LDA A1L */ 0xA5,0x3C,
- /* FDA5: ORA #$07 */ 0x09,0x07,
- /* FDA7: STA A2L */ 0x85,0x3E,
- /* FDA9: LDA A1H */ 0xA5,0x3D,
- /* FDAB: STA A2H */ 0x85,0x3F,
- /* FDAD: MOD8CHK LDA A1L */ 0xA5,0x3C,
- /* FDAF: AND #$07 */ 0x29,0x07,
- /* FDB1: BNE DATAOUT*/ 0xD0,0x03,
- /* FDB3: XAM JSR PRA1 */ 0x20,0x92,0xFD,
- /* FDB6: DATAOUT LDA #$A0 */ 0xA9,0xA0,
- /* FDB8: JSR COUT */ 0x20,0xED,0xFD,
- /* FDBB: LDA (A1L),Y*/ 0xB1,0x3C,
- /* FDBD: JSR PRBYTE */ 0x20,0xDA,0xFD,
- /* FDC0: JSR NXTA1 */ 0x20,0xBA,0xFC,
- /* FDC3: BCC MOD8CHK*/ 0x90,0xE8,
- /* FDC5: RTS4C RTS */ 0x60,
- /* FDC6: XAMPM LSR A */ 0x4A,
- /* FDC7: BCC XAM */ 0x90,0xEA,
- /* FDC9: LSR A */ 0x4A,
- /* FDCA: LSR A */ 0x4A,
- /* FDCB: LDA A2L */ 0xA5,0x3E,
- /* FDCD: BCC ADD */ 0x90,0x02,
- /* FDCF: EOR #$FF */ 0x49,0xFF,
- /* FDD1: ADD ADC A1L */ 0x65,0x3C,
- /* FDD3: PHA */ 0x48,
- /* FDD4: LDA #$BD */ 0xA9,0xBD,
- /* FDD6: JSR COUT */ 0x20,0xED,0xFD,
- /* FDD9: PLA */ 0x68,
- /* FDDA: PRBYTE PHA */ 0x48,
- /* FDDB: LSR A */ 0x4A,
- /* FDDC: LSR A */ 0x4A,
- /* FDDD: LSR A */ 0x4A,
- /* FDDE: LSR A */ 0x4A,
- /* FDDF: JSR PRHEXZ */ 0x20,0xE5,0xFD,
- /* FDE2: PLA */ 0x68,
- /* FDE3: PRHEX AND #$0F */ 0x29,0x0F,
- /* FDE5: PRHEXZ ORA #$B0 */ 0x09,0xB0,
- /* FDE7: CMP #$BA */ 0xC9,0xBA,
- /* FDE9: BCC COUT */ 0x90,0x02,
- /* FDEB: ADC #$06 */ 0x69,0x06,
- /* FDED: COUT JMP (CSWL) */ 0x6C,0x36,0x00,
- /* FDF0: COUT1 CMP #$A0 */ 0xC9,0xA0,
- /* FDF2: BCC COUTZ */ 0x90,0x02,
- /* FDF4: AND INVFLG */ 0x25,0x32,
- /* FDF6: COUTZ STY YSAV1 */ 0x84,0x35,
- /* FDF8: PHA */ 0x48,
- /* FDF9: JSR VIDOUT */ 0x20,0xFD,0xFB,
- /* FDFC: PLA */ 0x68,
- /* FDFD: LDY YSAV1 */ 0xA4,0x35,
- /* FDFF: RTS */ 0x60,
- /* FE00: BL1 DEC YSAV */ 0xC6,0x34,
- /* FE02: BEQ XAM8 */ 0xF0,0x9F,
- /* FE04: BLANK DEX */ 0xCA,
- /* FE05: BNE SETMDZ */ 0xD0,0x16,
- /* FE07: CMP #$BA */ 0xC9,0xBA,
- /* FE09: BNE XAMPM */ 0xD0,0xBB,
- /* FE0B: STOR STA MODE */ 0x85,0x31,
- /* FE0D: LDA A2L */ 0xA5,0x3E,
- /* FE0F: STA (A3L),Y*/ 0x91,0x40,
- /* FE11: INC A3L */ 0xE6,0x40,
- /* FE13: BNE RTS5 */ 0xD0,0x02,
- /* FE15: INC A3H */ 0xE6,0x41,
- /* FE17: RTS5 RTS */ 0x60,
- /* FE18: SETMODE LDY YSAV */ 0xA4,0x34,
- /* FE1A: LDA IN-1,Y */ 0xB9,0xFF,0x01,
- /* FE1D: SETMDZ STA MODE */ 0x85,0x31,
- /* FE1F: RTS */ 0x60,
- /* FE20: LT LDX #$01 */ 0xA2,0x01,
- /* FE22: LT2 LDA A2L,X */ 0xB5,0x3E,
- /* FE24: STA A4L,X */ 0x95,0x42,
- /* FE26: STA A5L,X */ 0x95,0x44,
- /* FE28: DEX */ 0xCA,
- /* FE29: BPL LT2 */ 0x10,0xF7,
- /* FE2B: RTS */ 0x60,
- /* FE2C: MOVE LDA (A1L),Y*/ 0xB1,0x3C,
- /* FE2E: STA (A4L),Y*/ 0x91,0x42,
- /* FE30: JSR NXTA4 */ 0x20,0xB4,0xFC,
- /* FE33: BCC MOVE */ 0x90,0xF7,
- /* FE35: RTS */ 0x60,
- /* FE36: DFB */ 0,0,0,0,0,0,0,0,0,0,
- /* FE40: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FE50: DFB */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FE5E: LIST JSR A1PC */ 0x20,0x75,0xFE,
- /* FE61: LDA #$14 */ 0xA9,0x14,
- /* FE63: LIST2 PHA */ 0x48,
- /* FE64: JSR INSTDSP*/ 0x20,0xD0,0xF8,
- /* FE67: JSR PCADJ */ 0x20,0x53,0xF9,
- /* FE6A: STA PCL */ 0x85,0x3A,
- /* FE6C: STY PCH */ 0x84,0x3B,
- /* FE6E: PLA */ 0x68,
- /* FE6F: SEC */ 0x38,
- /* FE70: SBC #$01 */ 0xE9,0x01,
- /* FE72: BNE LIST2 */ 0xD0,0xEF,
- /* FE74: RTS */ 0x60,
- /* FE75: A1PC TXA */ 0x8A,
- /* FE76: BEQ A1PCRTS*/ 0xF0,0x07,
- /* FE78: A1PCLP LDA A1L,X */ 0xB5,0x3C,
- /* FE7A: STA PCL,X */ 0x95,0x3A,
- /* FE7C: DEX */ 0xCA,
- /* FE7D: BPL A1PCLP */ 0x10,0xF9,
- /* FE7F: A1PCRTS RTS */ 0x60,
- /* FE80: SETINV LDY #$3F */ 0xA0,0x3F,
- /* FE82: BNE SETIFLG*/ 0xD0,0x02,
- /* FE84: SETNORM LDY #$FF */ 0xA0,0xFF,
- /* FE86: SETIFLG STY INVFLG */ 0x84,0x32,
- /* FE88: RTS */ 0x60,
- /* FE89: SETKBD LDA #$00 */ 0xA9,0x00,
- /* FE8B: INPORT STA A2L */ 0x85,0x3E,
- /* FE8D: INPRT LDX #KSWL */ 0xA2,0x38,
- /* FE8F: LDY #KEYIN */ 0xA0,0x1B,
- /* FE91: BNE IOPRT */ 0xD0,0x08,
- /* FE93: SETVID LDA #$00 */ 0xA9,0x00,
- /* FE95: OUTPORT STA A2L */ 0x85,0x3E,
- /* FE97: OUTPRT LDX #CSWL */ 0xA2,0x36,
- /* FE99: LDY #COUT1 */ 0xA0,0xF0,
- /* FE9B: IOPRT LDA A2L */ 0xA5,0x3E,
- /* FE9D: AND #$0F */ 0x29,0x0F,
- /* FE9F: BEQ IOPRT1 */ 0xF0,0x06,
- /* FEA1: ORA #IOADR/256*/ 0x09,0xC0,
- /* FEA3: LDY #$00 */ 0xA0,0x00,
- /* FEA5: BEQ IOPRT2 */ 0xF0,0x02,
- /* FEA7: IOPRT1 LDA #COUT1/256*/ 0xA9,0xFD,
- /* FEA9: IOPRT2 STY LOC0,X */ 0x94,0x00,
- /* FEAB: STA LOC1,X */ 0x95,0x01,
- /* FEAD: RTS */ 0x60,
- /* FEAE: NOP */ 0xEA,
- /* FEAF: NOP */ 0xEA,
- /* FEB0: DFB -16- */ 0,0,0,0,0,0,
- /* FEB6: GO JSR A1PC */ 0x20,0x75,0xFE,
- /* FEB9: JSR RESTORE*/ 0x20,0x3F,0xFF,
- /* FEBC: JMP (PCL) */ 0x6C,0x3A,0x00,
- /* FEBF: REGZ JMP REGDSP */ 0x4C,0xD7,0xFA,
- /* FEC2: TRACE DEC YSAV */ 0xC6,0x34,
- /* FEC4: STEPZ JSR A1PC */ 0x20,0x75,0xFE,
- /* FEC7: JMP STEP */ 0x4C,0x43,0xFA,
- /* FECA: USR JMP USRADR */ 0x4C,0xF8,0x03,
- /* FECD: DFB */ 0,0,0,
- /* FED0: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FEE0: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FEF0: DFB */ 0,0,0,0,0,0,
- /* FEF6: CRMON JSR BL1 */ 0x20,0x00,0xFE,
- /* FEF9: PLA */ 0x68,
- /* FEFA: PLA */ 0x68,
- /* FEFB: BNE MONZ */ 0xD0,0x6C,
- /* FEFD: DFB */ 0,0,0,
- /* FF00: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FF10: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FF20: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,
- /* FF2D: PRERR LDA #$C5 */ 0xA9,0xC5,
- /* FF2F: JSR COUT */ 0x20,0xED,0xFD,
- /* FF32: LDA #$D2 */ 0xA9,0xD2,
- /* FF34: JSR COUT */ 0x20,0xED,0xFD,
- /* FF37: JSR COUT */ 0x20,0xED,0xFD,
- /* FF3A: BELL LDA #$87 */ 0xA9,0x87,
- /* FF3C: JMP COUT */ 0x4C,0xED,0xFD,
- /* FF3F: RESTORE LDA STATUS */ 0xA5,0x48,
- /* FF41: PHA */ 0x48,
- /* FF42: LDA ACC */ 0xA5,0x45,
- /* FF44: RESTR1 LDX XREG */ 0xA6,0x46,
- /* FF46: LDY YREG */ 0xA4,0x47,
- /* FF48: PLP */ 0x28,
- /* FF49: RTS */ 0x60,
- /* FF4A: SAVE STA ACC */ 0x85,0x45,
- /* FF4C: SAV1 STX XREG */ 0x86,0x46,
- /* FF4E: STY YREG */ 0x84,0x47,
- /* FF50: PHP */ 0x08,
- /* FF51: PLA */ 0x68,
- /* FF52: STA STATUS */ 0x85,0x48,
- /* FF54: TSX */ 0xBA,
- /* FF55: STX SPNT */ 0x86,0x49,
- /* FF57: CLD */ 0xD8,
- /* FF58: RTS */ 0x60,
- /* FF59: RESET JSR SETNORM*/ 0x20,0x84,0xFE,
- /* FF5C: JSR INIT */ 0x20,0x2F,0xFB,
- /* FF5F: JSR SETVID */ 0x20,0x93,0xFE,
- /* FF62: JSR SETKBD */ 0x20,0x89,0xFE,
- /* FF65: MON CLD */ 0xD8,
- /* FF66: JSR BELL */ 0x20,0x3A,0xFF,
- /* FF69: MONZ LDA #$AA */ 0xA9,0xAA,
- /* FF6B: STA PROMPT */ 0x85,0x33,
- /* FF6D: JSR GETLNZ */ 0x20,0x67,0xFD,
- /* FF70: JSR ZMODE */ 0x20,0xC7,0xFF,
- /* FF73: NXTITM JSR GETNUM */ 0x20,0xA7,0xFF,
- /* FF76: STY YSAV */ 0x84,0x34,
- /* FF78: LDY #$17 */ 0xA0,0x17,
- /* FF7A: CHRSRCH DEY */ 0x88,
- /* FF7B: BMI MON */ 0x30,0xE8,
- /* FF7D: CMP CHRTBL,Y*/ 0xD9,0xCC,0xFF,
- /* FF80: BNE CHRSRCH*/ 0xD0,0xF8,
- /* FF82: JSR TOSUB */ 0x20,0xBE,0xFF,
- /* FF85: LDY YSAV */ 0xA4,0x34,
- /* FF87: JMP NXTITM */ 0x4C,0x73,0xFF,
- /* FF8A: DIG LDX #$03 */ 0xA2,0x03,
- /* FF8C: ASL A */ 0x0A,
- /* FF8D: ASL A */ 0x0A,
- /* FF8E: ASL A */ 0x0A,
- /* FF8F: ASL A */ 0x0A,
- /* FF90: NXTBIT ASL A */ 0x0A,
- /* FF91: ROL A2L */ 0x26,0x3E,
- /* FF93: ROL A2H */ 0x26,0x3F,
- /* FF95: DEX */ 0xCA,
- /* FF96: BPL NXTBIT */ 0x10,0xF8,
- /* FF98: NXTBAS LDA MODE */ 0xA5,0x31,
- /* FF9A: BNE NXTBS2 */ 0xD0,0x06,
- /* FF9C: LDA A2H,X */ 0xB5,0x3F,
- /* FF9E: STA A1H,X */ 0x95,0x3D,
- /* FFA0: STA A3H,X */ 0x95,0x41,
- /* FFA2: NXTBS2 INX */ 0xE8,
- /* FFA3: BEQ NXTBAS */ 0xF0,0xF3,
- /* FFA5: BNE NXTCHR */ 0xD0,0x06,
- /* FFA7: GETNUM LDX #$00 */ 0xA2,0x00,
- /* FFA9: STX A2L */ 0x86,0x3E,
- /* FFAB: STX A2L */ 0x86,0x3F,
- /* FFAD: NEXTCHR LDA IN,X */ 0xB9,0x00,0x02,
- /* FFB0: INY */ 0xC8,
- /* FFB1: EOR #$B0 */ 0x49,0xB0,
- /* FFB3: CMP #$0A */ 0xC9,0x0A,
- /* FFB5: BCC DIG */ 0x90,0xD3,
- /* FFB7: ADC #$88 */ 0x69,0x88,
- /* FFB9: CMP #$FA */ 0xC9,0xFA,
- /* FFBB: BCS DIG */ 0xB0,0xCD,
- /* FFBD: RTS */ 0x60,
- /* FFBE: TOSUB LDA #GO/256*/ 0xA9,0xFE,
- /* FFC0: PHA */ 0x48,
- /* FFC1: LDA SUBTBL,Y*/ 0xB9,0xE3,0xFF,
- /* FFC4: PHA */ 0x48,
- /* FFC5: LDA MODE */ 0xA5,0x31,
- /* FFC7: ZMODE LDY #$00 */ 0xA0,0x00,
- /* FFC9: STY MODE */ 0x84,0x31,
- /* FFCB: RTS */ 0x60,
- /* FFCC: CHRTBL DFB CTRL-C */ 0xBC,
- /* FFCD: DFB CTRL-Y */ 0xB2,
- /* FFCE: DFB CTRL-E */ 0xBE,
- /* FFCF: DFB T */ 0xED,
- /* FFD0: DFB V */ 0xEF,
- /* FFD1: DFB CTRL-K */ 0xC4,
- /* FFD2: DFB S */ 0xEC,
- /* FFD3: DFB CTRL-P */ 0xA9,
- /* FFD4: DFB CTRL-B */ 0xBB,
- /* FFD5: DFB - */ 0xA6,
- /* FFD6: DFB + */ 0xA4,
- /* FFD7: DFB M */ 0x06,
- /* FFD8: DFB < */ 0x95,
- /* FFD9: DFB N */ 0x07,
- /* FFDA: DFB I */ 0x02,
- /* FFDB: DFB L */ 0x05,
- /* FFDC: DFB W */ 0xF0,
- /* FFDD: DFB G */ 0x00,
- /* FFDE: DFB R */ 0xEB,
- /* FFDF: DFB : */ 0x93,
- /* FFE0: DFB . */ 0xA7,
- /* FFE1: DFB 'CR' */ 0xC6,
- /* FFE2: DFB 'BLANK'*/ 0x99,
- /* FFE3: SUBTBL DFB #BASCONT-1*/ 0xB2,
- /* FFE4: DFB #USER-1*/ 0xC9,
- /* FFE5: DFB #REGZ-1*/ 0xBE,
- /* FFE6: DFB #TRACE-1*/ 0xC1,
- /* FFE7: DFB #VFY-1 */ 0x35,
- /* FFE8: DFB #INPRT-1*/ 0x8C,
- /* FFE9: DFB #STEPZ-1*/ 0xC3,
- /* FFEA: DFB #OUTPTR*/ 0x96,
- /* FFEB: DFB #XBASIC-1*/ 0xAF,
- /* FFEC: DFB #SETMODE-1*/ 0x17,
- /* FFED: DFB #SETMODE-1*/ 0x17,
- /* FFEE: DFB #MOVE-1 */ 0x2B,
- /* FFEF: DFB #LT-1 */ 0x1F,
- /* FFF0: DFB #SETNORM-1*/ 0x83,
- /* FFF1: DFB #SETINV-1*/ 0x7F,
- /* FFF2: DFB #LIST-1*/ 0x5D,
- /* FFF3: DFB #write-1*/ 0xCC,
- /* FFF4: DFB #GO-1 */ 0xB5,
- /* FFF5: DFB #READ-1*/ 0xFC,
- /* FFF6: DFB #SETMODE-1*/ 0x17,
- /* FFF7: DFB #SETMODE-1*/ 0x17,
- /* FFF8: DFB #CRMON-1*/ 0xF5,
- /* FFF9: DFB #BLANK-1*/ 0x03,
- /* FFFA: DFB #NMI */ 0xFB,0x03,
- /* FFFC: DFB #RESET */ 0x59,0xFF,
- /* FFFE: DFB #IRQ */ 0x86,0xFA,
- 0
- };
-
- char PROGRAM []=
- {
- /* 0300: ORG $0300 */
- /* 0300: TEST LDA #'A' */ 0xA9,0xC1,
- /* 0302: LOOP JSR COUT */ 0x20,0xED,0xFD,
- /* 0305: CLC */ 0x18,
- /* 0306: ADC #$01 */ 0x69,0x01,
- /* 0308: CMP #'[' */ 0xC9,0xDB,
- /* 030A: BNE LOOP */ 0xD0,0xF6,
- /* 030C: RTS */ 0x60,
- /* 030D: DFB -16- */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- };
-
- binprn(tkn,len)
- unsigned long int tkn,
- len;
- {
- int loop,
- temp;
- static char dword []="00000000000000000000000000000000";
- for (loop=1;loop<(len+1);loop++)
- {
- temp=1<<(loop-1);
- if ((tkn&temp) == temp)
- dword [len-loop] ='1';
- else
- dword [len-loop] ='0';
- }
- dword [len] =0;
- printf("%s",dword);
- }
-
- hexprn(byte,len)
- unsigned long int byte,
- len;
- {
- int loop;
- for (loop=0;loop<len;loop++)
- {
- printf("%c",(((((byte>>((len-1)*4))&15)>9)&1)*7
- +((byte>>((len-1)*4))&15))+060 | 0x80);
- byte=byte<<4;
- }
- }
-
- halfdup()
- {
- struct term temp;
- gterm(&temp);
- temp.tt_flags=temp.tt_flags & (65535 - (ECHO+CRLF));
- sterm(&temp);
- }
-
- fulldup()
- {
- struct term temp;
- gterm(&temp);
- temp.tt_flags=temp.tt_flags | (ECHO+CRLF);
- sterm(&temp);
- }
-
- botomline()
- {
- printf("\033\067");
- printf("\033\133\062\063;\061f");
- }
-
- char inkey(key)
- char key;
- {
- short temp;
- /* if (tty$in() & 0x8000) */
- keycounter += 1;
- if (keycounter >= 4)
- {
- keycounter = 0;
- t1in(temp);
- if ((temp & 0x7F) == 0x0A)
- temp = 0x0D;
- return((int) (temp | 0x80));
- }
- return (key & 0xFF);
- }
-
- charprn(charen)
- char charen;
- {
- if ((charen & 0x80) == 0)
- {
- /* inv or flash */
- if ((charen & 0x40) == 0)
- {
- /* invers */
- char charen2;
- printf("\033[7m");
-
- if ((charen & 0x20) == 0)
- charen2 = (charen & 0x3F) + 0x40;
- else
- charen2 = (charen & 0x3F);
-
- printf("%c",charen2);
- printf("\033[m");
- }
- else
- {
- /* flash */
- char charen2;
- printf("\033[5m");
- if ((charen & 0x20) == 0)
- charen2 = (charen & 0x3F) + 0x40;
- else
- charen2 = (charen & 0x3F);
-
- if (charen2 == 0x20)
- printf("%c",0x18);
- else
- printf("%c",charen2);
- printf("\033[m");
- }
- }
- else
- {
- if (charen < 0xA0)
- {
- /* ctrl */
- printf(".");
- }
- else
- {
- /* norm */
- printf("%c",charen & 0x7F);
- }
- }
- }
-
- prnspc(antal)
- int antal;
- {
- int loop;
- for(loop=0;loop<antal;loop++)
- printf(" ");
- }
-
- int video_check(address)
- int address;
- {
- int radflg;
- radflg = 0;
- radflg = radflg +1 *((address >= 0x0400) && (address <= 0x0477));
- radflg = radflg +2 *((address >= 0x0480) && (address <= 0x04F7));
- radflg = radflg +3 *((address >= 0x0500) && (address <= 0x0577));
- radflg = radflg +4 *((address >= 0x0580) && (address <= 0x05F7));
- radflg = radflg +5 *((address >= 0x0600) && (address <= 0x0677));
- radflg = radflg +6 *((address >= 0x0680) && (address <= 0x06F7));
- radflg = radflg +7 *((address >= 0x0700) && (address <= 0x0777));
- radflg = radflg +8 *((address >= 0x0780) && (address <= 0x07F7));
- return(radflg);
- }
-
- video_out(address,radflg)
- int address,
- radflg;
- {
- int has_send = 0,
- old_x,
- old_y,
- old_byte;
- old_x = (old_address - (0x0400+0x80*(old_radflg-1)))%40;
- old_y = (((old_address - (0x0400+0x80*(old_radflg-1)))/40)*8)+(old_radflg-1);
- old_byte = MEMORY [old_address];
-
-
- {
- int x,
- y,
- byte;
- x = (address - (0x0400+0x80*(radflg-1)))%40;
- y = (((address - (0x0400+0x80*(radflg-1)))/40)*8)+(radflg-1);
- byte = MEMORY [address];
-
- if ((y == old_y) && (x == old_x+1))
- {
- charprn(old_byte);
- charprn(byte);
- has_send = 1;
- }
-
- if ((y == old_y) && (x == old_x-1))
- {
- printf("\010");
- charprn(byte);
- has_send = 1;
- }
-
- if ((x == old_x) && (y == old_y+1))
- {
- printf("\033D");
- charprn(byte);
- has_send = 1;
- }
-
- if ((x == old_x) && (y == old_y+1))
- {
- printf("\033M");
- charprn(byte);
- has_send = 1;
- }
-
- if ((x == 0) && (y == old_y+1))
- {
- printf("\033E");
- charprn(byte);
- has_send = 1;
- }
-
- if (!has_send)
- {
- printf("\033[%d;%df",y+1,x+1);
- charprn(byte);
- }
- }
-
- printf("\010\033\067");
- old_address = address;
- old_radflg = radflg;
- }
-
-
- CPU(coden)
- int coden;
- {
- code =coden;
- switch(code)
- {
- case 0x00 : BRK(); break;
- case 0x05 : ORAzpa(); break;
- case 0x06 : ASLzpa(); break;
- case 0x08 : PHP(); break;
- case 0x09 : ORAimm(); break;
- case 0x10 : BPLrel(); break;
- case 0x0A : ASLacc(); break;
- case 0x18 : CLC(); break;
- case 0x20 : JSRabs(); break;
- case 0x25 : ANDzpa(); break;
- case 0x26 : ROLzpa(); break;
- case 0x28 : PLP(); break;
- case 0x29 : ANDimm(); break;
- case 0x2A : ROLacc(); break;
- case 0x2C : BITabs(); break;
- case 0x30 : BMIrel(); break;
- case 0x38 : SEC(); break;
- case 0x40 : RTI(); break;
- case 0x48 : PHA(); break;
- case 0x49 : EORimm(); break;
- case 0x4A : LSRacc(); break;
- case 0x4C : JMPabs(); break;
- case 0x60 : RTS(); break;
- case 0x65 : ADCzpa(); break;
- case 0x68 : PLA(); break;
- case 0x69 : ADCimm(); break;
- case 0x6A : RORacc(); break;
- case 0x6C : JMPind(); break;
- case 0x84 : STYzpa(); break;
- case 0x85 : STAzpa(); break;
- case 0x86 : STXzpa(); break;
- case 0x88 : DEY(); break;
- case 0x8A : TXA(); break;
- case 0x90 : BCCrel(); break;
- case 0x91 : STAind_y(); break;
- case 0x94 : STYzpa_x(); break;
- case 0x95 : STAzpa_x(); break;
- case 0x98 : TYA(); break;
- case 0x9D : STAabs_x(); break;
- case 0xA0 : LDYimm(); break;
- case 0xA1 : LDAind_x(); break;
- case 0xA2 : LDXimm(); break;
- case 0xA4 : LDYzpa(); break;
- case 0xA5 : LDAzpa(); break;
- case 0xA6 : LDXzpa(); break;
- case 0xA8 : TAY(); break;
- case 0xA9 : LDAimm(); break;
- case 0xAA : TAX(); break;
- case 0xAD : LDAabs(); break;
- case 0xB0 : BCSrel(); break;
- case 0xB1 : LDAind_y(); break;
- case 0xB5 : LDAzpa_x(); break;
- case 0xB9 : LDAabs_y(); break;
- case 0xBA : TSX(); break;
- case 0xBD : LDAabs_x(); break;
- case 0xC0 : CPYimm(); break;
- case 0xC4 : CPYzpa(); break;
- case 0xC5 : CMPzpa(); break;
- case 0xC6 : DECzpa(); break;
- case 0xC8 : INY(); break;
- case 0xC9 : CMPimm(); break;
- case 0xCA : DEX(); break;
- case 0xD0 : BNErel(); break;
- case 0xD8 : CLD(); break;
- case 0xD9 : CMPabs_y(); break;
- case 0xE0 : CPXimm(); break;
- case 0xE6 : INCzpa(); break;
- case 0xE8 : INX(); break;
- case 0xE9 : SBCimm(); break;
- case 0xF0 : BEQrel(); break;
-
- default : NOT();
- }
- if (D == 1);
- /* Z IS INVALIDE */
-
- if ((antalarg > 2) && (trace))
- {
- printf("\033\070");
- }
- }
-
- NOT()
- {
- B = 1;
- I = 0;
- }
-
- ADCimm()
- {
- int pc,
- code,
- a,
- c;
- pc = PC-1;
- code = loadOp();
- a = A;
- c = C;
- A = (A & 0xFF)+ code + C;
- C = (A == 0x100);
- N = ((A & 0xFF)>>7);
- Z = (A & 0xFF)==0;
- V = (A - a) > 127;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-69 "); hexprn(code,2);
- printf(" :ADC #$"); hexprn(code,2);
- prnspc(RTScounter); printf(" ;Adc #"); hexprn(code,2);
- printf(" to A "); hexprn((a & 0xFF),2);
- printf(" with C "); binprn((c & 1),1); printf(" ");
- prnspc(11 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- ADCzpa()
- {
- int pc,
- code,
- a,
- c;
- pc = PC-1;
- code = loadOp();
- a = (A & 0xFF);
- c = C;
- A = (A & 0xFF)+ loadCo(0x00,code) + C;
- C = (A == 0x100);
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- V = (A - a) > 127;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-65 "); hexprn(code,2);
- printf(" :ADC $"); hexprn(code,2); printf(" ");
- prnspc(RTScounter); printf(";Add $"); hexprn(code,2);
- printf(" ["); hexprn(loadCo(0x00,code),2);
- printf("] to A "); hexprn((a & 0xFF),2);
- printf(" with C "); binprn((c & 1),1); printf(" ");
- prnspc(6 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- ASLzpa()
- {
- int pc,
- code,
- codel,
- code2;
- pc = PC-1;
- codel = loadOp();
- code = loadCo(0x00,codel);
- code2 = (code & 0xFF) << 1;
- saveCo(0x00,codel,code2);
- N = (code2 & 0x80) != 0;
- Z = (code2 & 0xFF) == 0;
- C = (code2 & 0x100) != 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-06 "); hexprn(codel,2);
- printf(" :ASL $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter); printf(";Rotate left "); hexprn(code,2);
- printf(" from to C "); binprn((C & 1),1);
- prnspc(10 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- ANDimm()
- {
- int pc,
- code,
- a;
- pc = PC-1;
- code = loadOp();
- a = A;
- A = (A & 0xFF) & code;
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-29 "); hexprn(code,2);
- printf(" :AND #$"); hexprn(code,2); printf(" ");
- prnspc(RTScounter); printf(";And #"); hexprn(code,2);
- printf(" with A "); hexprn((a & 0xFF),2); printf(" ");
- prnspc(18 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- ANDzpa()
- {
- int pc,
- code,
- codel,
- a;
- pc = PC-1;
- codel = loadOp();
- a = A;
- code = loadCo(0x00,codel);
- A = (A & 0xFF) & code;
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-25 "); hexprn(codel,2);
- printf(" :AND $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter);
- printf(";And "); hexprn(code,2);
- printf(" with A "); hexprn((a & 0xFF),2); printf(" ");
- prnspc(19 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- ASLacc()
- {
- int pc,
- a;
- pc = PC-1;
- a = A;
- A = (A & 0xFF) << 1;
- N = (A & 0x80) != 0;
- Z = (A & 0xFF) == 0;
- C = (A & 0x100) != 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-0A ");
- printf(" :ASL A ");
- prnspc(RTScounter); printf(";Shift left A "); hexprn((a & 0xFF),2);
- printf(" one to C "); binprn((C & 1),1); printf(" ");
- prnspc(9 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- BCCrel()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- code = (code>127)?(code-256):code;
- if (C == 0)
- PC+=code;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-90 "); hexprn(code,2);
- printf(" :BCC $"); hexprn(pc+2+code,4); printf(" ");
- prnspc(RTScounter); printf(";Branch on C "); binprn((C & 1),1);
- printf(" clear");
- prnspc(17 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- BCSrel()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- code = (code>127)?(code-256):code;
- if (C == 1)
- PC+=code;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-B0 "); hexprn(code,2);
- printf(" :BCS $"); hexprn(pc+2+code,4); printf(" ");
- prnspc(RTScounter); printf(";Branch on C "); binprn((C & 1),1);
- printf(" set");
- prnspc(19 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- BEQrel()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- code = (code>127)?(code-256):code;
- if (Z == 1)
- PC+=code;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-F0 "); hexprn(code,2);
- printf(" :BEQ $"); hexprn(pc+2+code,4); printf(" ");
- prnspc(RTScounter); printf(";Branch on Z "); binprn((Z & 1),1);
- printf(" set");
- prnspc(19 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- BITabs()
- {
- int pc,
- code,
- code2,
- codel,
- codeh;
- pc = PC-1;
- codel = loadOp(); codeh = loadOp();
- code = ((A & 0xFF) & (code2=loadCo(codeh,codel)));
- N = ((code & 0x80) != 0);
- V = ((code & 0x40) != 0);
- Z = code == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-2C ");
- hexprn(codel,2); printf(" "); hexprn(codeh,2);
- printf(":BIT $"); hexprn(codeh,2); hexprn(codel,2);
- printf(" "); prnspc(RTScounter);
- printf(";Test $"); hexprn(codeh,2); hexprn(codel,2);
- printf(" ["); hexprn(code2,2);
- printf("] with A "); hexprn(A,2);
- prnspc(11 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- BNErel()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- code = (code>127)?(code-256):code;
- if (Z == 0)
- PC+=code;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-D0 "); hexprn(code,2);
- printf(" :BNE $"); hexprn(pc+2+code,4); printf(" ");
- prnspc(RTScounter);
- printf(";Branch on Z "); binprn(Z,1); printf(" clear");
- prnspc(17 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- BMIrel()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- code = (code>127)?(code-256):code;
- if (N == 1)
- PC+=code;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-30 "); hexprn(code,2);
- printf(" :BMI $"); hexprn(pc+2+code,4); printf(" ");
- prnspc(RTScounter);
- printf(";Branch on N "); binprn(N,1); printf(" set");
- prnspc(19 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- BPLrel()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- code = (code>127)?(code-256):code;
- if (N == 0)
- PC+=code;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-10 "); hexprn(code,2);
- printf(" :BPL $"); hexprn(pc+2+code,4); printf(" ");
- prnspc(RTScounter);
- printf(";Branch on N "); binprn(C,1); printf(" clear");
- prnspc(17 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- BRK()
- {
- int pc,
- code;
- pc = PC-1;
- code=PCH; pushS(code);
- code=PCL; pushS(code);
- I = 1; B = 1;
- code=P; pushS(code);
- PCL = MEMORY [0xFFFE];
- PCH = MEMORY [0xFFFF];
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-00 "); printf(" ");
- printf(" :BRK"); printf(" ");
- prnspc(RTScounter);
- printf(";Force break");
- prnspc(25 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
-
- CLC()
- {
- int pc;
- pc = PC-1;
- C = 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-18 "); printf(" ");
- printf(" :CLC"); printf(" ");
- prnspc(RTScounter);
- printf(";Clear carry flag");
- prnspc(20 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- CLD()
- {
- int pc;
- pc = PC-1;
- D=0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-D8 "); printf(" ");
- printf(" :CLD"); printf(" ");
- prnspc(RTScounter);
- printf(";Clear decimal mode");
- prnspc(18 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- CMPabs_y()
- {
- int pc,
- code,
- codel,
- codeh,
- codel2,
- codeh2,
- ansv;
- pc = PC-1;
- Y = (Y & 0xFF);
- codel = loadOp(); codeh = loadOp();
- codel2 = codel + Y; codeh2 = codeh + ((codel2 >> 8) & 1);
- codel2 &= 0xFF; codeh2 &= 0xFF;
- code = loadCo(codeh2,codel2);
- ansv = (A & 0xFF) - code;
- N = ((ansv & 0xFF) >> 7);
- Z = (ansv & 0xFF) == 0;
- C = ((A & 0xFF) >= code);
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-D9 ");
- hexprn(codel,2); printf(" "); hexprn(codeh,2);
- printf(":CMP $"); hexprn(codeh,2); hexprn(codel,2);
- printf(",Y ");
- prnspc(RTScounter);
- printf(";Compare "); hexprn(codeh2,2); hexprn(codel2,2);
- printf(" ["); hexprn(code,2);
- printf("] with A "); hexprn(A,2); printf(" ");
- prnspc(8 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- CMPimm()
- {
- int pc,
- code,
- ansv;
- pc = PC-1;
- code = loadOp();
- ansv = (A & 0xFF) - code;
- N = ((ansv & 0xFF) >> 7);
- Z = (ansv & 0xFF) == 0;
- C = ((A & 0xFF) >= code);
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-C9 "); hexprn(code,2);
- printf(" :CMP #$"); hexprn(code,2); printf(" ");
- prnspc(RTScounter);
- printf(";Compare #"); hexprn(code,2);
- printf(" with A "); hexprn(A,2); printf(" ");
- prnspc(14 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- CMPzpa()
- {
- int pc,
- code,
- codel,
- ansv;
- pc = PC-1;
- codel = loadOp();
- ansv = (A & 0xFF) - (code = loadCo(0x00,codel));
- N = ((ansv & 0xFF) >> 7);
- Z = (ansv & 0xFF) == 0;
- C = ((A & 0xFF) >= code);
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-C5 "); hexprn(codel,2);
- printf(" :CMP $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter);
- printf(";Compare "); hexprn(codel,2);
- printf(" ["); hexprn(code,2);
- printf("] with A "); hexprn(A,2); printf(" ");
- prnspc(10 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- CPXimm()
- {
- int pc,
- code,
- ansv;
- pc = PC-1;
- code = loadOp();
- ansv = (X & 0xFF) - code;
- N = ((ansv & 0xFF) >> 7);
- Z = (ansv & 0xFF) == 0;
- C = ((X & 0xFF) >= code);
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-E0 "); hexprn(code,2);
- printf(" :CPX #$"); hexprn(code,2); printf(" ");
- prnspc(RTScounter);
- printf(";Compare #"); hexprn(code,2);
- printf(" with X "); hexprn(A,2); printf(" ");
- prnspc(14 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- CPYimm()
- {
- int pc,
- code,
- ansv;
- pc = PC-1;
- code = loadOp();
- ansv = (Y & 0xFF) - code;
- N = ((ansv & 0xFF) >> 7);
- Z = (ansv & 0xFF) == 0;
- C = ((Y & 0xFF) >= code);
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-C0 "); hexprn(code,2);
- printf(" :CPY #$"); hexprn(code,2); printf(" ");
- prnspc(RTScounter);
- printf(";Compare #"); hexprn(code,2);
- printf(" with Y "); hexprn(Y,2); printf(" ");
- prnspc(14 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- CPYzpa()
- {
- int pc,
- code,
- codel,
- ansv;
- pc = PC-1;
- codel = loadOp();
- ansv = (Y & 0xFF) - (code = loadCo(0x00,codel));
- N = (ansv & 0x80) != 0;
- Z = (ansv & 0xFF) == 0;
- C = ((Y & 0xFF) >= code);
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-C4 "); hexprn(codel,2);
- printf(" :CPY $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter);
- printf(";Compare "); hexprn(codel,2);
- printf(" ["); hexprn(code,2);
- printf("] with Y "); hexprn(Y,2); printf(" ");
- prnspc(10 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- DECzpa()
- {
- int pc,
- code,
- code2,
- codel;
- pc = PC-1;
- codel = loadOp();
- code = loadCo(0x00,codel);
- code2 = ((code | 0x100) - 1) & 0xFF;
- saveCo(0x00,codel,code2);
- N = (code2 & 0x80) != 0;
- Z = (code2 & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-C6 "); hexprn(codel,2);
- printf(" :DEC $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter);
- printf(";Decrement "); hexprn(codel,2);
- printf(" ["); hexprn(code,2); printf("] by one");
- prnspc(12 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- DEX()
- {
- int pc,
- x;
- pc = PC-1;
- x = X;
- X = ((X | 0x100) - 1) & 0xFF;
- N = (X & 0x80) != 0;
- Z = (X & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-CA "); printf(" ");
- printf(" :DEX"); printf(" ");
- prnspc(RTScounter);
- printf(";Decrement index X ");
- hexprn(x,2); printf(" by one");
- prnspc(9 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- DEY()
- {
- int pc,
- y;
- pc = PC-1;
- y = Y;
- Y = ((Y | 0x100) - 1) & 0xFF;
- N = (Y & 0x80) != 0;
- Z = (Y & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-88 "); printf(" ");
- printf(" :DEY"); printf(" ");
- prnspc(RTScounter);
- printf(";Decrement index Y ");
- hexprn(y,2); printf(" by one");
- prnspc(9 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- EORimm()
- {
- int pc,
- code,
- a;
- pc = PC-1;
- code = loadOp();
- a = A;
- A = ((A & 0xFF) | code) - ((A & 0xFF) & code);
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-49 "); hexprn(code,2);
- printf(" :EOR #$"); hexprn(code,2); printf(" ");
- prnspc(RTScounter);
- printf(";Eor #"); hexprn(code,2);
- printf(" with A "); hexprn(a,2); printf(" ");
- prnspc(18 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- INCzpa()
- {
- int pc,
- eb,
- code,
- codel,
- mem;
- pc = PC-1;
- codel = loadOp();
- saveCo(0x00,codel,(code = loadCo(0x00,codel))+1);
- N = (code & 0x80) == 80;
- Z = code == 0x00;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-E6 "); hexprn(codel,2);
- printf(" :INC $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter);
- printf(";Increment $"); hexprn(codel,2);
- printf(" ["); hexprn(code,2); printf("] by one");
- prnspc(11 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- INX()
- {
- int pc,
- x;
- pc = PC-1;
- x = X;
- X = (X & 0xFF) + 1;
- N = (X & 0x80) != 0;
- Z = (X & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-E8 "); printf(" ");
- printf(" :INX"); printf(" ");
- prnspc(RTScounter);
- printf(";increment index X ");
- hexprn(x,2); printf(" by one");
- prnspc(9 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- INY()
- {
- int pc,
- y;
- pc = PC-1;
- y = Y;
- Y = (Y & 0xFF) + 1;
- N = (Y & 0x80) != 0;
- Z = (Y & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-C8 "); printf(" ");
- printf(" :INY"); printf(" ");
- prnspc(RTScounter);
- printf(";increment index Y ");
- hexprn(y,2); printf(" by one");
- prnspc(9 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- JMPabs()
- {
- int codeh,
- codel,
- pc;
- pc = PC-1;
- codel = loadOp(); codeh = loadOp();
- PCL = codel; PCH = codeh;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-4C ");
- hexprn(PCL,2); printf(" "); hexprn(PCH,2);
- printf(":JMP $"); hexprn(PC,4); printf(" ");
- prnspc(RTScounter); printf(";Jump to "); hexprn(PC,4);
- prnspc(24 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- JMPind()
- {
- int codeh,
- codel,
- codeh2,
- codel2,
- pc;
- pc = PC-1;
- codel = loadOp(); codeh = loadOp();
- codel2= codel +1; codeh2= codeh + (codel2>>8);
- PCL = loadCo(codeh,codel); PCH = loadCo((codeh2 & 0xFF),(codel2 & 0xFF));
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-6C ");
- hexprn(codel,2); printf(" "); hexprn(codeh,2);
- printf(":JMP ("); hexprn(codeh,2); hexprn(codel,2);
- printf(") "); prnspc(RTScounter);
- printf(";Jump to "); hexprn(PC,4);
- prnspc(24 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- JSRabs()
- {
- int pc,
- codel,
- codeh;
- pc = PC-1;
- codel = loadOp(); codeh = loadOp();
- PC --;
- pushS(PCH); pushS(PCL);
- PCL = codel; PCH = codeh;
- RTScounter ++; STACKcounter = S;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-20 ");
- hexprn(PCL,2); printf(" "); hexprn(PCH,2);
- printf(":JSR "); hexprn(PC,4); printf(" ");
- prnspc(RTScounter);
- printf(";Jump to subrutine "); hexprn(PC,4);
- prnspc(14 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDAabs()
- {
- int pc,
- codeh,
- codel;
- pc = PC-1;
- codel = loadOp(); codeh = loadOp();
- A = loadCo(codeh,codel);
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-AD ");
- hexprn(codel,2); printf(" "); hexprn(codeh,2);
- printf(":LDA $"); hexprn(codeh,2); hexprn(codel,2);
- printf(" "); prnspc(RTScounter);
- printf(";Load accumulator with "); hexprn(A,2);
- prnspc(12 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDAabs_x()
- {
- int pc,
- codeh,
- codel,
- codeh2,
- codel2;
- pc = PC-1;
- X &= 0xFF;
- codel = loadOp(); codeh = loadOp();
- codel2 = codel + X; codeh2 = codeh + ((codel2 >> 8) & 1);
- codel2 &= 0xFF; codeh2 &= 0xFF;
- A = loadCo(codeh2,codel2);
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-BD ");
- hexprn(codel,2); printf(" "); hexprn(codeh,2);
- printf(":LDA ($"); hexprn(codeh,2); hexprn(codel,2);
- printf("),X"); prnspc(RTScounter);
- printf(";Load accumulator with ");
- hexprn(codeh2,2); hexprn(codel2,2);
- printf(" ["); hexprn(A,2); printf("]");
- prnspc(5 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDAabs_y()
- {
- int pc,
- codeh,
- codel,
- codeh2,
- codel2;
- pc = PC-1;
- Y &= 0xFF;
- codel = loadOp(); codeh = loadOp();
- codel2 = codel + Y; codeh2 = codeh + ((codel2 >> 8) & 1);
- codel2 &= 0xFF; codeh2 &= 0xFF;
- A = loadCo(codeh2,codel2);
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-B9 ");
- hexprn(codel,2); printf(" "); hexprn(codeh,2);
- printf(":LDA ("); hexprn(codeh,2); hexprn(codel,2);
- printf("),Y"); prnspc(RTScounter);
- printf(";Load accumulator with ");
- hexprn(codeh2,2); hexprn(codel2,2);
- printf(" ["); hexprn(A,2); printf("]");
- prnspc(5 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDAimm()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- A=code;
- N = ((code&0xFF)>>7);
- Z = (code&0xFF)==0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-A9 "); hexprn(code,2);
- printf(" :LDA #$"); hexprn(code,2); printf(" ");
- prnspc(RTScounter);
- printf(";Load accumulator with #"); hexprn(A,2);
- prnspc(11 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDAind_x()
- {
- int pc,
- a,
- code,
- codel,
- codeh,
- codel2,
- codeh2,
- codel3,
- codeh3;
- pc = PC-1;
- X &= 0xFF;
- code = loadOp();
- codel = code + X; codeh = 0x00;
- codel &= 0xFF;
- codel2 = codel + 1; codeh2 = 0x00;
- codel2 &= 0xFF;
- codel3 = loadCo(codeh,codel); codeh3 = loadCo(codeh2,codel2);
- A = loadCo(codeh3,codel3);
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-A1 "); hexprn(code,2);
- printf(" :LDA ($"); hexprn(code,2); printf(",X) ");
- prnspc(RTScounter);
- printf(";Load A ind X "); hexprn(Y,2);
- printf("from "); hexprn(codeh3,2); hexprn(codel3,2);
- printf(" ["); hexprn(A,2); printf("]");
- prnspc(7 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDAind_y()
- {
- int pc,
- a,
- code,
- codel,
- codeh,
- codel2,
- codeh2,
- codel3,
- codeh3;
- pc = PC-1;
- Y &= 0xFF;
- code = loadOp();
- codel = code+1; codeh = 0x00;
- codel &= 0xFF;
- codel2 = loadCo(0x00,code); codeh2 = loadCo(codeh,codel);
- codel3 = codel2 + Y; codeh3 = codeh2 + ((codel3 >>8) & 1);
- codel3 &= 0xFF; codeh3 &= 0xFF;
- A = loadCo(codeh3,codel3);
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-B1 "); hexprn(code,2);
- printf(" :LDA ($"); hexprn(code,2); printf("),Y ");
- prnspc(RTScounter);
- printf(";Load A with Y ");hexprn(Y,2);
- printf("from "); hexprn(codeh3,2); hexprn(codel3,2);
- printf(" ["); hexprn(A,2); printf("]");
- prnspc(6 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDAzpa()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- A = loadCo(0x00,code);
- N = (A & 0x80) !=0;
- Z = (A & 0xFF) ==0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-A5 "); hexprn(code,2);
- printf(" :LDA $"); hexprn(0x00,2); hexprn(code,2);
- printf(" "); prnspc(RTScounter);
- printf(";Load $"); hexprn(code,2);
- printf(" with accumulator "); hexprn(A,2);
- prnspc(8 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDAzpa_x()
- {
- int pc,
- codeh,
- codel,
- codeh2,
- codel2;
- pc = PC-1;
- X &= 0xFF;
- codel = loadOp(); codeh = 0x00;
- codel2 = codel + X; codeh2 = 0x00;
- codel2 &= 0xFF;
- A = loadCo((codeh2 & 0xFF),(codel2 & 0xFF));
- N = (A & 0x80) != 0;
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-B5 "); hexprn(codel,2);
- printf(" :LDA $"); hexprn(codel,2);
- printf(",X "); prnspc(RTScounter);
- printf(";Load accumulator with ");
- hexprn(codeh2,2); hexprn(codel2,2);
- printf(" ["); hexprn(A,2); printf("]");
- prnspc(7 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDXimm()
- {
- int pc;
- pc = PC-1;
- X = loadOp();
- N = ((X & 0xFF) >> 7);
- Z = (X & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-A2 "); hexprn(X,2);
- printf(" :LDX #$"); hexprn(X,2); printf(" ");
- prnspc(RTScounter);
- printf(";Load index,X with #"); hexprn(X,2);
- prnspc(15 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDXzpa()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- X = loadCo(0x00,code);
- N = ((code&0xFF)>>7);
- Z = (code&0xFF)==0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-A6 "); hexprn(code,2);
- printf(" :LDX $"); hexprn(0x00,2); hexprn(code,2);
- printf(" "); prnspc(RTScounter);
- printf(";Load index X with "); hexprn(X,2);
- prnspc(16 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDYimm()
- {
- int pc;
- pc = PC-1;
- Y = loadOp();
- N = ((Y & 0xFF) >> 7);
- Z = (Y & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-A0 "); hexprn(Y,2);
- printf(" :LDY #$"); hexprn(Y,2); printf(" ");
- prnspc(RTScounter);
- printf(";Load index,Y with #"); hexprn(Y,2);
- prnspc(15 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LDYzpa()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- Y = loadCo(0x00,code);
- N = ((code&0xFF)>>7);
- Z = (code&0xFF)==0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-A4 "); hexprn(code,2);
- printf(" :LDY $"); hexprn(0x00,2); hexprn(code,2);
- printf(" "); prnspc(RTScounter);
- printf(";Load index Y with "); hexprn(Y,2);
- prnspc(16 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- LSRacc()
- {
- int pc,
- a;
- pc = PC-1;
- C = (A & 1);
- a = A;
- A = (A & 0xFF) >> 1;
- N = 0;
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-4A ");
- printf(" :LSR A "); printf(" ");
- prnspc(RTScounter);
- printf(";Shift right A ");hexprn((a & 0xFF),2);
- printf(" one bit to C "); binprn((C & 1),1);
- prnspc(5 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- ORAimm()
- {
- int pc,
- code,
- a;
- pc = PC-1;
- code = loadOp();
- a = A;
- A = (A & 0xFF) | code;
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-09 "); hexprn(code,2);
- printf(" :ORA #$"); hexprn(code,2); printf(" ");
- prnspc(RTScounter);
- printf(";Or #"); hexprn(code,2);
- printf(" with A "); hexprn(a,2);
- prnspc(20 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- ORAzpa()
- {
- int pc,
- code,
- codel,
- a;
- pc = PC-1;
- codel = loadOp();
- code = loadCo(0x00,codel);
- a = A;
- A = (A & 0xFF) | code;
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-05 "); hexprn(codel,2);
- printf(" :ORA $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter);
- printf(";Or $"); hexprn(codel,2);
- printf(" ["); hexprn(code,2);
- printf("]) with A "); hexprn(a,2);
- prnspc(14 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- PHA()
- {
- int pc;
- pc = PC-1;
- pushS((A & 0xFF));
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-48 "); printf(" ");
- printf(" :PHA"); printf(" ");
- prnspc(RTScounter);
- printf(";push A "); hexprn(A,2);
- printf(" to stack pointer "); hexprn(S,2);
- prnspc(7 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- PHP()
- {
- int pc;
- pc = PC-1;
- pushS((P & 0xFF));
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-08 "); printf(" ");
- printf(" :PHP"); printf(" ");
- prnspc(RTScounter);
- printf(";push P "); hexprn(P,2);
- printf(" to stack pointer "); hexprn(S,2);
- prnspc(7 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- PLA()
- {
- int pc;
- pc = PC-1;
- A = pullS();
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-68 "); printf(" ");
- printf(" :PLA"); printf(" ");
- prnspc(RTScounter);
- printf(";Pull A "); hexprn(A,2);
- printf(" from stack-p "); hexprn(S,2);
- prnspc(11 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- PLP()
- {
- int pc;
- pc = PC-1;
- P = pullS();
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-48 "); printf(" ");
- printf(" :PLP"); printf(" ");
- prnspc(RTScounter);
- printf(";Pull P "); hexprn(P,2);
- printf(" from stack-p "); hexprn(S,2);
- prnspc(11 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- ROLacc()
- {
- int pc,
- code,
- codel,
- code2,
- a;
- pc = PC-1;
- a = A;
- code = A & 0xFF;
- code2 = ((code & 0xFF) << 1) | (C & 1);
- A = code2;
- N = (code2 & 0x80) != 0;
- Z = (code2 & 0xFF) == 0;
- C = (code2 & 0x100) != 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-2A "); hexprn(codel,2);
- printf(" :ROL Acc"); printf(" ");
- prnspc(RTScounter); printf(";Rotate left "); hexprn(a,2);
- printf(" from and to C ");binprn((C & 1),1);
- prnspc(6 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- ROLzpa()
- {
- int pc,
- code,
- codel,
- code2;
- pc = PC-1;
- codel = loadOp();
- code = loadCo(0x00,codel);
- code2 = ((code & 0xFF) << 1) | (C & 1);
- saveCo(0x00,codel,code2);
- N = (code2 & 0x80) != 0;
- Z = (code2 & 0xFF) == 0;
- C = (code2 & 0x100) != 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-26 "); hexprn(codel,2);
- printf(" :ROL $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter); printf(";Rotate left "); hexprn(code,2);
- printf(" from and to C ");binprn((C & 1),1);
- prnspc(6 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- RORacc()
- {
- int pc,
- code,
- codel,
- code2,
- c;
- pc = PC-1;
- c = C;
- code = A;
- C = (code & 0x01);
- code2 = ((code & 0xFF) >> 1) | (c * 0x80);
- A = code2;
- N = (code2 & 0x80) != 0;
- Z = (code2 & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-6A "); hexprn(codel,2);
- printf(" :ROR $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter); printf(";Rotate left "); hexprn(code,2);
- printf(" from and to C ");binprn((C & 1),1);
- prnspc(6 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- RTI()
- {
- int pc,
- s;
- pc = PC-1;
- s = S;
- P = pullS(); PCL = pullS(); PCH = pullS();
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-40 "); printf(" ");
- printf(" :RTI"); printf(" ");
- printf(";Pull P "); hexprn(P,2);
- printf(" and PC "); hexprn(PC,4);
- printf(" from S "); hexprn(s,2);
- prnspc(5 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- RTS()
- {
- int pc,
- s;
- pc = PC;
- s = S;
- PCL = pullS();PCH = pullS();
- PC ++;
- RTScounter --;
- if (RTScounter < -10)
- {
- code = 0xFF;
- return;
- }
-
- if (trace)
- {
- if (antalarg > 2)
- botomline();
-
- hexprn(pc,4); printf("-60 "); printf(" ");
- printf(" :RTS"); printf(" ");
- prnspc(RTScounter);
- printf(";Pull PC "); hexprn(PC,4);
- printf(" from S "); hexprn(s,2);
- prnspc(14 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
-
- if ((troff) && (tracepoint > RTScounter))
- {
- trace =1;
- troff =0;
- if (antalarg == 2)
- printf("\n");
- }
- }
-
- SBCimm()
- {
- int pc,
- code,
- a,
- c;
- pc = PC-1;
- code = loadOp();
- a = A;
- c = C;
- A = ((A & 0xFF) | 0x100) - code - (C == 0);
- C = (A != 0x100);
- N = ((A & 0xFF)>>7);
- Z = (A & 0xFF)==0;
- V = (A - a) > 127;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-E9 "); hexprn(code,2);
- printf(" :SBC #$"); hexprn(code,2); printf(" ");
- prnspc(RTScounter);
- printf(";Sbc #"); hexprn(code,2);
- printf(" to A "); hexprn(a,2);
- printf(" with C "); binprn(c,1);
- prnspc(12 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- SEC()
- {
- int pc;
- pc = PC-1;
- C=1;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-38 "); printf(" ");
- printf(" :SEC"); printf(" ");
- prnspc(RTScounter);
- printf(";Set carry flag 1 -> C");
- prnspc(14 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- STAabs_x()
- {
- int pc,
- codeh,
- codel,
- codel2,
- codeh2;
- pc = PC-1;
- X &= 0xFF;
- codel = loadOp(); codeh = loadOp();
- codel2 = codel+X; codeh2 = codeh + ((codel2 >> 8) & 1);
- saveCo((codeh2 & 0xFF),(codel2 & 0xFF),(A & 0xFF));
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-9D ");
- hexprn(codel,2); printf(" "); hexprn(codeh,2);
- printf(":STA ($"); hexprn(codeh,2); hexprn(codel,2);
- printf("),X"); prnspc(RTScounter);
- printf(";Store accumulator "); hexprn(A,2);
- printf(" to "); hexprn(codeh2,2); hexprn(codel2,2);
- prnspc(7 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- STAzpa()
- {
- int pc,
- code,
- codel,
- codeh;
- pc = PC-1;
- code = (A & 0xFF);
- codel =loadOp();codeh = 0x00;
- saveCo(codeh,codel,code);
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-85 "); hexprn(codel,2);
- printf(" :STA $"); hexprn(codel,2); printf(" ");
- prnspc(RTScounter);
- printf(";Store accumulator "); hexprn(A,2);
- printf(" to $"); hexprn(codel,2);
- prnspc(9 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- STAind_y()
- {
- int pc,
- code,
- codel,
- codeh,
- codel2,
- codeh2,
- codel3,
- codeh3;
- pc = PC-1;
- Y &= 0xFF;
- code = loadOp();
- codel = code+1; codeh = 0x00;
- codel &= 0xFF;
- codel2 = loadCo(0x00,code); codeh2 = loadCo(codeh,codel);
- codel3 = codel2 + Y; codeh3 = codeh2 + ((codel3 >>8) & 1);
- codel3 &= 0xFF; codeh3 &= 0xFF;
- saveCo(codeh3,codel3,(A & 0xFF));
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-91 "); hexprn(code,2);
- printf(" :STA ($"); hexprn(code,2); printf("),Y ");
- prnspc(RTScounter);
- printf(";Store A "); hexprn(A,2);
- printf(" to "); hexprn(codeh3,2); hexprn(codel3,2);
- prnspc(17 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- STAzpa_x()
- {
- int pc,
- code,
- codel,
- codeh;
- pc = PC-1;
- X &= 0xFF;
- code = loadOp();
- codel = code + X;
- codel &= 0xFF;
- saveCo(0x00,(codel & 0xFF),(A & 0xFF));
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-95 "); hexprn(code,2);
- printf(" :STA $"); hexprn(0x00,2); hexprn(code,2);
- printf(",X "); prnspc(RTScounter);
- printf(";Store accumulator "); hexprn(A,2);
- printf(" to "); hexprn(codeh,2); hexprn(codel,2);
- prnspc(8 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- STXzpa()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- saveCo((0x00),(code & 0xFF),(X & 0xFF));
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-86 "); hexprn(code,2);
- printf(" :STX $"); hexprn(code,2);
- printf(" ");
- prnspc(RTScounter);
- printf(";Store index X "); hexprn(X,2);
- printf(" to "); hexprn(0x00,2); hexprn(code,2);
- prnspc(12 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- STYzpa()
- {
- int pc,
- code;
- pc = PC-1;
- code = loadOp();
- saveCo((0x00),(code & 0xFF),(Y & 0xFF));
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-84 "); hexprn(code,2);
- printf(" :STY $"); hexprn(code,2);
- printf(" ");
- prnspc(RTScounter);
- printf(";Store index Y "); hexprn(Y,2);
- printf(" to "); hexprn(0x00,2); hexprn(code,2);
- prnspc(12 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- STYzpa_x()
- {
- int pc,
- code,
- codel,
- codeh;
- pc = PC-1;
- X &= 0xFF;
- code = loadOp(); codeh = 0x00;
- codel = code + X;
- codel &= 0xFF;
- saveCo(codeh,codel,(Y & 0xFF));
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-94 "); hexprn(code,2);
- printf(" :STY $"); hexprn(0x00,2); hexprn(code,2);
- printf(",X "); prnspc(RTScounter);
- printf(";Store accumulator "); hexprn(Y,2);
- printf(" to "); hexprn(codeh,2); hexprn(codel,2);
- prnspc(8 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- TXA()
- {
- int pc;
- pc = PC-1;
- A = X;
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-8A "); printf(" ");
- printf(" :TXA"); printf(" ");
- prnspc(RTScounter);
- printf(";Transfer index X "); hexprn(A,2);
- printf(" to A");
- prnspc(12 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- TAX()
- {
- int pc;
- pc = PC-1;
- X = A;
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-AA "); printf(" ");
- printf(" :TAX"); printf(" ");
- prnspc(RTScounter);
- printf(";Transfer Accumulator "); hexprn(A,2);
- printf(" to X");
- prnspc(8 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- TAY()
- {
- int pc;
- pc = PC-1;
- Y = A;
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-A8 "); printf(" ");
- printf(" :TAY"); printf(" ");
- prnspc(RTScounter);
- printf(";Transfer Accumulator "); hexprn(A,2);
- printf(" to Y");
- prnspc(8 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- TSX()
- {
- int pc;
- pc = PC-1;
- X = S;
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-BA "); printf(" ");
- printf(" :TSX"); printf(" ");
- prnspc(RTScounter);
- printf(";Transfer stack point "); hexprn(S,2);
- printf(" to X");
- prnspc(8 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- TYA()
- {
- int pc;
- pc = PC-1;
- A = Y;
- N = ((A & 0xFF) >> 7);
- Z = (A & 0xFF) == 0;
- if (trace)
- {
- if (antalarg > 2)
- botomline();
- hexprn(pc,4); printf("-98 "); printf(" ");
- printf(" :TYA"); printf(" ");
- prnspc(RTScounter);
- printf(";Transfer index Y "); hexprn(Y,2);
- printf(" to A");
- prnspc(12 - RTScounter);
- printf("'"); statprn(); printf("'\n");
- }
- }
-
- int loadOp()
- {
- int code;
- code=MEMORY [PC];
- PC++;
- return (code);
- }
-
- int loadCo(codeh,codel)
- int codeh,
- codel;
- {
- int code;
- memorymap(codeh,codel,1); /*,1); -> read mod */
- code=MEMORY [((codeh & 0xFF) << 8) + codel];
- return (code);
- }
-
- saveCo(codeh,codel,code)
- int codeh,
- codel,
- code;
- {
- MEMORY[(codeh<<8)+codel] = code;
- memorymap(codeh,codel,0); /*,0); -> write mod */
- }
-
- pushS(code)
- int code;
- {
- MEMORY[0x100+S] = code;
- S--;
- }
-
- int pullS()
- {
- int code;
- S++;
- code = MEMORY[0x100+S];
- return (code);
- }
-
- int statprn()
- {
- if (N)
- printf("Mi");
- else
- printf("Pl");
- if (V)
- printf("Ov");
- else
- printf("Nv");
- if (B)
- printf("Br");
- else
- printf("Nb");
- if (D)
- printf("Dm");
- else
- printf("Nd");
- if (I)
- printf("Id");
- else
- printf("Ie");
- if (Z)
- printf("Ze");
- else
- printf("Nz");
- if (C)
- printf("Ca");
- else
- printf("Nc");
- }
-
- int memorymap(codeh,codel,r_w)
- int codeh,
- codel,
- r_w;
- {
- int address;
- address = (((codeh & 0xFF)<<8) | (codel & 0xFF));
-
- if ((address >= 0x0400) && (address <= 0x7FF))
- {
- int radflg;
- if (radflg = video_check(address) )
- {
- if (!r_w)
- video_out(address,radflg);
- }
- else
- {
- /* slotdefine i/o */
- }
- }
-
- if ((address & 0xFFFF) == 0xC000)
- {
- int slask;
- if (r_w)
- {
- slask = inkey(MEMORY [address]);
- if ((slask & 0x7F) > 0x5F)
- slask -= 0x20;
- MEMORY [address] = slask;
- }
- }
-
- if ((address & 0xFFFF) == 0xC010)
- {
- int slask;
- if (r_w)
- slask = MEMORY [0xC000] & 0x7F;
- MEMORY [0xC000] = slask;
- }
-
- if ((address & 0xFFFF) == 0xC030)
- {
- soundcounter = soundcounter +1;
- if (soundcounter > 120)
- {
- printf("\007");
- soundcounter = 0;
- }
- }
- }
-
- main(antal,params)
- int antal;
- char *params[];
- {
-
- short int slask;
- int loop,
- code;
-
- antalarg = antal;
-
- if (antal > 1)
- {
- sscanf(params[1],"%lx",&brkpoint);
- }
-
- /* * * * START of PROGRAM * * * */
-
- halfdup();
-
- for (loop=0x000;loop<0x7ff+1;loop++)
- MEMORY[(loop+0xf800)]=MEMORY$F8[loop];
-
- for (loop=0x0400;loop<0x07FF+1;loop++)
- MEMORY[ loop ] = 0xA0;
-
- for (loop=0x00;loop<0x10+1;loop++)
- MEMORY[ 0x300+loop ] = PROGRAM [ loop ];
-
-
-
-
-
- C=0;Z=0;I=0;D=0;B=0;V=0;N=0; /* init of status_registr */
- PCL=MEMORY[0xFFFC]; /* init program_counter */
- PCH=MEMORY[0xFFFD];
- S =0xff; /* init stack pointer */
-
- printf("\033[1;1f");
- printf("\033[2JINIT$ APPLE ][\033[1;1f");
-
- cycle:
-
- CPU(code=loadOp());
-
- if (trace)
- {
- t1in(slask);
- if ((slask == 't') | (slask == 'T'))
- {
- tracepoint = RTScounter;
- troff =1;
- trace =0;
- }
- }
-
- if (brkpoint == PC)
- {
- trace =1;
- if (antalarg == 2)
- printf("\n");
- }
-
- if (!((B == 1) && (I == 0)))
- goto cycle;
-
- printf("\n");
- RTI();
- printf(" PC="); hexprn(PC,4);
- printf(" A="); hexprn(A,2);
- printf(" X="); hexprn(X,2);
- printf(" Y="); hexprn(Y,2);
- printf(" P="); binprn(P,7);
- printf(" S="); hexprn(S,2);
- printf(" code $%x\n\n",code);
-
- fulldup();
- }
-