1 /*
2 * asm6809.c - 68090 Assembler-related utility functions.
3 *
4 * Written by
5 * Olaf Seibert <rhialto@falu.nl>
6 *
7 * This file is part of VICE, the Versatile Commodore Emulator.
8 * See README for copyright notice.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
23 * 02111-1307 USA.
24 *
25 */
26 #include "vice.h"
27
28 #include <stdlib.h>
29
30 #include "asm.h"
31 #include "mon_assemble.h"
32 #include "mon_register.h"
33 #include "montypes.h"
34 #include "types.h"
35
36 static const int addr_mode_size[] = {
37 1, /* ASM_ADDR_MODE_IMPLIED */
38 -1,/* ASM_ADDR_MODE_ACCUMULATOR */
39 -1,/* ASM_ADDR_MODE_IMMEDIATE */
40 -1,/* ASM_ADDR_MODE_ZERO_PAGE */
41 -1,/* ASM_ADDR_MODE_ZERO_PAGE_X */
42 -1,/* ASM_ADDR_MODE_ZERO_PAGE_Y */
43 -1,/* ASM_ADDR_MODE_ABSOLUTE */
44 -1,/* ASM_ADDR_MODE_ABSOLUTE_X */
45 -1,/* ASM_ADDR_MODE_ABSOLUTE_Y */
46 -1,/* ASM_ADDR_MODE_ABS_INDIRECT */
47 -1,/* ASM_ADDR_MODE_INDIRECT_X */
48 -1,/* ASM_ADDR_MODE_INDIRECT_Y */
49 -1,/* ASM_ADDR_MODE_RELATIVE */
50 /* more modes needed for z80 */
51 -1,/* ASM_ADDR_MODE_ABSOLUTE_A,*/
52 -1,/* ASM_ADDR_MODE_ABSOLUTE_HL, */
53 -1,/* ASM_ADDR_MODE_ABSOLUTE_IX,*/
54 -1,/* ASM_ADDR_MODE_ABSOLUTE_IY,*/
55 -1,/* ASM_ADDR_MODE_ABS_INDIRECT_ZP, */
56 -1,/* ASM_ADDR_MODE_IMMEDIATE_16, */
57 -1,/* ASM_ADDR_MODE_REG_B, */
58 -1,/* ASM_ADDR_MODE_REG_C, */
59 -1,/* ASM_ADDR_MODE_REG_D, */
60 -1,/* ASM_ADDR_MODE_REG_E, */
61 -1,/* ASM_ADDR_MODE_REG_H, */
62 -1,/* ASM_ADDR_MODE_REG_IXH, */
63 -1,/* ASM_ADDR_MODE_REG_IYH, */
64 -1,/* ASM_ADDR_MODE_REG_L, */
65 -1,/* ASM_ADDR_MODE_REG_IXL, */
66 -1,/* ASM_ADDR_MODE_REG_IYL, */
67 -1,/* ASM_ADDR_MODE_REG_AF, */
68 -1,/* ASM_ADDR_MODE_REG_BC, */
69 -1,/* ASM_ADDR_MODE_REG_DE, */
70 -1,/* ASM_ADDR_MODE_REG_HL, */
71 -1,/* ASM_ADDR_MODE_REG_IX, */
72 -1,/* ASM_ADDR_MODE_REG_IY, */
73 -1,/* ASM_ADDR_MODE_REG_SP, */
74 -1,/* ASM_ADDR_MODE_REG_IND_BC, */
75 -1,/* ASM_ADDR_MODE_REG_IND_DE, */
76 -1,/* ASM_ADDR_MODE_REG_IND_HL, */
77 -1,/* ASM_ADDR_MODE_REG_IND_IX, */
78 -1,/* ASM_ADDR_MODE_REG_IND_IY, */
79 -1,/* ASM_ADDR_MODE_REG_IND_SP, */
80 /* R65C02 */
81 -1,/* ASM_ADDR_MODE_INDIRECT, */
82 -1,/* ASM_ADDR_MODE_ABS_INDIRECT_X, */
83 -1,/* ASM_ADDR_MODE_DOUBLE, */
84 -1,/* ASM_ADDR_MODE_ZERO_PAGE_RELATIVE, */
85 /* 65816 */
86 -1,/* ASM_ADDR_MODE_RELATIVE_LONG */
87 -1,/* ASM_ADDR_MODE_STACK_RELATIVE_Y */
88 -1,/* ASM_ADDR_MODE_STACK_RELATIVE */
89 -1,/* ASM_ADDR_MODE_INDIRECT_LONG */
90 -1,/* ASM_ADDR_MODE_ABSOLUTE_LONG */
91 -1,/* ASM_ADDR_MODE_INDIRECT_LONG_Y */
92 -1,/* ASM_ADDR_MODE_ABSOLUTE_LONG_X */
93 -1,/* ASM_ADDR_MODE_MOVE */
94 -1,/* ASM_ADDR_MODE_ABS_IND_LONG */
95 /* more modes needed for 6809 */
96 1, /* ASM_ADDR_MODE_ILLEGAL, */
97 2, /* ASM_ADDR_MODE_IMM_BYTE, */
98 3, /* ASM_ADDR_MODE_IMM_WORD, */
99 2, /* ASM_ADDR_MODE_DIRECT, */
100 3, /* ASM_ADDR_MODE_EXTENDED, */
101 2, /* ASM_ADDR_MODE_INDEXED, post-byte determines sub-mode */
102 2, /* ASM_ADDR_MODE_REL_BYTE, */
103 3, /* ASM_ADDR_MODE_REL_WORD, */
104 2, /* ASM_ADDR_MODE_REG_POST, */
105 2, /* ASM_ADDR_MODE_SYS_POST, */
106 2, /* ASM_ADDR_MODE_USR_POST, */
107 };
108
109 static const int indexed_size[0x20] = {
110 0, /* ASM_ADDR_MODE_INDEXED_INC1 */
111 0, /* ASM_ADDR_MODE_INDEXED_INC2 */
112 0, /* ASM_ADDR_MODE_INDEXED_DEC1 */
113 0, /* ASM_ADDR_MODE_INDEXED_DEC2 */
114 0, /* ASM_ADDR_MODE_INDEXED_OFF0 */
115 0, /* ASM_ADDR_MODE_INDEXED_OFFB */
116 0, /* ASM_ADDR_MODE_INDEXED_OFFA */
117 0, /* ASM_ADDR_MODE_INDEXED_07 */
118 1, /* ASM_ADDR_MODE_INDEXED_OFF8 */
119 2, /* ASM_ADDR_MODE_INDEXED_OFF16 */
120 0, /* ASM_ADDR_MODE_INDEXED_0A */
121 0, /* ASM_ADDR_MODE_INDEXED_OFFD */
122 0, /* ASM_ADDR_MODE_INDEXED_OFFPC8 */
123 0, /* ASM_ADDR_MODE_INDEXED_OFFPC16 */
124 0, /* ASM_ADDR_MODE_INDEXED_0E */
125 0, /* ASM_ADDR_MODE_INDEXED_0F */
126 0, /* ASM_ADDR_MODE_INDEXED_10 */
127 0, /* ASM_ADDR_MODE_INDEXED_INC2_IND */
128 0, /* ASM_ADDR_MODE_INDEXED_12 */
129 0, /* ASM_ADDR_MODE_INDEXED_DEC2_IND */
130 0, /* ASM_ADDR_MODE_INDEXED_OFF0_IND */
131 0, /* ASM_ADDR_MODE_INDEXED_OFFB_IND */
132 0, /* ASM_ADDR_MODE_INDEXED_OFFA_IND */
133 0, /* ASM_ADDR_MODE_INDEXED_17 */
134 1, /* ASM_ADDR_MODE_INDEXED_OFF8_IND */
135 2, /* ASM_ADDR_MODE_INDEXED_OFF16_IND */
136 0, /* ASM_ADDR_MODE_INDEXED_1A */
137 0, /* ASM_ADDR_MODE_INDEXED_OFFD_IND */
138 1, /* ASM_ADDR_MODE_INDEXED_OFFPC8_IND */
139 2, /* ASM_ADDR_MODE_INDEXED_OFFPC16_IND */
140 0, /* ASM_ADDR_MODE_INDEXED_1E */
141 2, /* ASM_ADDR_MODE_INDEXED_16_IND */
142 };
143
144 static const asm_opcode_info_t opcode_list[256] = {
145 /* 00 */ { "NEG", ASM_ADDR_MODE_DIRECT },
146 /* 01 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG direct (6809), OIM direct (6309) */
147 /* 02 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COM direct : NEG direct (6809), AIM direct (6309) */
148 /* 03 */ { "COM", ASM_ADDR_MODE_DIRECT },
149 /* 04 */ { "LSR", ASM_ADDR_MODE_DIRECT },
150 /* 05 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR direct (6809), EIM direct (6309) */
151 /* 06 */ { "ROR", ASM_ADDR_MODE_DIRECT },
152 /* 07 */ { "ASR", ASM_ADDR_MODE_DIRECT },
153 /* 08 */ { "ASL", ASM_ADDR_MODE_DIRECT },
154 /* 09 */ { "ROL", ASM_ADDR_MODE_DIRECT },
155 /* 0a */ { "DEC", ASM_ADDR_MODE_DIRECT },
156 /* 0b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC direct (6809), TIM direct (6309) */
157 /* 0c */ { "INC", ASM_ADDR_MODE_DIRECT },
158 /* 0d */ { "TST", ASM_ADDR_MODE_DIRECT },
159 /* 0e */ { "JMP", ASM_ADDR_MODE_DIRECT },
160 /* 0f */ { "CLR", ASM_ADDR_MODE_DIRECT },
161 /* 10 */ { "PREFIX", ASM_ADDR_MODE_ILLEGAL },
162 /* 11 */ { "PREFIX", ASM_ADDR_MODE_ILLEGAL },
163 /* 12 */ { "NOP", ASM_ADDR_MODE_IMPLIED },
164 /* 13 */ { "SYNC", ASM_ADDR_MODE_IMPLIED },
165 /* 14 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* HCF (6809), SEXW (6309) */
166 /* 15 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* HCF (6809), illegal trap (6309) */
167 /* 16 */ { "LBRA", ASM_ADDR_MODE_REL_WORD },
168 /* 17 */ { "LBSR", ASM_ADDR_MODE_REL_WORD },
169 /* 18 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CCRS (6809), illegal trap (6309) */
170 /* 19 */ { "DAA", ASM_ADDR_MODE_IMPLIED },
171 /* 1a */ { "ORCC", ASM_ADDR_MODE_IMM_BYTE },
172 /* 1b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NOP (6809), illegal trap (6309) */
173 /* 1c */ { "ANDCC", ASM_ADDR_MODE_IMM_BYTE },
174 /* 1d */ { "SEX", ASM_ADDR_MODE_IMPLIED },
175 /* 1e */ { "EXG", ASM_ADDR_MODE_REG_POST },
176 /* 1f */ { "TFR", ASM_ADDR_MODE_REG_POST },
177 /* 20 */ { "BRA", ASM_ADDR_MODE_REL_BYTE },
178 /* 21 */ { "BRN", ASM_ADDR_MODE_REL_BYTE },
179 /* 22 */ { "BHI", ASM_ADDR_MODE_REL_BYTE },
180 /* 23 */ { "BLS", ASM_ADDR_MODE_REL_BYTE },
181 /* 24 */ { "BCC", ASM_ADDR_MODE_REL_BYTE },
182 /* 25 */ { "BCS", ASM_ADDR_MODE_REL_BYTE },
183 /* 26 */ { "BNE", ASM_ADDR_MODE_REL_BYTE },
184 /* 27 */ { "BEQ", ASM_ADDR_MODE_REL_BYTE },
185 /* 28 */ { "BVC", ASM_ADDR_MODE_REL_BYTE },
186 /* 29 */ { "BVS", ASM_ADDR_MODE_REL_BYTE },
187 /* 2a */ { "BPL", ASM_ADDR_MODE_REL_BYTE },
188 /* 2b */ { "BMI", ASM_ADDR_MODE_REL_BYTE },
189 /* 2c */ { "BGE", ASM_ADDR_MODE_REL_BYTE },
190 /* 2d */ { "BLT", ASM_ADDR_MODE_REL_BYTE },
191 /* 2e */ { "BGT", ASM_ADDR_MODE_REL_BYTE },
192 /* 2f */ { "BLE", ASM_ADDR_MODE_REL_BYTE },
193 /* 30 */ { "LEAX", ASM_ADDR_MODE_INDEXED },
194 /* 31 */ { "LEAY", ASM_ADDR_MODE_INDEXED },
195 /* 32 */ { "LEAS", ASM_ADDR_MODE_INDEXED },
196 /* 33 */ { "LEAU", ASM_ADDR_MODE_INDEXED },
197 /* 34 */ { "PSHS", ASM_ADDR_MODE_SYS_POST },
198 /* 35 */ { "PULS", ASM_ADDR_MODE_SYS_POST },
199 /* 36 */ { "PSHU", ASM_ADDR_MODE_USR_POST },
200 /* 37 */ { "PULU", ASM_ADDR_MODE_USR_POST },
201 /* 38 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDCC immediate +1 cycle (6809), illegal trap (6309) */
202 /* 39 */ { "RTS", ASM_ADDR_MODE_IMPLIED },
203 /* 3a */ { "ABX", ASM_ADDR_MODE_IMPLIED },
204 /* 3b */ { "RTI", ASM_ADDR_MODE_IMPLIED },
205 /* 3c */ { "CWAI", ASM_ADDR_MODE_IMM_BYTE },
206 /* 3d */ { "MUL", ASM_ADDR_MODE_IMPLIED },
207 /* 3e */ { "RESET", ASM_ADDR_MODE_IMPLIED },
208 /* 3f */ { "SWI", ASM_ADDR_MODE_IMPLIED },
209 /* 40 */ { "NEGA", ASM_ADDR_MODE_IMPLIED },
210 /* 41 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGA (6809), illegal trap (6309) */
211 /* 42 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COMA : NEGA (6809), illegal trap (6309) */
212 /* 43 */ { "COMA", ASM_ADDR_MODE_IMPLIED },
213 /* 44 */ { "LSRA", ASM_ADDR_MODE_IMPLIED },
214 /* 45 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRA (6809), illegal trap (6309) */
215 /* 46 */ { "RORA", ASM_ADDR_MODE_IMPLIED },
216 /* 47 */ { "ASRA", ASM_ADDR_MODE_IMPLIED },
217 /* 48 */ { "ASLA", ASM_ADDR_MODE_IMPLIED },
218 /* 49 */ { "ROLA", ASM_ADDR_MODE_IMPLIED },
219 /* 4a */ { "DECA", ASM_ADDR_MODE_IMPLIED },
220 /* 4b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECA (6809), illegal trap (6309) */
221 /* 4c */ { "INCA", ASM_ADDR_MODE_IMPLIED },
222 /* 4d */ { "TSTA", ASM_ADDR_MODE_IMPLIED },
223 /* 4e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRA (6809), illegal trap (6309) */
224 /* 4f */ { "CLRA", ASM_ADDR_MODE_IMPLIED },
225 /* 50 */ { "NEGB", ASM_ADDR_MODE_IMPLIED },
226 /* 51 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGB (6809), illegal trap (6309) */
227 /* 52 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COMB : NEGB (6809), illegal trap (6309) */
228 /* 53 */ { "COMB", ASM_ADDR_MODE_IMPLIED },
229 /* 54 */ { "LSRB", ASM_ADDR_MODE_IMPLIED },
230 /* 55 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRB (6809), illegal trap (6309) */
231 /* 56 */ { "RORB", ASM_ADDR_MODE_IMPLIED },
232 /* 57 */ { "ASRB", ASM_ADDR_MODE_IMPLIED },
233 /* 58 */ { "ASLB", ASM_ADDR_MODE_IMPLIED },
234 /* 59 */ { "ROLB", ASM_ADDR_MODE_IMPLIED },
235 /* 5a */ { "DECB", ASM_ADDR_MODE_IMPLIED },
236 /* 5b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECB (6809), illegal trap (6309) */
237 /* 5c */ { "INCB", ASM_ADDR_MODE_IMPLIED },
238 /* 5d */ { "TSTB", ASM_ADDR_MODE_IMPLIED },
239 /* 5e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRB (6809), illegal trap (6309) */
240 /* 5f */ { "CLRB", ASM_ADDR_MODE_IMPLIED },
241 /* 60 */ { "NEG", ASM_ADDR_MODE_INDEXED },
242 /* 61 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG indexed (6809), OIM indexed (6309) */
243 /* 62 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COM indexed : NEG indexed (6809), AIM indexed (6309) */
244 /* 63 */ { "COM", ASM_ADDR_MODE_INDEXED },
245 /* 64 */ { "LSR", ASM_ADDR_MODE_INDEXED },
246 /* 65 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR indexed (6809), EIM indexed (6309) */
247 /* 66 */ { "ROR", ASM_ADDR_MODE_INDEXED },
248 /* 67 */ { "ASR", ASM_ADDR_MODE_INDEXED },
249 /* 68 */ { "ASL", ASM_ADDR_MODE_INDEXED },
250 /* 69 */ { "ROL", ASM_ADDR_MODE_INDEXED },
251 /* 6a */ { "DEC", ASM_ADDR_MODE_INDEXED },
252 /* 6b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC indexed (6809), TIM indexed (6309) */
253 /* 6c */ { "INC", ASM_ADDR_MODE_INDEXED },
254 /* 6d */ { "TST", ASM_ADDR_MODE_INDEXED },
255 /* 6e */ { "JMP", ASM_ADDR_MODE_INDEXED },
256 /* 6f */ { "CLR", ASM_ADDR_MODE_INDEXED },
257 /* 70 */ { "NEG", ASM_ADDR_MODE_EXTENDED },
258 /* 71 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG extended (6809), OIM extended (6309) */
259 /* 72 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COM extended : NEG extended (6809), AIM extended (6309) */
260 /* 73 */ { "COM", ASM_ADDR_MODE_EXTENDED },
261 /* 74 */ { "LSR", ASM_ADDR_MODE_EXTENDED },
262 /* 75 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR extended (6809), EIM extended (6309) */
263 /* 76 */ { "ROR", ASM_ADDR_MODE_EXTENDED },
264 /* 77 */ { "ASR", ASM_ADDR_MODE_EXTENDED },
265 /* 78 */ { "ASL", ASM_ADDR_MODE_EXTENDED },
266 /* 79 */ { "ROL", ASM_ADDR_MODE_EXTENDED },
267 /* 7a */ { "DEC", ASM_ADDR_MODE_EXTENDED },
268 /* 7b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC extended (6809), TIM extended (6309) */
269 /* 7c */ { "INC", ASM_ADDR_MODE_EXTENDED },
270 /* 7d */ { "TST", ASM_ADDR_MODE_EXTENDED },
271 /* 7e */ { "JMP", ASM_ADDR_MODE_EXTENDED },
272 /* 7f */ { "CLR", ASM_ADDR_MODE_EXTENDED },
273 /* 80 */ { "SUBA", ASM_ADDR_MODE_IMM_BYTE },
274 /* 81 */ { "CMPA", ASM_ADDR_MODE_IMM_BYTE },
275 /* 82 */ { "SBCA", ASM_ADDR_MODE_IMM_BYTE },
276 /* 83 */ { "SUBD", ASM_ADDR_MODE_IMM_WORD },
277 /* 84 */ { "ANDA", ASM_ADDR_MODE_IMM_BYTE },
278 /* 85 */ { "BITA", ASM_ADDR_MODE_IMM_BYTE },
279 /* 86 */ { "LDA", ASM_ADDR_MODE_IMM_BYTE },
280 /* 87 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SCC immediate (6809), illegal trap (6309) */
281 /* 88 */ { "EORA", ASM_ADDR_MODE_IMM_BYTE },
282 /* 89 */ { "ADCA", ASM_ADDR_MODE_IMM_BYTE },
283 /* 8a */ { "ORA", ASM_ADDR_MODE_IMM_BYTE },
284 /* 8b */ { "ADDA", ASM_ADDR_MODE_IMM_BYTE },
285 /* 8c */ { "CMPX", ASM_ADDR_MODE_IMM_WORD },
286 /* 8d */ { "BSR", ASM_ADDR_MODE_REL_BYTE },
287 /* 8e */ { "LDX", ASM_ADDR_MODE_IMM_WORD },
288 /* 8f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STX immediate (6809), illegal trap (6309) */
289 /* 90 */ { "SUBA", ASM_ADDR_MODE_DIRECT },
290 /* 91 */ { "CMPA", ASM_ADDR_MODE_DIRECT },
291 /* 92 */ { "SBCA", ASM_ADDR_MODE_DIRECT },
292 /* 93 */ { "SUBD", ASM_ADDR_MODE_DIRECT },
293 /* 94 */ { "ANDA", ASM_ADDR_MODE_DIRECT },
294 /* 95 */ { "BITA", ASM_ADDR_MODE_DIRECT },
295 /* 96 */ { "LDA", ASM_ADDR_MODE_DIRECT },
296 /* 97 */ { "STA", ASM_ADDR_MODE_DIRECT },
297 /* 98 */ { "EORA", ASM_ADDR_MODE_DIRECT },
298 /* 99 */ { "ADCA", ASM_ADDR_MODE_DIRECT },
299 /* 9a */ { "ORA", ASM_ADDR_MODE_DIRECT },
300 /* 9b */ { "ADDA", ASM_ADDR_MODE_DIRECT },
301 /* 9c */ { "CMPX", ASM_ADDR_MODE_DIRECT },
302 /* 9d */ { "JSR", ASM_ADDR_MODE_DIRECT },
303 /* 9e */ { "LDX", ASM_ADDR_MODE_DIRECT },
304 /* 9f */ { "STX", ASM_ADDR_MODE_DIRECT },
305 /* a0 */ { "SUBA", ASM_ADDR_MODE_INDEXED },
306 /* a1 */ { "CMPA", ASM_ADDR_MODE_INDEXED },
307 /* a2 */ { "SBCA", ASM_ADDR_MODE_INDEXED },
308 /* a3 */ { "SUBD", ASM_ADDR_MODE_INDEXED },
309 /* a4 */ { "ANDA", ASM_ADDR_MODE_INDEXED },
310 /* a5 */ { "BITA", ASM_ADDR_MODE_INDEXED },
311 /* a6 */ { "LDA", ASM_ADDR_MODE_INDEXED },
312 /* a7 */ { "STA", ASM_ADDR_MODE_INDEXED },
313 /* a8 */ { "EORA", ASM_ADDR_MODE_INDEXED },
314 /* a9 */ { "ADCA", ASM_ADDR_MODE_INDEXED },
315 /* aa */ { "ORA", ASM_ADDR_MODE_INDEXED },
316 /* ab */ { "ADDA", ASM_ADDR_MODE_INDEXED },
317 /* ac */ { "CMPX", ASM_ADDR_MODE_INDEXED },
318 /* ad */ { "JSR", ASM_ADDR_MODE_INDEXED },
319 /* ae */ { "LDX", ASM_ADDR_MODE_INDEXED },
320 /* af */ { "STX", ASM_ADDR_MODE_INDEXED },
321 /* b0 */ { "SUBA", ASM_ADDR_MODE_EXTENDED },
322 /* b1 */ { "CMPA", ASM_ADDR_MODE_EXTENDED },
323 /* b2 */ { "SBCA", ASM_ADDR_MODE_EXTENDED },
324 /* b3 */ { "SUBD", ASM_ADDR_MODE_EXTENDED },
325 /* b4 */ { "ANDA", ASM_ADDR_MODE_EXTENDED },
326 /* b5 */ { "BITA", ASM_ADDR_MODE_EXTENDED },
327 /* b6 */ { "LDA", ASM_ADDR_MODE_EXTENDED },
328 /* b7 */ { "STA", ASM_ADDR_MODE_EXTENDED },
329 /* b8 */ { "EORA", ASM_ADDR_MODE_EXTENDED },
330 /* b9 */ { "ADCA", ASM_ADDR_MODE_EXTENDED },
331 /* ba */ { "ORA", ASM_ADDR_MODE_EXTENDED },
332 /* bb */ { "ADDA", ASM_ADDR_MODE_EXTENDED },
333 /* bc */ { "CMPX", ASM_ADDR_MODE_EXTENDED },
334 /* bd */ { "JSR", ASM_ADDR_MODE_EXTENDED },
335 /* be */ { "LDX", ASM_ADDR_MODE_EXTENDED },
336 /* bf */ { "STX", ASM_ADDR_MODE_EXTENDED },
337 /* c0 */ { "SUBB", ASM_ADDR_MODE_IMM_BYTE },
338 /* c1 */ { "CMPB", ASM_ADDR_MODE_IMM_BYTE },
339 /* c2 */ { "SBCB", ASM_ADDR_MODE_IMM_BYTE },
340 /* c3 */ { "ADDD", ASM_ADDR_MODE_IMM_WORD },
341 /* c4 */ { "ANDB", ASM_ADDR_MODE_IMM_BYTE },
342 /* c5 */ { "BITB", ASM_ADDR_MODE_IMM_BYTE },
343 /* c6 */ { "LDB", ASM_ADDR_MODE_IMM_BYTE },
344 /* c7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SCC immediate (6809), illegal trap (6309) */
345 /* c8 */ { "EORB", ASM_ADDR_MODE_IMM_BYTE },
346 /* c9 */ { "ADCB", ASM_ADDR_MODE_IMM_BYTE },
347 /* ca */ { "ORB", ASM_ADDR_MODE_IMM_BYTE },
348 /* cb */ { "ADDB", ASM_ADDR_MODE_IMM_BYTE },
349 /* cc */ { "LDD", ASM_ADDR_MODE_IMM_WORD },
350 /* cd */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* HCF (6809), LDQ immediate (6309) */
351 /* ce */ { "LDU", ASM_ADDR_MODE_IMM_WORD },
352 /* cf */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STU immediate (6809), illegal trap (6309) */
353 /* d0 */ { "SUBB", ASM_ADDR_MODE_DIRECT },
354 /* d1 */ { "CMPB", ASM_ADDR_MODE_DIRECT },
355 /* d2 */ { "SBCB", ASM_ADDR_MODE_DIRECT },
356 /* d3 */ { "ADDD", ASM_ADDR_MODE_DIRECT },
357 /* d4 */ { "ANDB", ASM_ADDR_MODE_DIRECT },
358 /* d5 */ { "BITB", ASM_ADDR_MODE_DIRECT },
359 /* d6 */ { "LDB", ASM_ADDR_MODE_DIRECT },
360 /* d7 */ { "STB", ASM_ADDR_MODE_DIRECT },
361 /* d8 */ { "EORB", ASM_ADDR_MODE_DIRECT },
362 /* d9 */ { "ADCB", ASM_ADDR_MODE_DIRECT },
363 /* da */ { "ORB", ASM_ADDR_MODE_DIRECT },
364 /* db */ { "ADDB", ASM_ADDR_MODE_DIRECT },
365 /* dc */ { "LDD", ASM_ADDR_MODE_DIRECT },
366 /* dd */ { "STD", ASM_ADDR_MODE_DIRECT },
367 /* de */ { "LDU", ASM_ADDR_MODE_DIRECT },
368 /* df */ { "STU", ASM_ADDR_MODE_DIRECT },
369 /* e0 */ { "SUBB", ASM_ADDR_MODE_INDEXED },
370 /* e1 */ { "CMPB", ASM_ADDR_MODE_INDEXED },
371 /* e2 */ { "SBCB", ASM_ADDR_MODE_INDEXED },
372 /* e3 */ { "ADDD", ASM_ADDR_MODE_INDEXED },
373 /* e4 */ { "ANDB", ASM_ADDR_MODE_INDEXED },
374 /* e5 */ { "BITB", ASM_ADDR_MODE_INDEXED },
375 /* e6 */ { "LDB", ASM_ADDR_MODE_INDEXED },
376 /* e7 */ { "STB", ASM_ADDR_MODE_INDEXED },
377 /* e8 */ { "EORB", ASM_ADDR_MODE_INDEXED },
378 /* e9 */ { "ADCB", ASM_ADDR_MODE_INDEXED },
379 /* ea */ { "ORB", ASM_ADDR_MODE_INDEXED },
380 /* eb */ { "ADDB", ASM_ADDR_MODE_INDEXED },
381 /* ec */ { "LDD", ASM_ADDR_MODE_INDEXED },
382 /* ed */ { "STD", ASM_ADDR_MODE_INDEXED },
383 /* ee */ { "LDU", ASM_ADDR_MODE_INDEXED },
384 /* ef */ { "STU", ASM_ADDR_MODE_INDEXED },
385 /* f0 */ { "SUBB", ASM_ADDR_MODE_EXTENDED },
386 /* f1 */ { "CMPB", ASM_ADDR_MODE_EXTENDED },
387 /* f2 */ { "SBCB", ASM_ADDR_MODE_EXTENDED },
388 /* f3 */ { "ADDD", ASM_ADDR_MODE_EXTENDED },
389 /* f4 */ { "ANDB", ASM_ADDR_MODE_EXTENDED },
390 /* f5 */ { "BITB", ASM_ADDR_MODE_EXTENDED },
391 /* f6 */ { "LDB", ASM_ADDR_MODE_EXTENDED },
392 /* f7 */ { "STB", ASM_ADDR_MODE_EXTENDED },
393 /* f8 */ { "EORB", ASM_ADDR_MODE_EXTENDED },
394 /* f9 */ { "ADCB", ASM_ADDR_MODE_EXTENDED },
395 /* fa */ { "ORB", ASM_ADDR_MODE_EXTENDED },
396 /* fb */ { "ADDB", ASM_ADDR_MODE_EXTENDED },
397 /* fc */ { "LDD", ASM_ADDR_MODE_EXTENDED },
398 /* fd */ { "STD", ASM_ADDR_MODE_EXTENDED },
399 /* fe */ { "LDU", ASM_ADDR_MODE_EXTENDED },
400 /* ff */ { "STU", ASM_ADDR_MODE_EXTENDED }
401 };
402
403 static const asm_opcode_info_t opcode_list_10[256] = {
404 /* 00 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG direct (6809), illegal trap (6309) */
405 /* 01 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG direct (6809), illegal trap (6309) */
406 /* 02 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COM direct : NEG direct, illegal trap (6309) */
407 /* 03 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COM direct (6809), illegal trap (6309) */
408 /* 04 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR direct (6809), illegal trap (6309) */
409 /* 05 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR direct (6809), illegal trap (6309) */
410 /* 06 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROR direct (6809), illegal trap (6309) */
411 /* 07 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASR direct (6809), illegal trap (6309) */
412 /* 08 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASL/LSL direct (6809), illegal trap (6309) */
413 /* 09 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROL direct (6809), illegal trap (6309) */
414 /* 0a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC direct (6809), illegal trap (6309) */
415 /* 0b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC direct (6809), illegal trap (6309) */
416 /* 0c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INC direct (6809), illegal trap (6309) */
417 /* 0d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TST direct (6809), illegal trap (6309) */
418 /* 0e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JMP direct (6809), illegal trap (6309) */
419 /* 0f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLR direct (6809), illegal trap (6309) */
420 /* 10 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ignore byte and read next (6809/6309) */
421 /* 11 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ignore byte and read next (6809/6309) */
422 /* 12 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NOP (6809), illegal trap (6309) */
423 /* 13 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SYNC (6809), illegal trap (6309) */
424 /* 14 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* HCF (6809), illegal trap (6309) */
425 /* 15 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* HCF (6809), illegal trap (6309) */
426 /* 16 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LBRA offset (6809), illegal trap (6309) */
427 /* 17 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LBSR offset (6809), illegal trap (6309) */
428 /* 18 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CCRS (6809), illegal trap (6309) */
429 /* 19 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DAA (6809), illegal trap (6309) */
430 /* 1a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORCC immediate (6809), illegal trap (6309) */
431 /* 1b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NOP (6809), illegal trap (6309) */
432 /* 1c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDCC immediate (6809), illegal trap (6309) */
433 /* 1d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SEX (6809), illegal trap (6309) */
434 /* 1e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EXG regs (6809), illegal trap (6309) */
435 /* 1f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TFR regs (6809), illegal trap (6309) */
436 /* 20 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LBRA offset (6809), illegal trap (6309) */
437 /* 21 */ { "LBRN", ASM_ADDR_MODE_REL_WORD },
438 /* 22 */ { "LBHI", ASM_ADDR_MODE_REL_WORD },
439 /* 23 */ { "LBLS", ASM_ADDR_MODE_REL_WORD },
440 /* 24 */ { "LBCC", ASM_ADDR_MODE_REL_WORD },
441 /* 25 */ { "LBCS", ASM_ADDR_MODE_REL_WORD },
442 /* 26 */ { "LBNE", ASM_ADDR_MODE_REL_WORD },
443 /* 27 */ { "LBEQ", ASM_ADDR_MODE_REL_WORD },
444 /* 28 */ { "LBVC", ASM_ADDR_MODE_REL_WORD },
445 /* 29 */ { "LBVS", ASM_ADDR_MODE_REL_WORD },
446 /* 2a */ { "LBPL", ASM_ADDR_MODE_REL_WORD },
447 /* 2b */ { "LBMI", ASM_ADDR_MODE_REL_WORD },
448 /* 2c */ { "LBGE", ASM_ADDR_MODE_REL_WORD },
449 /* 2d */ { "LBLT", ASM_ADDR_MODE_REL_WORD },
450 /* 2e */ { "LBGT", ASM_ADDR_MODE_REL_WORD },
451 /* 2f */ { "LBLE", ASM_ADDR_MODE_REL_WORD },
452 /* 30 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LEAX indexed (6809), ADDR regs (6309) */
453 /* 31 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LEAY indexed (6809), ADCR regs (6309) */
454 /* 32 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LEAS indexed (6809), SUBR regs (6309) */
455 /* 33 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LEAU indexed (6809), SBCR regs (6309) */
456 /* 34 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* PSHS post (6809), ANDR regs (6309) */
457 /* 35 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* PULS post (6809), ORR regs (6309) */
458 /* 36 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* PSHU post (6809), EORR regs (6309) */
459 /* 37 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* PULU post (6809), CMPR regs (6309) */
460 /* 38 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDCC immediate + 1 cycle (6809), PSHSW (6309) */
461 /* 39 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* RTS (6809), PULSW (6309) */
462 /* 3a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ABX (6809), PSHUW (6309) */
463 /* 3b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* RTI (6809), PULUW (6309) */
464 /* 3c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CWAI immediate (6809), illegal trap (6309) */
465 /* 3d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* MUL (6809), illegal trap (6309) */
466 /* 3e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SWIRES (6809), illegal trap (6309) */
467 /* 3f */ { "SWI2", ASM_ADDR_MODE_IMPLIED },
468 /* 40 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGA (6809), NEGD (6309) */
469 /* 41 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGA (6809), illegal trap (6309) */
470 /* 42 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COMA : NEGA (6809), illegal trap (6309) */
471 /* 43 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COMA (6809), COMD (6309) */
472 /* 44 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRA (6809), LSRD (6309) */
473 /* 45 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRA (6809), illegal trap (6309) */
474 /* 46 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* RORA (6809), RORD (6309) */
475 /* 47 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASRA (6809), ASRD (6309) */
476 /* 48 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASLA/LSLA (6809), ASLD (6309) */
477 /* 49 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROLA (6809), ROLD (6309) */
478 /* 4a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECA (6809), DECD (6309) */
479 /* 4b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECA (6809), illegal trap (6309) */
480 /* 4c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INCA (6809), INCD (6309) */
481 /* 4d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TSTA (6809), TSTD (6309) */
482 /* 4e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRA (6809), illegal trap (6309) */
483 /* 4f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRA (6809), CLRD (6309) */
484 /* 50 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGB (6809), illegal trap (6309) */
485 /* 51 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGB (6809), illegal trap (6309) */
486 /* 52 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COMB : NEGB (6809), illegal trap (6309) */
487 /* 53 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COMB (6809), COMW (6309) */
488 /* 54 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRB (6809), LSRW (6309) */
489 /* 55 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRB (6809), illegal trap (6309) */
490 /* 56 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* RORB (6809), RORW (6309) */
491 /* 57 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASRB (6809), illegal trap (6309) */
492 /* 58 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASLB/LSLB (6809), illegal trap (6309) */
493 /* 59 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROLB (6809), ROLW (6309) */
494 /* 5a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECB (6809), DECW (6309) */
495 /* 5b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECB (6809), illegal trap (6309) */
496 /* 5c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INCB (6809), INCW (6309) */
497 /* 5d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TSTB (6809), TSTW (6309) */
498 /* 5e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRB (6809), illegal trap (6309) */
499 /* 5f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRB (6809), CLRW (6309) */
500 /* 60 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG indexed (6809), illegal trap (6309) */
501 /* 61 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG indexed (6809), illegal trap (6309) */
502 /* 62 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COM indexed : NEG indexed (6809), illegal trap (6309) */
503 /* 63 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COM indexed (6809), illegal trap (6309) */
504 /* 64 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR indexed (6809), illegal trap (6309) */
505 /* 65 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR indexed (6809), illegal trap (6309) */
506 /* 66 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROR indexed (6809), illegal trap (6309) */
507 /* 67 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASR indexed (6809), illegal trap (6309) */
508 /* 68 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASL/LSL indexed (6809), illegal trap (6309) */
509 /* 69 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROL indexed (6809), illegal trap (6309) */
510 /* 6a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC indexed (6809), illegal trap (6309) */
511 /* 6b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC indexed (6809), illegal trap (6309) */
512 /* 6c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INC indexed (6809), illegal trap (6309) */
513 /* 6d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TST indexed (6809), illegal trap (6309) */
514 /* 6e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JMP indexed (6809), illegal trap (6309) */
515 /* 6f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLR indexed (6809), illegal trap (6309) */
516 /* 70 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG extended (6809), illegal trap (6309) */
517 /* 71 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG extended (6809), illegal trap (6309) */
518 /* 72 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COM extended : NEG extended (6809), illegal trap (6309) */
519 /* 73 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COM extended (6809), illegal trap (6309) */
520 /* 74 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR extended (6809), illegal trap (6309) */
521 /* 75 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR extended (6809), illegal trap (6309) */
522 /* 76 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROR extended (6809), illegal trap (6309) */
523 /* 77 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASR extended (6809), illegal trap (6309) */
524 /* 78 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASL extended (6809), illegal trap (6309) */
525 /* 79 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROL extended (6809), illegal trap (6309) */
526 /* 7a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC extended (6809), illegal trap (6309) */
527 /* 7b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC extended (6809), illegal trap (6309) */
528 /* 7c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INC extended (6809), illegal trap (6309) */
529 /* 7d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TST extended (6809), illegal trap (6309) */
530 /* 7e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JMP extended (6809), illegal trap (6309) */
531 /* 7f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLR extended (6809), illegal trap (6309) */
532 /* 80 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBA immediate (6809), SUBW immediate (6309) */
533 /* 81 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPA immediate (6809), CMPW immediate (6309) */
534 /* 82 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCA immediate (6809), SBCD immediate (6309) */
535 /* 83 */ { "CMPD", ASM_ADDR_MODE_IMM_WORD },
536 /* 84 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDA immediate (6809), ANDD immediate (6309) */
537 /* 85 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITA immediate (6809), BITD immediate (6309) */
538 /* 86 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDA immediate (6809), LDW immediate (6309) */
539 /* 87 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SCC immediate (6809), illegal trap (6309) */
540 /* 88 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORA immediate (6809), EORD immediate (6309) */
541 /* 89 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCA immediate (6809), ADCD immediate (6309) */
542 /* 8a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORA immediate (6809), ORD immediate (6309) */
543 /* 8b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDA immediate (6809), ADDW immediate (6309) */
544 /* 8c */ { "CMPY", ASM_ADDR_MODE_IMM_WORD },
545 /* 8d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BSR offset (6809), illegal trap (6309) */
546 /* 8e */ { "LDY", ASM_ADDR_MODE_IMM_WORD },
547 /* 8f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STX immediate (6809), illegal trap (6309) */
548 /* 90 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBA direct (6809), SUBW direct (6309) */
549 /* 91 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPA direct (6809), CMPW direct (6309) */
550 /* 92 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCA direct (6809), SBCD direct (6309) */
551 /* 93 */ { "CMPD", ASM_ADDR_MODE_DIRECT },
552 /* 94 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDA direct (6809), ANDD direct (6309) */
553 /* 95 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITA direct (6809), BITD direct (6309) */
554 /* 96 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDA direct (6809), LDW direct (6309) */
555 /* 97 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STA direct (6809), STW direct (6309) */
556 /* 98 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORA direct (6809), EORD direct (6309) */
557 /* 99 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCA direct (6809), ADCD direct (6309) */
558 /* 9a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORA direct (6809), ORD direct (6309) */
559 /* 9b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDA direct (6809), ADDW direct (6309) */
560 /* 9c */ { "CMPY", ASM_ADDR_MODE_DIRECT },
561 /* 9d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JSR direct (6809), illegal trap (6309) */
562 /* 9e */ { "LDY", ASM_ADDR_MODE_DIRECT },
563 /* 9f */ { "STY", ASM_ADDR_MODE_DIRECT },
564 /* a0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBA indexed (6809), SUBW indexed (6309) */
565 /* a1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPA indexed (6809), CMPW indexed (6309) */
566 /* a2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCA indexed (6809), SBCD indexed (6309) */
567 /* a3 */ { "CMPD", ASM_ADDR_MODE_INDEXED },
568 /* a4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDA indexed (6809), ANDD indexed (6309) */
569 /* a5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITA indexed (6809), BITD indexed (6309) */
570 /* a6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDA indexed (6809), LDW indexed (6309) */
571 /* a7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STA indexed (6809), STW indexed (6309) */
572 /* a8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORA indexed (6809), EORD indexed (6309) */
573 /* a9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCA indexed (6809), ADCD indexed (6309) */
574 /* aa */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORA indexed (6809), ORD indexed (6309) */
575 /* ab */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDA indexed (6809), ADDW indexed (6309) */
576 /* ac */ { "CMPY", ASM_ADDR_MODE_INDEXED },
577 /* ad */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JSR indexed (6809), illegal trap (6309) */
578 /* ae */ { "LDY", ASM_ADDR_MODE_INDEXED },
579 /* af */ { "STY", ASM_ADDR_MODE_INDEXED },
580 /* b0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBA extended (6809), SUBW extended (6309) */
581 /* b1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPA extended (6809), CMPW extended (6309) */
582 /* b2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCA extended (6809), SBCD extended (6309) */
583 /* b3 */ { "CMPD", ASM_ADDR_MODE_EXTENDED },
584 /* b4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDA extended (6809), ANDD extended (6309) */
585 /* b5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITA extended (6809), BITD extended (6309) */
586 /* b6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDA extended (6809), LDW extended (6309) */
587 /* b7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STA extended (6809), STW extended (6309) */
588 /* b8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORA extended (6809), EORD extended (6309) */
589 /* b9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCA extended (6809), ADCD extended (6309) */
590 /* ba */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORA extended (6809), ORD extended (6309) */
591 /* bb */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDA extended (6809), ADDW extended (6309) */
592 /* bc */ { "CMPY", ASM_ADDR_MODE_EXTENDED },
593 /* bd */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JSR extended (6809), illegal trap (6309) */
594 /* be */ { "LDY", ASM_ADDR_MODE_EXTENDED },
595 /* bf */ { "STY", ASM_ADDR_MODE_EXTENDED },
596 /* c0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBB immediate (6809), illegal trap (6309) */
597 /* c1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPB immediate (6809), illegal trap (6309) */
598 /* c2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCB immediate (6809), illegal trap (6309) */
599 /* c3 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDD immediate (6809), illegal trap (6309) */
600 /* c4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDB immediate (6809), illegal trap (6309) */
601 /* c5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITB immediate (6809), illegal trap (6309) */
602 /* c6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDB immediate (6809), illegal trap (6309) */
603 /* c7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SCC immediate (6809), illegal trap (6309) */
604 /* c8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORB immediate (6809), illegal trap (6309) */
605 /* c9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCB immediate (6809), illegal trap (6309) */
606 /* ca */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORB immediate (6809), illegal trap (6309) */
607 /* cb */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDB immediate (6809), illegal trap (6309) */
608 /* cc */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDD immediate (6809), illegal trap (6309) */
609 /* cd */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* HCF (6809), illegal trap (6309) */
610 /* ce */ { "LDS", ASM_ADDR_MODE_IMM_WORD },
611 /* cf */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STU immediate (6809), illegal trap (6309) */
612 /* d0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBB direct (6809), illegal trap (6309) */
613 /* d1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPB direct (6809), illegal trap (6309) */
614 /* d2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCB direct (6809), illegal trap (6309) */
615 /* d3 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDD direct (6809), illegal trap (6309) */
616 /* d4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDB direct (6809), illegal trap (6309) */
617 /* d5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITB direct (6809), illegal trap (6309) */
618 /* d6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDB direct (6809), illegal trap (6309) */
619 /* d7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STB direct (6809), illegal trap (6309) */
620 /* d8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORB direct (6809), illegal trap (6309) */
621 /* d9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCB direct (6809), illegal trap (6309) */
622 /* da */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORB direct (6809), illegal trap (6309) */
623 /* db */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDB direct (6809), illegal trap (6309) */
624 /* dc */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDD direct (6809), LDQ direct (6309) */
625 /* dd */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STD direct (6809), STQ direct (6309) */
626 /* de */ { "LDS", ASM_ADDR_MODE_DIRECT },
627 /* df */ { "STS", ASM_ADDR_MODE_DIRECT },
628 /* e0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBB indexed (6809), illegal trap (6309) */
629 /* e1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPB indexed (6809), illegal trap (6309) */
630 /* e2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCB indexed (6809), illegal trap (6309) */
631 /* e3 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDD indexed (6809), illegal trap (6309) */
632 /* e4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDB indexed (6809), illegal trap (6309) */
633 /* e5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITB indexed (6809), illegal trap (6309) */
634 /* e6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDB indexed (6809), illegal trap (6309) */
635 /* e7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STB indexed (6809), illegal trap (6309) */
636 /* e8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORB indexed (6809), illegal trap (6309) */
637 /* e9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCB indexed (6809), illegal trap (6309) */
638 /* ea */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORB indexed (6809), illegal trap (6309) */
639 /* eb */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDB indexed (6809), illegal trap (6309) */
640 /* ec */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDD indexed (6809), LDQ indexed (6309) */
641 /* ed */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STD indexed (6809), STQ indexed (6309) */
642 /* ee */ { "LDS", ASM_ADDR_MODE_INDEXED },
643 /* ef */ { "STS", ASM_ADDR_MODE_INDEXED },
644 /* f0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBB extended (6809), illegal trap (6309) */
645 /* f1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPB extended (6809), illegal trap (6309) */
646 /* f2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCB extended (6809), illegal trap (6309) */
647 /* f3 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDD extended (6809), illegal trap (6309) */
648 /* f4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDB extended (6809), illegal trap (6309) */
649 /* f5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITB extended (6809), illegal trap (6309) */
650 /* f6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDB extended (6809), illegal trap (6309) */
651 /* f7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STB extended (6809), illegal trap (6309) */
652 /* f8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORB extended (6809), illegal trap (6309) */
653 /* f9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCB extended (6809), illegal trap (6309) */
654 /* fa */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORB extended (6809), illegal trap (6309) */
655 /* fb */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDB extended (6809), illegal trap (6309) */
656 /* fc */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDD extended (6809), LDQ extended (6309) */
657 /* fd */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STD extended (6809), STQ extended (6309) */
658 /* fe */ { "LDS", ASM_ADDR_MODE_EXTENDED },
659 /* ff */ { "STS", ASM_ADDR_MODE_EXTENDED }
660 };
661
662 static const asm_opcode_info_t opcode_list_11[256] = {
663 /* 00 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG direct (6809), illegal trap (6309) */
664 /* 01 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG direct (6809), illegal trap (6309) */
665 /* 02 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COM direct : NEG direct (6809), illegal trap (6309) */
666 /* 03 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COM direct (6809), illegal trap (6309) */
667 /* 04 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR direct (6809), illegal trap (6309) */
668 /* 05 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR direct (6809), illegal trap (6309) */
669 /* 06 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROR direct (6809), illegal trap (6309) */
670 /* 07 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASR direct (6809), illegal trap (6309) */
671 /* 08 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASL/LSL direct (6809), illegal trap (6309) */
672 /* 09 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROL direct (6809), illegal trap (6309) */
673 /* 0a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC direct (6809), illegal trap (6309) */
674 /* 0b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC direct (6809), illegal trap (6309) */
675 /* 0c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INC direct (6809), illegal trap (6309) */
676 /* 0d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TST direct (6809), illegal trap (6309) */
677 /* 0e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JMP direct (6809), illegal trap (6309) */
678 /* 0f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLR direct (6809), illegal trap (6309) */
679 /* 10 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ignore byte and read next (6809/6309) */
680 /* 11 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ignore byte and read next (6809/6309) */
681 /* 12 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NOP (6809), illegal trap (6309) */
682 /* 13 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SYNC (6809), illegal trap (6309) */
683 /* 14 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* HCF (6809), illegal trap (6309) */
684 /* 15 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* HCF (6809), illegal trap (6309) */
685 /* 16 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LBRA offset (6809), illegal trap (6309) */
686 /* 17 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LBSR offset (6809), illegal trap (6309) */
687 /* 18 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CCRS (6809), illegal trap (6309) */
688 /* 19 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DAA (6809), illegal trap (6309) */
689 /* 1a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORCC immediate (6809), illegal trap (6309) */
690 /* 1b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NOP (6809), illegal trap (6309) */
691 /* 1c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDCC immediate (6809), illegal trap (6309) */
692 /* 1d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SEX (6809), illegal trap (6309) */
693 /* 1e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EXG regs (6809), illegal trap (6309) */
694 /* 1f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TFR regs (6809), illegal trap (6309) */
695 /* 20 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BRA offset (6809), illegal trap (6309) */
696 /* 21 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BRN offset (6809), illegal trap (6309) */
697 /* 22 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BHI offset (6809), illegal trap (6309) */
698 /* 23 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BLS offset (6809), illegal trap (6309) */
699 /* 24 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BHS/BCC offset (6809), illegal trap (6309) */
700 /* 25 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BLO/BCS offset (6809), illegal trap (6309) */
701 /* 26 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BNE offset (6809), illegal trap (6309) */
702 /* 27 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BEQ offset (6809), illegal trap (6309) */
703 /* 28 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BVC offset (6809), illegal trap (6309) */
704 /* 29 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BVS offset (6809), illegal trap (6309) */
705 /* 2a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BPL offset (6809), illegal trap (6309) */
706 /* 2b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BMI offset (6809), illegal trap (6309) */
707 /* 2c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BGE offset (6809), illegal trap (6309) */
708 /* 2d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BLT offset (6809), illegal trap (6309) */
709 /* 2e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BGT offset (6809), illegal trap (6309) */
710 /* 2f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BLE offset (6809), illegal trap (6309) */
711 /* 30 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LEAX indexed (6809), BAND direct (6309) */
712 /* 31 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LEAY indexed (6809), BIAND direct (6309) */
713 /* 32 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LEAS indexed (6809), BOR direct (6309) */
714 /* 33 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LEAU indexed (6809), BIOR direct (6309) */
715 /* 34 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* PSHS post (6809), BEOR direct (6309) */
716 /* 35 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* PULS post (6809), BIEOR direct (6309) */
717 /* 36 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* PSHU post (6809), LDBT direct (6309) */
718 /* 37 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* PULU post (6809), STBT direct (6309) */
719 /* 38 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDCC immediate + 1 cycle (6809), TFM R+,R+ (6309) */
720 /* 39 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* RTS cycle (6809), TFM R-,R- (6309) */
721 /* 3a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ABX (6809), TFM R+,R (6309) */
722 /* 3b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* RTI (6809), TFM R,R+ (6309) */
723 /* 3c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CWAI immediate (6809), BITMD immediate (6309) */
724 /* 3d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* MUL (6809), LDMD immediate (6309) */
725 /* 3e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SWIRES (6809), illegal trap (6309) */
726 /* 3f */ { "SWI3", ASM_ADDR_MODE_IMPLIED },
727 /* 40 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGA (6809), illegal trap (6309) */
728 /* 41 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGA (6809), illegal trap (6309) */
729 /* 42 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COMA : NEGA (6809), illegal trap (6309) */
730 /* 43 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COMA (6809), COME (6309) */
731 /* 44 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRA (6809), illegal trap (6309) */
732 /* 45 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRA (6809), illegal trap (6309) */
733 /* 46 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* RORA (6809), illegal trap (6309) */
734 /* 47 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASRA (6809), illegal trap (6309) */
735 /* 48 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASLA/LSLA (6809), illegal trap (6309) */
736 /* 49 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROLA (6809), illegal trap (6309) */
737 /* 4a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECA (6809), DECE (6309) */
738 /* 4b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECA (6809), illegal trap (6309) */
739 /* 4c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INCA (6809), INCE (6309) */
740 /* 4d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TSTA (6809), TSTE (6309) */
741 /* 4e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRA (6809), illegal trap (6309) */
742 /* 4f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRA (6809), CLRE (6309) */
743 /* 50 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGB (6809), illegal trap (6309) */
744 /* 51 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEGB (6809), illegal trap (6309) */
745 /* 52 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COMB : NEGB (6809), illegal trap (6309) */
746 /* 53 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COMB (6809), COMF (6309) */
747 /* 54 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRB (6809), illegal trap (6309) */
748 /* 55 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSRB (6809), illegal trap (6309) */
749 /* 56 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* RORB (6809), illegal trap (6309) */
750 /* 57 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASRB (6809), illegal trap (6309) */
751 /* 58 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASLB/LSLB (6809), illegal trap (6309) */
752 /* 59 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROLB (6809), illegal trap (6309) */
753 /* 5a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECB (6809), DECF (6309) */
754 /* 5b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DECB (6809), illegal trap (6309) */
755 /* 5c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INCB (6809), INCF (6309) */
756 /* 5d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TSTB (6809), TSTF (6309) */
757 /* 5e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRB (6809), illegal trap (6309) */
758 /* 5f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLRB (6809), CLRF (6309) */
759 /* 60 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG indexed (6809), illegal trap (6309) */
760 /* 61 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG indexed (6809), illegal trap (6309) */
761 /* 62 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COM indexed : NEG indexed (6809), illegal trap (6309) */
762 /* 63 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COM indexed (6809), illegal trap (6309) */
763 /* 64 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR indexed (6809), illegal trap (6309) */
764 /* 65 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR indexed (6809), illegal trap (6309) */
765 /* 66 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROR indexed (6809), illegal trap (6309) */
766 /* 67 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASR indexed (6809), illegal trap (6309) */
767 /* 68 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASL/LSL indexed (6809), illegal trap (6309) */
768 /* 69 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROL indexed (6809), illegal trap (6309) */
769 /* 6a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC indexed (6809), illegal trap (6309) */
770 /* 6b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC indexed (6809), illegal trap (6309) */
771 /* 6c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INC indexed (6809), illegal trap (6309) */
772 /* 6d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TST indexed (6809), illegal trap (6309) */
773 /* 6e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JMP indexed (6809), illegal trap (6309) */
774 /* 6f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLR indexed (6809), illegal trap (6309) */
775 /* 70 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG extended (6809), illegal trap (6309) */
776 /* 71 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* NEG extended (6809), illegal trap (6309) */
777 /* 72 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* carry ? COM extended : NEG extended (6809), illegal trap (6309) */
778 /* 73 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* COM extended (6809), illegal trap (6309) */
779 /* 74 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR extended (6809), illegal trap (6309) */
780 /* 75 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LSR extended (6809), illegal trap (6309) */
781 /* 76 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROR extended (6809), illegal trap (6309) */
782 /* 77 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASR extended (6809), illegal trap (6309) */
783 /* 78 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ASL/LSL extended (6809), illegal trap (6309) */
784 /* 79 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ROL extended (6809), illegal trap (6309) */
785 /* 7a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC extended (6809), illegal trap (6309) */
786 /* 7b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* DEC extended (6809), illegal trap (6309) */
787 /* 7c */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* INC extended (6809), illegal trap (6309) */
788 /* 7d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* TST extended (6809), illegal trap (6309) */
789 /* 7e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JMP extended (6809), illegal trap (6309) */
790 /* 7f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CLR extended (6809), illegal trap (6309) */
791 /* 80 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBA immediate (6809), SUBE immediate (6309) */
792 /* 81 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPA immediate (6809), CMPE immediate (6309) */
793 /* 82 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCA immediate (6809), illegal trap (6309) */
794 /* 83 */ { "CMPU", ASM_ADDR_MODE_IMM_WORD },
795 /* 84 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDA immediate (6809), illegal trap (6309) */
796 /* 85 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITA immediate (6809), illegal trap (6309) */
797 /* 86 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDA immediate (6809), LDE immediate (6309) */
798 /* 87 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SCC immediate (6809), illegal trap (6309) */
799 /* 88 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORA immediate (6809), illegal trap (6309) */
800 /* 89 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCA immediate (6809), illegal trap (6309) */
801 /* 8a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORA immediate (6809), illegal trap (6309) */
802 /* 8b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDA immediate (6809), ADDE immediate (6309) */
803 /* 8c */ { "CMPS", ASM_ADDR_MODE_IMM_WORD },
804 /* 8d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BSR offset (6809), DIVD immediate (6309) */
805 /* 8e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDX immediate (6809), DIVQ immediate (6309) */
806 /* 8f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STX immediate (6809), MULD immediate (6309) */
807 /* 90 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBA direct (6809), SUBE direct (6309) */
808 /* 91 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPA direct (6809), CMPE direct (6309) */
809 /* 92 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCA direct (6809), illegal trap (6309) */
810 /* 93 */ { "CMPU", ASM_ADDR_MODE_DIRECT },
811 /* 94 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDA direct (6809), illegal trap (6309) */
812 /* 95 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITA direct (6809), illegal trap (6309) */
813 /* 96 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDA direct (6809), LDE direct (6309) */
814 /* 97 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STA direct (6809), STE direct (6309) */
815 /* 98 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORA direct (6809), illegal trap (6309) */
816 /* 99 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCA direct (6809), illegal trap (6309) */
817 /* 9a */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORA direct (6809), illegal trap (6309) */
818 /* 9b */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDA direct (6809), ADDE direct (6309) */
819 /* 9c */ { "CMPS", ASM_ADDR_MODE_DIRECT },
820 /* 9d */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JSR direct (6809), DIVD direct (6309) */
821 /* 9e */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDX direct (6809), DIVQ direct (6309) */
822 /* 9f */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STX direct (6809), MULD direct (6309) */
823 /* a0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBA indexed (6809), SUBE indexed (6309) */
824 /* a1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPA indexed (6809), CMPE indexed (6309) */
825 /* a2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCA indexed (6809), illegal trap (6309) */
826 /* a3 */ { "CMPU", ASM_ADDR_MODE_INDEXED },
827 /* a4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDA indexed (6809), illegal trap (6309) */
828 /* a5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITA indexed (6809), illegal trap (6309) */
829 /* a6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDA indexed (6809), LDE indexed (6309) */
830 /* a7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STA indexed (6809), STE indexed (6309) */
831 /* a8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORA indexed (6809), illegal trap (6309) */
832 /* a9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCA indexed (6809), illegal trap (6309) */
833 /* aa */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORA indexed (6809), illegal trap (6309) */
834 /* ab */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDA indexed (6809), ADDE indexed (6309) */
835 /* ac */ { "CMPS", ASM_ADDR_MODE_INDEXED },
836 /* ad */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JSR indexed (6809), DIVD indexed (6309) */
837 /* ae */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDX indexed (6809), DIVQ indexed (6309) */
838 /* af */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STX indexed (6809), MULD indexed (6309) */
839 /* b0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBA extended (6809), SUBE extended (6309) */
840 /* b1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPA extended (6809), CMPE extended (6309) */
841 /* b2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCA extended (6809), illegal trap (6309) */
842 /* b3 */ { "CMPU", ASM_ADDR_MODE_EXTENDED },
843 /* b4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDA extended (6809), illegal trap (6309) */
844 /* b5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITA extended (6809), illegal trap (6309) */
845 /* b6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDA extended (6809), LDE extended (6309) */
846 /* b7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STA extended (6809), STE extended (6309) */
847 /* b8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORA extended (6809), illegal trap (6309) */
848 /* b9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCA extended (6809), illegal trap (6309) */
849 /* ba */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORA extended (6809), illegal trap (6309) */
850 /* bb */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDA extended (6809), ADDE extended (6309) */
851 /* bc */ { "CMPS", ASM_ADDR_MODE_EXTENDED },
852 /* bd */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* JSR extended (6809), DIVD extended (6309) */
853 /* be */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDX extended (6809), DIVQ extended (6309) */
854 /* bf */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STX extended (6809), MULD extended (6309) */
855 /* c0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBB immediate (6809), SUBF immediate (6309) */
856 /* c1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPB immediate (6809), CMPF immediate (6309) */
857 /* c2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCB immediate (6809), illegal trap (6309) */
858 /* c3 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDD immediate (6809), illegal trap (6309) */
859 /* c4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDB immediate (6809), illegal trap (6309) */
860 /* c5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITB immediate (6809), illegal trap (6309) */
861 /* c6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDB immediate (6809), LDF immediate (6309) */
862 /* c7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SCC immediate (6809), illegal trap (6309) */
863 /* c8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORB immediate (6809), illegal trap (6309) */
864 /* c9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCB immediate (6809), illegal trap (6309) */
865 /* ca */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORB immediate (6809), illegal trap (6309) */
866 /* cb */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDB immediate (6809), ADDF immediate (6309) */
867 /* cc */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDD immediate (6809), illegal trap (6309) */
868 /* cd */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* HCF (6809), illegal trap (6309) */
869 /* ce */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDU immediate (6809), illegal trap (6309) */
870 /* cf */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STU immediate (6809), illegal trap (6309) */
871 /* d0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBB direct (6809), SUBF direct (6309) */
872 /* d1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPB direct (6809), CMPF direct (6309) */
873 /* d2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCB direct (6809), illegal trap (6309) */
874 /* d3 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDD direct (6809), illegal trap (6309) */
875 /* d4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDB direct (6809), illegal trap (6309) */
876 /* d5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITB direct (6809), illegal trap (6309) */
877 /* d6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDB direct (6809), LDF direct (6309) */
878 /* d7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STB direct (6809), STF direct (6309) */
879 /* d8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORB direct (6809), illegal trap (6309) */
880 /* d9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCB direct (6809), illegal trap (6309) */
881 /* da */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORB direct (6809), illegal trap (6309) */
882 /* db */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDB direct (6809), ADDF direct (6309) */
883 /* dc */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDD direct (6809), illegal trap (6309) */
884 /* dd */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STD direct (6809), illegal trap (6309) */
885 /* de */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDU direct (6809), illegal trap (6309) */
886 /* df */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STU direct (6809), illegal trap (6309) */
887 /* e0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBB indexed (6809), SUBF indexed (6309) */
888 /* e1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPB indexed (6809), CMPF indexed (6309) */
889 /* e2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCB indexed (6809), illegal trap (6309) */
890 /* e3 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDD indexed (6809), illegal trap (6309) */
891 /* e4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDB indexed (6809), illegal trap (6309) */
892 /* e5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITB indexed (6809), illegal trap (6309) */
893 /* e6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDB indexed (6809), LDF indexed (6309) */
894 /* e7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STB indexed (6809), STF indexed (6309) */
895 /* e8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORB indexed (6809), illegal trap (6309) */
896 /* e9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCB indexed (6809), illegal trap (6309) */
897 /* ea */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORB indexed (6809), illegal trap (6309) */
898 /* eb */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDB indexed (6809), ADDF indexed (6309) */
899 /* ec */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDD indexed (6809), illegal trap (6309) */
900 /* ed */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STD indexed (6809), illegal trap (6309) */
901 /* ee */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDU indexed (6809), illegal trap (6309) */
902 /* ef */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STU indexed (6809), illegal trap (6309) */
903 /* f0 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SUBB extended (6809), SUBF extended (6309) */
904 /* f1 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* CMPB extended (6809), CMPF extended (6309) */
905 /* f2 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* SBCB extended (6809), illegal trap (6309) */
906 /* f3 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDD extended (6809), illegal trap (6309) */
907 /* f4 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ANDB extended (6809), illegal trap (6309) */
908 /* f5 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* BITB extended (6809), illegal trap (6309) */
909 /* f6 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDB extended (6809), LDF extended (6309) */
910 /* f7 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STB extended (6809), STF extended (6309) */
911 /* f8 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* EORB extended (6809), illegal trap (6309) */
912 /* f9 */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADCB extended (6809), illegal trap (6309) */
913 /* fa */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ORB extended (6809), illegal trap (6309) */
914 /* fb */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* ADDB extended (6809), ADDF extended (6309) */
915 /* fc */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDD extended (6809), illegal trap (6309) */
916 /* fd */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* STD extended (6809), illegal trap (6309) */
917 /* fe */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL }, /* LDU extended (6809), illegal trap (6309) */
918 /* ff */ { "UNDOC", ASM_ADDR_MODE_ILLEGAL } /* STU extended (6809), illegal trap (6309) */
919 };
920
asm_opcode_info_get(unsigned int p0,unsigned int p1,unsigned int p2)921 static const asm_opcode_info_t *asm_opcode_info_get(unsigned int p0, unsigned int p1, unsigned int p2)
922 {
923 /*
924 * Extra prefix bytes after the first one should be ignored (UNDOC),
925 * but since we get only a limited amount of bytes here we can't
926 * really do that.
927 */
928 if (p0 == 0x10) {
929 return opcode_list_10 + p1;
930 }
931 if (p0 == 0x11) {
932 return opcode_list_11 + p1;
933 }
934 return opcode_list + p0;
935 }
936
asm_addr_mode_get_size(unsigned int mode,unsigned int p0,unsigned int p1,unsigned int p2)937 static unsigned int asm_addr_mode_get_size(unsigned int mode, unsigned int p0,
938 unsigned int p1, unsigned int p2)
939 {
940 int size = 0;
941
942 if (p0 == 0x10 || p0 == 0x11) {
943 size++;
944 p0 = p1;
945 p1 = p2;
946 }
947 if (mode == ASM_ADDR_MODE_INDEXED) {
948 /* post-byte determines submode */
949 if (p1 & 0x80) {
950 size += indexed_size[p1 & 0x1F];
951 }
952 }
953 return size + addr_mode_size[mode];
954 }
955
asm6809_init(monitor_cpu_type_t * monitor_cpu_type)956 void asm6809_init(monitor_cpu_type_t *monitor_cpu_type)
957 {
958 monitor_cpu_type->cpu_type = CPU_6809;
959 monitor_cpu_type->asm_addr_mode_get_size = asm_addr_mode_get_size;
960 monitor_cpu_type->asm_opcode_info_get = asm_opcode_info_get;
961
962 /* Once we have a generic processor specific init, this will move. */
963 mon_assemble6809_init(monitor_cpu_type);
964 mon_register6809_init(monitor_cpu_type);
965 }
966