1 /**************************************************************************** 2 dis.h 3 4 Data for TG Disassembler 5 ****************************************************************************/ 6 7 #include "defs.h" 8 #include "h6280.h" 9 #include "globals.h" 10 #include "bp.h" 11 #include "bios.h" 12 13 /* addressing modes: */ 14 15 #define AM_IMPL 0 /* implicit */ 16 #define AM_IMMED 1 /* immediate */ 17 #define AM_REL 2 /* relative */ 18 #define AM_ZP 3 /* zero page */ 19 #define AM_ZPX 4 /* zero page, x */ 20 #define AM_ZPY 5 /* zero page, y */ 21 #define AM_ZPIND 6 /* zero page indirect */ 22 #define AM_ZPINDX 7 /* zero page indirect, x */ 23 #define AM_ZPINDY 8 /* zero page indirect, y */ 24 #define AM_ABS 9 /* absolute */ 25 #define AM_ABSX 10 /* absolute, x */ 26 #define AM_ABSY 11 /* absolute, y */ 27 #define AM_ABSIND 12 /* absolute indirect */ 28 #define AM_ABSINDX 13 /* absolute indirect */ 29 #define AM_PSREL 14 /* pseudo-relative */ 30 #define AM_TST_ZP 15 /* special 'TST' addressing mode */ 31 #define AM_TST_ABS 16 /* special 'TST' addressing mode */ 32 #define AM_TST_ZPX 17 /* special 'TST' addressing mode */ 33 #define AM_TST_ABSX 18 /* special 'TST' addressing mode */ 34 #define AM_XFER 19 /* special 7-byte transfer addressing mode */ 35 36 #define MAX_MODES (AM_XFER + 1) 37 38 /* now define table contents: */ 39 operation optable_runtime[256] = { 40 { brek, AM_IMMED, "BRK" }, /* $00 */ 41 { ora_zpindx, AM_ZPINDX, "ORA" }, /* $01 */ 42 { sxy, AM_IMPL, "SXY" }, /* $02 */ 43 { st0, AM_IMMED, "ST0" }, /* $03 */ 44 { tsb_zp, AM_ZP, "TSB" }, /* $04 */ 45 { ora_zp, AM_ZP, "ORA" }, /* $05 */ 46 { asl_zp, AM_ZP, "ASL" }, /* $06 */ 47 { rmb0, AM_ZP, "RMB0"}, /* $07 */ 48 { php, AM_IMPL, "PHP" }, /* $08 */ 49 { ora_imm, AM_IMMED, "ORA" }, /* $09 */ 50 { asl_a, AM_IMPL, "ASL" }, /* $0A */ 51 { handle_bp0, AM_IMPL, "BP0" }, /* $0B */ 52 { tsb_abs, AM_ABS, "TSB" }, /* $0C */ 53 { ora_abs, AM_ABS, "ORA" }, /* $0D */ 54 { asl_abs, AM_ABS, "ASL" }, /* $0E */ 55 { bbr0, AM_PSREL, "BBR0"}, /* $0F */ 56 { bpl, AM_REL, "BPL" }, /* $10 */ 57 { ora_zpindy, AM_ZPINDY, "ORA" }, /* $11 */ 58 { ora_zpind, AM_ZPIND, "ORA" }, /* $12 */ 59 { st1, AM_IMMED, "ST1" }, /* $13 */ 60 { trb_zp, AM_ZP, "TRB" }, /* $14 */ 61 { ora_zpx, AM_ZPX, "ORA" }, /* $15 */ 62 { asl_zpx, AM_ZPX, "ASL" }, /* $16 */ 63 { rmb1, AM_ZP, "RMB1"}, /* $17 */ 64 { clc, AM_IMPL, "CLC" }, /* $18 */ 65 { ora_absy, AM_ABSY, "ORA" }, /* $19 */ 66 { inc_a, AM_IMPL, "INC" }, /* $1A */ 67 { handle_bp1, AM_IMPL, "BP1" }, /* $1B */ 68 { trb_abs, AM_ABS, "TRB" }, /* $1C */ 69 { ora_absx, AM_ABSX, "ORA" }, /* $1D */ 70 { asl_absx, AM_ABSX, "ASL" }, /* $1E */ 71 { bbr1, AM_PSREL, "BBR1"}, /* $1F */ 72 { jsr, AM_ABS, "JSR" }, /* $20 */ 73 { and_zpindx, AM_ZPINDX, "AND" }, /* $21 */ 74 { sax, AM_IMPL, "SAX" }, /* $22 */ 75 { st2, AM_IMMED, "ST2" }, /* $23 */ 76 { bit_zp, AM_ZP, "BIT" }, /* $24 */ 77 { and_zp, AM_ZP, "AND" }, /* $25 */ 78 { rol_zp, AM_ZP, "ROL" }, /* $26 */ 79 { rmb2, AM_ZP, "RMB2"}, /* $27 */ 80 { plp, AM_IMPL, "PLP" }, /* $28 */ 81 { and_imm, AM_IMMED, "AND" }, /* $29 */ 82 { rol_a, AM_IMPL, "ROL" }, /* $2A */ 83 { handle_bp2, AM_IMPL, "BP2" }, /* $2B */ 84 { bit_abs, AM_ABS, "BIT" }, /* $2C */ 85 { and_abs, AM_ABS, "AND" }, /* $2D */ 86 { rol_abs, AM_ABS, "ROL" }, /* $2E */ 87 { bbr2, AM_PSREL, "BBR2"}, /* $2F */ 88 { bmi, AM_REL, "BMI" }, /* $30 */ 89 { and_zpindy, AM_ZPINDY, "AND" }, /* $31 */ 90 { and_zpind, AM_ZPIND, "AND" }, /* $32 */ 91 { halt, AM_IMPL, "???" }, /* $33 */ 92 { bit_zpx, AM_ZPX, "BIT" }, /* $34 */ 93 { and_zpx, AM_ZPX, "AND" }, /* $35 */ 94 { rol_zpx, AM_ZPX, "ROL" }, /* $36 */ 95 { rmb3, AM_ZP, "RMB3"}, /* $37 */ 96 { sec, AM_IMPL, "SEC" }, /* $38 */ 97 { and_absy, AM_ABSY, "AND" }, /* $39 */ 98 { dec_a, AM_IMPL, "DEC" }, /* $3A */ 99 { handle_bp3, AM_IMPL, "BP3" }, /* $3B */ 100 { bit_absx, AM_ABSX, "BIT" }, /* $3C */ 101 { and_absx, AM_ABSX, "AND" }, /* $3D */ 102 { rol_absx, AM_ABSX, "ROL" }, /* $3E */ 103 { bbr3, AM_PSREL, "BBR3"}, /* $3F */ 104 { rti, AM_IMPL, "RTI" }, /* $40 */ 105 { eor_zpindx, AM_ZPINDX, "EOR" }, /* $41 */ 106 { say, AM_IMPL, "SAY" }, /* $42 */ 107 { tma, AM_IMMED, "TMA" }, /* $43 */ 108 { bsr, AM_REL, "BSR" }, /* $44 */ 109 { eor_zp, AM_ZP, "EOR" }, /* $45 */ 110 { lsr_zp, AM_ZP, "LSR" }, /* $46 */ 111 { rmb4, AM_ZP, "RMB4"}, /* $47 */ 112 { pha, AM_IMPL, "PHA" }, /* $48 */ 113 { eor_imm, AM_IMMED, "EOR" }, /* $49 */ 114 { lsr_a, AM_IMPL, "LSR" }, /* $4A */ 115 { handle_bp4, AM_IMPL, "BP4" }, /* $4B */ 116 { jmp, AM_ABS, "JMP" }, /* $4C */ 117 { eor_abs, AM_ABS, "EOR" }, /* $4D */ 118 { lsr_abs, AM_ABS, "LSR" }, /* $4E */ 119 { bbr4, AM_PSREL, "BBR4"}, /* $4F */ 120 { bvc, AM_REL, "BVC" }, /* $50 */ 121 { eor_zpindy, AM_ZPINDY, "EOR" }, /* $51 */ 122 { eor_zpind, AM_ZPIND, "EOR" }, /* $52 */ 123 { tam, AM_IMMED, "TAM" }, /* $53 */ 124 { nop, AM_IMPL, "CSL" }, /* $54 */ 125 { eor_zpx, AM_ZPX, "EOR" }, /* $55 */ 126 { lsr_zpx, AM_ZPX, "LSR" }, /* $56 */ 127 { rmb5, AM_ZP, "RMB5"}, /* $57 */ 128 { cli, AM_IMPL, "CLI" }, /* $58 */ 129 { eor_absy, AM_ABSY, "EOR" }, /* $59 */ 130 { phy, AM_IMPL, "PHY" }, /* $5A */ 131 { handle_bp5, AM_IMPL, "BP5" }, /* $5B */ 132 { halt, AM_IMPL, "???" }, /* $5C */ 133 { eor_absx, AM_ABSX, "EOR" }, /* $5D */ 134 { lsr_absx, AM_ABSX, "LSR" }, /* $5E */ 135 { bbr5, AM_PSREL, "BBR5"}, /* $5F */ 136 { rts, AM_IMPL, "RTS" }, /* $60 */ 137 { adc_zpindx, AM_ZPINDX, "ADC" }, /* $61 */ 138 { cla, AM_IMPL, "CLA" }, /* $62 */ 139 { halt, AM_IMPL, "???" }, /* $63 */ 140 { stz_zp, AM_ZP, "STZ" }, /* $64 */ 141 { adc_zp, AM_ZP, "ADC" }, /* $65 */ 142 { ror_zp, AM_ZP, "ROR" }, /* $66 */ 143 { rmb6, AM_ZP, "RMB6"}, /* $67 */ 144 { pla, AM_IMPL, "PLA" }, /* $68 */ 145 { adc_imm, AM_IMMED, "ADC" }, /* $69 */ 146 { ror_a, AM_IMPL, "ROR" }, /* $6A */ 147 { handle_bp6, AM_IMPL, "BP6" }, /* $6B */ 148 { jmp_absind, AM_ABSIND, "JMP" }, /* $6C */ 149 { adc_abs, AM_ABS, "ADC" }, /* $6D */ 150 { ror_abs, AM_ABS, "ROR" }, /* $6E */ 151 { bbr6, AM_PSREL, "BBR6"}, /* $6F */ 152 { bvs, AM_REL, "BVS" }, /* $70 */ 153 { adc_zpindy, AM_ZPINDY, "ADC" }, /* $71 */ 154 { adc_zpind, AM_ZPIND, "ADC" }, /* $72 */ 155 { tii, AM_XFER, "TII" }, /* $73 */ 156 { stz_zpx, AM_ZPX, "STZ" }, /* $74 */ 157 { adc_zpx, AM_ZPX, "ADC" }, /* $75 */ 158 { ror_zpx, AM_ZPX, "ROR" }, /* $76 */ 159 { rmb7, AM_ZP, "RMB7"}, /* $77 */ 160 { sei, AM_IMPL, "SEI" }, /* $78 */ 161 { adc_absy, AM_ABSY, "ADC" }, /* $79 */ 162 { ply, AM_IMPL, "PLY" }, /* $7A */ 163 { handle_bp7, AM_IMPL, "BP7" }, /* $7B */ 164 { jmp_absindx,AM_ABSINDX, "JMP" }, /* $7C */ 165 { adc_absx, AM_ABSX, "ADC" }, /* $7D */ 166 { ror_absx, AM_ABSX, "ROR" }, /* $7E */ 167 { bbr7, AM_PSREL, "BBR7"}, /* $7F */ 168 { bra, AM_REL, "BRA" }, /* $80 */ 169 { sta_zpindx, AM_ZPINDX, "STA" }, /* $81 */ 170 { clx, AM_IMPL, "CLX" }, /* $82 */ 171 { tstins_zp, AM_TST_ZP, "TST" }, /* $83 */ 172 { sty_zp, AM_ZP, "STY" }, /* $84 */ 173 { sta_zp, AM_ZP, "STA" }, /* $85 */ 174 { stx_zp, AM_ZP, "STX" }, /* $86 */ 175 { smb0, AM_ZP, "SMB0"}, /* $87 */ 176 { dey, AM_IMPL, "DEY" }, /* $88 */ 177 { bit_imm, AM_IMMED, "BIT" }, /* $89 */ 178 { txa, AM_IMPL, "TXA" }, /* $8A */ 179 { handle_bp8, AM_IMPL, "BP8" }, /* $8B */ 180 { sty_abs, AM_ABS, "STY" }, /* $8C */ 181 { sta_abs, AM_ABS, "STA" }, /* $8D */ 182 { stx_abs, AM_ABS, "STX" }, /* $8E */ 183 { bbs0, AM_PSREL, "BBS0"}, /* $8F */ 184 { bcc, AM_REL, "BCC" }, /* $90 */ 185 { sta_zpindy, AM_ZPINDY, "STA" }, /* $91 */ 186 { sta_zpind, AM_ZPIND, "STA" }, /* $92 */ 187 { tstins_abs, AM_TST_ABS, "TST" }, /* $93 */ 188 { sty_zpx, AM_ZPX, "STY" }, /* $94 */ 189 { sta_zpx, AM_ZPX, "STA" }, /* $95 */ 190 { stx_zpy, AM_ZPY, "STX" }, /* $96 */ 191 { smb1, AM_ZP, "SMB1"}, /* $97 */ 192 { tya, AM_IMPL, "TYA" }, /* $98 */ 193 { sta_absy, AM_ABSY, "STA" }, /* $99 */ 194 { txs, AM_IMPL, "TXS" }, /* $9A */ 195 { handle_bp9, AM_IMPL, "BP9" }, /* $9B */ 196 { stz_abs, AM_ABS, "STZ" }, /* $9C */ 197 { sta_absx, AM_ABSX, "STA" }, /* $9D */ 198 { stz_absx, AM_ABSX, "STZ" }, /* $9E */ 199 { bbs1, AM_PSREL, "BBS1"}, /* $9F */ 200 { ldy_imm, AM_IMMED, "LDY" }, /* $A0 */ 201 { lda_zpindx, AM_ZPINDX, "LDA" }, /* $A1 */ 202 { ldx_imm, AM_IMMED, "LDX" }, /* $A2 */ 203 { tstins_zpx, AM_TST_ZPX, "TST" }, /* $A3 */ 204 { ldy_zp, AM_ZP, "LDY" }, /* $A4 */ 205 { lda_zp, AM_ZP, "LDA" }, /* $A5 */ 206 { ldx_zp, AM_ZP, "LDX" }, /* $A6 */ 207 { smb2, AM_ZP, "SMB2"}, /* $A7 */ 208 { tay, AM_IMPL, "TAY" }, /* $A8 */ 209 { lda_imm, AM_IMMED, "LDA" }, /* $A9 */ 210 { tax, AM_IMPL, "TAX" }, /* $AA */ 211 { handle_bp10,AM_IMPL, "BPA" }, /* $AB */ 212 { ldy_abs, AM_ABS, "LDY" }, /* $AC */ 213 { lda_abs, AM_ABS, "LDA" }, /* $AD */ 214 { ldx_abs, AM_ABS, "LDX" }, /* $AE */ 215 { bbs2, AM_PSREL, "BBS2"}, /* $AF */ 216 { bcs, AM_REL, "BCS" }, /* $B0 */ 217 { lda_zpindy, AM_ZPINDY, "LDA" }, /* $B1 */ 218 { lda_zpind, AM_ZPIND, "LDA" }, /* $B2 */ 219 { tstins_absx,AM_TST_ABSX,"TST" }, /* $B3 */ 220 { ldy_zpx, AM_ZPX, "LDY" }, /* $B4 */ 221 { lda_zpx, AM_ZPX, "LDA" }, /* $B5 */ 222 { ldx_zpy, AM_ZPY, "LDX" }, /* $B6 */ 223 { smb3, AM_ZP, "SMB3"}, /* $B7 */ 224 { clv, AM_IMPL, "CLV" }, /* $B8 */ 225 { lda_absy, AM_ABSY, "LDA" }, /* $B9 */ 226 { tsx, AM_IMPL, "TSX" }, /* $BA */ 227 { handle_bp11,AM_IMPL, "BPB" }, /* $BB */ 228 { ldy_absx, AM_ABSX, "LDY" }, /* $BC */ 229 { lda_absx, AM_ABSX, "LDA" }, /* $BD */ 230 { ldx_absy, AM_ABSY, "LDX" }, /* $BE */ 231 { bbs3, AM_PSREL, "BBS3"}, /* $BF */ 232 { cpy_imm, AM_IMMED, "CPY" }, /* $C0 */ 233 { cmp_zpindx, AM_ZPINDX, "CMP" }, /* $C1 */ 234 { cly, AM_IMPL, "CLY" }, /* $C2 */ 235 { tdd, AM_XFER, "TDD" }, /* $C3 */ 236 { cpy_zp, AM_ZP, "CPY" }, /* $C4 */ 237 { cmp_zp, AM_ZP, "CMP" }, /* $C5 */ 238 { dec_zp, AM_ZP, "DEC" }, /* $C6 */ 239 { smb4, AM_ZP, "SMB4"}, /* $C7 */ 240 { iny, AM_IMPL, "INY" }, /* $C8 */ 241 { cmp_imm, AM_IMMED, "CMP" }, /* $C9 */ 242 { dex, AM_IMPL, "DEX" }, /* $CA */ 243 { handle_bp12,AM_IMPL, "BPC" }, /* $CB */ 244 { cpy_abs, AM_ABS, "CPY" }, /* $CC */ 245 { cmp_abs, AM_ABS, "CMP" }, /* $CD */ 246 { dec_abs, AM_ABS, "DEC" }, /* $CE */ 247 { bbs4, AM_PSREL, "BBS4"}, /* $CF */ 248 { bne, AM_REL, "BNE" }, /* $D0 */ 249 { cmp_zpindy, AM_ZPINDY, "CMP" }, /* $D1 */ 250 { cmp_zpind, AM_ZPIND, "CMP" }, /* $D2 */ 251 { tin, AM_XFER, "TIN" }, /* $D3 */ 252 { nop, AM_IMPL, "CSH" }, /* $D4 */ 253 { cmp_zpx, AM_ZPX, "CMP" }, /* $D5 */ 254 { dec_zpx, AM_ZPX, "DEC" }, /* $D6 */ 255 { smb5, AM_ZP, "SMB5"}, /* $D7 */ 256 { cld, AM_IMPL, "CLD" }, /* $D8 */ 257 { cmp_absy, AM_ABSY, "CMP" }, /* $D9 */ 258 { phx, AM_IMPL, "PHX" }, /* $DA */ 259 { handle_bp13,AM_IMPL, "BPD" }, /* $DB */ 260 { halt, AM_IMPL, "???" }, /* $DC */ 261 { cmp_absx, AM_ABSX, "CMP" }, /* $DD */ 262 { dec_absx, AM_ABSX, "DEC" }, /* $DE */ 263 { bbs5, AM_PSREL, "BBS5"}, /* $DF */ 264 { cpx_imm, AM_IMMED, "CPX" }, /* $E0 */ 265 { sbc_zpindx, AM_ZPINDX, "SBC" }, /* $E1 */ 266 { halt, AM_IMPL, "???" }, /* $E2 */ 267 { tia, AM_XFER, "TIA" }, /* $E3 */ 268 { cpx_zp, AM_ZP, "CPX" }, /* $E4 */ 269 { sbc_zp, AM_ZP, "SBC" }, /* $E5 */ 270 { inc_zp, AM_ZP, "INC" }, /* $E6 */ 271 { smb6, AM_ZP, "SMB6"}, /* $E7 */ 272 { inx, AM_IMPL, "INX" }, /* $E8 */ 273 { sbc_imm, AM_IMMED, "SBC" }, /* $E9 */ 274 { nop, AM_IMPL, "NOP" }, /* $EA */ 275 { handle_bp14,AM_IMPL, "BPE" }, /* $EB */ 276 { cpx_abs, AM_ABS, "CPX" }, /* $EC */ 277 { sbc_abs, AM_ABS, "SBC" }, /* $ED */ 278 { inc_abs, AM_ABS, "INC" }, /* $EE */ 279 { bbs6, AM_PSREL, "BBS6"}, /* $EF */ 280 { beq, AM_REL, "BEQ" }, /* $F0 */ 281 { sbc_zpindy, AM_ZPINDY, "SBC" }, /* $F1 */ 282 { sbc_zpind, AM_ZPIND, "SBC" }, /* $F2 */ 283 { tai, AM_XFER, "TAI" }, /* $F3 */ 284 { set, AM_IMPL, "SET" }, /* $F4 */ 285 { sbc_zpx, AM_ZPX, "SBC" }, /* $F5 */ 286 { inc_zpx, AM_ZPX, "INC" }, /* $F6 */ 287 { smb7, AM_ZP, "SMB7"}, /* $F7 */ 288 { sed, AM_IMPL, "SED" }, /* $F8 */ 289 { sbc_absy, AM_ABSY, "SBC" }, /* $F9 */ 290 { plx, AM_IMPL, "PLX" }, /* $FA */ 291 { handle_bp15,AM_IMPL, "BPF" }, /* $FB */ 292 { handle_bios,AM_IMPL, "???" }, /* $FC */ 293 { sbc_absx, AM_ABSX, "SBC" }, /* $FD */ 294 { inc_absx, AM_ABSX, "INC" }, /* $FE */ 295 { bbs7, AM_PSREL, "BBS7"} /* $FF */ 296 }; 297