home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
405.lha
/
AppleII_Emulators_src
/
apple.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-06-28
|
105KB
|
3,181 lines
#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();
}