#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();
}
