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