0
|
1 #include <stdio.h>
|
|
2 #include <stdlib.h>
|
|
3 #include <sys/types.h>
|
|
4 #include <sys/stat.h>
|
|
5 #include <fcntl.h>
|
|
6 #include <unistd.h>
|
|
7 #include <string.h>
|
|
8
|
|
9
|
|
10 /***************************************************************************
|
|
11 Originally posted to comp.sys.m6809 by Didier Derny (didier@aida.remcomp.fr)
|
|
12
|
|
13 Minor hacks by Alan DeKok
|
|
14
|
|
15 Fixed: D_Indexed addressing used prog[2] and prog[3] when it meant
|
|
16 prog[pc+2] and prog[pc+3]: Would produce flawed disassemblies!
|
|
17
|
|
18 changed addresses in D_Indexed to be all hex.
|
|
19 added 2 instances of 'extrabyte' in D_Indexed: would not skip them..
|
|
20 Added PC offsets to D_Indexed ,PCR formats
|
|
21 added SWI2 print out as OS9
|
|
22
|
|
23 To do:
|
|
24
|
|
25 handle command-line options properly...
|
|
26
|
|
27 Fix handling of illegal opcodes so it doesn't skip a byte
|
|
28 i.e. $87 is a skip 2
|
|
29
|
|
30 Move defines to another file
|
|
31
|
|
32 Add 6309 support
|
|
33 also add 6309 native-mode support, and listing of clock cycles for opcodes.
|
|
34
|
|
35 Add OS-9 support
|
|
36
|
|
37 add proper label-disassembly. i.e. 2-pass.
|
|
38
|
|
39 ****************************************************************************/
|
|
40
|
|
41 // extern int errno;
|
|
42 // extern char *sys_errlist[];
|
|
43
|
|
44 static unsigned char prog0[65536];
|
|
45 unsigned char *prog = prog0;
|
|
46
|
|
47 FILE *fp;
|
|
48
|
|
49 typedef struct {
|
|
50 char *name;
|
|
51 int clock;
|
|
52 int bytes;
|
|
53 int (*display)();
|
|
54 int (*execute)();
|
|
55 } Opcode;
|
|
56
|
|
57 typedef struct {
|
|
58 int address;
|
|
59 int length;
|
|
60 int width;
|
|
61 } String;
|
|
62
|
|
63 int D_Illegal(Opcode *, int, int, char *);
|
|
64 int D_Direct(Opcode *, int, int, char *);
|
|
65 int D_Page10(Opcode *, int, int, char *);
|
|
66 int D_Page11(Opcode *, int, int, char *);
|
|
67 int D_Immediat(Opcode *, int, int, char *);
|
|
68 int D_ImmediatL(Opcode *, int, int, char *);
|
|
69 int D_Inherent(Opcode *, int, int, char *);
|
|
70 int D_Indexed(Opcode *, int, int, char *);
|
|
71 int D_Extended(Opcode *, int, int, char *);
|
|
72 int D_Relative(Opcode *, int, int, char *);
|
|
73 int D_RelativeL(Opcode *, int, int, char *);
|
|
74 int D_Register0(Opcode *, int, int, char *);
|
|
75 int D_Register1(Opcode *, int, int, char *);
|
|
76 int D_Register2(Opcode *, int, int, char *);
|
|
77 int D_Page10(Opcode *, int, int, char *);
|
|
78 int D_Page11(Opcode *, int, int, char *);
|
|
79 int D_OS9(Opcode *, int, int, char *);
|
|
80 char *IndexRegister(int);
|
|
81
|
|
82 String stringtable[] = {
|
|
83 { 0xc321, 16, 16 },
|
|
84 { 0xc395, 258, 16 },
|
|
85 { 0xeb15, 50, 16 },
|
|
86 { 0xee6f, 128, 16 },
|
|
87 { 0xfdf4, 492, 16 },
|
|
88 { 0xfff0, 16, 2 },
|
|
89 };
|
|
90
|
|
91 int adoffset = 0;
|
|
92 int laststring = 6;
|
|
93
|
|
94 Opcode optable[] = {
|
|
95 { "NEG ", 6, 2, D_Direct, NULL }, /* 0x00 */
|
|
96 { "?????", 0, 1, D_Illegal, NULL }, /* 0x01 */
|
|
97 { "?????", 0, 1, D_Illegal, NULL }, /* 0x02 */
|
|
98 { "COM ", 6, 2, D_Direct, NULL }, /* 0x03 */
|
|
99 { "LSR ", 6, 2, D_Direct, NULL }, /* 0x04 */
|
|
100 { "?????", 0, 1, D_Illegal, NULL }, /* 0x05 */
|
|
101 { "ROR ", 6, 2, D_Direct, NULL }, /* 0x06 */
|
|
102 { "ASR ", 6, 2, D_Direct, NULL }, /* 0x07 */
|
|
103 { "LSL ", 6, 2, D_Direct, NULL }, /* 0x08 */
|
|
104 { "ROR ", 6, 2, D_Direct, NULL }, /* 0x09 */
|
|
105 { "DEC ", 6, 2, D_Direct, NULL }, /* 0x0a */
|
|
106 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0b */
|
|
107 { "INC ", 6, 2, D_Direct, NULL }, /* 0x0c */
|
|
108 { "TST ", 6, 2, D_Direct, NULL }, /* 0x0d */
|
|
109 { "JMP ", 3, 2, D_Direct, NULL }, /* 0x0e */
|
|
110 { "CLR ", 6, 2, D_Direct, NULL }, /* 0x0f */
|
|
111
|
|
112 { "", 0, 1, D_Page10, NULL }, /* 0x10 */
|
|
113 { "", 0, 1, D_Page11, NULL }, /* 0x11 */
|
|
114 { "NOP ", 2, 1, D_Inherent, NULL }, /* 0x12 */
|
|
115 { "SYNC ", 4, 1, D_Inherent, NULL }, /* 0x13 */
|
|
116 { "?????", 0, 1, D_Illegal, NULL }, /* 0x14 */
|
|
117 { "?????", 0, 1, D_Illegal, NULL }, /* 0x15 */
|
|
118 { "LBRA ", 5, 3, D_RelativeL, NULL }, /* 0x16 */
|
|
119 { "LBSR ", 9, 3, D_RelativeL, NULL }, /* 0x17 */
|
|
120 { "?????", 0, 1, D_Illegal, NULL }, /* 0x18 */
|
|
121 { "DAA ", 2, 1, D_Inherent, NULL }, /* 0x19 */
|
|
122 { "ORCC ", 3, 2, D_Immediat, NULL }, /* 0x1a */
|
|
123 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1b */
|
|
124 { "ANDCC", 3, 2, D_Immediat, NULL }, /* 0x1c */
|
|
125 { "SEX ", 2, 1, D_Inherent, NULL }, /* 0x1d */
|
|
126 { "EXG ", 8, 2, D_Register0, NULL }, /* 0x1e */
|
|
127 { "TFR ", 6, 2, D_Register0, NULL }, /* 0x1f */
|
|
128
|
|
129 { "BRA ", 3, 2, D_Relative, NULL }, /* 0x20 */
|
|
130 { "BRN ", 3, 2, D_Relative, NULL }, /* 0x21 */
|
|
131 { "BHI ", 3, 2, D_Relative, NULL }, /* 0x22 */
|
|
132 { "BLS ", 3, 2, D_Relative, NULL }, /* 0x23 */
|
|
133 { "BCC ", 3, 2, D_Relative, NULL }, /* 0x24 */
|
|
134 { "BCS ", 3, 2, D_Relative, NULL }, /* 0x25 */
|
|
135 { "BNE ", 3, 2, D_Relative, NULL }, /* 0x26 */
|
|
136 { "BEQ ", 3, 2, D_Relative, NULL }, /* 0x27 */
|
|
137 { "BVC ", 3, 2, D_Relative, NULL }, /* 0x28 */
|
|
138 { "BVS ", 3, 2, D_Relative, NULL }, /* 0x29 */
|
|
139 { "BPL ", 3, 2, D_Relative, NULL }, /* 0x2a */
|
|
140 { "BMI ", 3, 2, D_Relative, NULL }, /* 0x2b */
|
|
141 { "BGE ", 3, 2, D_Relative, NULL }, /* 0x2c */
|
|
142 { "BLT ", 3, 2, D_Relative, NULL }, /* 0x2d */
|
|
143 { "BGT ", 3, 2, D_Relative, NULL }, /* 0x2e */
|
|
144 { "BLE ", 3, 2, D_Relative, NULL }, /* 0x2f */
|
|
145
|
|
146 { "LEAX ", 4, 2, D_Indexed, NULL }, /* 0x30 */
|
|
147 { "LEAY ", 4, 2, D_Indexed, NULL }, /* 0x31 */
|
|
148 { "LEAS ", 4, 2, D_Indexed, NULL }, /* 0x32 */
|
|
149 { "LEAU ", 4, 2, D_Indexed, NULL }, /* 0x33 */
|
|
150 { "PSHS ", 5, 2, D_Register1, NULL }, /* 0x34 */
|
|
151 { "PULS ", 5, 2, D_Register1, NULL }, /* 0x35 */
|
|
152 { "PSHU ", 5, 2, D_Register2, NULL }, /* 0x36 */
|
|
153 { "PULU ", 5, 2, D_Register2, NULL }, /* 0x37 */
|
|
154 { "?????", 0, 1, D_Illegal, NULL }, /* 0x38 */
|
|
155 { "RTS ", 5, 1, D_Inherent, NULL }, /* 0x39 */
|
|
156 { "ABX ", 3, 1, D_Inherent, NULL }, /* 0x3a */
|
|
157 { "RTI ", 6, 1, D_Inherent, NULL }, /* 0x3b */
|
|
158 { "CWAI ", 20, 2, D_Inherent, NULL }, /* 0x3c */
|
|
159 { "MUL ", 11, 1, D_Inherent, NULL }, /* 0x3d */
|
|
160 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3e */
|
|
161 { "SWI ", 19, 1, D_Inherent, NULL }, /* 0x3f */
|
|
162
|
|
163 { "NEGA ", 2, 1, D_Inherent, NULL }, /* 0x40 */
|
|
164 { "?????", 0, 1, D_Illegal, NULL }, /* 0x41 */
|
|
165 { "?????", 0, 1, D_Illegal, NULL }, /* 0x42 */
|
|
166 { "COMA ", 2, 1, D_Inherent, NULL }, /* 0x43 */
|
|
167 { "LSRA ", 2, 1, D_Inherent, NULL }, /* 0x44 */
|
|
168 { "?????", 0, 1, D_Illegal, NULL }, /* 0x45 */
|
|
169 { "RORA ", 2, 1, D_Inherent, NULL }, /* 0x46 */
|
|
170 { "ASRA ", 2, 1, D_Inherent, NULL }, /* 0x47 */
|
|
171 { "LSLA ", 2, 1, D_Inherent, NULL }, /* 0x48 */
|
|
172 { "ROLA ", 2, 1, D_Inherent, NULL }, /* 0x49 */
|
|
173 { "DECA ", 2, 1, D_Inherent, NULL }, /* 0x4a */
|
|
174 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4b */
|
|
175 { "INCA ", 2, 1, D_Inherent, NULL }, /* 0x4c */
|
|
176 { "TSTA ", 2, 1, D_Inherent, NULL }, /* 0x4d */
|
|
177 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4e */
|
|
178 { "CLRA ", 2, 1, D_Inherent, NULL }, /* 0x4f */
|
|
179
|
|
180 { "NEGB ", 2, 1, D_Inherent, NULL }, /* 0x50 */
|
|
181 { "?????", 0, 1, D_Illegal, NULL }, /* 0x51 */
|
|
182 { "?????", 0, 1, D_Illegal, NULL }, /* 0x52 */
|
|
183 { "COMB ", 2, 1, D_Inherent, NULL }, /* 0x53 */
|
|
184 { "LSRB ", 2, 1, D_Inherent, NULL }, /* 0x54 */
|
|
185 { "?????", 0, 1, D_Illegal, NULL }, /* 0x55 */
|
|
186 { "RORB ", 2, 1, D_Inherent, NULL }, /* 0x56 */
|
|
187 { "ASRB ", 2, 1, D_Inherent, NULL }, /* 0x57 */
|
|
188 { "LSLB ", 2, 1, D_Inherent, NULL }, /* 0x58 */
|
|
189 { "ROLB ", 2, 1, D_Inherent, NULL }, /* 0x59 */
|
|
190 { "DECB ", 2, 1, D_Inherent, NULL }, /* 0x5a */
|
|
191 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5b */
|
|
192 { "INCB ", 2, 1, D_Inherent, NULL }, /* 0x5c */
|
|
193 { "TSTB ", 2, 1, D_Inherent, NULL }, /* 0x5d */
|
|
194 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5e */
|
|
195 { "CLRB ", 2, 1, D_Inherent, NULL }, /* 0x5f */
|
|
196
|
|
197 { "NEG ", 6, 2, D_Indexed, NULL }, /* 0x60 */
|
|
198 { "?????", 0, 2, D_Illegal, NULL }, /* 0x61 */
|
|
199 { "?????", 0, 2, D_Illegal, NULL }, /* 0x62 */
|
|
200 { "COM ", 6, 2, D_Indexed, NULL }, /* 0x63 */
|
|
201 { "LSR ", 6, 2, D_Indexed, NULL }, /* 0x64 */
|
|
202 { "?????", 0, 2, D_Indexed, NULL }, /* 0x65 */
|
|
203 { "ROR ", 6, 2, D_Indexed, NULL }, /* 0x66 */
|
|
204 { "ASR ", 6, 2, D_Indexed, NULL }, /* 0x67 */
|
|
205 { "LSL ", 6, 2, D_Indexed, NULL }, /* 0x68 */
|
|
206 { "ROL ", 6, 2, D_Indexed, NULL }, /* 0x69 */
|
|
207 { "DEC ", 6, 2, D_Indexed, NULL }, /* 0x6a */
|
|
208 { "?????", 0, 2, D_Illegal, NULL }, /* 0x6b */
|
|
209 { "INC ", 6, 2, D_Indexed, NULL }, /* 0x6c */
|
|
210 { "TST ", 6, 2, D_Indexed, NULL }, /* 0x6d */
|
|
211 { "JMP ", 3, 2, D_Indexed, NULL }, /* 0x6e */
|
|
212 { "CLR ", 6, 2, D_Indexed, NULL }, /* 0x6f */
|
|
213
|
|
214 { "NEG ", 7, 3, D_Extended, NULL }, /* 0x70 */
|
|
215 { "?????", 0, 1, D_Illegal, NULL }, /* 0x71 */
|
|
216 { "?????", 0, 1, D_Illegal, NULL }, /* 0x72 */
|
|
217 { "COM ", 7, 3, D_Extended, NULL }, /* 0x73 */
|
|
218 { "LSR ", 7, 3, D_Extended, NULL }, /* 0x74 */
|
|
219 { "?????", 0, 1, D_Illegal, NULL }, /* 0x75 */
|
|
220 { "ROR ", 7, 3, D_Extended, NULL }, /* 0x76 */
|
|
221 { "ASR ", 7, 3, D_Extended, NULL }, /* 0x77 */
|
|
222 { "LSL ", 7, 3, D_Extended, NULL }, /* 0x78 */
|
|
223 { "ROL ", 7, 3, D_Extended, NULL }, /* 0x79 */
|
|
224 { "DEC ", 7, 3, D_Extended, NULL }, /* 0x7a */
|
|
225 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7b */
|
|
226 { "INC ", 7, 3, D_Extended, NULL }, /* 0x7c */
|
|
227 { "TST ", 7, 3, D_Extended, NULL }, /* 0x7d */
|
|
228 { "JMP ", 4, 3, D_Extended, NULL }, /* 0x7e */
|
|
229 { "CLR ", 7, 3, D_Extended, NULL }, /* 0x7f */
|
|
230
|
|
231 { "SUBA ", 2, 2, D_Immediat, NULL }, /* 0x80 */
|
|
232 { "CMPA ", 2, 2, D_Immediat, NULL }, /* 0x81 */
|
|
233 { "SBCA ", 2, 2, D_Immediat, NULL }, /* 0x82 */
|
|
234 { "SUBD ", 4, 3, D_ImmediatL, NULL }, /* 0x83 */
|
|
235 { "ANDA ", 2, 2, D_Immediat, NULL }, /* 0x84 */
|
|
236 { "BITA ", 2, 2, D_Immediat, NULL }, /* 0x85 */
|
|
237 { "LDA ", 2, 2, D_Immediat, NULL }, /* 0x86 */
|
|
238 { "?????", 0, 2, D_Illegal, NULL }, /* 0x87 */
|
|
239 { "EORA ", 2, 2, D_Immediat, NULL }, /* 0x88 */
|
|
240 { "ADCA ", 2, 2, D_Immediat, NULL }, /* 0x89 */
|
|
241 { "ORA ", 2, 2, D_Immediat, NULL }, /* 0x8a */
|
|
242 { "ADDA ", 2, 2, D_Immediat, NULL }, /* 0x8b */
|
|
243 { "CMPX ", 4, 3, D_ImmediatL, NULL }, /* 0x8c */
|
|
244 { "BSR ", 7, 2, D_Relative, NULL }, /* 0x8d */
|
|
245 { "LDX ", 3, 3, D_ImmediatL, NULL }, /* 0x8e */
|
|
246 { "?????", 0, 2, D_Illegal, NULL }, /* 0x8f */
|
|
247
|
|
248 { "SUBA ", 4, 2, D_Direct, NULL }, /* 0x90 */
|
|
249 { "CMPA ", 4, 2, D_Direct, NULL }, /* 0x91 */
|
|
250 { "SBCA ", 4, 2, D_Direct, NULL }, /* 0x92 */
|
|
251 { "SUBD ", 6, 2, D_Direct, NULL }, /* 0x93 */
|
|
252 { "ANDA ", 4, 2, D_Direct, NULL }, /* 0x94 */
|
|
253 { "BITA ", 4, 2, D_Direct, NULL }, /* 0x95 */
|
|
254 { "LDA ", 4, 2, D_Direct, NULL }, /* 0x96 */
|
|
255 { "STA ", 4, 2, D_Direct, NULL }, /* 0x97 */
|
|
256 { "EORA ", 4, 2, D_Direct, NULL }, /* 0x98 */
|
|
257 { "ADCA ", 4, 2, D_Direct, NULL }, /* 0x99 */
|
|
258 { "ORA ", 4, 2, D_Direct, NULL }, /* 0x9a */
|
|
259 { "ADDA ", 4, 2, D_Direct, NULL }, /* 0x9b */
|
|
260 { "CMPX ", 6, 2, D_Direct, NULL }, /* 0x9c */
|
|
261 { "JSR ", 7, 2, D_Direct, NULL }, /* 0x9d */
|
|
262 { "LDX ", 5, 2, D_Direct, NULL }, /* 0x9e */
|
|
263 { "STX ", 5, 2, D_Direct, NULL }, /* 0x9f */
|
|
264
|
|
265 { "SUBA ", 4, 2, D_Indexed, NULL }, /* 0xa0 */
|
|
266 { "CMPA ", 4, 2, D_Indexed, NULL }, /* 0xa1 */
|
|
267 { "SBCA ", 4, 2, D_Indexed, NULL }, /* 0xa2 */
|
|
268 { "SUBD ", 6, 2, D_Indexed, NULL }, /* 0xa3 */
|
|
269 { "ANDA ", 4, 2, D_Indexed, NULL }, /* 0xa4 */
|
|
270 { "BITA ", 4, 2, D_Indexed, NULL }, /* 0xa5 */
|
|
271 { "LDA ", 4, 2, D_Indexed, NULL }, /* 0xa6 */
|
|
272 { "STA ", 4, 2, D_Indexed, NULL }, /* 0xa7 */
|
|
273 { "EORA ", 4, 2, D_Indexed, NULL }, /* 0xa8 */
|
|
274 { "ADCA ", 4, 2, D_Indexed, NULL }, /* 0xa9 */
|
|
275 { "ORA ", 4, 2, D_Indexed, NULL }, /* 0xaa */
|
|
276 { "ADDA ", 4, 2, D_Indexed, NULL }, /* 0xab */
|
|
277 { "CMPX ", 6, 2, D_Indexed, NULL }, /* 0xac */
|
|
278 { "JSR ", 7, 2, D_Indexed, NULL }, /* 0xad */
|
|
279 { "LDX ", 5, 2, D_Indexed, NULL }, /* 0xae */
|
|
280 { "STX ", 5, 2, D_Indexed, NULL }, /* 0xaf */
|
|
281
|
|
282 { "SUBA ", 5, 3, D_Extended, NULL }, /* 0xb0 */
|
|
283 { "CMPA ", 5, 3, D_Extended, NULL }, /* 0xb1 */
|
|
284 { "SBCA ", 5, 3, D_Extended, NULL }, /* 0xb2 */
|
|
285 { "SUBD ", 7, 3, D_Extended, NULL }, /* 0xb3 */
|
|
286 { "ANDA ", 5, 3, D_Extended, NULL }, /* 0xb4 */
|
|
287 { "BITA ", 5, 3, D_Extended, NULL }, /* 0xb5 */
|
|
288 { "LDA ", 5, 3, D_Extended, NULL }, /* 0xb6 */
|
|
289 { "STA ", 5, 3, D_Extended, NULL }, /* 0xb7 */
|
|
290 { "EORA ", 5, 3, D_Extended, NULL }, /* 0xb8 */
|
|
291 { "ADCA ", 5, 3, D_Extended, NULL }, /* 0xb9 */
|
|
292 { "ORA ", 5, 3, D_Extended, NULL }, /* 0xba */
|
|
293 { "ADDA ", 5, 3, D_Extended, NULL }, /* 0xbb */
|
|
294 { "CMPX ", 7, 3, D_Extended, NULL }, /* 0xbc */
|
|
295 { "JSR ", 8, 3, D_Extended, NULL }, /* 0xbd */
|
|
296 { "LDX ", 6, 3, D_Extended, NULL }, /* 0xbe */
|
|
297 { "STX ", 6, 3, D_Extended, NULL }, /* 0xbf */
|
|
298
|
|
299 { "SUBB ", 2, 2, D_Immediat, NULL }, /* 0xc0 */
|
|
300 { "CMPB ", 2, 2, D_Immediat, NULL }, /* 0xc1 */
|
|
301 { "SBCB ", 2, 2, D_Immediat, NULL }, /* 0xc2 */
|
|
302 { "ADDD ", 4, 3, D_ImmediatL, NULL }, /* 0xc3 */
|
|
303 { "ANDB ", 2, 2, D_Immediat, NULL }, /* 0xc4 */
|
|
304 { "BITB ", 2, 2, D_Immediat, NULL }, /* 0xc5 */
|
|
305 { "LDB ", 2, 2, D_Immediat, NULL }, /* 0xc6 */
|
|
306 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc7 */
|
|
307 { "EORB ", 2, 2, D_Immediat, NULL }, /* 0xc8 */
|
|
308 { "ADCB ", 2, 2, D_Immediat, NULL }, /* 0xc9 */
|
|
309 { "ORB ", 2, 2, D_Immediat, NULL }, /* 0xca */
|
|
310 { "ADDB ", 2, 2, D_Immediat, NULL }, /* 0xcb */
|
|
311 { "LDD ", 3, 3, D_ImmediatL, NULL }, /* 0xcc */
|
|
312 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcd */
|
|
313 { "LDU ", 3, 3, D_ImmediatL, NULL }, /* 0xce */
|
|
314 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcf */
|
|
315
|
|
316 { "SUBB ", 4, 2, D_Direct, NULL }, /* 0xd0 */
|
|
317 { "CMPB ", 4, 2, D_Direct, NULL }, /* 0xd1 */
|
|
318 { "SBCB ", 4, 2, D_Direct, NULL }, /* 0xd2 */
|
|
319 { "ADDD ", 6, 2, D_Direct, NULL }, /* 0xd3 */
|
|
320 { "ANDB ", 4, 2, D_Direct, NULL }, /* 0xd4 */
|
|
321 { "BITB ", 4, 2, D_Direct, NULL }, /* 0xd5 */
|
|
322 { "LDB ", 4, 2, D_Direct, NULL }, /* 0xd6 */
|
|
323 { "STB ", 4, 2, D_Direct, NULL }, /* 0xd7 */
|
|
324 { "EORB ", 4, 2, D_Direct, NULL }, /* 0xd8 */
|
|
325 { "ADCB ", 4, 2, D_Direct, NULL }, /* 0xd9 */
|
|
326 { "ORB ", 4, 2, D_Direct, NULL }, /* 0xda */
|
|
327 { "ADDB ", 4, 2, D_Direct, NULL }, /* 0xdb */
|
|
328 { "LDD ", 5, 2, D_Direct, NULL }, /* 0xdc */
|
|
329 { "STD ", 5, 2, D_Direct, NULL }, /* 0xdd */
|
|
330 { "LDU ", 5, 2, D_Direct, NULL }, /* 0xde */
|
|
331 { "STU ", 5, 2, D_Direct, NULL }, /* 0xdf */
|
|
332
|
|
333 { "SUBB ", 4, 2, D_Indexed, NULL }, /* 0xe0 */
|
|
334 { "CMPB ", 4, 2, D_Indexed, NULL }, /* 0xe1 */
|
|
335 { "SBCB ", 4, 2, D_Indexed, NULL }, /* 0xe2 */
|
|
336 { "ADDD ", 6, 2, D_Indexed, NULL }, /* 0xe3 */
|
|
337 { "ANDB ", 4, 2, D_Indexed, NULL }, /* 0xe4 */
|
|
338 { "BITB ", 4, 2, D_Indexed, NULL }, /* 0xe5 */
|
|
339 { "LDB ", 4, 2, D_Indexed, NULL }, /* 0xe6 */
|
|
340 { "STB ", 4, 2, D_Indexed, NULL }, /* 0xe7 */
|
|
341 { "EORB ", 4, 2, D_Indexed, NULL }, /* 0xe8 */
|
|
342 { "ADCB ", 4, 2, D_Indexed, NULL }, /* 0xe9 */
|
|
343 { "ORB ", 4, 2, D_Indexed, NULL }, /* 0xea */
|
|
344 { "ADDB ", 4, 2, D_Indexed, NULL }, /* 0xeb */
|
|
345 { "LDD ", 5, 2, D_Indexed, NULL }, /* 0xec */
|
|
346 { "STD ", 5, 2, D_Indexed, NULL }, /* 0xed */
|
|
347 { "LDU ", 5, 2, D_Indexed, NULL }, /* 0xee */
|
|
348 { "STU ", 5, 2, D_Indexed, NULL }, /* 0xef */
|
|
349
|
|
350 { "SUBB ", 5, 3, D_Extended, NULL }, /* 0xf0 */
|
|
351 { "CMPB ", 5, 3, D_Extended, NULL }, /* 0xf1 */
|
|
352 { "SBCB ", 5, 3, D_Extended, NULL }, /* 0xf2 */
|
|
353 { "ADDD ", 7, 3, D_Extended, NULL }, /* 0xf3 */
|
|
354 { "ANDB ", 5, 3, D_Extended, NULL }, /* 0xf4 */
|
|
355 { "BITB ", 5, 3, D_Extended, NULL }, /* 0xf5 */
|
|
356 { "LDB ", 5, 3, D_Extended, NULL }, /* 0xf6 */
|
|
357 { "STB ", 5, 3, D_Extended, NULL }, /* 0xf7 */
|
|
358 { "EORB ", 5, 3, D_Extended, NULL }, /* 0xf8 */
|
|
359 { "ADCB ", 5, 3, D_Extended, NULL }, /* 0xf9 */
|
|
360 { "ORB ", 5, 3, D_Extended, NULL }, /* 0xfa */
|
|
361 { "ADDB ", 5, 3, D_Extended, NULL }, /* 0xfb */
|
|
362 { "LDD ", 6, 3, D_Extended, NULL }, /* 0xfc */
|
|
363 { "STD ", 6, 3, D_Extended, NULL }, /* 0xfd */
|
|
364 { "LDU ", 6, 3, D_Extended, NULL }, /* 0xfe */
|
|
365 { "STU ", 6, 3, D_Extended, NULL }, /* 0xff */
|
|
366 };
|
|
367
|
|
368 Opcode optable10[] = {
|
|
369 { "?????", 0, 1, D_Illegal, NULL }, /* 0x00 */
|
|
370 { "?????", 0, 1, D_Illegal, NULL }, /* 0x01 */
|
|
371 { "?????", 0, 1, D_Illegal, NULL }, /* 0x02 */
|
|
372 { "?????", 0, 1, D_Illegal, NULL }, /* 0x03 */
|
|
373 { "?????", 0, 1, D_Illegal, NULL }, /* 0x04 */
|
|
374 { "?????", 0, 1, D_Illegal, NULL }, /* 0x05 */
|
|
375 { "?????", 0, 1, D_Illegal, NULL }, /* 0x06 */
|
|
376 { "?????", 0, 1, D_Illegal, NULL }, /* 0x07 */
|
|
377 { "?????", 0, 1, D_Illegal, NULL }, /* 0x08 */
|
|
378 { "?????", 0, 1, D_Illegal, NULL }, /* 0x09 */
|
|
379 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0a */
|
|
380 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0b */
|
|
381 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0c */
|
|
382 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0d */
|
|
383 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0e */
|
|
384 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0f */
|
|
385
|
|
386 { "?????", 0, 1, D_Illegal, NULL }, /* 0x10 */
|
|
387 { "?????", 0, 1, D_Illegal, NULL }, /* 0x11 */
|
|
388 { "?????", 0, 1, D_Illegal, NULL }, /* 0x12 */
|
|
389 { "?????", 0, 1, D_Illegal, NULL }, /* 0x13 */
|
|
390 { "?????", 0, 1, D_Illegal, NULL }, /* 0x14 */
|
|
391 { "?????", 0, 1, D_Illegal, NULL }, /* 0x15 */
|
|
392 { "?????", 0, 1, D_Illegal, NULL }, /* 0x16 */
|
|
393 { "?????", 0, 1, D_Illegal, NULL }, /* 0x17 */
|
|
394 { "?????", 0, 1, D_Illegal, NULL }, /* 0x18 */
|
|
395 { "?????", 0, 1, D_Illegal, NULL }, /* 0x19 */
|
|
396 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1a */
|
|
397 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1b */
|
|
398 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1c */
|
|
399 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1d */
|
|
400 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1e */
|
|
401 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1f */
|
|
402
|
|
403 { "?????", 0, 1, D_Illegal, NULL }, /* 0x20 */
|
|
404 { "LBRN ", 5, 4, D_RelativeL, NULL }, /* 0x21 */
|
|
405 { "LBHI ", 5, 4, D_RelativeL, NULL }, /* 0x22 */
|
|
406 { "LBLS ", 5, 4, D_RelativeL, NULL }, /* 0x23 */
|
|
407 { "LBCC ", 5, 4, D_RelativeL, NULL }, /* 0x24 */
|
|
408 { "LBCS ", 5, 4, D_RelativeL, NULL }, /* 0x25 */
|
|
409 { "LBNE ", 5, 4, D_RelativeL, NULL }, /* 0x26 */
|
|
410 { "LBEQ ", 5, 4, D_RelativeL, NULL }, /* 0x27 */
|
|
411 { "LBVC ", 5, 4, D_RelativeL, NULL }, /* 0x28 */
|
|
412 { "LBVS ", 5, 4, D_RelativeL, NULL }, /* 0x29 */
|
|
413 { "LBPL ", 5, 4, D_RelativeL, NULL }, /* 0x2a */
|
|
414 { "LBMI ", 5, 4, D_RelativeL, NULL }, /* 0x2b */
|
|
415 { "LBGE ", 5, 4, D_RelativeL, NULL }, /* 0x2c */
|
|
416 { "LBLT ", 5, 4, D_RelativeL, NULL }, /* 0x2d */
|
|
417 { "LBGT ", 5, 4, D_RelativeL, NULL }, /* 0x2e */
|
|
418 { "LBLE ", 5, 4, D_RelativeL, NULL }, /* 0x2f */
|
|
419
|
|
420 { "?????", 0, 1, D_Illegal, NULL }, /* 0x30 */
|
|
421 { "?????", 0, 1, D_Illegal, NULL }, /* 0x31 */
|
|
422 { "?????", 0, 1, D_Illegal, NULL }, /* 0x32 */
|
|
423 { "?????", 0, 1, D_Illegal, NULL }, /* 0x33 */
|
|
424 { "?????", 0, 1, D_Illegal, NULL }, /* 0x34 */
|
|
425 { "?????", 0, 1, D_Illegal, NULL }, /* 0x35 */
|
|
426 { "?????", 0, 1, D_Illegal, NULL }, /* 0x36 */
|
|
427 { "?????", 0, 1, D_Illegal, NULL }, /* 0x37 */
|
|
428 { "?????", 0, 1, D_Illegal, NULL }, /* 0x38 */
|
|
429 { "?????", 0, 1, D_Illegal, NULL }, /* 0x39 */
|
|
430 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3a */
|
|
431 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3b */
|
|
432 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3c */
|
|
433 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3d */
|
|
434 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3e */
|
|
435 /* Fake SWI2 as an OS9 F$xxx system call */
|
|
436 { "OS9 ", 20, 3, D_OS9, NULL }, /* 0x3f */
|
|
437
|
|
438 { "?????", 0, 1, D_Illegal, NULL }, /* 0x40 */
|
|
439 { "?????", 0, 1, D_Illegal, NULL }, /* 0x41 */
|
|
440 { "?????", 0, 1, D_Illegal, NULL }, /* 0x42 */
|
|
441 { "?????", 0, 1, D_Illegal, NULL }, /* 0x43 */
|
|
442 { "?????", 0, 1, D_Illegal, NULL }, /* 0x44 */
|
|
443 { "?????", 0, 1, D_Illegal, NULL }, /* 0x45 */
|
|
444 { "?????", 0, 1, D_Illegal, NULL }, /* 0x46 */
|
|
445 { "?????", 0, 1, D_Illegal, NULL }, /* 0x47 */
|
|
446 { "?????", 0, 1, D_Illegal, NULL }, /* 0x48 */
|
|
447 { "?????", 0, 1, D_Illegal, NULL }, /* 0x49 */
|
|
448 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4a */
|
|
449 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4b */
|
|
450 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4c */
|
|
451 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4d */
|
|
452 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4e */
|
|
453 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4f */
|
|
454
|
|
455 { "?????", 0, 1, D_Illegal, NULL }, /* 0x50 */
|
|
456 { "?????", 0, 1, D_Illegal, NULL }, /* 0x51 */
|
|
457 { "?????", 0, 1, D_Illegal, NULL }, /* 0x52 */
|
|
458 { "?????", 0, 1, D_Illegal, NULL }, /* 0x53 */
|
|
459 { "?????", 0, 1, D_Illegal, NULL }, /* 0x54 */
|
|
460 { "?????", 0, 1, D_Illegal, NULL }, /* 0x55 */
|
|
461 { "?????", 0, 1, D_Illegal, NULL }, /* 0x56 */
|
|
462 { "?????", 0, 1, D_Illegal, NULL }, /* 0x57 */
|
|
463 { "?????", 0, 1, D_Illegal, NULL }, /* 0x58 */
|
|
464 { "?????", 0, 1, D_Illegal, NULL }, /* 0x59 */
|
|
465 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5a */
|
|
466 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5b */
|
|
467 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5c */
|
|
468 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5d */
|
|
469 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5e */
|
|
470 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5f */
|
|
471
|
|
472 { "?????", 0, 1, D_Illegal, NULL }, /* 0x60 */
|
|
473 { "?????", 0, 1, D_Illegal, NULL }, /* 0x61 */
|
|
474 { "?????", 0, 1, D_Illegal, NULL }, /* 0x62 */
|
|
475 { "?????", 0, 1, D_Illegal, NULL }, /* 0x63 */
|
|
476 { "?????", 0, 1, D_Illegal, NULL }, /* 0x64 */
|
|
477 { "?????", 0, 1, D_Illegal, NULL }, /* 0x65 */
|
|
478 { "?????", 0, 1, D_Illegal, NULL }, /* 0x66 */
|
|
479 { "?????", 0, 1, D_Illegal, NULL }, /* 0x67 */
|
|
480 { "?????", 0, 1, D_Illegal, NULL }, /* 0x68 */
|
|
481 { "?????", 0, 1, D_Illegal, NULL }, /* 0x69 */
|
|
482 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6a */
|
|
483 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6b */
|
|
484 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6c */
|
|
485 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6d */
|
|
486 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6e */
|
|
487 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6f */
|
|
488
|
|
489 { "?????", 0, 1, D_Illegal, NULL }, /* 0x70 */
|
|
490 { "?????", 0, 1, D_Illegal, NULL }, /* 0x71 */
|
|
491 { "?????", 0, 1, D_Illegal, NULL }, /* 0x72 */
|
|
492 { "?????", 0, 1, D_Illegal, NULL }, /* 0x73 */
|
|
493 { "?????", 0, 1, D_Illegal, NULL }, /* 0x74 */
|
|
494 { "?????", 0, 1, D_Illegal, NULL }, /* 0x75 */
|
|
495 { "?????", 0, 1, D_Illegal, NULL }, /* 0x76 */
|
|
496 { "?????", 0, 1, D_Illegal, NULL }, /* 0x77 */
|
|
497 { "?????", 0, 1, D_Illegal, NULL }, /* 0x78 */
|
|
498 { "?????", 0, 1, D_Illegal, NULL }, /* 0x79 */
|
|
499 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7a */
|
|
500 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7b */
|
|
501 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7c */
|
|
502 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7d */
|
|
503 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7e */
|
|
504 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7f */
|
|
505
|
|
506 { "?????", 0, 1, D_Illegal, NULL }, /* 0x80 */
|
|
507 { "?????", 0, 1, D_Illegal, NULL }, /* 0x81 */
|
|
508 { "?????", 0, 1, D_Illegal, NULL }, /* 0x82 */
|
|
509 { "CMPD ", 5, 4, D_ImmediatL, NULL }, /* 0x83 */
|
|
510 { "?????", 0, 1, D_Illegal, NULL }, /* 0x84 */
|
|
511 { "?????", 0, 1, D_Illegal, NULL }, /* 0x85 */
|
|
512 { "?????", 0, 1, D_Illegal, NULL }, /* 0x86 */
|
|
513 { "?????", 0, 1, D_Illegal, NULL }, /* 0x87 */
|
|
514 { "?????", 0, 1, D_Illegal, NULL }, /* 0x88 */
|
|
515 { "?????", 0, 1, D_Illegal, NULL }, /* 0x89 */
|
|
516 { "?????", 0, 1, D_Illegal, NULL }, /* 0x8a */
|
|
517 { "?????", 0, 1, D_Illegal, NULL }, /* 0x8b */
|
|
518 { "CMPY ", 5, 4, D_ImmediatL, NULL }, /* 0x8c */
|
|
519 { "?????", 0, 1, D_Illegal, NULL }, /* 0x8d */
|
|
520 { "LDY ", 4, 4, D_ImmediatL, NULL }, /* 0x8e */
|
|
521 { "?????", 0, 1, D_Illegal, NULL }, /* 0x8f */
|
|
522
|
|
523 { "?????", 0, 1, D_Illegal, NULL }, /* 0x90 */
|
|
524 { "?????", 0, 1, D_Illegal, NULL }, /* 0x91 */
|
|
525 { "?????", 0, 1, D_Illegal, NULL }, /* 0x92 */
|
|
526 { "CMPD ", 7, 3, D_Direct, NULL }, /* 0x93 */
|
|
527 { "?????", 0, 1, D_Illegal, NULL }, /* 0x94 */
|
|
528 { "?????", 0, 1, D_Illegal, NULL }, /* 0x95 */
|
|
529 { "?????", 0, 1, D_Illegal, NULL }, /* 0x96 */
|
|
530 { "?????", 0, 1, D_Illegal, NULL }, /* 0x97 */
|
|
531 { "?????", 0, 1, D_Illegal, NULL }, /* 0x98 */
|
|
532 { "?????", 0, 1, D_Illegal, NULL }, /* 0x99 */
|
|
533 { "?????", 0, 1, D_Illegal, NULL }, /* 0x9a */
|
|
534 { "?????", 0, 1, D_Illegal, NULL }, /* 0x9b */
|
|
535 { "CMPY ", 7, 3, D_Direct, NULL }, /* 0x9c */
|
|
536 { "?????", 0, 1, D_Illegal, NULL }, /* 0x9d */
|
|
537 { "LDY ", 6, 3, D_Direct, NULL }, /* 0x9e */
|
|
538 { "STY ", 6, 3, D_Direct, NULL }, /* 0x9f */
|
|
539
|
|
540 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa0 */
|
|
541 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa1 */
|
|
542 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa2 */
|
|
543 { "CMPD ", 7, 3, D_Indexed, NULL }, /* 0xa3 */
|
|
544 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa4 */
|
|
545 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa5 */
|
|
546 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa6 */
|
|
547 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa7 */
|
|
548 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa8 */
|
|
549 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa9 */
|
|
550 { "?????", 0, 1, D_Illegal, NULL }, /* 0xaa */
|
|
551 { "?????", 0, 1, D_Illegal, NULL }, /* 0xab */
|
|
552 { "CMPY ", 7, 3, D_Indexed, NULL }, /* 0xac */
|
|
553 { "?????", 0, 1, D_Illegal, NULL }, /* 0xad */
|
|
554 { "LDY ", 6, 3, D_Indexed, NULL }, /* 0xae */
|
|
555 { "STY ", 6, 3, D_Indexed, NULL }, /* 0xaf */
|
|
556
|
|
557 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb0 */
|
|
558 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb1 */
|
|
559 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb2 */
|
|
560 { "CMPD ", 8, 4, D_Extended, NULL }, /* 0xb3 */
|
|
561 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb4 */
|
|
562 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb5 */
|
|
563 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb6 */
|
|
564 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb7 */
|
|
565 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb8 */
|
|
566 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb9 */
|
|
567 { "?????", 0, 1, D_Illegal, NULL }, /* 0xba */
|
|
568 { "?????", 0, 1, D_Illegal, NULL }, /* 0xbb */
|
|
569 { "CMPY ", 8, 4, D_Extended, NULL }, /* 0xbc */
|
|
570 { "?????", 0, 1, D_Illegal, NULL }, /* 0xbd */
|
|
571 { "LDY ", 7, 4, D_Extended, NULL }, /* 0xbe */
|
|
572 { "STY ", 7, 4, D_Extended, NULL }, /* 0xbf */
|
|
573
|
|
574 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc0 */
|
|
575 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc1 */
|
|
576 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc2 */
|
|
577 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc3 */
|
|
578 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc4 */
|
|
579 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc5 */
|
|
580 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc6 */
|
|
581 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc7 */
|
|
582 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc8 */
|
|
583 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc9 */
|
|
584 { "?????", 0, 1, D_Illegal, NULL }, /* 0xca */
|
|
585 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcb */
|
|
586 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcc */
|
|
587 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcd */
|
|
588 { "LDS ", 4, 4, D_ImmediatL, NULL }, /* 0xce */
|
|
589 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcf */
|
|
590
|
|
591 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd0 */
|
|
592 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd1 */
|
|
593 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd2 */
|
|
594 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd3 */
|
|
595 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd4 */
|
|
596 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd5 */
|
|
597 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd6 */
|
|
598 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd7 */
|
|
599 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd8 */
|
|
600 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd9 */
|
|
601 { "?????", 0, 1, D_Illegal, NULL }, /* 0xda */
|
|
602 { "?????", 0, 1, D_Illegal, NULL }, /* 0xdb */
|
|
603 { "?????", 0, 1, D_Illegal, NULL }, /* 0xdc */
|
|
604 { "?????", 0, 1, D_Illegal, NULL }, /* 0xdd */
|
|
605 { "LDS ", 6, 3, D_Direct, NULL }, /* 0xde */
|
|
606 { "STS ", 6, 3, D_Direct, NULL }, /* 0xdf */
|
|
607
|
|
608 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe0 */
|
|
609 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe1 */
|
|
610 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe2 */
|
|
611 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe3 */
|
|
612 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe4 */
|
|
613 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe5 */
|
|
614 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe6 */
|
|
615 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe7 */
|
|
616 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe8 */
|
|
617 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe9 */
|
|
618 { "?????", 0, 1, D_Illegal, NULL }, /* 0xea */
|
|
619 { "?????", 0, 1, D_Illegal, NULL }, /* 0xeb */
|
|
620 { "?????", 0, 1, D_Illegal, NULL }, /* 0xec */
|
|
621 { "?????", 0, 1, D_Illegal, NULL }, /* 0xed */
|
|
622 { "LDS ", 6, 3, D_Indexed, NULL }, /* 0xee */
|
|
623 { "STS ", 6, 3, D_Indexed, NULL }, /* 0xef */
|
|
624
|
|
625 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf0 */
|
|
626 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf1 */
|
|
627 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf2 */
|
|
628 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf3 */
|
|
629 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf4 */
|
|
630 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf5 */
|
|
631 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf6 */
|
|
632 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf7 */
|
|
633 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf8 */
|
|
634 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf9 */
|
|
635 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfa */
|
|
636 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfb */
|
|
637 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfc */
|
|
638 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfd */
|
|
639 { "LDS ", 7, 4, D_Extended, NULL }, /* 0xfe */
|
|
640 { "STS ", 7, 4, D_Extended, NULL }, /* 0xff */
|
|
641
|
|
642 };
|
|
643
|
|
644
|
|
645 Opcode optable11[] = {
|
|
646 { "?????", 0, 1, D_Illegal, NULL }, /* 0x00 */
|
|
647 { "?????", 0, 1, D_Illegal, NULL }, /* 0x01 */
|
|
648 { "?????", 0, 1, D_Illegal, NULL }, /* 0x02 */
|
|
649 { "?????", 0, 1, D_Illegal, NULL }, /* 0x03 */
|
|
650 { "?????", 0, 1, D_Illegal, NULL }, /* 0x04 */
|
|
651 { "?????", 0, 1, D_Illegal, NULL }, /* 0x05 */
|
|
652 { "?????", 0, 1, D_Illegal, NULL }, /* 0x06 */
|
|
653 { "?????", 0, 1, D_Illegal, NULL }, /* 0x07 */
|
|
654 { "?????", 0, 1, D_Illegal, NULL }, /* 0x08 */
|
|
655 { "?????", 0, 1, D_Illegal, NULL }, /* 0x09 */
|
|
656 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0a */
|
|
657 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0b */
|
|
658 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0c */
|
|
659 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0d */
|
|
660 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0e */
|
|
661 { "?????", 0, 1, D_Illegal, NULL }, /* 0x0f */
|
|
662
|
|
663 { "?????", 0, 1, D_Illegal, NULL }, /* 0x10 */
|
|
664 { "?????", 0, 1, D_Illegal, NULL }, /* 0x11 */
|
|
665 { "?????", 0, 1, D_Illegal, NULL }, /* 0x12 */
|
|
666 { "?????", 0, 1, D_Illegal, NULL }, /* 0x13 */
|
|
667 { "?????", 0, 1, D_Illegal, NULL }, /* 0x14 */
|
|
668 { "?????", 0, 1, D_Illegal, NULL }, /* 0x15 */
|
|
669 { "?????", 0, 1, D_Illegal, NULL }, /* 0x16 */
|
|
670 { "?????", 0, 1, D_Illegal, NULL }, /* 0x17 */
|
|
671 { "?????", 0, 1, D_Illegal, NULL }, /* 0x18 */
|
|
672 { "?????", 0, 1, D_Illegal, NULL }, /* 0x19 */
|
|
673 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1a */
|
|
674 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1b */
|
|
675 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1c */
|
|
676 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1d */
|
|
677 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1e */
|
|
678 { "?????", 0, 1, D_Illegal, NULL }, /* 0x1f */
|
|
679
|
|
680 { "?????", 0, 1, D_Illegal, NULL }, /* 0x20 */
|
|
681 { "?????", 0, 1, D_Illegal, NULL }, /* 0x21 */
|
|
682 { "?????", 0, 1, D_Illegal, NULL }, /* 0x22 */
|
|
683 { "?????", 0, 1, D_Illegal, NULL }, /* 0x23 */
|
|
684 { "?????", 0, 1, D_Illegal, NULL }, /* 0x24 */
|
|
685 { "?????", 0, 1, D_Illegal, NULL }, /* 0x25 */
|
|
686 { "?????", 0, 1, D_Illegal, NULL }, /* 0x26 */
|
|
687 { "?????", 0, 1, D_Illegal, NULL }, /* 0x27 */
|
|
688 { "?????", 0, 1, D_Illegal, NULL }, /* 0x28 */
|
|
689 { "?????", 0, 1, D_Illegal, NULL }, /* 0x29 */
|
|
690 { "?????", 0, 1, D_Illegal, NULL }, /* 0x2a */
|
|
691 { "?????", 0, 1, D_Illegal, NULL }, /* 0x2b */
|
|
692 { "?????", 0, 1, D_Illegal, NULL }, /* 0x2c */
|
|
693 { "?????", 0, 1, D_Illegal, NULL }, /* 0x2d */
|
|
694 { "?????", 0, 1, D_Illegal, NULL }, /* 0x2e */
|
|
695 { "?????", 0, 1, D_Illegal, NULL }, /* 0x2f */
|
|
696
|
|
697 { "?????", 0, 1, D_Illegal, NULL }, /* 0x30 */
|
|
698 { "?????", 0, 1, D_Illegal, NULL }, /* 0x31 */
|
|
699 { "?????", 0, 1, D_Illegal, NULL }, /* 0x32 */
|
|
700 { "?????", 0, 1, D_Illegal, NULL }, /* 0x33 */
|
|
701 { "?????", 0, 1, D_Illegal, NULL }, /* 0x34 */
|
|
702 { "?????", 0, 1, D_Illegal, NULL }, /* 0x35 */
|
|
703 { "?????", 0, 1, D_Illegal, NULL }, /* 0x36 */
|
|
704 { "?????", 0, 1, D_Illegal, NULL }, /* 0x37 */
|
|
705 { "?????", 0, 1, D_Illegal, NULL }, /* 0x38 */
|
|
706 { "?????", 0, 1, D_Illegal, NULL }, /* 0x39 */
|
|
707 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3a */
|
|
708 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3b */
|
|
709 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3c */
|
|
710 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3d */
|
|
711 { "?????", 0, 1, D_Illegal, NULL }, /* 0x3e */
|
|
712 { "SWI3 ", 20, 2, D_Inherent, NULL }, /* 0x3f */
|
|
713
|
|
714 { "?????", 0, 1, D_Illegal, NULL }, /* 0x40 */
|
|
715 { "?????", 0, 1, D_Illegal, NULL }, /* 0x41 */
|
|
716 { "?????", 0, 1, D_Illegal, NULL }, /* 0x42 */
|
|
717 { "?????", 0, 1, D_Illegal, NULL }, /* 0x43 */
|
|
718 { "?????", 0, 1, D_Illegal, NULL }, /* 0x44 */
|
|
719 { "?????", 0, 1, D_Illegal, NULL }, /* 0x45 */
|
|
720 { "?????", 0, 1, D_Illegal, NULL }, /* 0x46 */
|
|
721 { "?????", 0, 1, D_Illegal, NULL }, /* 0x47 */
|
|
722 { "?????", 0, 1, D_Illegal, NULL }, /* 0x48 */
|
|
723 { "?????", 0, 1, D_Illegal, NULL }, /* 0x49 */
|
|
724 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4a */
|
|
725 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4b */
|
|
726 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4c */
|
|
727 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4d */
|
|
728 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4e */
|
|
729 { "?????", 0, 1, D_Illegal, NULL }, /* 0x4f */
|
|
730
|
|
731 { "?????", 0, 1, D_Illegal, NULL }, /* 0x50 */
|
|
732 { "?????", 0, 1, D_Illegal, NULL }, /* 0x51 */
|
|
733 { "?????", 0, 1, D_Illegal, NULL }, /* 0x52 */
|
|
734 { "?????", 0, 1, D_Illegal, NULL }, /* 0x53 */
|
|
735 { "?????", 0, 1, D_Illegal, NULL }, /* 0x54 */
|
|
736 { "?????", 0, 1, D_Illegal, NULL }, /* 0x55 */
|
|
737 { "?????", 0, 1, D_Illegal, NULL }, /* 0x56 */
|
|
738 { "?????", 0, 1, D_Illegal, NULL }, /* 0x57 */
|
|
739 { "?????", 0, 1, D_Illegal, NULL }, /* 0x58 */
|
|
740 { "?????", 0, 1, D_Illegal, NULL }, /* 0x59 */
|
|
741 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5a */
|
|
742 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5b */
|
|
743 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5c */
|
|
744 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5d */
|
|
745 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5e */
|
|
746 { "?????", 0, 1, D_Illegal, NULL }, /* 0x5f */
|
|
747
|
|
748 { "?????", 0, 1, D_Illegal, NULL }, /* 0x60 */
|
|
749 { "?????", 0, 1, D_Illegal, NULL }, /* 0x61 */
|
|
750 { "?????", 0, 1, D_Illegal, NULL }, /* 0x62 */
|
|
751 { "?????", 0, 1, D_Illegal, NULL }, /* 0x63 */
|
|
752 { "?????", 0, 1, D_Illegal, NULL }, /* 0x64 */
|
|
753 { "?????", 0, 1, D_Illegal, NULL }, /* 0x65 */
|
|
754 { "?????", 0, 1, D_Illegal, NULL }, /* 0x66 */
|
|
755 { "?????", 0, 1, D_Illegal, NULL }, /* 0x67 */
|
|
756 { "?????", 0, 1, D_Illegal, NULL }, /* 0x68 */
|
|
757 { "?????", 0, 1, D_Illegal, NULL }, /* 0x69 */
|
|
758 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6a */
|
|
759 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6b */
|
|
760 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6c */
|
|
761 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6d */
|
|
762 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6e */
|
|
763 { "?????", 0, 1, D_Illegal, NULL }, /* 0x6f */
|
|
764
|
|
765 { "?????", 0, 1, D_Illegal, NULL }, /* 0x70 */
|
|
766 { "?????", 0, 1, D_Illegal, NULL }, /* 0x71 */
|
|
767 { "?????", 0, 1, D_Illegal, NULL }, /* 0x72 */
|
|
768 { "?????", 0, 1, D_Illegal, NULL }, /* 0x73 */
|
|
769 { "?????", 0, 1, D_Illegal, NULL }, /* 0x74 */
|
|
770 { "?????", 0, 1, D_Illegal, NULL }, /* 0x75 */
|
|
771 { "?????", 0, 1, D_Illegal, NULL }, /* 0x76 */
|
|
772 { "?????", 0, 1, D_Illegal, NULL }, /* 0x77 */
|
|
773 { "?????", 0, 1, D_Illegal, NULL }, /* 0x78 */
|
|
774 { "?????", 0, 1, D_Illegal, NULL }, /* 0x79 */
|
|
775 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7a */
|
|
776 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7b */
|
|
777 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7c */
|
|
778 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7d */
|
|
779 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7e */
|
|
780 { "?????", 0, 1, D_Illegal, NULL }, /* 0x7f */
|
|
781
|
|
782 { "?????", 0, 1, D_Illegal, NULL }, /* 0x80 */
|
|
783 { "?????", 0, 1, D_Illegal, NULL }, /* 0x81 */
|
|
784 { "?????", 0, 1, D_Illegal, NULL }, /* 0x82 */
|
|
785 { "CMPU ", 5, 4, D_ImmediatL, NULL }, /* 0x83 */
|
|
786 { "?????", 0, 1, D_Illegal, NULL }, /* 0x84 */
|
|
787 { "?????", 0, 1, D_Illegal, NULL }, /* 0x85 */
|
|
788 { "?????", 0, 1, D_Illegal, NULL }, /* 0x86 */
|
|
789 { "?????", 0, 1, D_Illegal, NULL }, /* 0x87 */
|
|
790 { "?????", 0, 1, D_Illegal, NULL }, /* 0x88 */
|
|
791 { "?????", 0, 1, D_Illegal, NULL }, /* 0x89 */
|
|
792 { "?????", 0, 1, D_Illegal, NULL }, /* 0x8a */
|
|
793 { "?????", 0, 1, D_Illegal, NULL }, /* 0x8b */
|
|
794 { "CMPS ", 5, 4, D_ImmediatL, NULL }, /* 0x8c */
|
|
795 { "?????", 0, 1, D_Illegal, NULL }, /* 0x8d */
|
|
796 { "?????", 0, 1, D_Illegal, NULL }, /* 0x8e */
|
|
797 { "?????", 0, 1, D_Illegal, NULL }, /* 0x8f */
|
|
798
|
|
799 { "?????", 0, 1, D_Illegal, NULL }, /* 0x90 */
|
|
800 { "?????", 0, 1, D_Illegal, NULL }, /* 0x91 */
|
|
801 { "?????", 0, 1, D_Illegal, NULL }, /* 0x92 */
|
|
802 { "CMPU ", 7, 3, D_Direct, NULL }, /* 0x93 */
|
|
803 { "?????", 0, 1, D_Illegal, NULL }, /* 0x94 */
|
|
804 { "?????", 0, 1, D_Illegal, NULL }, /* 0x95 */
|
|
805 { "?????", 0, 1, D_Illegal, NULL }, /* 0x96 */
|
|
806 { "?????", 0, 1, D_Illegal, NULL }, /* 0x97 */
|
|
807 { "?????", 0, 1, D_Illegal, NULL }, /* 0x98 */
|
|
808 { "?????", 0, 1, D_Illegal, NULL }, /* 0x99 */
|
|
809 { "?????", 0, 1, D_Illegal, NULL }, /* 0x9a */
|
|
810 { "?????", 0, 1, D_Illegal, NULL }, /* 0x9b */
|
|
811 { "CMPS ", 7, 3, D_Direct, NULL }, /* 0x9c */
|
|
812 { "?????", 0, 1, D_Illegal, NULL }, /* 0x9d */
|
|
813 { "?????", 0, 1, D_Illegal, NULL }, /* 0x9e */
|
|
814 { "?????", 0, 1, D_Illegal, NULL }, /* 0x9f */
|
|
815
|
|
816 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa0 */
|
|
817 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa1 */
|
|
818 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa2 */
|
|
819 { "CMPU ", 7, 3, D_Indexed, NULL }, /* 0xa3 */
|
|
820 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa4 */
|
|
821 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa5 */
|
|
822 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa6 */
|
|
823 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa7 */
|
|
824 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa8 */
|
|
825 { "?????", 0, 1, D_Illegal, NULL }, /* 0xa9 */
|
|
826 { "?????", 0, 1, D_Illegal, NULL }, /* 0xaa */
|
|
827 { "?????", 0, 1, D_Illegal, NULL }, /* 0xab */
|
|
828 { "CMPS ", 7, 3, D_Indexed, NULL }, /* 0xac */
|
|
829 { "?????", 0, 1, D_Illegal, NULL }, /* 0xad */
|
|
830 { "?????", 0, 1, D_Illegal, NULL }, /* 0xae */
|
|
831 { "?????", 0, 1, D_Illegal, NULL }, /* 0xaf */
|
|
832
|
|
833 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb0 */
|
|
834 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb1 */
|
|
835 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb2 */
|
|
836 { "CMPU ", 8, 4, D_Extended, NULL }, /* 0xb3 */
|
|
837 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb4 */
|
|
838 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb5 */
|
|
839 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb6 */
|
|
840 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb7 */
|
|
841 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb8 */
|
|
842 { "?????", 0, 1, D_Illegal, NULL }, /* 0xb9 */
|
|
843 { "?????", 0, 1, D_Illegal, NULL }, /* 0xba */
|
|
844 { "?????", 0, 1, D_Illegal, NULL }, /* 0xbb */
|
|
845 { "CMPS ", 8, 4, D_Extended, NULL }, /* 0xbc */
|
|
846 { "?????", 0, 1, D_Illegal, NULL }, /* 0xbd */
|
|
847 { "?????", 0, 1, D_Illegal, NULL }, /* 0xbe */
|
|
848 { "?????", 0, 1, D_Illegal, NULL }, /* 0xbf */
|
|
849
|
|
850 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc0 */
|
|
851 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc1 */
|
|
852 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc2 */
|
|
853 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc3 */
|
|
854 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc4 */
|
|
855 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc5 */
|
|
856 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc6 */
|
|
857 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc7 */
|
|
858 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc8 */
|
|
859 { "?????", 0, 1, D_Illegal, NULL }, /* 0xc9 */
|
|
860 { "?????", 0, 1, D_Illegal, NULL }, /* 0xca */
|
|
861 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcb */
|
|
862 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcc */
|
|
863 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcd */
|
|
864 { "?????", 0, 1, D_Illegal, NULL }, /* 0xce */
|
|
865 { "?????", 0, 1, D_Illegal, NULL }, /* 0xcf */
|
|
866
|
|
867 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd0 */
|
|
868 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd1 */
|
|
869 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd2 */
|
|
870 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd3 */
|
|
871 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd4 */
|
|
872 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd5 */
|
|
873 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd6 */
|
|
874 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd7 */
|
|
875 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd8 */
|
|
876 { "?????", 0, 1, D_Illegal, NULL }, /* 0xd9 */
|
|
877 { "?????", 0, 1, D_Illegal, NULL }, /* 0xda */
|
|
878 { "?????", 0, 1, D_Illegal, NULL }, /* 0xdb */
|
|
879 { "?????", 0, 1, D_Illegal, NULL }, /* 0xdc */
|
|
880 { "?????", 0, 1, D_Illegal, NULL }, /* 0xdd */
|
|
881 { "?????", 0, 1, D_Illegal, NULL }, /* 0xde */
|
|
882 { "?????", 0, 1, D_Illegal, NULL }, /* 0xdf */
|
|
883
|
|
884 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe0 */
|
|
885 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe1 */
|
|
886 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe2 */
|
|
887 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe3 */
|
|
888 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe4 */
|
|
889 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe5 */
|
|
890 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe6 */
|
|
891 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe7 */
|
|
892 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe8 */
|
|
893 { "?????", 0, 1, D_Illegal, NULL }, /* 0xe9 */
|
|
894 { "?????", 0, 1, D_Illegal, NULL }, /* 0xea */
|
|
895 { "?????", 0, 1, D_Illegal, NULL }, /* 0xeb */
|
|
896 { "?????", 0, 1, D_Illegal, NULL }, /* 0xec */
|
|
897 { "?????", 0, 1, D_Illegal, NULL }, /* 0xed */
|
|
898 { "?????", 0, 1, D_Illegal, NULL }, /* 0xee */
|
|
899 { "?????", 0, 1, D_Illegal, NULL }, /* 0xef */
|
|
900
|
|
901 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf0 */
|
|
902 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf1 */
|
|
903 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf2 */
|
|
904 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf3 */
|
|
905 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf4 */
|
|
906 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf5 */
|
|
907 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf6 */
|
|
908 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf7 */
|
|
909 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf8 */
|
|
910 { "?????", 0, 1, D_Illegal, NULL }, /* 0xf9 */
|
|
911 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfa */
|
|
912 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfb */
|
|
913 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfc */
|
|
914 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfd */
|
|
915 { "?????", 0, 1, D_Illegal, NULL }, /* 0xfe */
|
|
916 { "?????", 0, 1, D_Illegal, NULL }, /* 0xff */
|
|
917 };
|
|
918
|
|
919 int iotable[32] = {
|
|
920 0x0000,
|
|
921 0x0001,
|
|
922 0x0002,
|
|
923 0x0003,
|
|
924 0x0008,
|
|
925 0x0009,
|
|
926 0x000a,
|
|
927 0x000b,
|
|
928 0x000c,
|
|
929 0x000d,
|
|
930 0x000e,
|
|
931 0x0010,
|
|
932 0x0011,
|
|
933 0x0012,
|
|
934 0x0013,
|
|
935 0x0014,
|
|
936 0x8000,
|
|
937 0x8001,
|
|
938 0x8002,
|
|
939 0x8003,
|
|
940 0x8004,
|
|
941 0x8005,
|
|
942 0x8006,
|
|
943 0x8007,
|
|
944 0x8008,
|
|
945 0x8009,
|
|
946 0x800a,
|
|
947 0x800b,
|
|
948 0x800c,
|
|
949 0x800d,
|
|
950 0x800e,
|
|
951 0x800f,
|
|
952 };
|
|
953
|
|
954 char *iocomment[32] = {
|
|
955 "Data direction register port 1",
|
|
956 "Data direction register port 2",
|
|
957 "I/O register port 1",
|
|
958 "I/O register port 2",
|
|
959 "Timer control and status",
|
|
960 "Counter high byte",
|
|
961 "Counter low byte",
|
|
962 "Output compare high byte",
|
|
963 "Output compare low byte",
|
|
964 "Input capture high byte",
|
|
965 "Input capture low byte",
|
|
966 "Serial rate and mode register",
|
|
967 "Serial control and status register",
|
|
968 "Serial receiver data register",
|
|
969 "Serial transmit data register",
|
|
970 "Ram control register",
|
|
971 "Modem port 0",
|
|
972 "Modem port 1",
|
|
973 "Modem port 2",
|
|
974 "Modem port 3",
|
|
975 "Modem port 4",
|
|
976 "Modem port 5",
|
|
977 "Modem port 6",
|
|
978 "Modem port 7",
|
|
979 "Modem port 8",
|
|
980 "Modem port 9",
|
|
981 "Modem port 10",
|
|
982 "Modem port 11",
|
|
983 "Modem port 12",
|
|
984 "Modem port 13",
|
|
985 "Modem port 14",
|
|
986 "Modem port 15",
|
|
987 };
|
|
988
|
|
989 char *Inter_Register[16]={"D","X","Y","U","S","PC","??","??","A","B","CC","DP","??","??","??","??"};
|
|
990
|
|
991 char *Indexed_Register[4]={"X","Y","U","S"};
|
|
992
|
|
993 int lastio = 32;
|
|
994
|
|
995 #pragma argsused
|
|
996 int D_Illegal(op, code, pc, suffix)
|
|
997 Opcode *op;
|
|
998 int code;
|
|
999 int pc;
|
|
1000 char *suffix;
|
|
1001 {
|
|
1002 fprintf(fp,"%0.2X %s%s", code, suffix, op->name);
|
|
1003 return op->bytes;
|
|
1004 }
|
|
1005
|
|
1006 #pragma argsused
|
|
1007 int D_Direct(op, code, pc, suffix)
|
|
1008 Opcode *op;
|
|
1009 int code;
|
|
1010 int pc;
|
|
1011 char *suffix;
|
|
1012 {
|
|
1013 int offset;
|
|
1014
|
|
1015 offset = prog[pc+1];
|
|
1016 fprintf(fp,"%0.2X %0.2X %s%s $%0.2X",
|
|
1017 code, offset, suffix, op->name, offset);
|
|
1018 return op->bytes;
|
|
1019 }
|
|
1020
|
|
1021 #pragma argsused
|
|
1022 int D_Page10(op, code, pc, suffix)
|
|
1023 Opcode *op;
|
|
1024 int code;
|
|
1025 int pc;
|
|
1026 char *suffix;
|
|
1027 {
|
|
1028 fprintf(fp,"10 ");
|
|
1029 code = prog[pc+1];
|
|
1030 return (*optable10[code].display)(&optable10[code], code, pc+1, "");
|
|
1031 }
|
|
1032
|
|
1033 #pragma argsused
|
|
1034 int D_Page11(op, code, pc, suffix)
|
|
1035 Opcode *op;
|
|
1036 int code;
|
|
1037 int pc;
|
|
1038 char *suffix;
|
|
1039 {
|
|
1040 fprintf(fp,"11 ");
|
|
1041 code = prog[pc+1];
|
|
1042 return (*optable11[code].display)(&optable11[code], code, pc+1, "");
|
|
1043 }
|
|
1044
|
|
1045 #pragma argsused
|
|
1046 int D_Immediat(op, code, pc, suffix)
|
|
1047 Opcode *op;
|
|
1048 int code;
|
|
1049 int pc;
|
|
1050 char *suffix;
|
|
1051 {
|
|
1052 int offset;
|
|
1053
|
|
1054 offset = prog[pc+1];
|
|
1055 fprintf(fp,"%0.2X %0.2X %s%s #$%0.2X",
|
|
1056 code, offset, suffix, op->name, offset);
|
|
1057 return op->bytes;
|
|
1058 }
|
|
1059
|
|
1060 #pragma argsused
|
|
1061 int D_ImmediatL(op, code, pc, suffix)
|
|
1062 Opcode *op;
|
|
1063 int code;
|
|
1064 int pc;
|
|
1065 char *suffix;
|
|
1066 {
|
|
1067 int offset;
|
|
1068
|
|
1069 offset = prog[pc+1] * 256 + prog[pc+2];
|
|
1070 fprintf(fp,"%0.2X %0.2X %0.2X %s%s #$%0.4X",
|
|
1071 code, prog[pc+1], prog[pc+2], suffix, op->name, offset);
|
|
1072 return op->bytes;
|
|
1073 }
|
|
1074
|
|
1075 #pragma argsused
|
|
1076 int D_Inherent(op, code, pc, suffix)
|
|
1077 Opcode *op;
|
|
1078 int code;
|
|
1079 int pc;
|
|
1080 char *suffix;
|
|
1081 {
|
|
1082 fprintf(fp,"%0.2X %s%s", code, suffix, op->name);
|
|
1083 return op->bytes;
|
|
1084 }
|
|
1085
|
|
1086 #pragma argsused
|
|
1087 int D_OS9(op, code, pc, suffix)
|
|
1088 Opcode *op;
|
|
1089 int code;
|
|
1090 int pc;
|
|
1091 char *suffix;
|
|
1092 {
|
|
1093 int offset;
|
|
1094
|
|
1095 offset = prog[pc+2];
|
|
1096
|
|
1097 fprintf(fp,"%0.2X %0.2X %s%s $%0.2X",
|
|
1098 code, offset, suffix, op->name, prog[pc+2]);
|
|
1099 return op->bytes;
|
|
1100 }
|
|
1101
|
|
1102 #pragma argsused
|
|
1103 char *IndexRegister(postbyte)
|
|
1104 int postbyte;
|
|
1105 {
|
|
1106 return Indexed_Register[ (postbyte>>5) & 0x03];
|
|
1107 }
|
|
1108
|
|
1109 #pragma argsused
|
|
1110 int D_Indexed(op, code, pc, suffix)
|
|
1111 Opcode *op;
|
|
1112 int code;
|
|
1113 int pc;
|
|
1114 char *suffix;
|
|
1115 {
|
|
1116 int postbyte;
|
|
1117 char *s;
|
|
1118 int extrabytes;
|
|
1119 int disp;
|
|
1120 int address;
|
|
1121 int offset;
|
|
1122
|
|
1123 extrabytes = 0;
|
|
1124 postbyte = prog[pc+1];
|
|
1125 if ((postbyte & 0x80) == 0x00) {
|
|
1126 disp = postbyte & 0x1f;
|
|
1127 if ((postbyte & 0x10) == 0x10) {
|
|
1128 s = "-";
|
|
1129 disp=0x20-disp;
|
|
1130 }
|
|
1131 else
|
|
1132 s = "+";
|
|
1133 fprintf(fp,"%0.2X %0.2X %s%s %s$%0.2X,%s",
|
|
1134 code, postbyte, suffix, op->name, s,disp,IndexRegister(postbyte));
|
|
1135 } else {
|
|
1136 switch(postbyte & 0x1f) {
|
|
1137 case 0x00 :
|
|
1138 fprintf(fp,"%0.2X %0.2X %s%s ,%s+",
|
|
1139 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1140 break;
|
|
1141 case 0x01 :
|
|
1142 fprintf(fp,"%0.2X %0.2X %s%s ,%s++",
|
|
1143 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1144 break;
|
|
1145 case 0x02 :
|
|
1146 fprintf(fp,"%0.2X %0.2X %s%s ,-%s",
|
|
1147 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1148 break;
|
|
1149 case 0x03 :
|
|
1150 fprintf(fp,"%0.2X %0.2X %s%s ,--%s",
|
|
1151 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1152 break;
|
|
1153 case 0x04 :
|
|
1154 fprintf(fp,"%0.2X %0.2X %s%s ,%s",
|
|
1155 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1156 break;
|
|
1157 case 0x05 :
|
|
1158 fprintf(fp,"%0.2X %0.2X %s%s B,%s",
|
|
1159 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1160 break;
|
|
1161 case 0x06 :
|
|
1162 fprintf(fp,"%0.2X %0.2X %s%s A,%s",
|
|
1163 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1164 break;
|
|
1165 case 0x07 :
|
|
1166 break;
|
|
1167 case 0x08 :
|
|
1168 offset = prog[pc+2];
|
|
1169 if (offset < 128)
|
|
1170 s = "+";
|
|
1171 else {
|
|
1172 s = "-";
|
|
1173 offset=0x0100-offset;
|
|
1174 }
|
|
1175 fprintf(fp,"%0.2X %0.2X %0.2X %s%s %s$%0.2X,%s",
|
|
1176 code, postbyte, prog[pc+2], suffix, op->name, s, offset,
|
|
1177 IndexRegister(postbyte));
|
|
1178 extrabytes=1;
|
|
1179 break;
|
|
1180 case 0x09 :
|
|
1181 offset = prog[pc+2] * 256 + prog[pc+3];
|
|
1182 if (offset < 32768)
|
|
1183 s = "+";
|
|
1184 else {
|
|
1185 s = "-";
|
|
1186 offset=0xffff-offset+1;
|
|
1187 }
|
|
1188 fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s %s$%0.4X,%s",
|
|
1189 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset,
|
|
1190 IndexRegister(postbyte));
|
|
1191 extrabytes=2;
|
|
1192 break;
|
|
1193 case 0x0a :
|
|
1194 break;
|
|
1195 case 0x0b :
|
|
1196 fprintf(fp,"%0.2X %0.2X %s%s D,%s",
|
|
1197 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1198 break;
|
|
1199 case 0x0c :
|
|
1200 offset = (prog[pc+2]+pc+3) & 0xFFFF;
|
|
1201 s = "<";
|
|
1202 fprintf(fp,"%0.2X %0.2X %0.2X %s%s %s$%0.2X,PCR",
|
|
1203 code, postbyte, prog[pc+2], suffix, op->name, s, pc+3+offset+adoffset);
|
|
1204 extrabytes = 1;
|
|
1205 break;
|
|
1206 case 0x0d :
|
|
1207 offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF;
|
|
1208 s = ">";
|
|
1209 fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s %s$%0.4X,PCR",
|
|
1210 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset+pc+4+adoffset);
|
|
1211 extrabytes = 2;
|
|
1212 break;
|
|
1213 case 0x0e :
|
|
1214 break;
|
|
1215 case 0x0f :
|
|
1216 fprintf(fp,"%0.2X %0.2X %s?????",
|
|
1217 code, postbyte, suffix);
|
|
1218 break;
|
|
1219 case 0x10 :
|
|
1220 fprintf(fp,"%0.2X %0.2X %s?????",
|
|
1221 code, postbyte, suffix);
|
|
1222 break;
|
|
1223 case 0x11 :
|
|
1224 fprintf(fp,"%0.2X %0.2X %s%s [,%s++]",
|
|
1225 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1226 break;
|
|
1227 case 0x12 :
|
|
1228 fprintf(fp,"%0.2X %0.2X %s?????",
|
|
1229 code, postbyte, suffix);
|
|
1230 break;
|
|
1231 case 0x13 :
|
|
1232 fprintf(fp,"%0.2X %0.2X %s%s [,--%s]",
|
|
1233 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1234 break;
|
|
1235 case 0x14 :
|
|
1236 fprintf(fp,"%0.2X %0.2X %s%s [,%s]",
|
|
1237 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1238 break;
|
|
1239 case 0x15 :
|
|
1240 fprintf(fp,"%0.2X %0.2X %s%s [B,%s]",
|
|
1241 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1242 break;
|
|
1243 case 0x16 :
|
|
1244 fprintf(fp,"%0.2X %0.2X %s%s [A,%s]",
|
|
1245 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1246 break;
|
|
1247 case 0x17 :
|
|
1248 break;
|
|
1249 case 0x18 :
|
|
1250 offset = prog[pc+2];
|
|
1251 if (offset < 128)
|
|
1252 s = "+";
|
|
1253 else {
|
|
1254 s = "-";
|
|
1255 offset=0x0100-offset;
|
|
1256 }
|
|
1257 fprintf(fp,"%0.2X %0.2X %0.2X %s%s [%s$%0.2X,%s]",
|
|
1258 code, postbyte, prog[pc+2], suffix, op->name, s, offset,
|
|
1259 IndexRegister(postbyte));
|
|
1260 break;
|
|
1261 case 0x19 :
|
|
1262 offset = prog[pc+2] * 256 + prog[pc+3];
|
|
1263 if (offset < 32768)
|
|
1264 s = "+";
|
|
1265 else {
|
|
1266 s = "-";
|
|
1267 offset=0xffff-offset+1;
|
|
1268 }
|
|
1269 fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s %s$%0.4X,%s",
|
|
1270 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset,
|
|
1271 IndexRegister(postbyte));
|
|
1272 break;
|
|
1273 case 0x1a :
|
|
1274 break;
|
|
1275 case 0x1b :
|
|
1276 fprintf(fp,"%0.2X %0.2X %s%s [D,%s]",
|
|
1277 code, postbyte, suffix, op->name, IndexRegister(postbyte));
|
|
1278 break;
|
|
1279 case 0x1c :
|
|
1280 offset = (prog[pc+2]+pc+3) & 0xFFFF;
|
|
1281 s = "<";
|
|
1282 fprintf(fp,"%0.2X %0.2X %0.2X %s%s [%s$%0.2X,PCR]",
|
|
1283 code, postbyte, prog[pc+2], suffix, op->name, s, offset);
|
|
1284 extrabytes = 1;
|
|
1285 break;
|
|
1286 case 0x1d :
|
|
1287 offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF;
|
|
1288 s = ">";
|
|
1289 fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s [%s$%0.4X,PCR]",
|
|
1290 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset);
|
|
1291 extrabytes = 2;
|
|
1292 break;
|
|
1293 case 0x1e :
|
|
1294 break;
|
|
1295 case 0x1f :
|
|
1296 address = prog[pc+2] * 256 + prog[pc+3];
|
|
1297 extrabytes = 2;
|
|
1298 fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s [$%4X]",
|
|
1299 code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, address);
|
|
1300 break;
|
|
1301 }
|
|
1302 }
|
|
1303 return op->bytes + extrabytes;
|
|
1304 }
|
|
1305
|
|
1306 #pragma argsused
|
|
1307 int D_Extended(op, code, pc, suffix)
|
|
1308 Opcode *op;
|
|
1309 int code;
|
|
1310 int pc;
|
|
1311 char *suffix;
|
|
1312 {
|
|
1313 int offset;
|
|
1314
|
|
1315 offset = prog[pc+1] * 256 + prog[pc+2];
|
|
1316 fprintf(fp,"%0.2X %0.2X %0.2X %s%s $%0.4X",
|
|
1317 code, prog[pc+1], prog[pc+2], suffix, op->name, offset);
|
|
1318 return op->bytes;
|
|
1319 }
|
|
1320
|
|
1321 #pragma argsused
|
|
1322 int D_Relative(op, code, pc, suffix)
|
|
1323 Opcode *op;
|
|
1324 int code;
|
|
1325 int pc;
|
|
1326 char *suffix;
|
|
1327 {
|
|
1328 int offset;
|
|
1329 int disp;
|
|
1330
|
|
1331 offset = prog[pc+1];
|
|
1332 if (offset < 127 )
|
|
1333 disp = pc + 2 + offset;
|
|
1334 else
|
|
1335 disp = pc + 2 - (256 - offset);
|
|
1336 fprintf(fp,"%0.2X %0.2X %s%s $%0.4X",
|
|
1337 code, offset, suffix, op->name, disp);
|
|
1338 return op->bytes;
|
|
1339 }
|
|
1340
|
|
1341 #pragma argsused
|
|
1342 int D_RelativeL(op, code, pc, suffix)
|
|
1343 Opcode *op;
|
|
1344 int code;
|
|
1345 int pc;
|
|
1346 char *suffix;
|
|
1347 {
|
|
1348 int offset;
|
|
1349 int disp;
|
|
1350
|
|
1351 offset = prog[pc+1] * 256 + prog[pc+2];
|
|
1352 if (offset < 32767 )
|
|
1353 disp = pc + 3 + offset + adoffset;
|
|
1354 else
|
|
1355 disp = pc + 3 - (65536 - offset) + adoffset;
|
|
1356 fprintf(fp,"%0.2X %0.2X %0.2X %s%s $%0.4X",
|
|
1357 code, prog[pc+1], prog[pc+2], suffix, op->name, disp);
|
|
1358 return op->bytes;
|
|
1359 }
|
|
1360
|
|
1361 #pragma argsused
|
|
1362 int D_Register0(op, code, pc, suffix)
|
|
1363 Opcode *op;
|
|
1364 int code;
|
|
1365 int pc;
|
|
1366 char *suffix;
|
|
1367 {
|
|
1368 int postbyte;
|
|
1369
|
|
1370 postbyte = prog[pc+1];
|
|
1371
|
|
1372 fprintf(fp,"%0.2X %0.2X %s%s %s,%s",
|
|
1373 code, postbyte, suffix, op->name, Inter_Register[postbyte>>4], Inter_Register[postbyte & 0x0F]);
|
|
1374
|
|
1375
|
|
1376 return op->bytes;
|
|
1377 }
|
|
1378
|
|
1379 #pragma argsused
|
|
1380 int D_Register1(op, code, pc, suffix)
|
|
1381 Opcode *op;
|
|
1382 int code;
|
|
1383 int pc;
|
|
1384 char *suffix;
|
|
1385 {
|
|
1386 int postbyte;
|
|
1387 int i;
|
|
1388 int flag=0;
|
|
1389 static char *s_stack[8]={"PC","U","Y","X","DP","B","A","CC"};
|
|
1390 static int bits[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
|
|
1391
|
|
1392 postbyte = prog[pc+1];
|
|
1393
|
|
1394 fprintf(fp,"%0.2X %0.2X %s%s ",
|
|
1395 code, postbyte, suffix, op->name);
|
|
1396
|
|
1397 for(i=0;i<8;i++) {
|
|
1398 if ((postbyte & bits[i]) !=0) {
|
|
1399 if (flag !=0) {
|
|
1400 fprintf(fp,",");
|
|
1401 } else {
|
|
1402 flag=1;
|
|
1403 }
|
|
1404 fprintf(fp,s_stack[i]);
|
|
1405 }
|
|
1406 }
|
|
1407 return op->bytes;
|
|
1408 }
|
|
1409
|
|
1410 #pragma argsused
|
|
1411 int D_Register2(op, code, pc, suffix)
|
|
1412 Opcode *op;
|
|
1413 int code;
|
|
1414 int pc;
|
|
1415 char *suffix;
|
|
1416 {
|
|
1417 int postbyte;
|
|
1418 int i;
|
|
1419 int flag=0;
|
|
1420 static char *u_stack[8]={"PC","S","Y","X","DP","B","A","CC"};
|
|
1421 static int bits[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
|
|
1422
|
|
1423 postbyte = prog[pc+1];
|
|
1424 fprintf(fp,"%0.2X %0.2X %s%s ",
|
|
1425 code, postbyte, suffix, op->name);
|
|
1426
|
|
1427 for(i=0;i<8;i++) {
|
|
1428 if ((postbyte & bits[i]) !=0) {
|
|
1429 if (flag !=0) {
|
|
1430 fprintf(fp,",");
|
|
1431 } else {
|
|
1432 flag=1;
|
|
1433 }
|
|
1434 fprintf(fp,u_stack[i]);
|
|
1435 }
|
|
1436 }
|
|
1437 return op->bytes;
|
|
1438 }
|
|
1439
|
|
1440
|
|
1441 void hexadump(b, l, loc, w)
|
|
1442 unsigned char *b;
|
|
1443 int l;
|
|
1444 int loc;
|
|
1445 int w;
|
|
1446 {
|
|
1447 int i;
|
|
1448 int j;
|
|
1449 int end;
|
|
1450 // char b[4096];
|
|
1451
|
|
1452 // memset(b, '\0', 4096);
|
|
1453 // memcpy(b, s, l);
|
|
1454 //fprintf(fp,"\n");
|
|
1455 end = ((l%w)>0)?(l/w)+1:(l/w);
|
|
1456 for (j=0;j<end;j++) {
|
|
1457 fprintf(fp,"%04X: ", loc+j*w+adoffset);
|
|
1458 for (i=0;i<w;i++) {
|
|
1459 fprintf(fp,"%02X ", b[j*w+i]);
|
|
1460 }
|
|
1461 fprintf(fp,"|");
|
|
1462 for (i=0;i<w;i++) {
|
|
1463 if ((b[j*w+i] >= 0x20) && (b[j*w+i] < 0x7f)) {
|
|
1464 fprintf(fp,"%c", b[j*w+i]);
|
|
1465 } else {
|
|
1466 fprintf(fp,".");
|
|
1467 }
|
|
1468 }
|
|
1469 fprintf(fp,"|\n");
|
|
1470 }
|
|
1471 //fprintf(fp,"\n");
|
|
1472 }
|
|
1473
|
|
1474 char *comment(arg)
|
|
1475 int arg;
|
|
1476 {
|
|
1477 int i;
|
|
1478
|
|
1479 for (i=0;i<lastio;i++) {
|
|
1480 if (arg == iotable[i]) {
|
|
1481 return iocomment[i];
|
|
1482 }
|
|
1483 }
|
|
1484 return "";
|
|
1485 }
|
|
1486
|
|
1487 void disasm(start, end)
|
|
1488 int start;
|
|
1489 int end;
|
|
1490 {
|
|
1491 int pc;
|
|
1492 int code;
|
|
1493 int currstring;
|
|
1494
|
|
1495 currstring = 0;
|
|
1496 for (pc=start; pc <= end;) {
|
|
1497 code = prog[pc];
|
|
1498 fprintf(fp,"%0.4X: ", pc + adoffset);
|
|
1499 if (currstring < laststring) {
|
|
1500 if (pc == stringtable[currstring].address) {
|
|
1501 hexadump(&prog[pc], stringtable[currstring].length, pc,
|
|
1502 stringtable[currstring].width);
|
|
1503 pc += stringtable[currstring].length;
|
|
1504 currstring++;
|
|
1505 continue;
|
|
1506 }
|
|
1507 }
|
|
1508 pc += (*optable[code].display)(&optable[code], code, pc, " ");
|
|
1509 fprintf(fp,"\n");
|
|
1510 }
|
|
1511 }
|
|
1512
|
|
1513 #ifndef NO_MAIN
|
|
1514
|
|
1515 int main(int argc, char **argv )
|
|
1516 {
|
|
1517 int fd;
|
|
1518 int start,end;
|
|
1519 int size;
|
|
1520
|
|
1521 if ( argc > 2 && *argv[1] == '-') {
|
|
1522 if (argv[1][1]=='o') {
|
|
1523 adoffset=strtol(argv[2],(char**)0,0);
|
|
1524 argc-=2;
|
|
1525 argv += 2;
|
|
1526 }
|
|
1527 }
|
|
1528 if ( argc != 4 ) {
|
|
1529 fprintf(stderr, "usage: disasm [-o offset] <file> <start> <end>\n");
|
|
1530 fprintf(stderr, " where start and end are in hex.\n");
|
|
1531 exit(1);
|
|
1532 }
|
|
1533
|
|
1534 sscanf(argv[2],"%x",&start); start -= adoffset;
|
|
1535 sscanf(argv[3],"%x",&end); end -= adoffset;
|
|
1536
|
|
1537 fp = stdout;
|
|
1538
|
|
1539 fd = open(argv[1], O_RDONLY, S_IREAD|S_IWRITE);
|
|
1540 size = read(fd, &prog[0x0000], 0xffff);
|
|
1541
|
|
1542 if (end > size) end=size;
|
|
1543
|
|
1544 disasm(start, end);
|
|
1545 close(fd);
|
|
1546 return 0;
|
|
1547 }
|
|
1548
|
|
1549 #endif // NO_MAIN
|