1use crate::preamble::*;
2
3pub const TABINSTRFDCB: [&str; 256] = [
10 "RLC (IY+nn), B",
11 "RLC (IY+nn), C",
12 "RLC (IY+nn), D",
13 "RLC (IY+nn), E",
14 "RLC (IY+nn), H",
15 "RLC (IY+nn), L",
16 "RLC (IY+nn)",
17 "RLC (IY+nn), A",
18 "RRC (IY+nn), B",
19 "RRC (IY+nn), C",
20 "RRC (IY+nn), D",
21 "RRC (IY+nn), E",
22 "RRC (IY+nn), H",
23 "RRC (IY+nn), L",
24 "RRC (IY+nn)",
25 "RRC (IY+nn), A",
26 "RL (IY+nn), B",
27 "RL (IY+nn), C",
28 "RL (IY+nn), D",
29 "RL (IY+nn), E",
30 "RL (IY+nn), H",
31 "RL (IY+nn), L",
32 "RL (IY+nn)",
33 "RL (IY+nn), A",
34 "RR (IY+nn), B",
35 "RR (IY+nn), C",
36 "RR (IY+nn), D",
37 "RR (IY+nn), E",
38 "RR (IY+nn), H",
39 "RR (IY+nn), L",
40 "RR (IY+nn)",
41 "RR (IY+nn), A",
42 "SLA (IY+nn),B",
43 "SLA (IY+nn),C",
44 "SLA (IY+nn),D",
45 "SLA (IY+nn),E",
46 "SLA (IY+nn),H",
47 "SLA (IY+nn),L",
48 "SLA (IY+nn)",
49 "SLA (IY+nn),A",
50 "SRA (IY+nn), B",
51 "SRA (IY+nn), C",
52 "SRA (IY+nn), D",
53 "SRA (IY+nn), E",
54 "SRA (IY+nn), H",
55 "SRA (IY+nn), L",
56 "SRA (IY+nn)",
57 "SRA (IY+nn), A",
58 "SL1 (IY+nn), B",
59 "SL1 (IY+nn), C",
60 "SL1 (IY+nn), D",
61 "SL1 (IY+nn), E",
62 "SL1 (IY+nn), H",
63 "SL1 (IY+nn), L",
64 "SL1 (IY+nn)",
65 "SL1 (IY+nn), A",
66 "SRL (IY+nn), B",
67 "SRL (IY+nn), C",
68 "SRL (IY+nn), D",
69 "SRL (IY+nn), E",
70 "SRL (IY+nn), H",
71 "SRL (IY+nn), L",
72 "SRL (IY+nn)",
73 "SRL (IY+nn), A",
74 "BIT 0,(IY+nn)",
75 "BIT 0,(IY+nn)",
76 "BIT 0,(IY+nn)",
77 "BIT 0,(IY+nn)",
78 "BIT 0,(IY+nn)",
79 "BIT 0,(IY+nn)",
80 "BIT 0,(IY+nn)",
81 "BIT 0,(IY+nn)",
82 "BIT 1,(IY+nn)",
83 "BIT 1,(IY+nn)",
84 "BIT 1,(IY+nn)",
85 "BIT 1,(IY+nn)",
86 "BIT 1,(IY+nn)",
87 "BIT 1,(IY+nn)",
88 "BIT 1,(IY+nn)",
89 "BIT 1,(IY+nn)",
90 "BIT 2,(IY+nn)",
91 "BIT 2,(IY+nn)",
92 "BIT 2,(IY+nn)",
93 "BIT 2,(IY+nn)",
94 "BIT 2,(IY+nn)",
95 "BIT 2,(IY+nn)",
96 "BIT 2,(IY+nn)",
97 "BIT 2,(IY+nn)",
98 "BIT 3,(IY+nn)",
99 "BIT 3,(IY+nn)",
100 "BIT 3,(IY+nn)",
101 "BIT 3,(IY+nn)",
102 "BIT 3,(IY+nn)",
103 "BIT 3,(IY+nn)",
104 "BIT 3,(IY+nn)",
105 "BIT 3,(IY+nn)",
106 "BIT 4,(IY+nn)",
107 "BIT 4,(IY+nn)",
108 "BIT 4,(IY+nn)",
109 "BIT 4,(IY+nn)",
110 "BIT 4,(IY+nn)",
111 "BIT 4,(IY+nn)",
112 "BIT 4,(IY+nn)",
113 "BIT 4,(IY+nn)",
114 "BIT 5,(IY+nn)",
115 "BIT 5,(IY+nn)",
116 "BIT 5,(IY+nn)",
117 "BIT 5,(IY+nn)",
118 "BIT 5,(IY+nn)",
119 "BIT 5,(IY+nn)",
120 "BIT 5,(IY+nn)",
121 "BIT 5,(IY+nn)",
122 "BIT 6,(IY+nn)",
123 "BIT 6,(IY+nn)",
124 "BIT 6,(IY+nn)",
125 "BIT 6,(IY+nn)",
126 "BIT 6,(IY+nn)",
127 "BIT 6,(IY+nn)",
128 "BIT 6,(IY+nn)",
129 "BIT 6,(IY+nn)",
130 "BIT 7,(IY+nn)",
131 "BIT 7,(IY+nn)",
132 "BIT 7,(IY+nn)",
133 "BIT 7,(IY+nn)",
134 "BIT 7,(IY+nn)",
135 "BIT 7,(IY+nn)",
136 "BIT 7,(IY+nn)",
137 "BIT 7,(IY+nn)",
138 "RES 0,(IY+nn), B",
139 "RES 0,(IY+nn), C",
140 "RES 0,(IY+nn), D",
141 "RES 0,(IY+nn), E",
142 "RES 0,(IY+nn), H",
143 "RES 0,(IY+nn), L",
144 "RES 0,(IY+nn)",
145 "RES 0,(IY+nn), A",
146 "RES 1,(IY+nn), B",
147 "RES 1,(IY+nn), C",
148 "RES 1,(IY+nn), D",
149 "RES 1,(IY+nn), E",
150 "RES 1,(IY+nn), H",
151 "RES 1,(IY+nn), L",
152 "RES 1,(IY+nn)",
153 "RES 1,(IY+nn), A",
154 "RES 2,(IY+nn), B",
155 "RES 2,(IY+nn), C",
156 "RES 2,(IY+nn), D",
157 "RES 2,(IY+nn), E",
158 "RES 2,(IY+nn), H",
159 "RES 2,(IY+nn), L",
160 "RES 2,(IY+nn)",
161 "RES 2,(IY+nn), A",
162 "RES 3,(IY+nn), B",
163 "RES 3,(IY+nn), C",
164 "RES 3,(IY+nn), D",
165 "RES 3,(IY+nn), E",
166 "RES 3,(IY+nn), H",
167 "RES 3,(IY+nn), L",
168 "RES 3,(IY+nn)",
169 "RES 3,(IY+nn), A",
170 "RES 4,(IY+nn), B",
171 "RES 4,(IY+nn), C",
172 "RES 4,(IY+nn), D",
173 "RES 4,(IY+nn), E",
174 "RES 4,(IY+nn), H",
175 "RES 4,(IY+nn), L",
176 "RES 4,(IY+nn)",
177 "RES 4,(IY+nn), A",
178 "RES 5,(IY+nn), B",
179 "RES 5,(IY+nn), C",
180 "RES 5,(IY+nn), D",
181 "RES 5,(IY+nn), E",
182 "RES 5,(IY+nn), H",
183 "RES 5,(IY+nn), L",
184 "RES 5,(IY+nn)",
185 "RES 5,(IY+nn), A",
186 "RES 6,(IY+nn), B",
187 "RES 6,(IY+nn), C",
188 "RES 6,(IY+nn), D",
189 "RES 6,(IY+nn), E",
190 "RES 6,(IY+nn), H",
191 "RES 6,(IY+nn), L",
192 "RES 6,(IY+nn)",
193 "RES 6,(IY+nn), A",
194 "RES 7,(IY+nn), B",
195 "RES 7,(IY+nn), C",
196 "RES 7,(IY+nn), D",
197 "RES 7,(IY+nn), E",
198 "RES 7,(IY+nn), H",
199 "RES 7,(IY+nn), L",
200 "RES 7,(IY+nn)",
201 "RES 7,(IY+nn), A",
202 "SET 0,(IY+nn), B",
203 "SET 0,(IY+nn), C",
204 "SET 0,(IY+nn), D",
205 "SET 0,(IY+nn), E",
206 "SET 0,(IY+nn), H",
207 "SET 0,(IY+nn), L",
208 "SET 0,(IY+nn)",
209 "SET 0,(IY+nn), A",
210 "SET 1,(IY+nn), B",
211 "SET 1,(IY+nn), C",
212 "SET 1,(IY+nn), D",
213 "SET 1,(IY+nn), E",
214 "SET 1,(IY+nn), H",
215 "SET 1,(IY+nn), L",
216 "SET 1,(IY+nn)",
217 "SET 1,(IY+nn), A",
218 "SET 2,(IY+nn), B",
219 "SET 2,(IY+nn), C",
220 "SET 2,(IY+nn), D",
221 "SET 2,(IY+nn), E",
222 "SET 2,(IY+nn), H",
223 "SET 2,(IY+nn), L",
224 "SET 2,(IY+nn)",
225 "SET 2,(IY+nn), A",
226 "SET 3,(IY+nn), B",
227 "SET 3,(IY+nn), C",
228 "SET 3,(IY+nn), D",
229 "SET 3,(IY+nn), E",
230 "SET 3,(IY+nn), H",
231 "SET 3,(IY+nn), L",
232 "SET 3,(IY+nn)",
233 "SET 3,(IY+nn), A",
234 "SET 4,(IY+nn), B",
235 "SET 4,(IY+nn), C",
236 "SET 4,(IY+nn), D",
237 "SET 4,(IY+nn), E",
238 "SET 4,(IY+nn), H",
239 "SET 4,(IY+nn), L",
240 "SET 4,(IY+nn)",
241 "SET 4,(IY+nn), A",
242 "SET 5,(IY+nn), B",
243 "SET 5,(IY+nn), C",
244 "SET 5,(IY+nn), D",
245 "SET 5,(IY+nn), E",
246 "SET 5,(IY+nn), H",
247 "SET 5,(IY+nn), L",
248 "SET 5,(IY+nn)",
249 "SET 5,(IY+nn), A",
250 "SET 6,(IY+nn), B",
251 "SET 6,(IY+nn), C",
252 "SET 6,(IY+nn), D",
253 "SET 6,(IY+nn), E",
254 "SET 6,(IY+nn), H",
255 "SET 6,(IY+nn), L",
256 "SET 6,(IY+nn)",
257 "SET 6,(IY+nn), A",
258 "SET 7,(IY+nn), B",
259 "SET 7,(IY+nn), C",
260 "SET 7,(IY+nn), D",
261 "SET 7,(IY+nn), E",
262 "SET 7,(IY+nn), H",
263 "SET 7,(IY+nn), L",
264 "SET 7,(IY+nn)",
265 "SET 7,(IY+nn), A"
266];
267
268pub const TABINSTRDDCB: [&str; 256] = [
269 "RLC (IX+nn), B",
270 "RLC (IX+nn), C",
271 "RLC (IX+nn), D",
272 "RLC (IX+nn), E",
273 "RLC (IX+nn), H",
274 "RLC (IX+nn), L",
275 "RLC (IX+nn)",
276 "RLC (IX+nn), A",
277 "RRC (IX+nn), B",
278 "RRC (IX+nn), C",
279 "RRC (IX+nn), D",
280 "RRC (IX+nn), E",
281 "RRC (IX+nn), H",
282 "RRC (IX+nn), L",
283 "RRC (IX+nn)",
284 "RRC (IX+nn), A",
285 "RL (IX+nn), B",
286 "RL (IX+nn), C",
287 "RL (IX+nn), D",
288 "RL (IX+nn), E",
289 "RL (IX+nn), H",
290 "RL (IX+nn), L",
291 "RL (IX+nn)",
292 "RL (IX+nn), A",
293 "RR (IX+nn), B",
294 "RR (IX+nn), C",
295 "RR (IX+nn), D",
296 "RR (IX+nn), E",
297 "RR (IX+nn), H",
298 "RR (IX+nn), L",
299 "RR (IX+nn)",
300 "RR (IX+nn), A",
301 "SLA (IX+nn),B",
302 "SLA (IX+nn),C",
303 "SLA (IX+nn),D",
304 "SLA (IX+nn),E",
305 "SLA (IX+nn),H",
306 "SLA (IX+nn),L",
307 "SLA (IX+nn)",
308 "SLA (IX+nn),A",
309 "SRA (IX+nn), B",
310 "SRA (IX+nn), C",
311 "SRA (IX+nn), D",
312 "SRA (IX+nn), E",
313 "SRA (IX+nn), H",
314 "SRA (IX+nn), L",
315 "SRA (IX+nn)",
316 "SRA (IX+nn), A",
317 "SL1 (IX+nn), B",
318 "SL1 (IX+nn), C",
319 "SL1 (IX+nn), D",
320 "SL1 (IX+nn), E",
321 "SL1 (IX+nn), H",
322 "SL1 (IX+nn), L",
323 "SL1 (IX+nn)",
324 "SL1 (IX+nn), A",
325 "SRL (IX+nn), B",
326 "SRL (IX+nn), C",
327 "SRL (IX+nn), D",
328 "SRL (IX+nn), E",
329 "SRL (IX+nn), H",
330 "SRL (IX+nn), L",
331 "SRL (IX+nn)",
332 "SRL (IX+nn), A",
333 "BIT 0,(IX+nn)",
334 "BIT 0,(IX+nn)",
335 "BIT 0,(IX+nn)",
336 "BIT 0,(IX+nn)",
337 "BIT 0,(IX+nn)",
338 "BIT 0,(IX+nn)",
339 "BIT 0,(IX+nn)",
340 "BIT 0,(IX+nn)",
341 "BIT 1,(IX+nn)",
342 "BIT 1,(IX+nn)",
343 "BIT 1,(IX+nn)",
344 "BIT 1,(IX+nn)",
345 "BIT 1,(IX+nn)",
346 "BIT 1,(IX+nn)",
347 "BIT 1,(IX+nn)",
348 "BIT 1,(IX+nn)",
349 "BIT 2,(IX+nn)",
350 "BIT 2,(IX+nn)",
351 "BIT 2,(IX+nn)",
352 "BIT 2,(IX+nn)",
353 "BIT 2,(IX+nn)",
354 "BIT 2,(IX+nn)",
355 "BIT 2,(IX+nn)",
356 "BIT 2,(IX+nn)",
357 "BIT 3,(IX+nn)",
358 "BIT 3,(IX+nn)",
359 "BIT 3,(IX+nn)",
360 "BIT 3,(IX+nn)",
361 "BIT 3,(IX+nn)",
362 "BIT 3,(IX+nn)",
363 "BIT 3,(IX+nn)",
364 "BIT 3,(IX+nn)",
365 "BIT 4,(IX+nn)",
366 "BIT 4,(IX+nn)",
367 "BIT 4,(IX+nn)",
368 "BIT 4,(IX+nn)",
369 "BIT 4,(IX+nn)",
370 "BIT 4,(IX+nn)",
371 "BIT 4,(IX+nn)",
372 "BIT 4,(IX+nn)",
373 "BIT 5,(IX+nn)",
374 "BIT 5,(IX+nn)",
375 "BIT 5,(IX+nn)",
376 "BIT 5,(IX+nn)",
377 "BIT 5,(IX+nn)",
378 "BIT 5,(IX+nn)",
379 "BIT 5,(IX+nn)",
380 "BIT 5,(IX+nn)",
381 "BIT 6,(IX+nn)",
382 "BIT 6,(IX+nn)",
383 "BIT 6,(IX+nn)",
384 "BIT 6,(IX+nn)",
385 "BIT 6,(IX+nn)",
386 "BIT 6,(IX+nn)",
387 "BIT 6,(IX+nn)",
388 "BIT 6,(IX+nn)",
389 "BIT 7,(IX+nn)",
390 "BIT 7,(IX+nn)",
391 "BIT 7,(IX+nn)",
392 "BIT 7,(IX+nn)",
393 "BIT 7,(IX+nn)",
394 "BIT 7,(IX+nn)",
395 "BIT 7,(IX+nn)",
396 "BIT 7,(IX+nn)",
397 "RES 0,(IX+nn), B",
398 "RES 0,(IX+nn), C",
399 "RES 0,(IX+nn), D",
400 "RES 0,(IX+nn), E",
401 "RES 0,(IX+nn), H",
402 "RES 0,(IX+nn), L",
403 "RES 0,(IX+nn)",
404 "RES 0,(IX+nn), A",
405 "RES 1,(IX+nn), B",
406 "RES 1,(IX+nn), C",
407 "RES 1,(IX+nn), D",
408 "RES 1,(IX+nn), E",
409 "RES 1,(IX+nn), H",
410 "RES 1,(IX+nn), L",
411 "RES 1,(IX+nn)",
412 "RES 1,(IX+nn), A",
413 "RES 2,(IX+nn), B",
414 "RES 2,(IX+nn), C",
415 "RES 2,(IX+nn), D",
416 "RES 2,(IX+nn), E",
417 "RES 2,(IX+nn), H",
418 "RES 2,(IX+nn), L",
419 "RES 2,(IX+nn)",
420 "RES 2,(IX+nn), A",
421 "RES 3,(IX+nn), B",
422 "RES 3,(IX+nn), C",
423 "RES 3,(IX+nn), D",
424 "RES 3,(IX+nn), E",
425 "RES 3,(IX+nn), H",
426 "RES 3,(IX+nn), L",
427 "RES 3,(IX+nn)",
428 "RES 3,(IX+nn), A",
429 "RES 4,(IX+nn), B",
430 "RES 4,(IX+nn), C",
431 "RES 4,(IX+nn), D",
432 "RES 4,(IX+nn), E",
433 "RES 4,(IX+nn), H",
434 "RES 4,(IX+nn), L",
435 "RES 4,(IX+nn)",
436 "RES 4,(IX+nn), A",
437 "RES 5,(IX+nn), B",
438 "RES 5,(IX+nn), C",
439 "RES 5,(IX+nn), D",
440 "RES 5,(IX+nn), E",
441 "RES 5,(IX+nn), H",
442 "RES 5,(IX+nn), L",
443 "RES 5,(IX+nn)",
444 "RES 5,(IX+nn), A",
445 "RES 6,(IX+nn), B",
446 "RES 6,(IX+nn), C",
447 "RES 6,(IX+nn), D",
448 "RES 6,(IX+nn), E",
449 "RES 6,(IX+nn), H",
450 "RES 6,(IX+nn), L",
451 "RES 6,(IX+nn)",
452 "RES 6,(IX+nn), A",
453 "RES 7,(IX+nn), B",
454 "RES 7,(IX+nn), C",
455 "RES 7,(IX+nn), D",
456 "RES 7,(IX+nn), E",
457 "RES 7,(IX+nn), H",
458 "RES 7,(IX+nn), L",
459 "RES 7,(IX+nn)",
460 "RES 7,(IX+nn), A",
461 "SET 0,(IX+nn), B",
462 "SET 0,(IX+nn), C",
463 "SET 0,(IX+nn), D",
464 "SET 0,(IX+nn), E",
465 "SET 0,(IX+nn), H",
466 "SET 0,(IX+nn), L",
467 "SET 0,(IX+nn)",
468 "SET 0,(IX+nn), A",
469 "SET 1,(IX+nn), B",
470 "SET 1,(IX+nn), C",
471 "SET 1,(IX+nn), D",
472 "SET 1,(IX+nn), E",
473 "SET 1,(IX+nn), H",
474 "SET 1,(IX+nn), L",
475 "SET 1,(IX+nn)",
476 "SET 1,(IX+nn), A",
477 "SET 2,(IX+nn), B",
478 "SET 2,(IX+nn), C",
479 "SET 2,(IX+nn), D",
480 "SET 2,(IX+nn), E",
481 "SET 2,(IX+nn), H",
482 "SET 2,(IX+nn), L",
483 "SET 2,(IX+nn)",
484 "SET 2,(IX+nn), A",
485 "SET 3,(IX+nn), B",
486 "SET 3,(IX+nn), C",
487 "SET 3,(IX+nn), D",
488 "SET 3,(IX+nn), E",
489 "SET 3,(IX+nn), H",
490 "SET 3,(IX+nn), L",
491 "SET 3,(IX+nn)",
492 "SET 3,(IX+nn), A",
493 "SET 4,(IX+nn), B",
494 "SET 4,(IX+nn), C",
495 "SET 4,(IX+nn), D",
496 "SET 4,(IX+nn), E",
497 "SET 4,(IX+nn), H",
498 "SET 4,(IX+nn), L",
499 "SET 4,(IX+nn)",
500 "SET 4,(IX+nn), A",
501 "SET 5,(IX+nn), B",
502 "SET 5,(IX+nn), C",
503 "SET 5,(IX+nn), D",
504 "SET 5,(IX+nn), E",
505 "SET 5,(IX+nn), H",
506 "SET 5,(IX+nn), L",
507 "SET 5,(IX+nn)",
508 "SET 5,(IX+nn), A",
509 "SET 6,(IX+nn), B",
510 "SET 6,(IX+nn), C",
511 "SET 6,(IX+nn), D",
512 "SET 6,(IX+nn), E",
513 "SET 6,(IX+nn), H",
514 "SET 6,(IX+nn), L",
515 "SET 6,(IX+nn)",
516 "SET 6,(IX+nn), A",
517 "SET 7,(IX+nn), B",
518 "SET 7,(IX+nn), C",
519 "SET 7,(IX+nn), D",
520 "SET 7,(IX+nn), E",
521 "SET 7,(IX+nn), H",
522 "SET 7,(IX+nn), L",
523 "SET 7,(IX+nn)",
524 "SET 7,(IX+nn), A"
525];
526
527pub const TABINSTRCB: [&str; 256] = [
528 "RLC B",
529 "RLC C",
530 "RLC D",
531 "RLC E",
532 "RLC H",
533 "RLC L",
534 "RLC (HL)",
535 "RLC A",
536 "RRC B",
537 "RRC C",
538 "RRC D",
539 "RRC E",
540 "RRC H",
541 "RRC L",
542 "RRC (HL)",
543 "RRC A",
544 "RL B",
545 "RL C",
546 "RL D",
547 "RL E",
548 "RL H",
549 "RL L",
550 "RL (HL)",
551 "RL A",
552 "RR B",
553 "RR C",
554 "RR D",
555 "RR E",
556 "RR H",
557 "RR L",
558 "RR (HL)",
559 "RR A",
560 "SLA B",
561 "SLA C",
562 "SLA D",
563 "SLA E",
564 "SLA H",
565 "SLA L",
566 "SLA (HL)",
567 "SLA A",
568 "SRA B",
569 "SRA C",
570 "SRA D",
571 "SRA E",
572 "SRA H",
573 "SRA L",
574 "SRA (HL)",
575 "SRA A",
576 "SL1 B",
577 "SL1 C",
578 "SL1 D",
579 "SL1 E",
580 "SL1 H",
581 "SL1 L",
582 "SL1 (HL)",
583 "SL1 A",
584 "SRL B",
585 "SRL C",
586 "SRL D",
587 "SRL E",
588 "SRL H",
589 "SRL L",
590 "SRL (HL)",
591 "SRL A",
592 "BIT 0,B",
593 "BIT 0,C",
594 "BIT 0,D",
595 "BIT 0,E",
596 "BIT 0,H",
597 "BIT 0,L",
598 "BIT 0,(HL)",
599 "BIT 0,A",
600 "BIT 1,B",
601 "BIT 1,C",
602 "BIT 1,D",
603 "BIT 1,E",
604 "BIT 1,H",
605 "BIT 1,L",
606 "BIT 1,(HL)",
607 "BIT 1,A",
608 "BIT 2,B",
609 "BIT 2,C",
610 "BIT 2,D",
611 "BIT 2,E",
612 "BIT 2,H",
613 "BIT 2,L",
614 "BIT 2,(HL)",
615 "BIT 2,A",
616 "BIT 3,B",
617 "BIT 3,C",
618 "BIT 3,D",
619 "BIT 3,E",
620 "BIT 3,H",
621 "BIT 3,L",
622 "BIT 3,(HL)",
623 "BIT 3,A",
624 "BIT 4,B",
625 "BIT 4,C",
626 "BIT 4,D",
627 "BIT 4,E",
628 "BIT 4,H",
629 "BIT 4,L",
630 "BIT 4,(HL)",
631 "BIT 4,A",
632 "BIT 5,B",
633 "BIT 5,C",
634 "BIT 5,D",
635 "BIT 5,E",
636 "BIT 5,H",
637 "BIT 5,L",
638 "BIT 5,(HL)",
639 "BIT 5,A",
640 "BIT 6,B",
641 "BIT 6,C",
642 "BIT 6,D",
643 "BIT 6,E",
644 "BIT 6,H",
645 "BIT 6,L",
646 "BIT 6,(HL)",
647 "BIT 6,A",
648 "BIT 7,B",
649 "BIT 7,C",
650 "BIT 7,D",
651 "BIT 7,E",
652 "BIT 7,H",
653 "BIT 7,L",
654 "BIT 7,(HL)",
655 "BIT 7,A",
656 "RES 0,B",
657 "RES 0,C",
658 "RES 0,D",
659 "RES 0,E",
660 "RES 0,H",
661 "RES 0,L",
662 "RES 0,(HL)",
663 "RES 0,A",
664 "RES 1,B",
665 "RES 1,C",
666 "RES 1,D",
667 "RES 1,E",
668 "RES 1,H",
669 "RES 1,L",
670 "RES 1,(HL)",
671 "RES 1,A",
672 "RES 2,B",
673 "RES 2,C",
674 "RES 2,D",
675 "RES 2,E",
676 "RES 2,H",
677 "RES 2,L",
678 "RES 2,(HL)",
679 "RES 2,A",
680 "RES 3,B",
681 "RES 3,C",
682 "RES 3,D",
683 "RES 3,E",
684 "RES 3,H",
685 "RES 3,L",
686 "RES 3,(HL)",
687 "RES 3,A",
688 "RES 4,B",
689 "RES 4,C",
690 "RES 4,D",
691 "RES 4,E",
692 "RES 4,H",
693 "RES 4,L",
694 "RES 4,(HL)",
695 "RES 4,A",
696 "RES 5,B",
697 "RES 5,C",
698 "RES 5,D",
699 "RES 5,E",
700 "RES 5,H",
701 "RES 5,L",
702 "RES 5,(HL)",
703 "RES 5,A",
704 "RES 6,B",
705 "RES 6,C",
706 "RES 6,D",
707 "RES 6,E",
708 "RES 6,H",
709 "RES 6,L",
710 "RES 6,(HL)",
711 "RES 6,A",
712 "RES 7,B",
713 "RES 7,C",
714 "RES 7,D",
715 "RES 7,E",
716 "RES 7,H",
717 "RES 7,L",
718 "RES 7,(HL)",
719 "RES 7,A",
720 "SET 0,B",
721 "SET 0,C",
722 "SET 0,D",
723 "SET 0,E",
724 "SET 0,H",
725 "SET 0,L",
726 "SET 0,(HL)",
727 "SET 0,A",
728 "SET 1,B",
729 "SET 1,C",
730 "SET 1,D",
731 "SET 1,E",
732 "SET 1,H",
733 "SET 1,L",
734 "SET 1,(HL)",
735 "SET 1,A",
736 "SET 2,B",
737 "SET 2,C",
738 "SET 2,D",
739 "SET 2,E",
740 "SET 2,H",
741 "SET 2,L",
742 "SET 2,(HL)",
743 "SET 2,A",
744 "SET 3,B",
745 "SET 3,C",
746 "SET 3,D",
747 "SET 3,E",
748 "SET 3,H",
749 "SET 3,L",
750 "SET 3,(HL)",
751 "SET 3,A",
752 "SET 4,B",
753 "SET 4,C",
754 "SET 4,D",
755 "SET 4,E",
756 "SET 4,H",
757 "SET 4,L",
758 "SET 4,(HL)",
759 "SET 4,A",
760 "SET 5,B",
761 "SET 5,C",
762 "SET 5,D",
763 "SET 5,E",
764 "SET 5,H",
765 "SET 5,L",
766 "SET 5,(HL)",
767 "SET 5,A",
768 "SET 6,B",
769 "SET 6,C",
770 "SET 6,D",
771 "SET 6,E",
772 "SET 6,H",
773 "SET 6,L",
774 "SET 6,(HL)",
775 "SET 6,A",
776 "SET 7,B",
777 "SET 7,C",
778 "SET 7,D",
779 "SET 7,E",
780 "SET 7,H",
781 "SET 7,L",
782 "SET 7,(HL)",
783 "SET 7,A"
784];
785
786pub const TABINSTRED: [&str; 256] = [
787 "",
788 "",
789 "",
790 "",
791 "",
792 "",
793 "",
794 "",
795 "",
796 "",
797 "",
798 "",
799 "",
800 "",
801 "",
802 "",
803 "",
804 "",
805 "",
806 "",
807 "",
808 "",
809 "",
810 "",
811 "",
812 "",
813 "",
814 "",
815 "",
816 "",
817 "",
818 "",
819 "",
820 "",
821 "",
822 "",
823 "",
824 "",
825 "",
826 "",
827 "",
828 "",
829 "",
830 "",
831 "",
832 "",
833 "",
834 "",
835 "",
836 "",
837 "",
838 "",
839 "",
840 "",
841 "",
842 "",
843 "",
844 "",
845 "",
846 "",
847 "",
848 "",
849 "",
850 "",
851 "IN B,(C)",
852 "OUT (C),B",
853 "SBC HL,BC",
854 "LD (nnnn),BC",
855 "NEG",
856 "RETN",
857 "IM 0",
858 "LD I,A",
859 "IN C,(C)",
860 "OUT (C),C",
861 "ADC HL,BC",
862 "LD BC,(nnnn)",
863 "NEG",
864 "RETI",
865 "IM 0",
866 "LD R,A",
867 "IN D,(C)",
868 "OUT (C),D",
869 "SBC HL,DE",
870 "LD (nnnn),DE",
871 "NEG",
872 "RETN",
873 "IM 1",
874 "LD A,I",
875 "IN E,(C)",
876 "OUT (C),E",
877 "ADC HL,DE",
878 "LD DE,(nnnn)",
879 "NEG",
880 "RETN",
881 "IM 2",
882 "LD A,R",
883 "IN H,(C)",
884 "OUT (C),H",
885 "SBC HL,HL",
886 "LD (nnnn), hl",
887 "NEG",
888 "RETN",
889 "IM 0",
890 "RRD",
891 "IN L,(C)",
892 "OUT (C),L",
893 "ADC HL,HL",
894 "LD HL, (nnnn)",
895 "NEG",
896 "RETN",
897 "IM 0",
898 "RLD",
899 "IN 0,(C)",
900 "OUT (C),0",
901 "SBC HL,SP",
902 "LD (nnnn),SP",
903 "NEG",
904 "RETN",
905 "IM 1",
906 "",
907 "IN A,(C)",
908 "OUT (C),A",
909 "ADC HL,SP",
910 "LD SP,(nnnn)",
911 "NEG",
912 "RET N",
913 "IM 2",
914 "",
915 "",
916 "",
917 "",
918 "",
919 "",
920 "",
921 "",
922 "",
923 "",
924 "",
925 "",
926 "",
927 "",
928 "",
929 "",
930 "",
931 "",
932 "",
933 "",
934 "",
935 "",
936 "",
937 "",
938 "",
939 "",
940 "",
941 "",
942 "",
943 "",
944 "",
945 "",
946 "",
947 "LDI",
948 "CPI",
949 "INI",
950 "OUTI",
951 "",
952 "",
953 "",
954 "",
955 "LDD",
956 "CPD",
957 "IND",
958 "OUTD",
959 "",
960 "",
961 "",
962 "",
963 "LDIR",
964 "CPIR",
965 "INIR",
966 "OTIR",
967 "",
968 "",
969 "",
970 "",
971 "LDDR",
972 "CPDR",
973 "INDR",
974 "OTDR",
975 "",
976 "",
977 "",
978 "",
979 "",
980 "",
981 "",
982 "",
983 "",
984 "",
985 "",
986 "",
987 "",
988 "",
989 "",
990 "",
991 "",
992 "",
993 "",
994 "",
995 "",
996 "",
997 "",
998 "",
999 "",
1000 "",
1001 "",
1002 "",
1003 "",
1004 "",
1005 "",
1006 "",
1007 "",
1008 "",
1009 "",
1010 "",
1011 "",
1012 "",
1013 "",
1014 "",
1015 "",
1016 "",
1017 "",
1018 "",
1019 "",
1020 "",
1021 "",
1022 "",
1023 "",
1024 "",
1025 "",
1026 "",
1027 "",
1028 "",
1029 "",
1030 "",
1031 "",
1032 "",
1033 "",
1034 "",
1035 "",
1036 "",
1037 "",
1038 "",
1039 "",
1040 "",
1041 "",
1042 ""
1043];
1044
1045pub const TABINSTRDD: [&str; 256] = [
1046 "",
1047 "",
1048 "",
1049 "",
1050 "",
1051 "",
1052 "",
1053 "",
1054 "",
1055 "ADD IX,BC",
1056 "",
1057 "",
1058 "",
1059 "",
1060 "",
1061 "",
1062 "",
1063 "",
1064 "",
1065 "",
1066 "",
1067 "",
1068 "",
1069 "",
1070 "",
1071 "ADD IX,DE",
1072 "",
1073 "",
1074 "",
1075 "",
1076 "",
1077 "",
1078 "",
1079 "LD IX,nnnn",
1080 "LD (nnnn),IX",
1081 "INC IX",
1082 "INC IXh",
1083 "DEC IXh",
1084 "LD IXh,nn",
1085 "",
1086 "",
1087 "ADD IX,IX",
1088 "LD IX,(nnnn)",
1089 "DEC IX", "INC IXl",
1091 "DEC IXl",
1092 "LD IXl,nn",
1093 "",
1094 "",
1095 "",
1096 "",
1097 "",
1098 "INC (IX+nn)",
1099 "DEC (IX+nn)",
1100 "LD (IX+nn),nn",
1101 "",
1102 "",
1103 "ADD IX,SP",
1104 "",
1105 "",
1106 "",
1107 "",
1108 "",
1109 "",
1110 "",
1111 "",
1112 "",
1113 "",
1114 "LD B,IXh",
1115 "LD B,IXl",
1116 "LD B,(IX+nn)",
1117 "",
1118 "",
1119 "",
1120 "",
1121 "",
1122 "LD C,IXh",
1123 "LD C,IXl",
1124 "LD C,(IX+nn)",
1125 "",
1126 "",
1127 "",
1128 "",
1129 "",
1130 "LD D,IXh",
1131 "LD D,IXl",
1132 "LD D,(IX+nn)",
1133 "",
1134 "",
1135 "",
1136 "",
1137 "",
1138 "LD E,IXh",
1139 "LD E,IXl",
1140 "LD E,(IX+nn)",
1141 "",
1142 "LD IXh,B",
1143 "LD IXh,C",
1144 "LD IXh,D",
1145 "LD IXh,E",
1146 "LD IXh,IXh",
1147 "LD IXh,IXl",
1148 "LD H,(IX+nn)",
1149 "LD IXh,A",
1150 "LD IXl,B",
1151 "LD IXl,C",
1152 "LD IXl,D",
1153 "LD IXl,E",
1154 "LD IXl,IXh",
1155 "LD IXl,IXl",
1156 "LD L,(IX+nn)",
1157 "LD IXl,A",
1158 "LD (IX+nn),B",
1159 "LD (IX+nn),C",
1160 "LD (IX+nn),D",
1161 "LD (IX+nn),E",
1162 "LD (IX+nn),H",
1163 "LD (IX+nn),L",
1164 "",
1165 "LD (IX+nn),A",
1166 "",
1167 "",
1168 "",
1169 "",
1170 "LD A,IXh",
1171 "LD A,IXl",
1172 "LD A,(IX+nn)",
1173 "",
1174 "",
1175 "",
1176 "",
1177 "",
1178 "ADD A,IXh",
1179 "ADD A,IXl",
1180 "ADD A,(IX+nn)",
1181 "",
1182 "",
1183 "",
1184 "",
1185 "",
1186 "ADC A,IXh",
1187 "ADC A,IXl",
1188 "ADC A,(IX+nn)",
1189 "",
1190 "",
1191 "",
1192 "",
1193 "",
1194 "SUB IXh",
1195 "SUB IXl",
1196 "SUB (IX+nn)",
1197 "",
1198 "",
1199 "",
1200 "",
1201 "",
1202 "SBC A,IXh",
1203 "SBC A,IXl",
1204 "SBC A,(IX+nn)",
1205 "",
1206 "",
1207 "",
1208 "",
1209 "",
1210 "AND IXh",
1211 "AND IXl",
1212 "AND (IX+nn)",
1213 "",
1214 "",
1215 "",
1216 "",
1217 "",
1218 "XOR IXh",
1219 "XOR IXl",
1220 "XOR (IX+nn)",
1221 "",
1222 "",
1223 "",
1224 "",
1225 "",
1226 "OR IXh",
1227 "OR IXl",
1228 "OR (IX+nn)",
1229 "",
1230 "",
1231 "",
1232 "",
1233 "",
1234 "CP IXh",
1235 "CP IXl",
1236 "CP (IX+nn)",
1237 "",
1238 "",
1239 "",
1240 "",
1241 "",
1242 "",
1243 "",
1244 "",
1245 "",
1246 "",
1247 "",
1248 "",
1249 "",
1250 "",
1251 "",
1252 "",
1253 "",
1254 "",
1255 "",
1256 "",
1257 "",
1258 "",
1259 "",
1260 "",
1261 "",
1262 "",
1263 "",
1264 "",
1265 "",
1266 "",
1267 "",
1268 "",
1269 "",
1270 "",
1271 "POP IX",
1272 "",
1273 "EX (SP),IX",
1274 "",
1275 "PUSH IX",
1276 "",
1277 "",
1278 "",
1279 "JP (IX)",
1280 "",
1281 "",
1282 "",
1283 "",
1284 "",
1285 "",
1286 "",
1287 "",
1288 "",
1289 "",
1290 "",
1291 "",
1292 "",
1293 "",
1294 "",
1295 "LD SP,IX",
1296 "",
1297 "",
1298 "",
1299 "",
1300 "",
1301 ""
1302];
1303
1304pub const TABINSTRFD: [&str; 256] = [
1305 "",
1306 "",
1307 "",
1308 "",
1309 "",
1310 "",
1311 "",
1312 "",
1313 "",
1314 "ADD IY,BC",
1315 "",
1316 "",
1317 "",
1318 "",
1319 "",
1320 "",
1321 "",
1322 "",
1323 "",
1324 "",
1325 "",
1326 "",
1327 "",
1328 "",
1329 "",
1330 "ADD IY,DE",
1331 "",
1332 "",
1333 "",
1334 "",
1335 "",
1336 "",
1337 "",
1338 "LD IY,nnnn",
1339 "LD (nnnn),IY",
1340 "INC IY",
1341 "INC IYh",
1342 "DEC IYh",
1343 "LD IYh,nn",
1344 "",
1345 "",
1346 "ADD IY,IY",
1347 "LD IY,(nnnn)",
1348 "DEC IY",
1349 "INC IYl",
1350 "DEC IYl",
1351 "LD IYl,nn",
1352 "", "",
1354 "",
1355 "",
1356 "",
1357 "INC (IY+nn)",
1358 "DEC (IY+nn)",
1359 "LD (IY+nn),nn",
1360 "",
1361 "",
1362 "ADD IY,SP",
1363 "",
1364 "",
1365 "",
1366 "",
1367 "",
1368 "",
1369 "",
1370 "",
1371 "",
1372 "",
1373 "LD B,IYh",
1374 "LD B,IYl",
1375 "LD B,(IY+nn)",
1376 "",
1377 "",
1378 "",
1379 "",
1380 "",
1381 "LD C,IYh",
1382 "LD C,IYl",
1383 "LD C,(IY+nn)",
1384 "",
1385 "",
1386 "",
1387 "",
1388 "",
1389 "LD D,IYh",
1390 "LD D,IYl",
1391 "LD D,(IY+nn)",
1392 "",
1393 "",
1394 "",
1395 "",
1396 "",
1397 "LD E,IYh",
1398 "LD E,IYl",
1399 "LD E,(IY+nn)",
1400 "",
1401 "LD IYh,B",
1402 "LD IYh,C",
1403 "LD IYh,D",
1404 "LD IYh,E",
1405 "LD IYh,IYh",
1406 "LD IYh,IYl",
1407 "LD H,(IY+nn)",
1408 "LD IYh,A",
1409 "LD IYl,B",
1410 "LD IYl,C",
1411 "LD IYl,D",
1412 "LD IYl,E",
1413 "LD IYl,IYh",
1414 "LD IYl,IYl",
1415 "LD L,(IY+nn)",
1416 "LD IYl,A",
1417 "LD (IY+nn),B",
1418 "LD (IY+nn),C",
1419 "LD (IY+nn),D",
1420 "LD (IY+nn),E",
1421 "LD (IY+nn),H",
1422 "LD (IY+nn),L",
1423 "",
1424 "LD (IY+nn),A",
1425 "",
1426 "",
1427 "",
1428 "",
1429 "LD A,IYh",
1430 "LD A,IYl",
1431 "LD A,(IY+nn)",
1432 "",
1433 "",
1434 "",
1435 "",
1436 "",
1437 "ADD A,IYh",
1438 "ADD A,IYl",
1439 "ADD A,(IY+nn)",
1440 "",
1441 "",
1442 "",
1443 "",
1444 "",
1445 "ADC A,IYh",
1446 "ADC A,IYl",
1447 "ADC A,(IY+nn)",
1448 "",
1449 "",
1450 "",
1451 "",
1452 "",
1453 "SUB IYh",
1454 "SUB IYl",
1455 "SUB (IY+nn)",
1456 "",
1457 "",
1458 "",
1459 "",
1460 "",
1461 "SBC A,IYh",
1462 "SBC A,IYl",
1463 "SBC A,(IY+nn)",
1464 "",
1465 "",
1466 "",
1467 "",
1468 "",
1469 "AND IYh",
1470 "AND IYl",
1471 "AND (IY+nn)",
1472 "",
1473 "",
1474 "",
1475 "",
1476 "",
1477 "XOR IYh",
1478 "XOR IYl",
1479 "XOR (IY+nn)",
1480 "",
1481 "",
1482 "",
1483 "",
1484 "",
1485 "OR IYh",
1486 "OR IYl",
1487 "OR (IY+nn)",
1488 "",
1489 "",
1490 "",
1491 "",
1492 "",
1493 "CP IYh",
1494 "CP IYl",
1495 "CP (IY+nn)",
1496 "",
1497 "",
1498 "",
1499 "",
1500 "",
1501 "",
1502 "",
1503 "",
1504 "",
1505 "",
1506 "",
1507 "",
1508 "",
1509 "",
1510 "",
1511 "",
1512 "",
1513 "",
1514 "",
1515 "",
1516 "",
1517 "",
1518 "",
1519 "",
1520 "",
1521 "",
1522 "",
1523 "",
1524 "",
1525 "",
1526 "",
1527 "",
1528 "",
1529 "",
1530 "POP IY",
1531 "",
1532 "EX (SP),IY",
1533 "",
1534 "PUSH IY",
1535 "",
1536 "",
1537 "",
1538 "JP (IY)",
1539 "",
1540 "",
1541 "",
1542 "",
1543 "",
1544 "",
1545 "",
1546 "",
1547 "",
1548 "",
1549 "",
1550 "",
1551 "",
1552 "",
1553 "",
1554 "LD SP,IY",
1555 "",
1556 "",
1557 "",
1558 "",
1559 "",
1560 ""
1561];
1562
1563pub const TABINSTR: [&str; 256] = [
1564 "NOP",
1565 "LD BC,nnnn",
1566 "LD (BC),A",
1567 "INC BC",
1568 "INC B",
1569 "DEC B",
1570 "LD B,nn",
1571 "RLCA",
1572 "EX AF,AF'",
1573 "ADD HL,BC",
1574 "LD A,(BC)",
1575 "DEC BC",
1576 "INC C",
1577 "DEC C",
1578 "LD C,nn",
1579 "RRCA",
1580 "DJNZ nn",
1581 "LD DE,nnnn",
1582 "LD (DE),A",
1583 "INC DE",
1584 "INC D",
1585 "DEC D",
1586 "LD D,nn",
1587 "RLA",
1588 "JR nn",
1589 "ADD HL,DE",
1590 "LD A,(DE)",
1591 "DEC DE",
1592 "INC E",
1593 "DEC E",
1594 "LD E,nn",
1595 "RRA",
1596 "JR NZ,nn",
1597 "LD HL,nnnn",
1598 "LD (nnnn),HL",
1599 "INC HL",
1600 "INC H",
1601 "DEC H",
1602 "LD H,nn",
1603 "DAA",
1604 "JR Z,nn",
1605 "ADD HL,HL",
1606 "LD HL,(nnnn)",
1607 "DEC HL",
1608 "INC L",
1609 "DEC L",
1610 "LD L,nn",
1611 "CPL",
1612 "JR NC,nn",
1613 "LD SP,nnnn",
1614 "LD (nnnn),A",
1615 "INC SP",
1616 "INC (HL)",
1617 "DEC (HL)",
1618 "LD (HL),nn",
1619 "SCF",
1620 "JR C,nn",
1621 "ADD HL,SP",
1622 "LD A,(nnnn)",
1623 "DEC SP",
1624 "INC A",
1625 "DEC A",
1626 "LD A,nn",
1627 "CCF",
1628 "LD B,B",
1629 "LD B,C",
1630 "LD B,D",
1631 "LD B,E",
1632 "LD B,H",
1633 "LD B,L",
1634 "LD B,(HL)",
1635 "LD B,A",
1636 "LD C,B",
1637 "LD C,C",
1638 "LD C,D",
1639 "LD C,E",
1640 "LD C,H",
1641 "LD C,L",
1642 "LD C,(HL)",
1643 "LD C,A",
1644 "LD D,B",
1645 "LD D,C",
1646 "LD D,D",
1647 "LD D,E",
1648 "LD D,H",
1649 "LD D,L",
1650 "LD D,(HL)",
1651 "LD D,A",
1652 "LD E,B",
1653 "LD E,C",
1654 "LD E,D",
1655 "LD E,E",
1656 "LD E,H",
1657 "LD E,L",
1658 "LD E,(HL)",
1659 "LD E,A",
1660 "LD H,B",
1661 "LD H,C",
1662 "LD H,D",
1663 "LD H,E",
1664 "LD H,H",
1665 "LD H,L",
1666 "LD H,(HL)",
1667 "LD H,A",
1668 "LD L,B",
1669 "LD L,C",
1670 "LD L,D",
1671 "LD L,E",
1672 "LD L,H",
1673 "LD L,L",
1674 "LD L,(HL)",
1675 "LD L,A",
1676 "LD (HL),B",
1677 "LD (HL),C",
1678 "LD (HL),D",
1679 "LD (HL),E",
1680 "LD (HL),H",
1681 "LD (HL),L",
1682 "HALT",
1683 "LD (HL),A",
1684 "LD A,B",
1685 "LD A,C",
1686 "LD A,D",
1687 "LD A,E",
1688 "LD A,H",
1689 "LD A,L",
1690 "LD A,(HL)",
1691 "LD A,A",
1692 "ADD A,B",
1693 "ADD A,C",
1694 "ADD A,D",
1695 "ADD A,E",
1696 "ADD A,H",
1697 "ADD A,L",
1698 "ADD A,(HL)",
1699 "ADD A,A",
1700 "ADC A,B",
1701 "ADC A,C",
1702 "ADC A,D",
1703 "ADC A,E",
1704 "ADC A,H",
1705 "ADC A,L",
1706 "ADC A,(HL)",
1707 "ADC A,A",
1708 "SUB B",
1709 "SUB C",
1710 "SUB D",
1711 "SUB E",
1712 "SUB H",
1713 "SUB L",
1714 "SUB (HL)",
1715 "SUB A",
1716 "SBC A,B",
1717 "SBC A,C",
1718 "SBC A,D",
1719 "SBC A,E",
1720 "SBC A,H",
1721 "SBC A,L",
1722 "SBC A,(HL)",
1723 "SBC A,A",
1724 "AND B",
1725 "AND C",
1726 "AND D",
1727 "AND E",
1728 "AND H",
1729 "AND L",
1730 "AND (HL)",
1731 "AND A",
1732 "XOR B",
1733 "XOR C",
1734 "XOR D",
1735 "XOR E",
1736 "XOR H",
1737 "XOR L",
1738 "XOR (HL)",
1739 "XOR A",
1740 "OR B",
1741 "OR C",
1742 "OR D",
1743 "OR E",
1744 "OR H",
1745 "OR L",
1746 "OR (HL)",
1747 "OR A",
1748 "CP B",
1749 "CP C",
1750 "CP D",
1751 "CP E",
1752 "CP H",
1753 "CP L",
1754 "CP (HL)",
1755 "CP A",
1756 "RET NZ",
1757 "POP BC",
1758 "JP NZ,nnnn",
1759 "JP nnnn",
1760 "CALL NZ,nnnn",
1761 "PUSH BC",
1762 "ADD A,nn",
1763 "RST 00",
1764 "RET Z",
1765 "RET",
1766 "JP Z,nnnn",
1767 "",
1768 "CALL Z,nnnn",
1769 "CALL nnnn",
1770 "ADC A,nn",
1771 "RST 08",
1772 "RET NC",
1773 "POP DE",
1774 "JP NC,nnnn",
1775 "OUT (nn),A",
1776 "CALL NC,nnnn",
1777 "PUSH DE",
1778 "SUB nn",
1779 "RST 10",
1780 "RET C",
1781 "EXX",
1782 "JP C,nnnn",
1783 "IN A,(nn)",
1784 "CALL C,nnnn",
1785 "",
1786 "SBC A,nn",
1787 "RST 18",
1788 "RET PO",
1789 "POP HL",
1790 "JP PO,nnnn",
1791 "EX (SP),HL", "CALL PO,nnnn",
1793 "PUSH HL",
1794 "AND nn",
1795 "RST 20",
1796 "RET PE",
1797 "JP (HL)",
1798 "JP PE,nnnn",
1799 "EX DE,HL",
1800 "CALL PE,nnnn",
1801 "",
1802 "XOR nn",
1803 "RST 28",
1804 "RET P",
1805 "POP AF",
1806 "JP P,nnnn",
1807 "DI",
1808 "CALL P,nnnn",
1809 "PUSH AF",
1810 "OR nn",
1811 "RST 30",
1812 "RET M",
1813 "LD SP,HL",
1814 "JP M,nnnn",
1815 "EI",
1816 "CALL M,nnnn",
1817 "",
1818 "CP nn",
1819 "RST 38"
1820];
1821
1822pub fn disassemble<'a>(mut bytes: &'a [u8]) -> Listing {
1825 let mut reverse_tokens = Vec::new();
1826
1827 let mut continue_disassembling = |token: Token, bytes: &'a [u8]| {
1829 reverse_tokens.push(token);
1830 bytes
1831 };
1832
1833 while !bytes.is_empty() {
1834 bytes = match bytes {
1835 [] => unreachable!(),
1836
1837 [0, rest @ ..] => continue_disassembling(nop(), rest),
1839
1840 [prefix, 0xCB, param, opcode, rest @ ..] if *prefix == 0xFD || *prefix == 0xDD => {
1841 let token = disassemble_with_one_argument(
1842 *opcode,
1843 *param,
1844 if *prefix == 0xFD {
1845 &TABINSTRFDCB
1846 }
1847 else {
1848 &TABINSTRDDCB
1849 }
1850 )
1851 .unwrap_or_else(|_| defb_elements(&[*prefix, 0xCB, *param, *opcode]));
1852 continue_disassembling(token, rest)
1853 },
1854
1855 [prefix, opcode, rest @ ..]
1856 if *prefix == 0xCB || *prefix == 0xED || *prefix == 0xDD || *prefix == 0xFD =>
1857 {
1858 let (token, rest) = disassemble_with_potential_argument(
1859 *opcode,
1860 match prefix {
1861 0xCB => &TABINSTRCB,
1862 0xED => &TABINSTRED,
1863 0xDD => &TABINSTRDD,
1864 0xFD => &TABINSTRFD,
1865 _ => unreachable!()
1866 },
1867 rest
1868 )
1869 .unwrap_or_else(|_| (defb_elements(&[*prefix, *opcode]), rest));
1870 continue_disassembling(token, rest)
1871 },
1872
1873 [opcode, rest @ ..] => {
1874 let (token, rest) = disassemble_with_potential_argument(*opcode, &TABINSTR, rest)
1875 .unwrap_or_else(|_| (defb(*opcode), rest));
1876 continue_disassembling(token, rest)
1877 }
1878 }
1879 }
1880
1881 reverse_tokens.into()
1883}
1884
1885pub fn disassemble_with_potential_argument<'stream>(
1888 opcode: u8,
1889 lut: &[&'static str; 256],
1890 bytes: &'stream [u8]
1891) -> Result<(Token, &'stream [u8]), String> {
1892 let representation: &'static str = lut[opcode as usize];
1893
1894 let (representation, bytes) = if representation.contains("nnnn") {
1896 let word = bytes[0] as u16 + 256 * (bytes[1] as u16);
1897 let representation = representation.replacen("nnnn", &format!("{:#03x}", word), 1);
1898 (representation, &bytes[2..])
1899 }
1900 else if representation.contains("nn") {
1901 let byte = bytes[0] as i8;
1902 let representation =
1903 if representation.starts_with("DJNZ") || representation.starts_with("JR") {
1904 let byte = byte as i16 + 2;
1905 if byte == 0 {
1906 representation.replacen("nn", "$", 1)
1907 }
1908 else if byte < 0 {
1909 representation.replacen("nn", &format!("-{}", byte.abs()), 1)
1910 }
1911 else {
1912 representation.replacen("nn", &format!("+{}", byte.abs()), 1)
1913 }
1914 }
1915 else {
1916 representation.replacen("nn", &format!("{:#01x}", byte), 1)
1917 };
1918
1919 (representation.to_owned(), &bytes[1..])
1920 }
1921 else {
1922 (representation.to_owned(), bytes)
1923 };
1924
1925 let (representation, bytes) = if representation.contains("nn") {
1927 let byte = bytes[0];
1928 let representation = representation.replacen("nn", &format!("{:#01x}", byte), 1);
1929 (representation, &bytes[1..])
1930 }
1931 else {
1932 (representation, bytes)
1933 };
1934
1935 Ok((string_to_token(&representation)?, bytes))
1936}
1937
1938pub fn disassemble_with_one_argument(
1940 opcode: u8,
1941 argument: u8,
1942 lut: &[&'static str; 256]
1943) -> Result<Token, String> {
1944 let representation: &'static str = lut[opcode as usize];
1945 let representation = representation.replacen("nn", &format!("{:#01x}", argument), 1);
1946 string_to_token(&representation)
1947}
1948
1949pub fn disassemble_without_argument(
1951 opcode: u8,
1952 lut: &[&'static str; 256]
1953) -> Result<Token, String> {
1954 let representation: &'static str = lut[opcode as usize];
1955 string_to_token(representation)
1956}
1957
1958pub fn string_to_token(representation: &str) -> Result<Token, String> {
1960 if representation.is_empty() {
1961 Err("Empty opcode".to_string())
1962 }
1963 else {
1964 Token::parse_token(representation)
1965 }
1966}
1967
1968#[cfg(test)]
1969mod test {
1970 use super::*;
1971
1972 #[test]
1973 fn disass_from_bytes() {
1974 assert_eq!("PUSH HL", disassemble(&[0xE5]).to_string().trim());
1975 assert_eq!("RES 0x3, E", disassemble(&[0xCB, 0x9B]).to_string().trim());
1976 assert_eq!(
1977 "SBC HL, DE",
1978 disassemble(&[0xED, 0b01010010]).to_string().trim()
1979 );
1980
1981 assert_eq!(
1982 "RLC (IX + 0x1)",
1983 disassemble(&[0xDD, 0xCB, 01, 06]).to_string().trim()
1984 );
1985 assert_eq!(
1986 "RLC (IX + 0x1), B",
1987 disassemble(&[0xDD, 0xCB, 01, 00]).to_string().trim()
1988 );
1989 assert_eq!(
1990 "RLC (IY + 0x2), C",
1991 disassemble(&[0xFD, 0xCB, 02, 01]).to_string().trim()
1992 );
1993 }
1994
1995 #[test]
1996 fn disass_instruction_with_arg() {
1997 assert_eq!(
1998 "CALL NZ, 0x123",
1999 disassemble(&[0xC4, 0x23, 0x01]).to_string().trim()
2000 );
2001 assert_eq!(
2002 "LD IX, (0x4321)",
2003 disassemble(&[0xDD, 0x2A, 0x21, 0x43]).to_string().trim()
2004 );
2005 assert_eq!(
2006 "LD (IX + 0x21), 0x43",
2007 disassemble(&[0xDD, 0x36, 0x21, 0x43]).to_string().trim()
2008 );
2009 assert_eq!(
2010 "BIT 0x6, (IX + 0x1)",
2011 disassemble(&[0xDD, 0xCB, 0x01, 0x76]).to_string().trim()
2012 );
2013 }
2014 fn disass_check_representation_equality() {
2020 disass_for_table_and_prefix(&TABINSTR, &[]);
2021 disass_for_table_and_prefix(&TABINSTRCB, &[0xCB]);
2022 disass_for_table_and_prefix(&TABINSTRDD, &[0xDD]);
2023 disass_for_table_and_prefix(&TABINSTRED, &[0xED]);
2024 disass_for_table_and_prefix(&TABINSTRFD, &[0xFD]);
2025
2026 disass_for_double_prefix(&TABINSTRFDCB, 0xFD, 0xCB);
2027 disass_for_double_prefix(&TABINSTRDDCB, 0xDD, 0xCB);
2028 }
2029
2030 fn disass_for_double_prefix(tab: &[&'static str; 256], first: u8, second: u8) {
2031 for code in 0..=255 {
2032 let repr = tab[code as usize];
2033
2034 if repr.is_empty() {
2035 continue;
2036 }
2037
2038 let repr = repr.replacen("nn", "0x12", 1);
2039 let expected_bytes = [first, second, 0x12, code];
2040
2041 let obtained = disassemble(&expected_bytes);
2042
2043 println!("{:?},{:?}, {:?}", repr, expected_bytes, obtained);
2044 assert_eq!(
2045 repr.replace(" ", "")
2046 .replace("0x", "")
2047 .replace("00", "0")
2048 .replace("08", "8")
2049 .to_uppercase(),
2050 obtained
2051 .to_string()
2052 .trim()
2053 .replace(" ", "")
2054 .replace("0x", "")
2055 .to_uppercase()
2056 );
2057
2058 let mut env = Env::default();
2059 if let Token::OpCode(mnemonic, arg1, arg2, arg3) = &obtained.listing()[0] {
2060 let obtained_bytes =
2061 assemble_opcode(*mnemonic, arg1, arg2, arg3, &mut env).unwrap();
2062 assert_eq!(&expected_bytes[..], &obtained_bytes[..]);
2063 }
2064 else {
2065 println!("ERROR, this is not a Token {:?}", obtained);
2066 assert!(false);
2067 }
2068 }
2069 }
2070 fn disass_for_table_and_prefix(tab: &[&'static str; 256], prefix: &[u8]) {
2071 let merge = |list: &[&[u8]]| -> Vec<u8> {
2073 list.iter()
2074 .flat_map(|&bytes| bytes.iter())
2075 .copied()
2076 .collect()
2077 };
2078
2079 for code in 0..=255 {
2080 let repr = tab[code as usize];
2081
2082 if repr.is_empty() {
2083 continue;
2084 }
2085
2086 println!("0x{:x} : {}", code, repr);
2087
2088 let (expected, bytes) = if repr.contains("nnnn") {
2090 (
2091 repr.replace("nnnn", "0x3412"),
2092 merge(&[prefix, &[code], &[0x12, 0x34]])
2093 )
2094 }
2095 else if repr.contains("nn") {
2096 let repr = repr.replacen("nn", "0x12", 1);
2097 let (repr, bytes) = if repr.contains("nn") {
2098 (repr.replace("nn", "0x34"), [0x12, 0x34].to_vec())
2099 }
2100 else {
2101 (repr, [0x12].to_vec())
2102 };
2103 (repr, merge(&[prefix, &[code], &bytes]))
2104 }
2105 else {
2106 (repr.to_owned(), merge(&[prefix, &[code]]))
2107 };
2108
2109 let obtained = disassemble(&bytes);
2110
2111 if !expected.contains("RST") && !expected.contains("DJNZ") && !expected.contains("JR") {
2114 assert_eq!(
2115 expected
2116 .replace(" ", "")
2117 .replace("0x", "")
2118 .replace("00", "0")
2119 .replace("08", "8")
2120 .to_uppercase(),
2121 obtained
2122 .to_string()
2123 .trim()
2124 .replace(" ", "")
2125 .replace("0x", "")
2126 .to_uppercase()
2127 );
2128 }
2129
2130 return; }
2153 }
2154}