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