1 /*****************************************************************************
2 *
3 * 8085dasm.c
4 * Portable I8085A disassembler
5 *
6 * Copyright (c) 1999 Juergen Buchmueller, all rights reserved.
7 * Partially based on information out of Z80Em by Marcel De Kogel
8 *
9 * - This source code is released as freeware for non-commercial purposes.
10 * - You are free to use and redistribute this code in modified or
11 * unmodified form, provided you list me in the credits.
12 * - If you modify this source code, you must add a notice to each modified
13 * source file that it has been changed. If you're a nice person, you
14 * will clearly mark each change too. :)
15 * - If you wish to use this for commercial purposes, please contact me at
16 * pullmoll@t-online.de
17 * - The author of this copywritten work reserves the right to change the
18 * terms of its usage and license at any time, including retroactively
19 * - This entire notice must remain in the source code.
20 *
21 *****************************************************************************/
22
23 #include <stdio.h>
24 #include "osd_cpu.h"
25 #include "memory.h"
26
27 /* 8080/8085A mnemonics were more irritation than information
28 What would you guess "CP $3456" to mean? It's not compare,
29 but call if plus ... therefore: */
30 #define Z80_MNEMONICS
31
32 #define OP(A) cpu_readop(A)
33 #define ARG(A) cpu_readop_arg(A)
34 #define ARGW(A) cpu_readop_arg(A) + (cpu_readop_arg((A+1)&0xffff) << 8)
35
Dasm8085(char * buff,unsigned pc)36 unsigned Dasm8085(char *buff, unsigned pc)
37 {
38 UINT8 op;
39 unsigned PC = pc;
40 switch (op = OP(pc++))
41 {
42 #ifdef Z80_MNEMONICS
43 case 0x00: sprintf (buff,"nop"); break;
44 case 0x01: sprintf (buff,"ld bc,$%04x", ARGW(pc)); pc+=2; break;
45 case 0x02: sprintf (buff,"ld (bc),a"); break;
46 case 0x03: sprintf (buff,"inc bc"); break;
47 case 0x04: sprintf (buff,"inc b"); break;
48 case 0x05: sprintf (buff,"dec b"); break;
49 case 0x06: sprintf (buff,"ld b,$%02x", ARG(pc)); pc++; break;
50 case 0x07: sprintf (buff,"rlca"); break;
51 case 0x08: sprintf (buff,"sub hl,bc (*)"); break;
52 case 0x09: sprintf (buff,"add hl,bc"); break;
53 case 0x0a: sprintf (buff,"ld a,(bc)"); break;
54 case 0x0b: sprintf (buff,"dec bc"); break;
55 case 0x0c: sprintf (buff,"inc c"); break;
56 case 0x0d: sprintf (buff,"dec c"); break;
57 case 0x0e: sprintf (buff,"ld c,$%02x", ARG(pc)); pc++; break;
58 case 0x0f: sprintf (buff,"rrca"); break;
59 case 0x10: sprintf (buff,"sra hl (*)"); break;
60 case 0x11: sprintf (buff,"ld de,$%04x", ARGW(pc)); pc+=2; break;
61 case 0x12: sprintf (buff,"ld (de),a"); break;
62 case 0x13: sprintf (buff,"inc de"); break;
63 case 0x14: sprintf (buff,"inc d"); break;
64 case 0x15: sprintf (buff,"dec d"); break;
65 case 0x16: sprintf (buff,"ld d,$%02x", ARG(pc)); pc++; break;
66 case 0x17: sprintf (buff,"rla"); break;
67 case 0x18: sprintf (buff,"rl de (*)"); break;
68 case 0x19: sprintf (buff,"add hl,de"); break;
69 case 0x1a: sprintf (buff,"ld a,(de)"); break;
70 case 0x1b: sprintf (buff,"dec de"); break;
71 case 0x1c: sprintf (buff,"inc e"); break;
72 case 0x1d: sprintf (buff,"dec e"); break;
73 case 0x1e: sprintf (buff,"ld e,$%02x", ARG(pc)); pc++; break;
74 case 0x1f: sprintf (buff,"rra"); break;
75 case 0x20: sprintf (buff,"rim"); break;
76 case 0x21: sprintf (buff,"ld hl,$%04x", ARGW(pc)); pc+=2; break;
77 case 0x22: sprintf (buff,"ld ($%04x),hl", ARGW(pc)); pc+=2;break;
78 case 0x23: sprintf (buff,"inc hl"); break;
79 case 0x24: sprintf (buff,"inc h"); break;
80 case 0x25: sprintf (buff,"dec h"); break;
81 case 0x26: sprintf (buff,"ld h,$%02x", ARG(pc)); pc++; break;
82 case 0x27: sprintf (buff,"daa"); break;
83 case 0x28: sprintf (buff,"ld de,hl+$%02x (*)",ARG(pc));pc++;break;
84 case 0x29: sprintf (buff,"add hl,hl"); break;
85 case 0x2a: sprintf (buff,"ld hl,($%04x)", ARGW(pc)); pc+=2;break;
86 case 0x2b: sprintf (buff,"dec hl"); break;
87 case 0x2c: sprintf (buff,"inc l"); break;
88 case 0x2d: sprintf (buff,"dec l"); break;
89 case 0x2e: sprintf (buff,"ld l,$%02x", ARG(pc)); pc++; break;
90 case 0x2f: sprintf (buff,"cpl"); break;
91 case 0x30: sprintf (buff,"sim"); break;
92 case 0x31: sprintf (buff,"ld sp,$%04x", ARGW(pc)); pc+=2; break;
93 case 0x32: sprintf (buff,"ld ($%04x),a", ARGW(pc)); pc+=2; break;
94 case 0x33: sprintf (buff,"inc sp"); break;
95 case 0x34: sprintf (buff,"inc (hl)"); break;
96 case 0x35: sprintf (buff,"dec (hl)"); break;
97 case 0x36: sprintf (buff,"ld (hl),$%02x", ARG(pc)); pc++; break;
98 case 0x37: sprintf (buff,"scf"); break;
99 case 0x38: sprintf (buff,"ld de,sp+$%02x (*)",ARG(pc));pc++;break;
100 case 0x39: sprintf (buff,"add hl,sp"); break;
101 case 0x3a: sprintf (buff,"ld a,($%04x)", ARGW(pc)); pc+=2; break;
102 case 0x3b: sprintf (buff,"dec sp"); break;
103 case 0x3c: sprintf (buff,"inc a"); break;
104 case 0x3d: sprintf (buff,"dec a"); break;
105 case 0x3e: sprintf (buff,"ld a,$%02x", ARG(pc)); pc++; break;
106 case 0x3f: sprintf (buff,"ccf"); break;
107 case 0x40: sprintf (buff,"ld b,b"); break;
108 case 0x41: sprintf (buff,"ld b,c"); break;
109 case 0x42: sprintf (buff,"ld b,d"); break;
110 case 0x43: sprintf (buff,"ld b,e"); break;
111 case 0x44: sprintf (buff,"ld b,h"); break;
112 case 0x45: sprintf (buff,"ld b,l"); break;
113 case 0x46: sprintf (buff,"ld b,(hl)"); break;
114 case 0x47: sprintf (buff,"ld b,a"); break;
115 case 0x48: sprintf (buff,"ld c,b"); break;
116 case 0x49: sprintf (buff,"ld c,c"); break;
117 case 0x4a: sprintf (buff,"ld c,d"); break;
118 case 0x4b: sprintf (buff,"ld c,e"); break;
119 case 0x4c: sprintf (buff,"ld c,h"); break;
120 case 0x4d: sprintf (buff,"ld c,l"); break;
121 case 0x4e: sprintf (buff,"ld c,(hl)"); break;
122 case 0x4f: sprintf (buff,"ld c,a"); break;
123 case 0x50: sprintf (buff,"ld d,b"); break;
124 case 0x51: sprintf (buff,"ld d,c"); break;
125 case 0x52: sprintf (buff,"ld d,d"); break;
126 case 0x53: sprintf (buff,"ld d,e"); break;
127 case 0x54: sprintf (buff,"ld d,h"); break;
128 case 0x55: sprintf (buff,"ld d,l"); break;
129 case 0x56: sprintf (buff,"ld d,(hl)"); break;
130 case 0x57: sprintf (buff,"ld d,a"); break;
131 case 0x58: sprintf (buff,"ld e,b"); break;
132 case 0x59: sprintf (buff,"ld e,c"); break;
133 case 0x5a: sprintf (buff,"ld e,d"); break;
134 case 0x5b: sprintf (buff,"ld e,e"); break;
135 case 0x5c: sprintf (buff,"ld e,h"); break;
136 case 0x5d: sprintf (buff,"ld e,l"); break;
137 case 0x5e: sprintf (buff,"ld e,(hl)"); break;
138 case 0x5f: sprintf (buff,"ld e,a"); break;
139 case 0x60: sprintf (buff,"ld h,b"); break;
140 case 0x61: sprintf (buff,"ld h,c"); break;
141 case 0x62: sprintf (buff,"ld h,d"); break;
142 case 0x63: sprintf (buff,"ld h,e"); break;
143 case 0x64: sprintf (buff,"ld h,h"); break;
144 case 0x65: sprintf (buff,"ld h,l"); break;
145 case 0x66: sprintf (buff,"ld h,(hl)"); break;
146 case 0x67: sprintf (buff,"ld h,a"); break;
147 case 0x68: sprintf (buff,"ld l,b"); break;
148 case 0x69: sprintf (buff,"ld l,c"); break;
149 case 0x6a: sprintf (buff,"ld l,d"); break;
150 case 0x6b: sprintf (buff,"ld l,e"); break;
151 case 0x6c: sprintf (buff,"ld l,h"); break;
152 case 0x6d: sprintf (buff,"ld l,l"); break;
153 case 0x6e: sprintf (buff,"ld l,(hl)"); break;
154 case 0x6f: sprintf (buff,"ld l,a"); break;
155 case 0x70: sprintf (buff,"ld (hl),b"); break;
156 case 0x71: sprintf (buff,"ld (hl),c"); break;
157 case 0x72: sprintf (buff,"ld (hl),d"); break;
158 case 0x73: sprintf (buff,"ld (hl),e"); break;
159 case 0x74: sprintf (buff,"ld (hl),h"); break;
160 case 0x75: sprintf (buff,"ld (hl),l"); break;
161 case 0x76: sprintf (buff,"halt"); break;
162 case 0x77: sprintf (buff,"ld (hl),a"); break;
163 case 0x78: sprintf (buff,"ld a,b"); break;
164 case 0x79: sprintf (buff,"ld a,c"); break;
165 case 0x7a: sprintf (buff,"ld a,d"); break;
166 case 0x7b: sprintf (buff,"ld a,e"); break;
167 case 0x7c: sprintf (buff,"ld a,h"); break;
168 case 0x7d: sprintf (buff,"ld a,l"); break;
169 case 0x7e: sprintf (buff,"ld a,(hl)"); break;
170 case 0x7f: sprintf (buff,"ld a,a"); break;
171 case 0x80: sprintf (buff,"add a,b"); break;
172 case 0x81: sprintf (buff,"add a,c"); break;
173 case 0x82: sprintf (buff,"add a,d"); break;
174 case 0x83: sprintf (buff,"add a,e"); break;
175 case 0x84: sprintf (buff,"add a,h"); break;
176 case 0x85: sprintf (buff,"add a,l"); break;
177 case 0x86: sprintf (buff,"add a,(hl)"); break;
178 case 0x87: sprintf (buff,"add a,a"); break;
179 case 0x88: sprintf (buff,"adc a,b"); break;
180 case 0x89: sprintf (buff,"adc a,c"); break;
181 case 0x8a: sprintf (buff,"adc a,d"); break;
182 case 0x8b: sprintf (buff,"adc a,e"); break;
183 case 0x8c: sprintf (buff,"adc a,h"); break;
184 case 0x8d: sprintf (buff,"adc a,l"); break;
185 case 0x8e: sprintf (buff,"adc a,(hl)"); break;
186 case 0x8f: sprintf (buff,"adc a,a"); break;
187 case 0x90: sprintf (buff,"sub b"); break;
188 case 0x91: sprintf (buff,"sub c"); break;
189 case 0x92: sprintf (buff,"sub d"); break;
190 case 0x93: sprintf (buff,"sub e"); break;
191 case 0x94: sprintf (buff,"sub h"); break;
192 case 0x95: sprintf (buff,"sub l"); break;
193 case 0x96: sprintf (buff,"sub (hl)"); break;
194 case 0x97: sprintf (buff,"sub a"); break;
195 case 0x98: sprintf (buff,"sbc a,b"); break;
196 case 0x99: sprintf (buff,"sbc a,c"); break;
197 case 0x9a: sprintf (buff,"sbc a,d"); break;
198 case 0x9b: sprintf (buff,"sbc a,e"); break;
199 case 0x9c: sprintf (buff,"sbc a,h"); break;
200 case 0x9d: sprintf (buff,"sbc a,l"); break;
201 case 0x9e: sprintf (buff,"sbc a,(hl)"); break;
202 case 0x9f: sprintf (buff,"sbc a,a"); break;
203 case 0xa0: sprintf (buff,"and b"); break;
204 case 0xa1: sprintf (buff,"and c"); break;
205 case 0xa2: sprintf (buff,"and d"); break;
206 case 0xa3: sprintf (buff,"and e"); break;
207 case 0xa4: sprintf (buff,"and h"); break;
208 case 0xa5: sprintf (buff,"and l"); break;
209 case 0xa6: sprintf (buff,"and (hl)"); break;
210 case 0xa7: sprintf (buff,"and a"); break;
211 case 0xa8: sprintf (buff,"xor b"); break;
212 case 0xa9: sprintf (buff,"xor c"); break;
213 case 0xaa: sprintf (buff,"xor d"); break;
214 case 0xab: sprintf (buff,"xor e"); break;
215 case 0xac: sprintf (buff,"xor h"); break;
216 case 0xad: sprintf (buff,"xor l"); break;
217 case 0xae: sprintf (buff,"xor (hl)"); break;
218 case 0xaf: sprintf (buff,"xor a"); break;
219 case 0xb0: sprintf (buff,"or b"); break;
220 case 0xb1: sprintf (buff,"or c"); break;
221 case 0xb2: sprintf (buff,"or d"); break;
222 case 0xb3: sprintf (buff,"or e"); break;
223 case 0xb4: sprintf (buff,"or h"); break;
224 case 0xb5: sprintf (buff,"or l"); break;
225 case 0xb6: sprintf (buff,"or (hl)"); break;
226 case 0xb7: sprintf (buff,"or a"); break;
227 case 0xb8: sprintf (buff,"cp b"); break;
228 case 0xb9: sprintf (buff,"cp c"); break;
229 case 0xba: sprintf (buff,"cp d"); break;
230 case 0xbb: sprintf (buff,"cp e"); break;
231 case 0xbc: sprintf (buff,"cp h"); break;
232 case 0xbd: sprintf (buff,"cp l"); break;
233 case 0xbe: sprintf (buff,"cp (hl)"); break;
234 case 0xbf: sprintf (buff,"cp a"); break;
235 case 0xc0: sprintf (buff,"ret nz"); break;
236 case 0xc1: sprintf (buff,"pop bc"); break;
237 case 0xc2: sprintf (buff,"jp nz,$%04x", ARGW(pc)); pc+=2; break;
238 case 0xc3: sprintf (buff,"jp $%04x", ARGW(pc)); pc+=2; break;
239 case 0xc4: sprintf (buff,"call nz,$%04x", ARGW(pc)); pc+=2; break;
240 case 0xc5: sprintf (buff,"push bc"); break;
241 case 0xc6: sprintf (buff,"add a,$%02x", ARG(pc)); pc++; break;
242 case 0xc7: sprintf (buff,"rst $00"); break;
243 case 0xc8: sprintf (buff,"ret z"); break;
244 case 0xc9: sprintf (buff,"ret"); break;
245 case 0xca: sprintf (buff,"jp z,$%04x", ARGW(pc)); pc+=2; break;
246 case 0xcb: sprintf (buff,"rst v,$40 (*)"); break;
247 case 0xcc: sprintf (buff,"call z,$%04x", ARGW(pc)); pc+=2; break;
248 case 0xcd: sprintf (buff,"call $%04x", ARGW(pc)); pc+=2; break;
249 case 0xce: sprintf (buff,"adc a,$%02x", ARG(pc)); pc++; break;
250 case 0xcf: sprintf (buff,"rst $08"); break;
251 case 0xd0: sprintf (buff,"ret nc"); break;
252 case 0xd1: sprintf (buff,"pop de"); break;
253 case 0xd2: sprintf (buff,"jp nc,$%04x", ARGW(pc)); pc+=2; break;
254 case 0xd3: sprintf (buff,"out ($%02x),a", ARG(pc)); pc++; break;
255 case 0xd4: sprintf (buff,"call nc,$%04x", ARGW(pc)); pc+=2; break;
256 case 0xd5: sprintf (buff,"push de"); break;
257 case 0xd6: sprintf (buff,"sub $%02x", ARG(pc)); pc++; break;
258 case 0xd7: sprintf (buff,"rst $10"); break;
259 case 0xd8: sprintf (buff,"ret c"); break;
260 case 0xd9: sprintf (buff,"ld (de),hl (*)"); break;
261 case 0xda: sprintf (buff,"jp c,$%04x", ARGW(pc)); pc+=2; break;
262 case 0xdb: sprintf (buff,"in a,($%02x)", ARG(pc)); pc++; break;
263 case 0xdc: sprintf (buff,"call c,$%04x", ARGW(pc)); pc+=2; break;
264 case 0xdd: sprintf (buff,"jp nx,$%04x (*)",ARGW(pc));pc+=2;break;
265 case 0xde: sprintf (buff,"sub $%02x", ARG(pc)); pc++; break;
266 case 0xdf: sprintf (buff,"rst $18"); break;
267 case 0xe0: sprintf (buff,"ret pe"); break;
268 case 0xe1: sprintf (buff,"pop hl"); break;
269 case 0xe2: sprintf (buff,"jp pe,$%04x", ARGW(pc)); pc+=2; break;
270 case 0xe3: sprintf (buff,"ex (sp),hl"); break;
271 case 0xe4: sprintf (buff,"call pe,$%04x", ARGW(pc)); pc+=2; break;
272 case 0xe5: sprintf (buff,"push hl"); break;
273 case 0xe6: sprintf (buff,"and $%02x", ARG(pc)); pc++; break;
274 case 0xe7: sprintf (buff,"rst $20"); break;
275 case 0xe8: sprintf (buff,"ret po"); break;
276 case 0xe9: sprintf (buff,"jp (hl)"); break;
277 case 0xea: sprintf (buff,"jp po,$%04x", ARGW(pc)); pc+=2; break;
278 case 0xeb: sprintf (buff,"ex de,hl"); break;
279 case 0xec: sprintf (buff,"call po,$%04x", ARGW(pc)); pc+=2; break;
280 case 0xed: sprintf (buff,"ld hl,(de) (*)"); break;
281 case 0xee: sprintf (buff,"xor $%02x", ARG(pc)); pc++; break;
282 case 0xef: sprintf (buff,"rst $28"); break;
283 case 0xf0: sprintf (buff,"ret p"); break;
284 case 0xf1: sprintf (buff,"pop af"); break;
285 case 0xf2: sprintf (buff,"jp p,$%04x", ARGW(pc)); pc+=2; break;
286 case 0xf3: sprintf (buff,"di"); break;
287 case 0xf4: sprintf (buff,"cp $%04x", ARGW(pc)); pc+=2; break;
288 case 0xf5: sprintf (buff,"push af"); break;
289 case 0xf6: sprintf (buff,"or $%02x", ARG(pc)); pc++; break;
290 case 0xf7: sprintf (buff,"rst $30"); break;
291 case 0xf8: sprintf (buff,"ret m"); break;
292 case 0xf9: sprintf (buff,"ld sp,hl"); break;
293 case 0xfa: sprintf (buff,"jp m,$%04x", ARGW(pc)); pc+=2; break;
294 case 0xfb: sprintf (buff,"ei"); break;
295 case 0xfc: sprintf (buff,"call m,$%04x", ARGW(pc)); pc+=2; break;
296 case 0xfd: sprintf (buff,"jp x,$%04x (*)",ARGW(pc));pc+=2; break;
297 case 0xfe: sprintf (buff,"cp $%02x", ARG(pc)); pc++; break;
298 case 0xff: sprintf (buff,"rst $38"); break;
299 #else
300 case 0x00: sprintf (buff,"nop"); break;
301 case 0x01: sprintf (buff,"lxi b,$%04x", ARGW(pc)); pc+=2; break;
302 case 0x02: sprintf (buff,"stax b"); break;
303 case 0x03: sprintf (buff,"inx b"); break;
304 case 0x04: sprintf (buff,"inr b"); break;
305 case 0x05: sprintf (buff,"dcr b"); break;
306 case 0x06: sprintf (buff,"mvi b,$%02x", ARG(pc)); pc++; break;
307 case 0x07: sprintf (buff,"rlc"); break;
308 case 0x08: sprintf (buff,"dsub (*)"); break;
309 case 0x09: sprintf (buff,"dad b"); break;
310 case 0x0a: sprintf (buff,"ldax b"); break;
311 case 0x0b: sprintf (buff,"dcx b"); break;
312 case 0x0c: sprintf (buff,"inr c"); break;
313 case 0x0d: sprintf (buff,"dcr c"); break;
314 case 0x0e: sprintf (buff,"mvi c,$%02x", ARG(pc)); pc++; break;
315 case 0x0f: sprintf (buff,"rrc"); break;
316 case 0x10: sprintf (buff,"asrh (*)"); break;
317 case 0x11: sprintf (buff,"lxi d,$%04x", ARGW(pc)); pc+=2; break;
318 case 0x12: sprintf (buff,"stax d"); break;
319 case 0x13: sprintf (buff,"inx d"); break;
320 case 0x14: sprintf (buff,"inr d"); break;
321 case 0x15: sprintf (buff,"dcr d"); break;
322 case 0x16: sprintf (buff,"mvi d,$%02x", ARG(pc)); pc++; break;
323 case 0x17: sprintf (buff,"ral"); break;
324 case 0x18: sprintf (buff,"rlde (*)"); break;
325 case 0x19: sprintf (buff,"dad d"); break;
326 case 0x1a: sprintf (buff,"ldax d"); break;
327 case 0x1b: sprintf (buff,"dcx d"); break;
328 case 0x1c: sprintf (buff,"inr e"); break;
329 case 0x1d: sprintf (buff,"dcr e"); break;
330 case 0x1e: sprintf (buff,"mvi e,$%02x", ARG(pc)); pc++; break;
331 case 0x1f: sprintf (buff,"rar"); break;
332 case 0x20: sprintf (buff,"rim"); break;
333 case 0x21: sprintf (buff,"lxi h,$%04x", ARGW(pc)); pc+=2; break;
334 case 0x22: sprintf (buff,"shld $%04x", ARGW(pc)); pc+=2; break;
335 case 0x23: sprintf (buff,"inx h"); break;
336 case 0x24: sprintf (buff,"inr h"); break;
337 case 0x25: sprintf (buff,"dcr h"); break;
338 case 0x26: sprintf (buff,"mvi h,$%02x", ARG(pc)); pc++; break;
339 case 0x27: sprintf (buff,"daa"); break;
340 case 0x28: sprintf (buff,"ldeh $%02x (*)", ARG(pc)); pc++; break;
341 case 0x29: sprintf (buff,"dad h"); break;
342 case 0x2a: sprintf (buff,"lhld $%04x", ARGW(pc)); pc+=2; break;
343 case 0x2b: sprintf (buff,"dcx h"); break;
344 case 0x2c: sprintf (buff,"inr l"); break;
345 case 0x2d: sprintf (buff,"dcr l"); break;
346 case 0x2e: sprintf (buff,"mvi l,$%02x", ARG(pc)); pc++; break;
347 case 0x2f: sprintf (buff,"cma"); break;
348 case 0x30: sprintf (buff,"sim"); break;
349 case 0x31: sprintf (buff,"lxi sp,$%04x", ARGW(pc)); pc+=2; break;
350 case 0x32: sprintf (buff,"stax $%04x", ARGW(pc)); pc+=2; break;
351 case 0x33: sprintf (buff,"inx sp"); break;
352 case 0x34: sprintf (buff,"inr m"); break;
353 case 0x35: sprintf (buff,"dcr m"); break;
354 case 0x36: sprintf (buff,"mvi m,$%02x", ARG(pc)); pc++; break;
355 case 0x37: sprintf (buff,"stc"); break;
356 case 0x28: sprintf (buff,"ldes $%02x", ARG(pc)); pc++; break;
357 case 0x39: sprintf (buff,"dad sp"); break;
358 case 0x3a: sprintf (buff,"ldax $%04x", ARGW(pc)); pc+=2; break;
359 case 0x3b: sprintf (buff,"dcx sp"); break;
360 case 0x3c: sprintf (buff,"inr a"); break;
361 case 0x3d: sprintf (buff,"dcr a"); break;
362 case 0x3e: sprintf (buff,"mvi a,$%02x", ARG(pc)); pc++; break;
363 case 0x3f: sprintf (buff,"cmf"); break;
364 case 0x40: sprintf (buff,"mov b,b"); break;
365 case 0x41: sprintf (buff,"mov b,c"); break;
366 case 0x42: sprintf (buff,"mov b,d"); break;
367 case 0x43: sprintf (buff,"mov b,e"); break;
368 case 0x44: sprintf (buff,"mov b,h"); break;
369 case 0x45: sprintf (buff,"mov b,l"); break;
370 case 0x46: sprintf (buff,"mov b,m"); break;
371 case 0x47: sprintf (buff,"mov b,a"); break;
372 case 0x48: sprintf (buff,"mov c,b"); break;
373 case 0x49: sprintf (buff,"mov c,c"); break;
374 case 0x4a: sprintf (buff,"mov c,d"); break;
375 case 0x4b: sprintf (buff,"mov c,e"); break;
376 case 0x4c: sprintf (buff,"mov c,h"); break;
377 case 0x4d: sprintf (buff,"mov c,l"); break;
378 case 0x4e: sprintf (buff,"mov c,m"); break;
379 case 0x4f: sprintf (buff,"mov c,a"); break;
380 case 0x50: sprintf (buff,"mov d,b"); break;
381 case 0x51: sprintf (buff,"mov d,c"); break;
382 case 0x52: sprintf (buff,"mov d,d"); break;
383 case 0x53: sprintf (buff,"mov d,e"); break;
384 case 0x54: sprintf (buff,"mov d,h"); break;
385 case 0x55: sprintf (buff,"mov d,l"); break;
386 case 0x56: sprintf (buff,"mov d,m"); break;
387 case 0x57: sprintf (buff,"mov d,a"); break;
388 case 0x58: sprintf (buff,"mov e,b"); break;
389 case 0x59: sprintf (buff,"mov e,c"); break;
390 case 0x5a: sprintf (buff,"mov e,d"); break;
391 case 0x5b: sprintf (buff,"mov e,e"); break;
392 case 0x5c: sprintf (buff,"mov e,h"); break;
393 case 0x5d: sprintf (buff,"mov e,l"); break;
394 case 0x5e: sprintf (buff,"mov e,m"); break;
395 case 0x5f: sprintf (buff,"mov e,a"); break;
396 case 0x60: sprintf (buff,"mov h,b"); break;
397 case 0x61: sprintf (buff,"mov h,c"); break;
398 case 0x62: sprintf (buff,"mov h,d"); break;
399 case 0x63: sprintf (buff,"mov h,e"); break;
400 case 0x64: sprintf (buff,"mov h,h"); break;
401 case 0x65: sprintf (buff,"mov h,l"); break;
402 case 0x66: sprintf (buff,"mov h,m"); break;
403 case 0x67: sprintf (buff,"mov h,a"); break;
404 case 0x68: sprintf (buff,"mov l,b"); break;
405 case 0x69: sprintf (buff,"mov l,c"); break;
406 case 0x6a: sprintf (buff,"mov l,d"); break;
407 case 0x6b: sprintf (buff,"mov l,e"); break;
408 case 0x6c: sprintf (buff,"mov l,h"); break;
409 case 0x6d: sprintf (buff,"mov l,l"); break;
410 case 0x6e: sprintf (buff,"mov l,m"); break;
411 case 0x6f: sprintf (buff,"mov l,a"); break;
412 case 0x70: sprintf (buff,"mov m,b"); break;
413 case 0x71: sprintf (buff,"mov m,c"); break;
414 case 0x72: sprintf (buff,"mov m,d"); break;
415 case 0x73: sprintf (buff,"mov m,e"); break;
416 case 0x74: sprintf (buff,"mov m,h"); break;
417 case 0x75: sprintf (buff,"mov m,l"); break;
418 case 0x76: sprintf (buff,"mov m,m"); break;
419 case 0x77: sprintf (buff,"mov m,a"); break;
420 case 0x78: sprintf (buff,"mov a,b"); break;
421 case 0x79: sprintf (buff,"mov a,c"); break;
422 case 0x7a: sprintf (buff,"mov a,d"); break;
423 case 0x7b: sprintf (buff,"mov a,e"); break;
424 case 0x7c: sprintf (buff,"mov a,h"); break;
425 case 0x7d: sprintf (buff,"mov a,l"); break;
426 case 0x7e: sprintf (buff,"mov a,m"); break;
427 case 0x7f: sprintf (buff,"mov a,a"); break;
428 case 0x80: sprintf (buff,"add b"); break;
429 case 0x81: sprintf (buff,"add c"); break;
430 case 0x82: sprintf (buff,"add d"); break;
431 case 0x83: sprintf (buff,"add e"); break;
432 case 0x84: sprintf (buff,"add h"); break;
433 case 0x85: sprintf (buff,"add l"); break;
434 case 0x86: sprintf (buff,"add m"); break;
435 case 0x87: sprintf (buff,"add a"); break;
436 case 0x88: sprintf (buff,"adc b"); break;
437 case 0x89: sprintf (buff,"adc c"); break;
438 case 0x8a: sprintf (buff,"adc d"); break;
439 case 0x8b: sprintf (buff,"adc e"); break;
440 case 0x8c: sprintf (buff,"adc h"); break;
441 case 0x8d: sprintf (buff,"adc l"); break;
442 case 0x8e: sprintf (buff,"adc m"); break;
443 case 0x8f: sprintf (buff,"adc a"); break;
444 case 0x90: sprintf (buff,"sub b"); break;
445 case 0x91: sprintf (buff,"sub c"); break;
446 case 0x92: sprintf (buff,"sub d"); break;
447 case 0x93: sprintf (buff,"sub e"); break;
448 case 0x94: sprintf (buff,"sub h"); break;
449 case 0x95: sprintf (buff,"sub l"); break;
450 case 0x96: sprintf (buff,"sub m"); break;
451 case 0x97: sprintf (buff,"sub a"); break;
452 case 0x98: sprintf (buff,"sbb b"); break;
453 case 0x99: sprintf (buff,"sbb c"); break;
454 case 0x9a: sprintf (buff,"sbb d"); break;
455 case 0x9b: sprintf (buff,"sbb e"); break;
456 case 0x9c: sprintf (buff,"sbb h"); break;
457 case 0x9d: sprintf (buff,"sbb l"); break;
458 case 0x9e: sprintf (buff,"sbb m"); break;
459 case 0x9f: sprintf (buff,"sbb a"); break;
460 case 0xa0: sprintf (buff,"ana b"); break;
461 case 0xa1: sprintf (buff,"ana c"); break;
462 case 0xa2: sprintf (buff,"ana d"); break;
463 case 0xa3: sprintf (buff,"ana e"); break;
464 case 0xa4: sprintf (buff,"ana h"); break;
465 case 0xa5: sprintf (buff,"ana l"); break;
466 case 0xa6: sprintf (buff,"ana m"); break;
467 case 0xa7: sprintf (buff,"ana a"); break;
468 case 0xa8: sprintf (buff,"xra b"); break;
469 case 0xa9: sprintf (buff,"xra c"); break;
470 case 0xaa: sprintf (buff,"xra d"); break;
471 case 0xab: sprintf (buff,"xra e"); break;
472 case 0xac: sprintf (buff,"xra h"); break;
473 case 0xad: sprintf (buff,"xra l"); break;
474 case 0xae: sprintf (buff,"xra m"); break;
475 case 0xaf: sprintf (buff,"xra a"); break;
476 case 0xb0: sprintf (buff,"ora b"); break;
477 case 0xb1: sprintf (buff,"ora c"); break;
478 case 0xb2: sprintf (buff,"ora d"); break;
479 case 0xb3: sprintf (buff,"ora e"); break;
480 case 0xb4: sprintf (buff,"ora h"); break;
481 case 0xb5: sprintf (buff,"ora l"); break;
482 case 0xb6: sprintf (buff,"ora m"); break;
483 case 0xb7: sprintf (buff,"ora a"); break;
484 case 0xb8: sprintf (buff,"cmp b"); break;
485 case 0xb9: sprintf (buff,"cmp c"); break;
486 case 0xba: sprintf (buff,"cmp d"); break;
487 case 0xbb: sprintf (buff,"cmp e"); break;
488 case 0xbc: sprintf (buff,"cmp h"); break;
489 case 0xbd: sprintf (buff,"cmp l"); break;
490 case 0xbe: sprintf (buff,"cmp m"); break;
491 case 0xbf: sprintf (buff,"cmp a"); break;
492 case 0xc0: sprintf (buff,"rnz"); break;
493 case 0xc1: sprintf (buff,"pop b"); break;
494 case 0xc2: sprintf (buff,"jnz $%04x", ARGW(pc)); pc+=2; break;
495 case 0xc3: sprintf (buff,"jmp $%04x", ARGW(pc)); pc+=2; break;
496 case 0xc4: sprintf (buff,"cnz $%04x", ARGW(pc)); pc+=2; break;
497 case 0xc5: sprintf (buff,"push b"); break;
498 case 0xc6: sprintf (buff,"adi $%02x", ARG(pc)); pc++; break;
499 case 0xc7: sprintf (buff,"rst 0"); break;
500 case 0xc8: sprintf (buff,"rz"); break;
501 case 0xc9: sprintf (buff,"ret"); break;
502 case 0xca: sprintf (buff,"jz $%04x", ARGW(pc)); pc+=2; break;
503 case 0xcb: sprintf (buff,"rstv 8 (*)"); break;
504 case 0xcc: sprintf (buff,"cz $%04x", ARGW(pc)); pc+=2; break;
505 case 0xcd: sprintf (buff,"call $%04x", ARGW(pc)); pc+=2; break;
506 case 0xce: sprintf (buff,"aci $%02x", ARG(pc)); pc++; break;
507 case 0xcf: sprintf (buff,"rst 1"); break;
508 case 0xd0: sprintf (buff,"rnc"); break;
509 case 0xd1: sprintf (buff,"pop d"); break;
510 case 0xd2: sprintf (buff,"jnc $%04x", ARGW(pc)); pc+=2; break;
511 case 0xd3: sprintf (buff,"out $%02x", ARG(pc)); pc++; break;
512 case 0xd4: sprintf (buff,"cnc $%04x", ARGW(pc)); pc+=2; break;
513 case 0xd5: sprintf (buff,"push d"); break;
514 case 0xd6: sprintf (buff,"sui $%02x", ARG(pc)); pc++; break;
515 case 0xd7: sprintf (buff,"rst 2"); break;
516 case 0xd8: sprintf (buff,"rc"); break;
517 case 0xd9: sprintf (buff,"shlx d (*)"); break;
518 case 0xda: sprintf (buff,"jc $%04x", ARGW(pc)); pc+=2; break;
519 case 0xdb: sprintf (buff,"in $%02x", ARG(pc)); pc++; break;
520 case 0xdc: sprintf (buff,"cc $%04x", ARGW(pc)); pc+=2; break;
521 case 0xdd: sprintf (buff,"jnx $%04x (*)", ARGW(pc)); pc+=2; break;
522 case 0xde: sprintf (buff,"sbi $%02x", ARG(pc)); pc++; break;
523 case 0xdf: sprintf (buff,"rst 3"); break;
524 case 0xe0: sprintf (buff,"rpe"); break;
525 case 0xe1: sprintf (buff,"pop h"); break;
526 case 0xe2: sprintf (buff,"jpo $%04x", ARGW(pc)); pc+=2; break;
527 case 0xe3: sprintf (buff,"xthl"); break;
528 case 0xe4: sprintf (buff,"cpe $%04x", ARGW(pc)); pc+=2; break;
529 case 0xe5: sprintf (buff,"push h"); break;
530 case 0xe6: sprintf (buff,"ani $%02x", ARG(pc)); pc++; break;
531 case 0xe7: sprintf (buff,"rst 4"); break;
532 case 0xe8: sprintf (buff,"rpo"); break;
533 case 0xe9: sprintf (buff,"pchl"); break;
534 case 0xea: sprintf (buff,"jpe $%04x", ARGW(pc)); pc+=2; break;
535 case 0xeb: sprintf (buff,"xchg"); break;
536 case 0xec: sprintf (buff,"cpo $%04x", ARGW(pc)); pc+=2; break;
537 case 0xed: sprintf (buff,"lhlx d (*)"); break;
538 case 0xee: sprintf (buff,"xri $%02x", ARG(pc)); pc++; break;
539 case 0xef: sprintf (buff,"rst 5"); break;
540 case 0xf0: sprintf (buff,"rp"); break;
541 case 0xf1: sprintf (buff,"pop a"); break;
542 case 0xf2: sprintf (buff,"jp $%04x", ARGW(pc)); pc+=2; break;
543 case 0xf3: sprintf (buff,"di"); break;
544 case 0xf4: sprintf (buff,"cp $%04x", ARGW(pc)); pc+=2; break;
545 case 0xf5: sprintf (buff,"push a"); break;
546 case 0xf6: sprintf (buff,"ori $%02x", ARG(pc)); pc++; break;
547 case 0xf7: sprintf (buff,"rst 6"); break;
548 case 0xf8: sprintf (buff,"rm"); break;
549 case 0xf9: sprintf (buff,"sphl"); break;
550 case 0xfa: sprintf (buff,"jm $%04x", ARGW(pc)); pc+=2; break;
551 case 0xfb: sprintf (buff,"ei"); break;
552 case 0xfc: sprintf (buff,"cm $%04x", ARGW(pc)); pc+=2; break;
553 case 0xfd: sprintf (buff,"jx $%04x (*)", ARGW(pc)); pc+=2; break;
554 case 0xfe: sprintf (buff,"cpi $%02x", ARG(pc)); pc++; break;
555 case 0xff: sprintf (buff,"rst 7"); break;
556 #endif
557 }
558 return pc - PC;
559 }
560
561