; ---------------------------------------------------------------------------
;
; Problems:
;   1.  Ldy  #$00
;       Lda  ($ff),y                   ; Current: $ff,$100
; ---------------------------------------------------------------------------
Evendata
Emultable   Dw    E_00,E_01,E_02,E_03,E_04,E_05,E_06,E_07
	    Dw    E_08,E_09,E_0a,E_0b,E_0c,E_0d,E_0e,E_0f
	    Dw    E_10,E_11,E_12,E_13,E_14,E_15,E_16,E_17
	    Dw    E_18,E_19,E_1a,E_1b,E_1c,E_1d,E_1e,E_1f
	    Dw    E_20,E_21,E_22,E_23,E_24,E_25,E_26,E_27
	    Dw    E_28,E_29,E_2a,E_2b,E_2c,E_2d,E_2e,E_2f
	    Dw    E_30,E_31,E_32,E_33,E_34,E_35,E_36,E_37
	    Dw    E_38,E_39,E_3a,E_3b,E_3c,E_3d,E_3e,E_3f
	    Dw    E_40,E_41,E_42,E_43,E_44,E_45,E_46,E_47
	    Dw    E_48,E_49,E_4a,E_4b,E_4c,E_4d,E_4e,E_4f
	    Dw    E_50,E_51,E_52,E_53,E_54,E_55,E_56,E_57
	    Dw    E_58,E_59,E_5a,E_5b,E_5c,E_5d,E_5e,E_5f
	    Dw    E_60,E_61,E_62,E_63,E_64,E_65,E_66,E_67
	    Dw    E_68,E_69,E_6a,E_6b,E_6c,E_6d,E_6e,E_6f
	    Dw    E_70,E_71,E_72,E_73,E_74,E_75,E_76,E_77
	    Dw    E_78,E_79,E_7a,E_7b,E_7c,E_7d,E_7e,E_7f
	    Dw    E_80,E_81,E_82,E_83,E_84,E_85,E_86,E_87
	    Dw    E_88,E_89,E_8a,E_8b,E_8c,E_8d,E_8e,E_8f
	    Dw    E_90,E_91,E_92,E_93,E_94,E_95,E_96,E_97
	    Dw    E_98,E_99,E_9a,E_9b,E_9c,E_9d,E_9e,E_9f
	    Dw    E_A0,E_A1,E_A2,E_A3,E_A4,E_A5,E_A6,E_A7
	    Dw    E_A8,E_A9,E_Aa,E_Ab,E_Ac,E_Ad,E_Ae,E_Af
	    Dw    E_B0,E_B1,E_B2,E_B3,E_B4,E_B5,E_B6,E_B7
	    Dw    E_B8,E_B9,E_Ba,E_Bb,E_Bc,E_Bd,E_Be,E_Bf
	    Dw    E_C0,E_C1,E_C2,E_C3,E_C4,E_C5,E_C6,E_C7
	    Dw    E_C8,E_C9,E_Ca,E_Cb,E_Cc,E_Cd,E_Ce,E_Cf
	    Dw    E_D0,E_D1,E_D2,E_D3,E_D4,E_D5,E_D6,E_D7
	    Dw    E_D8,E_D9,E_Da,E_Db,E_Dc,E_Dd,E_De,E_Df
	    Dw    E_E0,E_E1,E_E2,E_E3,E_E4,E_E5,E_E6,E_E7
	    Dw    E_E8,E_E9,E_Ea,E_Eb,E_Ec,E_Ed,E_Ee,E_Ef
	    Dw    E_F0,E_F1,E_F2,E_F3,E_F4,E_F5,E_F6,E_F7
	    Dw    E_F8,E_F9,E_Fa,E_Fb,E_Fc,E_Fd,E_Fe,E_Ff
; ---------------------------------------------------------------------------
Illegal:    Dec   Reg_Pc               ; Illegal instruction encountered
	    Call  Calcstatus
	    Mov   Di,Ax
	    Mov   Al,0
	    Int   80h
	    Jmp   Halt
; ---------------------------------------------------------------------------
Shutdown:   Mov   Al,8                 ; "Hlt" -- reset
            Int   80h
            Mov   [Byte 8004h],0
            Int   3
            Jmp   Reset
; ---------------------------------------------------------------------------
Instruction 00 "Brk"
	    Or    [Flags],Flag_B
            Inc   Reg_Pc
	    Call  Interrupt
	    Mov   Reg_Pc,[0FFFEh]
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 01 "Ora (I,X)"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Add   Bl,Reg_X
	    Mov   Di,[Bx]
	    Or    Reg_A,[Di]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 02 "Hlt"                   ; Undocumented
	    Dec   Reg_Pc
	    Cmp   [Byte Gs:Reg_Pc],Typ_Erom
	    Jne   @@0
	    Cmp   Reg_Pc,0F4C4h
	    Je    @@1
	    Cmp   Reg_Pc,0F605h
	    Je    @@2
	    Cmp   Reg_Pc,0FFCFh
	    Je    @@3

@@0:        Int   3 ; breakpoint
	    Inc   Reg_Pc
	    Jmp   Shutdown

@@1:        Call  LoadFile             ; Load a file from serial device
	    Jc    @@1a
	    Mov   Reg_Pc,0F5A9h
	    Jmp   Next
@@1a:       Mov   Reg_Pc,0F530h
	    Jmp   Next

@@2:        Call  SaveFile             ; Save a file to serial device
            Mov   Reg_Pc,0F657h
	    Jmp   Next

@@3:        Call  Autokey
            Mov   Reg_S,Reg_A
            Mov   Reg_Z,Reg_A
            Jmp   E_60
; ---------------------------------------------------------------------------
Instruction 03 "Aor (I,X)"             ; Undocumented
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
            Mov   Di,[Bx]
	    Mov   Al,[Di]
	    Add   Al,Al
	    Set_C
            Or    Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 04 "Nop 2"                 ; Undocumented
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 05 "Ora z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Or    Reg_A,[Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 06 "Asl z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Add   Reg_S,Reg_S
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 07 "Aor z"                 ; Undocumented
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
            Mov   Di,Bx
	    Mov   Al,[Di]
	    Add   Al,Al
	    Set_C
            Or    Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 08 "Php"
	    Call  Calcstatus
	    Mov   Di,[Word SPtr]
	    Mov   [Di],Al
	    Dec   [SPtr]
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 09 "Ora #"
	    Or    Reg_A,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 0A "Asl A"
	    Add   Reg_A,Reg_A
	    Set_C
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 0b "I0B"                   ; Undocumented
            And   [Flags],Not Flag_V
            Mov   Reg_C,0
	    And   Reg_A,[Reg_Pc]
            Jns   @@1
            Or    [Flags],Flag_V
            Mov   Reg_C,-1
@@1:        Inc   Reg_Pc
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 0C "Nop 3"                 ; Undocumented
	    Add   Reg_Pc,2
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 0d "Ora"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Or    Reg_A,[Di]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 0E "Asl"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,[Di]
	    Add   Reg_S,Reg_S
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 0F "Aor"                   ; Undocumented
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Add   Al,Al
	    Set_C
            Or    Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 10 "Bpl r"
	    Or    Reg_S,Reg_S
	    Js    @@1
	    Movsx Di,[Byte Reg_Pc]
	    Add   Reg_Pc,Di
@@1:        Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 11 "Ora (I),Y"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Bl,Reg_Y
	    Or    Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 12 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction 13 "Aor (I),Y"             ; Undocumented
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
            Mov   Di,[Bx]
            Mov   Bl,Reg_Y
            Add   Di,Bx
	    Mov   Al,[Di]
	    Add   Al,Al
	    Set_C
            Or    Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 14 "Nop 2"                 ; Undocumented
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 15 "Ora z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Or    Reg_A,[Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 16 "Asl z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Add   Reg_S,Reg_S
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 17 "Aor z,X"               ; Undocumented
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Al,[Bx]
	    Add   Al,Al
	    Set_C
            Or    Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 18 "Clc"
	    Xor   Reg_C,Reg_C
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 19 "Ora Y"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_Y
	    Add   Reg_Pc,2
	    Or    Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 1A "Nop 1"                 ; Undocumented
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 1b "Ran Y"                 ; Undocumented
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
            Mov   Bl,Reg_Y
            Add   Di,Bx
	    Mov   Al,[Di]
	    Add   Al,Al
	    Set_C
            Or    Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 1C "Nop 3"                 ; Undocumented
	    Add   Reg_Pc,2
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 1d "Ora X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Reg_Pc,2
	    Or    Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 1E "Asl X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Di,Bx
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Add   Al,Al
	    Set_C
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 1F "Aor X"                 ; Undocumented
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
            Mov   Bl,Reg_X
            Add   Di,Bx
	    Mov   Al,[Di]
	    Add   Al,Al
	    Set_C
            Or    Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 20 "Jsr"
            Push  Ax
	    Mov   Ax,Reg_Pc
            Inc   Ax
	    Mov   Bx,[Word SPtr]
            Mov   [Bx],Ah
            Dec   Bl
            Mov   [Bx],Al
	    Sub   [SPtr],2
	    Mov   Reg_Pc,[Reg_Pc]
            Pop   Ax
            Dec   Bh
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 21 "And (I,X)"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    And   Reg_A,[Di]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 22 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction 23 "Ran (I,X)"             ; Undocumented
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
            Mov   Di,[Bx]
	    Get_C
	    Mov   Al,[Di]
	    Adc   Al,Al
	    Set_C
            And   Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 24 "Bit z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_Z,Reg_A
	    Mov   Reg_S,[Bx]
	    Test  Reg_S,Flag_V
	    Je    @@1
	    Or    [Flags],Flag_V
	    And   Reg_Z,Reg_S
	    Jmp   Next
@@1:        And   [Flags],Not Flag_V
	    And   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 25 "And z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    And   Reg_A,[Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 26 "Rol z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Get_C
	    Adc   Reg_S,Reg_S
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 27 "Ran z"                 ; Undocumented
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
            Mov   Di,Bx
	    Get_C
	    Mov   Al,[Di]
	    Adc   Al,Al
	    Set_C
            And   Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 28 "Plp"
	    Inc   [SPtr]
	    Mov   Di,[Word SPtr]
	    Mov   Al,[Di]
	    Call  Setstatus
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 29 "And #"
	    And   Reg_A,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 2A "Rol A"
	    Get_C
	    Adc   Reg_A,Reg_A
	    Set_C
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 2b "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 2C "Bit"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_Z,Reg_A
	    Mov   Reg_S,[Di]
	    Test  Reg_S,Flag_V
	    Je    @@1
	    Or    [Flags],Flag_V
	    And   Reg_Z,Reg_S
	    Jmp   Next
@@1:        And   [Flags],Not Flag_V
	    And   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 2d "And"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    And   Reg_A,[Di]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 2E "Rol"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,[Di]
	    Get_C
	    Adc   Reg_S,Reg_S
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 2F "Ran"                   ; Undocumented
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Get_C
	    Adc   Al,Al
	    Set_C
            And   Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 30 "Bmi r"
	    Or    Reg_S,Reg_S
	    Jns   @@1
	    Movsx Di,[Byte Reg_Pc]
	    Add   Reg_Pc,Di
@@1:        Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 31 "And (I),Y"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Bl,Reg_Y
	    And   Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 32 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction 33 "Ran (I),Y"             ; Undocumented
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
            Mov   Di,[Bx]
            Mov   Bl,Reg_Y
            Add   Di,Bx
	    Get_C
	    Mov   Al,[Di]
	    Adc   Al,Al
	    Set_C
            And   Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 34 "Nop 2"                 ; Undocumented
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 35 "And z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    And   Reg_A,[Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 36 "Rol z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Get_C
	    Adc   Reg_S,Reg_S
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 37 "Ran z,X"               ; Undocumented
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Al,[Bx]
	    Get_C
	    Adc   Al,Al
	    Set_C
            And   Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 38 "Sec"
	    Mov   Reg_C,-1
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 39 "And Y"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_Y
	    Add   Reg_Pc,2
	    And   Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 3A "Nop 1"                 ; Undocumented
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 3b "Ran Y"                 ; Undocumented
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
            Mov   Bl,Reg_Y
            Add   Di,Bx
	    Get_C
	    Mov   Al,[Di]
	    Adc   Al,Al
	    Set_C
            And   Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 3C "Nop 3"                 ; Undocumented
	    Add   Reg_Pc,2
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 3d "And X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Reg_Pc,2
	    And   Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 3E "Rol X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Di,Bx
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Get_C
	    Adc   Al,Al
	    Set_C
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 3F "Ran X"                 ; Undocumented
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
            Mov   Bl,Reg_X
            Add   Di,Bx
	    Get_C
	    Mov   Al,[Di]
	    Adc   Al,Al
	    Set_C
            And   Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 40 "Rti"
	    Mov   Bx,[Word SPtr]
            Inc   Bl
	    Mov   Al,[Bx]
            Push  Ax
            Inc   Bl
	    Mov   Al,[Bx]
            Inc   Bl
	    Mov   Ah,[Bx]
            Mov   [SPtr],Bl
            Mov   Reg_Pc,Ax
            Dec   Bh
            Pop   Ax
	    Call  Setstatus
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 41 "Eor (I,X)"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Xor   Reg_A,[Di]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 42 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction 43 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 44 "Nop 2"                 ; Undocumented
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 45 "Eor z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Xor   Reg_A,[Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 46 "Lsr z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Shr   Reg_S,1
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 47 "Leo z"                 ; Undocumented
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
            Mov   Di,Bx
	    Mov   Al,[Di]
	    Shr   Al,1
	    Set_C
            Xor   Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 48 "Pha"
	    Mov   Di,[Word SPtr]
	    Mov   [Di],Reg_A
	    Dec   [SPtr]
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 49 "Eor #"
	    Xor   Reg_A,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 4A "Lsr A"
	    Shr   Reg_A,1
	    Set_C
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 4b "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 4C "Jmp"
	    Mov   Reg_Pc,[Reg_Pc]
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 4d "Eor"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Xor   Reg_A,[Di]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 4E "Lsr"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,[Di]
	    Shr   Reg_S,1
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 4F "Leo"                   ; Undocumented
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Shr   Al,1
	    Set_C
            Xor   Reg_A,Al
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 50 "Bvc r"
	    Test  [Flags],Flag_V
	    Jne   @@1
	    Movsx Di,[Byte Reg_Pc]
	    Add   Reg_Pc,Di
@@1:        Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 51 "Eor (I),Y"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Bl,Reg_Y
	    Xor   Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 52 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction 53 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 54 "Nop 2"                 ; Undocumented
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 55 "Eor z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Xor   Reg_A,[Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 56 "Lsr z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Mov   Di,Bx
	    Inc   Reg_Pc
	    Mov   Reg_S,[Di]
	    Shr   Reg_S,1
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 57 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 58 "Cli"
	    And   [Flags],Not Flag_I
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 59 "Eor Y"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_Y
	    Xor   Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 5A "Nop 1"                 ; Undocumented
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 5b "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 5C "Nop 3"                 ; Undocumented
	    Add   Reg_Pc,2
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 5d "Eor X"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_X
	    Xor   Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 5E "Lsr X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Di,Bx
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Shr   Al,1
	    Set_C
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 5F "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 60 "Rts"
	    Mov   Bx,[Word SPtr]
            Push  Ax
            Inc   Bl
	    Mov   Al,[Bx]
            Inc   Bl
	    Mov   Ah,[Bx]
            Mov   [SPtr],Bl
            Mov   Reg_Pc,Ax
            Dec   Bh
            Pop   Ax
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 61 "Adc (I,X)"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Reg_S,[Di]
	    Jmp   Doadd
; ---------------------------------------------------------------------------
Instruction 62 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction 63 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 64 "Nop 2"                 ; Undocumented
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 65 "Adc z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Jmp   Doadd
; ---------------------------------------------------------------------------
Instruction 66 "Ror z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Get_C
	    Rcr   Reg_S,1
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 67 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 68 "Pla"
	    Inc   [SPtr]
	    Mov   Di,[Word SPtr]
	    Mov   Reg_A,[Di]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 69 "Adc #"
	    Mov   Reg_S,[Reg_Pc]
	    Inc   Reg_Pc
Doadd:      Test  [Flags],Flag_D
	    Jne   @@3
	    Get_C
	    Adc   Reg_A,Reg_S
            Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
            Jno   @@2
	    Set_C
	    Or    [Flags],Flag_V
@@1:        Jmp   Next
@@2:        Set_C
	    And   [Flags],Not Flag_V
	    Jmp   Next
@@3:        Mov   Al,Reg_A
            Get_C
	    Adc   Al,Reg_S
            Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
            Jno   @@5
	    Daa
	    Set_C
	    Or    [Flags],Flag_V
            Mov   Reg_A,Al
	    Jmp   Next
@@5:        Daa
	    Set_C
	    And   [Flags],Not Flag_V
            Mov   Reg_A,Al
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 6A "Ror A"
	    Get_C
	    Rcr   Reg_A,1
	    Set_C
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 6b "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 6C "Jmp (I)"
	    Mov   Reg_Pc,[Reg_Pc]

	    ;Mov   Reg_Pc,[Reg_Pc]
            Mov   Bl,[Reg_Pc]          ; Safety replacement
            Mov   Bh,[Reg_Pc+1]
            Mov   Reg_Pc,Bx
            Mov   Bh,0

	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 6d "Adc"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,[Di]
	    Jmp   Doadd
; ---------------------------------------------------------------------------
Instruction 6E "Ror"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,[Di]
	    Get_C
	    Rcr   Reg_S,1
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 6F "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 70 "Bvs r"
	    Test  [Flags],Flag_V
	    Je    @@1
	    Movsx Di,[Byte Reg_Pc]
	    Add   Reg_Pc,Di
@@1:        Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 71 "Adc (I),Y"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Bl,Reg_Y
	    Mov   Reg_S,[Di+Bx]
	    Jmp   Doadd
; ---------------------------------------------------------------------------
Instruction 72 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction 73 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 74 "Nop 2"                 ; Undocumented
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 75 "Adc z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Jmp   Doadd
; ---------------------------------------------------------------------------
Instruction 76 "Ror z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Mov   Di,Bx
	    Inc   Reg_Pc
	    Mov   Reg_S,[Di]
	    Get_C
	    Rcr   Reg_S,1
	    Set_C
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 77 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 78 "Sei"
	    Or    [Flags],Flag_I
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 79 "Adc Y"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_Y
	    Mov   Reg_S,[Di+Bx]
	    Jmp   Doadd
; ---------------------------------------------------------------------------
Instruction 7A "Nop 1"                 ; Undocumented
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 7b "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 7C "Nop 3"                 ; Undocumented
	    Add   Reg_Pc,2
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 7d "Adc X"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_X
	    Mov   Reg_S,[Di+Bx]
	    Jmp   Doadd
; ---------------------------------------------------------------------------
Instruction 7E "Ror X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Di,Bx
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Get_C
	    Rcr   Al,1
	    Set_C
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 7F "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 80 "Nop 2"                 ; Undocumented
            Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 81 "Sta (I,X)"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Al,Reg_A
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 82 "Nop 2"                 ; Undocumented
            Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 83 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 84 "Sty z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,Bx
	    Mov   Al,Reg_Y
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 85 "Sta z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,Bx
	    Mov   Al,Reg_A
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 86 "Stx z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,Bx
	    Mov   Al,Reg_X
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 87 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 88 "Dey"
	    Dec   Reg_Y
	    Mov   Reg_S,Reg_Y
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 89 "Nop 2"                 ; Undocumented
            Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 8A "Txa"
	    Mov   Reg_A,Reg_X
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 8b "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 8C "Sty"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Al,Reg_Y
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 8d "Sta"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Al,Reg_A
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 8E "Stx"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Al,Reg_X
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 8F "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 90 "Bcc r"
	    Get_C
	    Jc    @@1
	    Movsx Di,[Byte Reg_Pc]
	    Add   Reg_Pc,Di
@@1:        Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 91 "Sta (I),Y"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Bl,Reg_Y
	    Add   Di,Bx
	    Mov   Al,Reg_A
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 92 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction 93 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 94 "Sty z,X"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Add   Bl,Reg_X
	    Mov   Di,Bx
	    Mov   Al,Reg_Y
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 95 "Sta z,X"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Add   Bl,Reg_X
	    Mov   Di,Bx
	    Mov   Al,Reg_A
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 96 "Stx z,Y"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Add   Bl,Reg_Y
	    Mov   Di,Bx
	    Mov   Al,Reg_X
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 97 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 98 "Tya"
	    Mov   Reg_A,Reg_Y
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 99 "Sta Y"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_Y
	    Add   Di,Bx
	    Mov   Al,Reg_A
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 9A "Txs"
	    Mov   [SPtr],Reg_X ; flags?
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction 9b "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 9C "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 9d "Sta X"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_X
	    Add   Di,Bx
	    Mov   Al,Reg_A
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction 9E "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction 9F "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction A0 "Ldy #"
	    Mov   Reg_Y,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,Reg_Y
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction A1 "Lda (I,X)"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Reg_A,[Di]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction A2 "Ldx #"
	    Mov   Reg_X,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,Reg_X
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction A3 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction A4 "Ldy z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_Y,[Bx]
	    Mov   Reg_S,Reg_Y
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction A5 "Lda z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_A,[Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction A6 "Ldx z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_X,[Bx]
	    Mov   Reg_S,Reg_X
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction A7 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction A8 "Tay"
	    Mov   Reg_Y,Reg_A
	    Mov   Reg_S,Reg_Y
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction A9 "Lda #"
	    Mov   Reg_A,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Aa "Tax"
	    Mov   Reg_X,Reg_A
	    Mov   Reg_S,Reg_X
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Ab "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction Ac "Ldy"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_Y,[Di]
	    Mov   Reg_S,Reg_Y
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Ad "Lda"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_A,[Di]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Ae "Ldx"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_X,[Di]
	    Mov   Reg_S,Reg_X
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Af "Lax (I)"               ; Undocumented
            Mov   Di,[Reg_Pc]
            Add   Reg_Pc,2
            Mov   Reg_A,[Di]
            Mov   Reg_X,Reg_A
            Mov   Reg_S,Reg_A
            Mov   Reg_Z,Reg_A
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction B0 "Bcs r"
	    Get_C
	    Jnc   @@1
	    Movsx Di,[Byte Reg_Pc]
	    Add   Reg_Pc,Di
@@1:        Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction B1 "Lda (I),Y"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Bl,Reg_Y
	    Mov   Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction B2 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction B3 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction B4 "Ldy z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Reg_Y,[Bx]
	    Mov   Reg_S,Reg_Y
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction B5 "Lda z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Reg_A,[Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction B6 "Ldx z,Y"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_Y
	    Inc   Reg_Pc
	    Mov   Reg_X,[Bx]
	    Mov   Reg_S,Reg_X
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction B7 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction B8 "Clv"
	    And   [Flags],Not Flag_V
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction B9 "Lda Y"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_Y
	    Add   Reg_Pc,2
	    Mov   Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Ba "Tsx"
	    Mov   Reg_X,[SPtr]
	    Mov   Reg_S,Reg_X
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Bb "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction Bc "Ldy X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Reg_Pc,2
	    Mov   Reg_Y,[Di+Bx]
	    Mov   Reg_S,Reg_Y
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Bd "Lda X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Reg_Pc,2
	    Mov   Reg_A,[Di+Bx]
	    Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Be "Ldx Y"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_Y
	    Add   Reg_Pc,2
	    Mov   Reg_X,[Di+Bx]
	    Mov   Reg_S,Reg_X
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Bf "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction C0 "Cpy #"
	    Mov   Reg_S,Reg_Y
	    Sub   Reg_S,[Reg_Pc]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction C1 "Cmp (I,X)"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Reg_S,Reg_A
	    Sub   Reg_S,[Di]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction C2 "Nop 2"                 ; Undocumented
            Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction C3 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction C4 "Cpy z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,Reg_Y
	    Sub   Reg_S,[Bx]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction C5 "Cmp z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,Reg_A
	    Sub   Reg_S,[Bx]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction C6 "Dec z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Al,[Bx]
	    Dec   Al
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction C7 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction C8 "Iny"
	    Inc   Reg_Y
	    Mov   Reg_S,Reg_Y
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction C9 "Cmp #"
	    Mov   Reg_S,Reg_A
	    Sub   Reg_S,[Reg_Pc]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Ca "Dex"
	    Dec   Reg_X
	    Mov   Reg_S,Reg_X
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Cb "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction Cc "Cpy"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,Reg_Y
	    Sub   Reg_S,[Di]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Cd "Cmp"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,Reg_A
	    Sub   Reg_S,[Di]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Ce "Dec"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,[Di]
	    Dec   Reg_S
	    Mov   Reg_Z,Reg_S
	    Mov   Al,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction Cf "Dcp"                   ; Undocumented
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Dec   Al
	    Mov   Reg_S,Reg_A
	    Sub   Reg_S,Al
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction D0 "Bne r"
	    Or    Reg_Z,Reg_Z
	    Je    @@1
	    Movsx Di,[Byte Reg_Pc]
	    Add   Reg_Pc,Di
@@1:        Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction D1 "Cmp (I),Y"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Bl,Reg_Y
	    Mov   Reg_S,Reg_A
	    Sub   Reg_S,[Di+Bx]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction D2 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction D3 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction D4 "Nop 2"                 ; Undocumented
            Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction D5 "Cmp z,X"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Add   Bl,Reg_X
	    Mov   Reg_S,Reg_A
	    Sub   Reg_S,[Bx]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction D6 "Dec z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Al,[Bx]
	    Dec   Al
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction D7 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction D8 "Cld"
	    And   [Flags],Not Flag_D
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction D9 "Cmp Y"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_Y
	    Mov   Reg_S,Reg_A
	    Sub   Reg_S,[Di+Bx]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Da "Nop 1"                 ; Undocumented
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Db "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction Dc "Nop 3"                 ; Undocumented
	    Add   Reg_Pc,2
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Dd "Cmp X"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_X
	    Mov   Reg_S,Reg_A
	    Sub   Reg_S,[Di+Bx]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction De "Dec X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Di,Bx
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Dec   Al
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction Df "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction E0 "Cpx #"
	    Mov   Reg_S,Reg_X
	    Sub   Reg_S,[Reg_Pc]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction E1 "Sbc (I,X)"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Reg_S,[Di]
	    Jmp   Dosub
; ---------------------------------------------------------------------------
Instruction E2 "Nop 2"                 ; Undocumented
            Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction E3 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction E4 "Cpx z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,Reg_X
	    Sub   Reg_S,[Bx]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction E5 "Sbc z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Jmp   Dosub
; ---------------------------------------------------------------------------
Instruction E6 "Inc z"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Al,[Bx]
	    Inc   Al
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction E7 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction E8 "Inx"
	    Inc   Reg_X
	    Mov   Reg_S,Reg_X
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction E9 "Sbc #"
	    Mov   Reg_S,[Reg_Pc]
	    Inc   Reg_Pc
Dosub:      Test  [Flags],Flag_D
	    Jne   @@3
	    Get_Ic
	    Sbb   Reg_A,Reg_S
            Mov   Reg_S,Reg_A
	    Mov   Reg_Z,Reg_S
	    Jno   @@2
	    Set_Ic
	    Or    [Flags],Flag_V
@@1:        Jmp   Next
@@2:        Set_Ic
	    And   [Flags],Not Flag_V
	    Jmp   Next
@@3:        Mov   Al,Reg_A
            Get_Ic
	    Sbb   Al,Reg_S
            Mov   Reg_S,Al
            Mov   Reg_Z,Al
            Jno   @@4
	    Das
            Set_Ic
            Mov   Reg_A,Al
            Or    [Flags],Flag_V
            Jmp   Next
@@4:        Das
            Set_Ic
            Mov   Reg_A,Al
            And   [Flags],Not Flag_V
            Jmp   Next
; ---------------------------------------------------------------------------
Instruction Ea "Nop"
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Eb "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction Ec "Cpx"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,Reg_X
	    Sub   Reg_S,[Di]
	    Set_Ic
	    Mov   Reg_Z,Reg_S
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Ed "Sbc"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,[Di]
	    Jmp   Dosub
; ---------------------------------------------------------------------------
Instruction Ee "Inc"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Reg_S,[Di]
	    Inc   Reg_S
	    Mov   Al,Reg_S
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction Ef "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction F0 "Beq r"
	    Or    Reg_Z,Reg_Z
	    Jne   @@1
	    Movsx Di,[Byte Reg_Pc]
	    Add   Reg_Pc,Di
@@1:        Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction F1 "Sbc (I),Y"
	    Mov   Bl,[Reg_Pc]
	    Inc   Reg_Pc
	    Mov   Di,[Bx]
	    Mov   Bl,Reg_Y
	    Mov   Reg_S,[Di+Bx]
	    Jmp   Dosub
; ---------------------------------------------------------------------------
Instruction F2 "Hlt"                   ; Undocumented
	    Jmp   Shutdown
; ---------------------------------------------------------------------------
Instruction F3 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction F4 "Nop 2"                 ; Undocumented
	    Inc   Reg_Pc
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction F5 "Sbc z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Reg_S,[Bx]
	    Jmp   Dosub
; ---------------------------------------------------------------------------
Instruction F6 "Inc z,X"
	    Mov   Bl,[Reg_Pc]
	    Add   Bl,Reg_X
	    Inc   Reg_Pc
	    Mov   Al,[Bx]
	    Inc   Al
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Mov   Di,Bx
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction F7 "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction F8 "Sed"
	    Or    [Flags],Flag_D
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction F9 "Sbc Y"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_Y
	    Mov   Reg_S,[Di+Bx]
	    Jmp   Dosub
; ---------------------------------------------------------------------------
Instruction Fa "Nop 1"                 ; Undocumented
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Fb "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
Instruction Fc "Nop 3"                 ; Undocumented
	    Add   Reg_Pc,2
	    Jmp   Next
; ---------------------------------------------------------------------------
Instruction Fd "Sbc X"
	    Mov   Di,[Reg_Pc]
	    Add   Reg_Pc,2
	    Mov   Bl,Reg_X
	    Mov   Reg_S,[Di+Bx]
	    Jmp   Dosub
; ---------------------------------------------------------------------------
Instruction Fe "Inc X"
	    Mov   Di,[Reg_Pc]
	    Mov   Bl,Reg_X
	    Add   Di,Bx
	    Add   Reg_Pc,2
	    Mov   Al,[Di]
	    Inc   Al
	    Mov   Reg_S,Al
	    Mov   Reg_Z,Reg_S
	    Jmp_Store
; ---------------------------------------------------------------------------
Instruction Ff "???"
	    Jmp   Illegal
; ---------------------------------------------------------------------------
