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