1 /**
2  * Zilog Z80 instruction tables.
3  */
4 module d80.z80;
5 
6 /**
7  * Strings and instruction lengths for Zilog Z80.
8  */
9 struct z80 {
10     string s;           /// Instruction name
11     ubyte n;            /// Length of instruction in bytes
12 }
13 
14 /**
15  * Main instructions table for Zilog Z80.
16  */
17 immutable z80[] insnz80 = [
18     { "nop",                 1 },
19     { "ld\tbc, ",            3 },
20     { "ld\t(bc), a",         1 },
21     { "inc\tbc",             1 },
22     { "inc\tb",              1 },
23     { "dec\tb",              1 },
24     { "ld\tb, ",             2 },
25     { "rlca",                1 },
26     { "ex\taf, af'",         1 },
27     { "add\thl, bc",         1 },
28     { "ld\ta, (bc)",         1 },
29     { "dec\tbc",             1 },
30     { "inc\tc",              1 },
31     { "dec\tc",              1 },
32     { "ld\tc, ",             2 },
33     { "rrca",                1 },
34     { "djnz\t",              2 },
35     { "ld\tde, ",            3 },
36     { "ld\t(de), a",         1 },
37     { "inc\tde",             1 },
38     { "inc\td",              1 },
39     { "dec\td",              1 },
40     { "ld\td, ",             2 },
41     { "rla",                 1 },
42     { "jr\t",                2 },
43     { "add\thl, de",         1 },
44     { "ld\ta, (de)",         1 },
45     { "dec\tde" ,            1 },
46     { "inc\te",              1 },
47     { "dec\te",              1 },
48     { "ld\te, ",             2 },
49     { "rra",                 1 },
50     { "jr\tnz, ",            2 },
51     { "ld\thl, ",            3 },
52     { "ld\t(%02x%02xh), hl", 3 },
53     { "inc\thl",             1 },
54     { "inc\th",              1 },
55     { "dec\th",              1 },
56     { "ld\th, ",             2 },
57     { "daa",                 1 },
58     { "jr\tz, ",             2 },
59     { "add\thl, hl",         1 },
60     { "ld\thl, (%02x%02xh)", 3 },
61     { "dec\thl",             1 },
62     { "inc\tl",              1 },
63     { "dec\tl",              1 },
64     { "ld\tl, ",             2 },
65     { "cpl",                 1 },
66     { "jr\tnc, ",            2 },
67     { "ld\tsp, ",            3 },
68     { "ld\t(%02x%02xh), a",  3 },
69     { "inc\tsp",             1 },
70     { "inc\t(hl)",           1 },
71     { "dec\t(hl)",           1 },
72     { "ld\t(hl), ",          2 },
73     { "scf",                 1 },
74     { "jr\tc, ",             2 },
75     { "add\thl, sp",         1 },
76     { "ld\ta, (%02x%02xh)",  3 },
77     { "dec\tsp",             1 },
78     { "inc\ta",              1 },
79     { "dec\ta",              1 },
80     { "ld\ta, ",             2 },
81     { "ccf",                 1 },
82     { "ld\tb, b",            1 },
83     { "ld\tb, c",            1 },
84     { "ld\tb, d",            1 },
85     { "ld\tb, e",            1 },
86     { "ld\tb, h",            1 },
87     { "ld\tb, l",            1 },
88     { "ld\tb, (hl)",         1 },
89     { "ld\tb, a",            1 },
90     { "ld\tc, b",            1 },
91     { "ld\tc, c",            1 },
92     { "ld\tc, d",            1 },
93     { "ld\tc, e",            1 },
94     { "ld\tc, h",            1 },
95     { "ld\tc, l",            1 },
96     { "ld\tc, (hl)",         1 },
97     { "ld\tc, a",            1 },
98     { "ld\td, b",            1 },
99     { "ld\td, c",            1 },
100     { "ld\td, d",            1 },
101     { "ld\td, e",            1 },
102     { "ld\td, h",            1 },
103     { "ld\td, l",            1 },
104     { "ld\td, (hl)",         1 },
105     { "ld\td, a",            1 },
106     { "ld\te, b",            1 },
107     { "ld\te, c",            1 },
108     { "ld\te, d",            1 },
109     { "ld\te, e",            1 },
110     { "ld\te, h",            1 },
111     { "ld\te, l",            1 },
112     { "ld\te, (hl)",         1 },
113     { "ld\te, a",            1 },
114     { "ld\th, b",            1 },
115     { "ld\th, c",            1 },
116     { "ld\th, d",            1 },
117     { "ld\th, e",            1 },
118     { "ld\th, h",            1 },
119     { "ld\th, l",            1 },
120     { "ld\th, (hl)",         1 },
121     { "ld\th, a",            1 },
122     { "ld\tl, b",            1 },
123     { "ld\tl, c",            1 },
124     { "ld\tl, d",            1 },
125     { "ld\tl, e",            1 },
126     { "ld\tl, h",            1 },
127     { "ld\tl, l",            1 },
128     { "ld\tl, (hl)",         1 },
129     { "ld\tl, a",            1 },
130     { "ld\t(hl), b",         1 },
131     { "ld\t(hl), c",         1 },
132     { "ld\t(hl), d",         1 },
133     { "ld\t(hl), e",         1 },
134     { "ld\t(hl), h",         1 },
135     { "ld\t(hl), l",         1 },
136     { "halt",                1 },
137     { "ld\t(hl), a",         1 },
138     { "ld\ta, b",            1 },
139     { "ld\ta, c",            1 },
140     { "ld\ta, d",            1 },
141     { "ld\ta, e",            1 },
142     { "ld\ta, h",            1 },
143     { "ld\ta, l",            1 },
144     { "ld\ta, (hl)",         1 },
145     { "ld\ta, a",            1 },
146     { "add\ta, b",           1 },
147     { "add\ta, c",           1 },
148     { "add\ta, d",           1 },
149     { "add\ta, e",           1 },
150     { "add\ta, h",           1 },
151     { "add\ta, l",           1 },
152     { "add\ta, (hl)",        1 },
153     { "add\ta, a",           1 },
154     { "adc\ta, b",           1 },
155     { "adc\ta, c",           1 },
156     { "adc\ta, d",           1 },
157     { "adc\ta, e",           1 },
158     { "adc\ta, h",           1 },
159     { "adc\ta, l",           1 },
160     { "adc\ta, (hl)",        1 },
161     { "adc\ta, a",           1 },
162     { "sub\tb",              1 },
163     { "sub\tc",              1 },
164     { "sub\td",              1 },
165     { "sub\te",              1 },
166     { "sub\th",              1 },
167     { "sub\tl",              1 },
168     { "sub\t(hl)",           1 },
169     { "sub\ta",              1 },
170     { "sbc\ta, b",           1 },
171     { "sbc\ta, c",           1 },
172     { "sbc\ta, d",           1 },
173     { "sbc\ta, e",           1 },
174     { "sbc\ta, h",           1 },
175     { "sbc\ta, l",           1 },
176     { "sbc\ta, (hl)",        1 },
177     { "sbb\ta, a",           1 },
178     { "and\tb",              1 },
179     { "and\tc",              1 },
180     { "and\td",              1 },
181     { "and\te",              1 },
182     { "and\th",              1 },
183     { "and\tl",              1 },
184     { "and\t(hl)",           1 },
185     { "and\ta",              1 },
186     { "xor\tb",              1 },
187     { "xor\tc",              1 },
188     { "xor\td",              1 },
189     { "xor\te",              1 },
190     { "xor\th",              1 },
191     { "xor\tl",              1 },
192     { "xor\t(hl)",           1 },
193     { "xor\ta",              1 },
194     { "or\tb",               1 },
195     { "or\tc",               1 },
196     { "or\td",               1 },
197     { "or\te",               1 },
198     { "or\th",               1 },
199     { "or\tl",               1 },
200     { "or\t(hl)",            1 },
201     { "or\ta",               1 },
202     { "cp\tb",               1 },
203     { "cp\tc",               1 },
204     { "cp\td",               1 },
205     { "cp\te",               1 },
206     { "cp\th",               1 },
207     { "cp\tl",               1 },
208     { "cp\t(hl)",            1 },
209     { "cp\ta",               1 },
210     { "ret\tnz",             1 },
211     { "pop\tbc",             1 },
212     { "jp\tnz, ",            3 },
213     { "jp\t",                3 },
214     { "call\t nz, ",         3 },
215     { "push\tbc",            1 },
216     { "add\ta, ",            2 },
217     { "rst\t00h",            1 },
218     { "ret\tz",              1 },
219     { "ret",                 1 },
220     { "jp\tz, ",             3 },
221     { "BITS",                2 },
222     { "call\tz, ",           3 },
223     { "call\t",              3 },
224     { "adc\ta, ",            2 },
225     { "rst\t08h",            1 },
226     { "ret\tnc",             1 },
227     { "pop\tde",             1 },
228     { "jp\tnc, ",            3 },
229     { "out\t(%02xh), a",     2 },
230     { "call\tnc, ",          3 },
231     { "push\tde",            1 },
232     { "sub\t",               2 },
233     { "rst\t10h",            1 },
234     { "ret\tc",              1 },
235     { "exx",                 1 },
236     { "jp\tc, ",             3 },
237     { "in\ta, (%02xh)",      2 },
238     { "call\tc, ",           3 },
239     { "IX",                  2 },
240     { "sbc\ta, ",            2 },
241     { "rst\t18h",            1 },
242     { "ret\tpo",             1 },
243     { "pop\thl",             1 },
244     { "jp\tpo, ",            3 },
245     { "ex\t(sp), hl",        1 },
246     { "call\tpo, ",          3 },
247     { "push\thl",            1 },
248     { "and\t",               2 },
249     { "rst\t20h",            1 },
250     { "ret\tpe",             1 },
251     { "jp\t(hl)",            1 },
252     { "jp\tpe, ",            3 },
253     { "ex\tde, hl",          1 },
254     { "call\tpe, ",          3 },
255     { "EXTD",                2 },
256     { "xor\t",               2 },
257     { "rst\t28h",            1 },
258     { "ret\tp",              1 },
259     { "pop\taf",             1 },
260     { "jp\tp, ",             3 },
261     { "di",                  1 },
262     { "call\tp, ",           3 },
263     { "push\taf",            1 },
264     { "or\t",                2 },
265     { "rst\t30h",            1 },
266     { "ret\tm",              1 },
267     { "ld\tsp, hl",          1 },
268     { "jp\tm, ",             3 },
269     { "ei",                  1 },
270     { "call\tm, ",           3 },
271     { "IY",                  2 },
272     { "cp\t",                2 },
273     { "rst\t38h",            1 }
274 ];
275 
276 /**
277  * Bit instructions (CB) table for Z80.
278  * n = 0 because all instructions in this table are
279  *   2 bytes in length and we handle that in the
280  *   primary table.
281  */
282 immutable z80[] insnz80cb = [
283     { "rlc\tb",       0 },
284     { "rlc\tc",       0 },
285     { "rlc\td",       0 },
286     { "rlc\te",       0 },
287     { "rlc\th",       0 },
288     { "rlc\tl",       0 },
289     { "rlc\t(hl)",    0 },
290     { "rlc\ta",       0 },
291     { "rrc\tb",       0 },
292     { "rrc\tc",       0 },
293     { "rrc\td",       0 },
294     { "rrc\te",       0 },
295     { "rrc\th",       0 },
296     { "rrc\tl",       0 },
297     { "rrc\t(hl)",    0 },
298     { "rrc\ta",       0 },
299     { "rl\tb",        0 },
300     { "rl\tc",        0 },
301     { "rl\td",        0 },
302     { "rl\te",        0 },
303     { "rl\th",        0 },
304     { "rl\tl",        0 },
305     { "rl\t(hl)",     0 },
306     { "rl\ta",        0 },
307     { "rr\tb",        0 },
308     { "rr\tc",        0 },
309     { "rr\td",        0 },
310     { "rr\te",        0 },
311     { "rr\th",        0 },
312     { "rr\tl",        0 },
313     { "rr\t(hl)",     0 },
314     { "rr\ta",        0 },
315     { "sla\tb",       0 },
316     { "sla\tc",       0 },
317     { "sla\td",       0 },
318     { "sla\te",       0 },
319     { "sla\th",       0 },
320     { "sla\tl",       0 },
321     { "sla\t(hl)",    0 },
322     { "sla\ta",       0 },
323     { "sra\tb",       0 },
324     { "sra\tc",       0 },
325     { "sra\td",       0 },
326     { "sra\te",       0 },
327     { "sra\th",       0 },
328     { "sra\tl",       0 },
329     { "sra\t(hl)",    0 },
330     { "sra\ta",       0 },
331     { "slr\tb",       0 },
332     { "slr\tc",       0 },
333     { "slr\td",       0 },
334     { "slr\te",       0 },
335     { "slr\th",       0 },
336     { "slr\tl",       0 },
337     { "slr\t(hl)",    0 },
338     { "slr\ta",       0 },
339     { "srr\tb",       0 },
340     { "srr\tc",       0 },
341     { "srr\td",       0 },
342     { "srr\te",       0 },
343     { "srr\th",       0 },
344     { "srr\tl",       0 },
345     { "srr\t(hl)",    0 },
346     { "srr\ta",       0 },
347     { "bit\t0, b",    0 },
348     { "bit\t0, c",    0 },
349     { "bit\t0, d",    0 },
350     { "bit\t0, e",    0 },
351     { "bit\t0, h",    0 },
352     { "bit\t0, l",    0 },
353     { "bit\t0, (hl)", 0 },
354     { "bit\t0, a",    0 },
355     { "bit\t1, b",    0 },
356     { "bit\t1, c",    0 },
357     { "bit\t1, d",    0 },
358     { "bit\t1, e",    0 },
359     { "bit\t1, h",    0 },
360     { "bit\t1, l",    0 },
361     { "bit\t1, (hl)", 0 },
362     { "bit\t1, a",    0 },
363     { "bit\t2, b",    0 },
364     { "bit\t2, c",    0 },
365     { "bit\t2, d",    0 },
366     { "bit\t2, e",    0 },
367     { "bit\t2, h",    0 },
368     { "bit\t2, l",    0 },
369     { "bit\t2, (hl)", 0 },
370     { "bit\t2, a",    0 },
371     { "bit\t3, b",    0 },
372     { "bit\t3, c",    0 },
373     { "bit\t3, d",    0 },
374     { "bit\t3, e",    0 },
375     { "bit\t3, h",    0 },
376     { "bit\t3, l",    0 },
377     { "bit\t3, (hl)", 0 },
378     { "bit\t3, a",    0 },
379     { "bit\t4, b",    0 },
380     { "bit\t4, c",    0 },
381     { "bit\t4, d",    0 },
382     { "bit\t4, e",    0 },
383     { "bit\t4, h",    0 },
384     { "bit\t4, l",    0 },
385     { "bit\t4, (hl)", 0 },
386     { "bit\t4, a",    0 },
387     { "bit\t5, b",    0 },
388     { "bit\t5, c",    0 },
389     { "bit\t5, d",    0 },
390     { "bit\t5, e",    0 },
391     { "bit\t5, h",    0 },
392     { "bit\t5, l",    0 },
393     { "bit\t5, (hl)", 0 },
394     { "bit\t5, a",    0 },
395     { "bit\t6, b",    0 },
396     { "bit\t6, c",    0 },
397     { "bit\t6, d",    0 },
398     { "bit\t6, e",    0 },
399     { "bit\t6, h",    0 },
400     { "bit\t6, l",    0 },
401     { "bit\t6, (hl)", 0 },
402     { "bit\t6, a",    0 },
403     { "bit\t7, b",    0 },
404     { "bit\t7, c",    0 },
405     { "bit\t7, d",    0 },
406     { "bit\t7, e",    0 },
407     { "bit\t7, h",    0 },
408     { "bit\t7, l",    0 },
409     { "bit\t7, (hl)", 0 },
410     { "bit\t7, a",    0 },
411     { "res\t0, b",    0 },
412     { "res\t0, c",    0 },
413     { "res\t0, d",    0 },
414     { "res\t0, e",    0 },
415     { "res\t0, h",    0 },
416     { "res\t0, l",    0 },
417     { "res\t0, (hl)", 0 },
418     { "res\t0, a",    0 },
419     { "res\t1, b",    0 },
420     { "res\t1, c",    0 },
421     { "res\t1, d",    0 },
422     { "res\t1, e",    0 },
423     { "res\t1, h",    0 },
424     { "res\t1, l",    0 },
425     { "res\t1, (hl)", 0 },
426     { "res\t1, a",    0 },
427     { "res\t2, b",    0 },
428     { "res\t2, c",    0 },
429     { "res\t2, d",    0 },
430     { "res\t2, e",    0 },
431     { "res\t2, h",    0 },
432     { "res\t2, l",    0 },
433     { "res\t2, (hl)", 0 },
434     { "res\t2, a",    0 },
435     { "res\t3, b",    0 },
436     { "res\t3, c",    0 },
437     { "res\t3, d",    0 },
438     { "res\t3, e",    0 },
439     { "res\t3, h",    0 },
440     { "res\t3, l",    0 },
441     { "res\t3, (hl)", 0 },
442     { "res\t3, a",    0 },
443     { "res\t4, b",    0 },
444     { "res\t4, c",    0 },
445     { "res\t4, d",    0 },
446     { "res\t4, e",    0 },
447     { "res\t4, h",    0 },
448     { "res\t4, l",    0 },
449     { "res\t4, (hl)", 0 },
450     { "res\t4, a",    0 },
451     { "res\t5, b",    0 },
452     { "res\t5, c",    0 },
453     { "res\t5, d",    0 },
454     { "res\t5, e",    0 },
455     { "res\t5, h",    0 },
456     { "res\t5, l",    0 },
457     { "res\t5, (hl)", 0 },
458     { "res\t5, a",    0 },
459     { "res\t6, b",    0 },
460     { "res\t6, c",    0 },
461     { "res\t6, d",    0 },
462     { "res\t6, e",    0 },
463     { "res\t6, h",    0 },
464     { "res\t6, l",    0 },
465     { "res\t6, (hl)", 0 },
466     { "res\t6, a",    0 },
467     { "res\t7, b",    0 },
468     { "res\t7, c",    0 },
469     { "res\t7, d",    0 },
470     { "res\t7, e",    0 },
471     { "res\t7, h",    0 },
472     { "res\t7, l",    0 },
473     { "res\t7, (hl)", 0 },
474     { "res\t7, a",    0 },
475     { "set\t0, c",    0 },
476     { "set\t0, d",    0 },
477     { "set\t0, e",    0 },
478     { "set\t0, h",    0 },
479     { "set\t0, l",    0 },
480     { "set\t0, (hl)", 0 },
481     { "set\t0, a",    0 },
482     { "set\t1, b",    0 },
483     { "set\t1, c",    0 },
484     { "set\t1, d",    0 },
485     { "set\t1, e",    0 },
486     { "set\t1, h",    0 },
487     { "set\t1, l",    0 },
488     { "set\t1, (hl)", 0 },
489     { "set\t1, a",    0 },
490     { "set\t2, b",    0 },
491     { "set\t2, c",    0 },
492     { "set\t2, d",    0 },
493     { "set\t2, e",    0 },
494     { "set\t2, h",    0 },
495     { "set\t2, l",    0 },
496     { "set\t2, (hl)", 0 },
497     { "set\t2, a",    0 },
498     { "set\t3, b",    0 },
499     { "set\t3, c",    0 },
500     { "set\t3, d",    0 },
501     { "set\t3, e",    0 },
502     { "set\t3, h",    0 },
503     { "set\t3, l",    0 },
504     { "set\t3, (hl)", 0 },
505     { "set\t3, a",    0 },
506     { "set\t4, b",    0 },
507     { "set\t4, c",    0 },
508     { "set\t4, d",    0 },
509     { "set\t4, e",    0 },
510     { "set\t4, h",    0 },
511     { "set\t4, l",    0 },
512     { "set\t4, (hl)", 0 },
513     { "set\t4, a",    0 },
514     { "set\t5, b",    0 },
515     { "set\t5, c",    0 },
516     { "set\t5, d",    0 },
517     { "set\t5, e",    0 },
518     { "set\t5, h",    0 },
519     { "set\t5, l",    0 },
520     { "set\t5, (hl)", 0 },
521     { "set\t5, a",    0 },
522     { "set\t6, b",    0 },
523     { "set\t6, c",    0 },
524     { "set\t6, d",    0 },
525     { "set\t6, e",    0 },
526     { "set\t6, h",    0 },
527     { "set\t6, l",    0 },
528     { "set\t6, (hl)", 0 },
529     { "set\t6, a",    0 },
530     { "set\t7, b",    0 },
531     { "set\t7, c",    0 },
532     { "set\t7, d",    0 },
533     { "set\t7, e",    0 },
534     { "set\t7, h",    0 },
535     { "set\t7, l",    0 },
536     { "set\t7, (hl)", 0 },
537     { "set\t7, a",    0 }
538 ];
539 
540 /**
541  * IX instructions (DD) table for Z80.
542  * Invalid instructions are marked nop.
543  */
544 immutable z80[] insnz80dd = [
545     { "nop",                   0 },
546     { "nop",                   0 },
547     { "nop",                   0 },
548     { "nop",                   0 },
549     { "nop",                   0 },
550     { "nop",                   0 },
551     { "nop",                   0 },
552     { "nop",                   0 },
553     { "nop",                   0 },
554     { "add\tix, bc",           0 },
555     { "nop",                   0 },
556     { "nop",                   0 },
557     { "nop",                   0 },
558     { "nop",                   0 },
559     { "nop",                   0 },
560     { "nop",                   0 },
561     { "nop",                   0 },
562     { "nop",                   0 },
563     { "nop",                   0 },
564     { "nop",                   0 },
565     { "nop",                   0 },
566     { "nop",                   0 },
567     { "nop",                   0 },
568     { "nop",                   0 },
569     { "nop",                   0 },
570     { "add\tix, de",           0 },
571     { "nop",                   0 },
572     { "nop",                   0 },
573     { "nop",                   0 },
574     { "nop",                   0 },
575     { "nop",                   0 },
576     { "nop",                   0 },
577     { "nop",                   0 },
578     { "ld\tix, %02x%02xh",     2 },
579     { "ld\t(%02x%02xh), ix",   2 },
580     { "inc\tix",               0 },
581     { "inc\tixh",              0 },
582     { "dec\tixh",              0 },
583     { "ld\tixh, %02xh",        1 },
584     { "nop",                   0 },
585     { "nop",                   0 },
586     { "add\tix, ix",           0 },
587     { "ld\tix, (%02x%02xh)",   2 },
588     { "dec\tix",               0 },
589     { "inc\tixl",              0 },
590     { "dec\tixl",              0 },
591     { "ld\tixl, %02xh",        1 },
592     { "nop",                   0 },
593     { "nop",                   0 },
594     { "nop",                   0 },
595     { "nop",                   0 },
596     { "nop",                   0 },
597     { "inc\t(ix+%02xh)",       1 },
598     { "dec\t(ix+%02xh)",       1 },
599     { "ld\t(ix+%02xh), %02xh", 2 },
600     { "nop",                   0 },
601     { "nop",                   0 },
602     { "add\tix, sp",           0 },
603     { "nop",                   0 },
604     { "nop",                   0 },
605     { "nop",                   0 },
606     { "nop",                   0 },
607     { "nop",                   0 },
608     { "nop",                   0 },
609     { "nop",                   0 },
610     { "nop",                   0 },
611     { "nop",                   0 },
612     { "nop",                   0 },
613     { "ld\tb, ixh",            0 },
614     { "ld\tb, ixl",            0 },
615     { "ld\tb, (ix+%02xh)",     1 },
616     { "nop",                   0 },
617     { "nop",                   0 },
618     { "nop",                   0 },
619     { "nop",                   0 },
620     { "nop",                   0 },
621     { "ld\tc, ixh",            0 },
622     { "ld\tc, ixl",            0 },
623     { "ld\tc, (ix+%02xh)",     1 },
624     { "nop",                   0 },
625     { "nop",                   0 },
626     { "nop",                   0 },
627     { "nop",                   0 },
628     { "nop",                   0 },
629     { "ld\td, ixh",            0 },
630     { "ld\td, ixl",            0 },
631     { "ld\td, (ix+%02xh)",     1 },
632     { "nop",                   0 },
633     { "nop",                   0 },
634     { "nop",                   0 },
635     { "nop",                   0 },
636     { "nop",                   0 },
637     { "ld\te, ixh",            0 },
638     { "ld\te, ixl",            0 },
639     { "ld\te, (ix+%02xh)",     1 },
640     { "nop",                   0 },
641     { "ld\tixh, b",            0 },
642     { "ld\tixh, c",            0 },
643     { "ld\tixh, d",            0 },
644     { "ld\tixh, e",            0 },
645     { "ld\tixh, ixh",          0 },
646     { "ld\tixh, ixl",          0 },
647     { "ld\th, (ix+%02xh)",     1 },
648     { "ld\tixh, a",            0 },
649     { "ld\tixl, b",            0 },
650     { "ld\tixl, c",            0 },
651     { "ld\tixl, d",            0 },
652     { "ld\tixl, e",            0 },
653     { "ld\tixl, ixh",          0 },
654     { "ld\tixl, ixl",          0 },
655     { "ld\tl, (ix+%02xh)",     1 },
656     { "ld\tixl, a",            0 },
657     { "ld\t(ix+%02xh), b",     1 },
658     { "ld\t(ix+%02xh), c",     1 },
659     { "ld\t(ix+%02xh), d",     1 },
660     { "ld\t(ix+%02xh), e",     1 },
661     { "ld\t(ix+%02xh), h",     1 },
662     { "ld\t(ix+%02xh), l",     1 },
663     { "nop",                   0 },
664     { "ld\t(ix+%02xh), a",     1 },
665     { "nop",                   0 },
666     { "nop",                   0 },
667     { "nop",                   0 },
668     { "nop",                   0 },
669     { "ld\ta, ixh",            0 },
670     { "ld\ta, ixl",            0 },
671     { "ld\ta, (ix+%02xh)",     0 },
672     { "nop",                   0 },
673     { "nop",                   0 },
674     { "nop",                   0 },
675     { "nop",                   0 },
676     { "nop",                   0 },
677     { "add\ta, ixh",           0 },
678     { "add\ta, ixl",           0 },
679     { "add\ta, (ix+%02xh)",    1 },
680     { "nop",                   0 },
681     { "nop",                   0 },
682     { "nop",                   0 },
683     { "nop",                   0 },
684     { "nop",                   0 },
685     { "adc\ta, ixh",           0 },
686     { "adc\ta, ixl",           0 },
687     { "adc\ta, (ix+%02xh)",    0 },
688     { "nop",                   0 },
689     { "nop",                   0 },
690     { "nop",                   0 },
691     { "nop",                   0 },
692     { "nop",                   0 },
693     { "sub\tixh",              0 },
694     { "sub\tixl",              0 },
695     { "sub\t(ix+%02xh)",       1 },
696     { "nop",                   0 },
697     { "nop",                   0 },
698     { "nop",                   0 },
699     { "nop",                   0 },
700     { "nop",                   0 },
701     { "sbc\ta, ixh",           0 },
702     { "sbc\ta, ixl",           0 },
703     { "sbc\ta, (ix+%02xh)",    1 },
704     { "nop",                   0 },
705     { "nop",                   0 },
706     { "nop",                   0 },
707     { "nop",                   0 },
708     { "nop",                   0 },
709     { "and\tixh",              0 },
710     { "and\tixl",              0 },
711     { "and\t(ix+%02xh)",       1 },
712     { "nop",                   0 },
713     { "nop",                   0 },
714     { "nop",                   0 },
715     { "nop",                   0 },
716     { "nop",                   0 },
717     { "xor\tixh",              0 },
718     { "xor\tixl",              0 },
719     { "xor\t(ix+%02xh)",       1 },
720     { "nop",                   0 },
721     { "nop",                   0 },
722     { "nop",                   0 },
723     { "nop",                   0 },
724     { "nop",                   0 },
725     { "or\tixh",               0 },
726     { "or\tixl",               0 },
727     { "or\t(ix+%02xh)",        1 },
728     { "nop",                   0 },
729     { "nop",                   0 },
730     { "nop",                   0 },
731     { "nop",                   0 },
732     { "nop",                   0 },
733     { "cp\tixh",               0 },
734     { "cp\tixl",               0 },
735     { "cp\t(ix+%02xh)",        1 },
736     { "nop",                   0 },
737     { "nop",                   0 },
738     { "nop",                   0 },
739     { "nop",                   0 },
740     { "nop",                   0 },
741     { "nop",                   0 },
742     { "nop",                   0 },
743     { "nop",                   0 },
744     { "nop",                   0 },
745     { "nop",                   0 },
746     { "nop",                   0 },
747     { "nop",                   0 },
748     { "IX BITS",               0 },
749     { "nop",                   0 },
750     { "nop",                   0 },
751     { "nop",                   0 },
752     { "nop",                   0 },
753     { "nop",                   0 },
754     { "nop",                   0 },
755     { "nop",                   0 },
756     { "nop",                   0 },
757     { "nop",                   0 },
758     { "nop",                   0 },
759     { "nop",                   0 },
760     { "nop",                   0 },
761     { "nop",                   0 },
762     { "nop",                   0 },
763     { "nop",                   0 },
764     { "nop",                   0 },
765     { "nop",                   0 },
766     { "nop",                   0 },
767     { "nop",                   0 },
768     { "nop",                   0 },
769     { "nop",                   0 },
770     { "pop\tix",               0 },
771     { "nop",                   0 },
772     { "ex\t(sp), ix",          0 },
773     { "nop",                   0 },
774     { "push\tix",              0 },
775     { "nop",                   0 },
776     { "nop",                   0 },
777     { "nop",                   0 },
778     { "jp\t(ix)",              0 },
779     { "nop",                   0 },
780     { "nop",                   0 },
781     { "nop",                   0 },
782     { "nop",                   0 },
783     { "nop",                   0 },
784     { "nop",                   0 },
785     { "nop",                   0 },
786     { "nop",                   0 },
787     { "nop",                   0 },
788     { "nop",                   0 },
789     { "nop",                   0 },
790     { "nop",                   0 },
791     { "nop",                   0 },
792     { "nop",                   0 },
793     { "nop",                   0 },
794     { "ld\tsp, ix",            0 },
795     { "nop",                   0 },
796     { "nop",                   0 },
797     { "nop",                   0 },
798     { "nop",                   0 },
799     { "nop",                   0 },
800     { "nop",                   0 }
801 ];
802 
803 /**
804  * Extended instructions (ED) table for Z80.
805  * Invalid instructions are marked nop.
806  */
807 immutable z80[] insnz80ed = [
808     { "nop",                 0 },
809     { "nop",                 0 },
810     { "nop",                 0 },
811     { "nop",                 0 },
812     { "nop",                 0 },
813     { "nop",                 0 },
814     { "nop",                 0 },
815     { "nop",                 0 },
816     { "nop",                 0 },
817     { "nop",                 0 },
818     { "nop",                 0 },
819     { "nop",                 0 },
820     { "nop",                 0 },
821     { "nop",                 0 },
822     { "nop",                 0 },
823     { "nop",                 0 },
824     { "nop",                 0 },
825     { "nop",                 0 },
826     { "nop",                 0 },
827     { "nop",                 0 },
828     { "nop",                 0 },
829     { "nop",                 0 },
830     { "nop",                 0 },
831     { "nop",                 0 },
832     { "nop",                 0 },
833     { "nop",                 0 },
834     { "nop",                 0 },
835     { "nop",                 0 },
836     { "nop",                 0 },
837     { "nop",                 0 },
838     { "nop",                 0 },
839     { "nop",                 0 },
840     { "nop",                 0 },
841     { "nop",                 0 },
842     { "nop",                 0 },
843     { "nop",                 0 },
844     { "nop",                 0 },
845     { "nop",                 0 },
846     { "nop",                 0 },
847     { "nop",                 0 },
848     { "nop",                 0 },
849     { "nop",                 0 },
850     { "nop",                 0 },
851     { "nop",                 0 },
852     { "nop",                 0 },
853     { "nop",                 0 },
854     { "nop",                 0 },
855     { "nop",                 0 },
856     { "nop",                 0 },
857     { "nop",                 0 },
858     { "nop",                 0 },
859     { "nop",                 0 },
860     { "nop",                 0 },
861     { "nop",                 0 },
862     { "nop",                 0 },
863     { "nop",                 0 },
864     { "nop",                 0 },
865     { "nop",                 0 },
866     { "nop",                 0 },
867     { "nop",                 0 },
868     { "nop",                 0 },
869     { "nop",                 0 },
870     { "nop",                 0 },
871     { "nop",                 0 },
872     { "in\tb, (c)",          0 },
873     { "out\t(c), b",         0 },
874     { "sbc\thl, bc",         0 },
875     { "ld\t(%02x%02xh), bc", 2 },
876     { "neg",                 0 },
877     { "retn",                0 },
878     { "im\t0",               0 },
879     { "ld\ti, a",            0 },
880     { "in\tc, (c)",          0 },
881     { "out\t(c), c",         0 },
882     { "adc\thl, bc",         0 },
883     { "ld\tbc, (%02x%02xh)", 2 },
884     { "neg",                 0 },
885     { "reti",                0 },
886     { "im\t0/1",             0 },
887     { "ld\tr, a",            0 },
888     { "in\td, (c)",          0 },
889     { "out\t(c), d",         0 },
890     { "sbc\thl, de",         0 },
891     { "ld\t(%02x%02xh), de", 2 },
892     { "neg",                 0 },
893     { "retn",                0 },
894     { "im\t1",               0 },
895     { "ld\ta, i",            0 },
896     { "in\te, (c)",          0 },
897     { "out\t(c), e",         0 },
898     { "adc\thl, de",         0 },
899     { "ld\tde, (%02x%02xh)", 2 },
900     { "neg",                 0 },
901     { "retn",                0 },
902     { "im\t2",               0 },
903     { "ld\ta, r",            0 },
904     { "in\th, (c)",          0 },
905     { "out\t(c), h",         0 },
906     { "sbc\thl, hl",         0 },
907     { "ld\t(%02x%02xh), hl", 2 },
908     { "neg",                 0 },
909     { "retn",                0 },
910     { "im\t0",               0 },
911     { "rrd",                 0 },
912     { "in\tl, (c)",          0 },
913     { "out\t(c), l",         0 },
914     { "adc\thl, hl",         0 },
915     { "ld\thl, (%02x%02xh)", 2 },
916     { "neg",                 0 },
917     { "retn",                0 },
918     { "im\t0/1",             0 },
919     { "rld",                 0 },
920     { "in\t(c)",             0 },
921     { "out\t(c), 0",         0 },
922     { "sbc\thl, sp",         0 },
923     { "ld\t(%02x%02xh), sp", 2 },
924     { "neg",                 0 },
925     { "retn",                0 },
926     { "im\t1",               0 },
927     { "nop",                 0 },
928     { "in\ta, (c)",          0 },
929     { "out\t(c), a",         0 },
930     { "adc\thl, sp",         0 },
931     { "ld\tsp, (%02x%02xh)", 2 },
932     { "neg",                 0 },
933     { "retn",                0 },
934     { "im\t2",               0 },
935     { "nop",                 0 },
936     { "nop",                 0 },
937     { "nop",                 0 },
938     { "nop",                 0 },
939     { "nop",                 0 },
940     { "nop",                 0 },
941     { "nop",                 0 },
942     { "nop",                 0 },
943     { "nop",                 0 },
944     { "nop",                 0 },
945     { "nop",                 0 },
946     { "nop",                 0 },
947     { "nop",                 0 },
948     { "nop",                 0 },
949     { "nop",                 0 },
950     { "nop",                 0 },
951     { "nop",                 0 },
952     { "nop",                 0 },
953     { "nop",                 0 },
954     { "nop",                 0 },
955     { "nop",                 0 },
956     { "nop",                 0 },
957     { "nop",                 0 },
958     { "nop",                 0 },
959     { "nop",                 0 },
960     { "nop",                 0 },
961     { "nop",                 0 },
962     { "nop",                 0 },
963     { "nop",                 0 },
964     { "nop",                 0 },
965     { "nop",                 0 },
966     { "nop",                 0 },
967     { "nop",                 0 },
968     { "ldi",                 0 },
969     { "cpi",                 0 },
970     { "ini",                 0 },
971     { "outi",                0 },
972     { "nop",                 0 },
973     { "nop",                 0 },
974     { "nop",                 0 },
975     { "nop",                 0 },
976     { "ldd",                 0 },
977     { "cpd",                 0 },
978     { "ind",                 0 },
979     { "outd",                0 },
980     { "nop",                 0 },
981     { "nop",                 0 },
982     { "nop",                 0 },
983     { "nop",                 0 },
984     { "ldir",                0 },
985     { "cpir",                0 },
986     { "inir",                0 },
987     { "otir",                0 },
988     { "nop",                 0 },
989     { "nop",                 0 },
990     { "nop",                 0 },
991     { "nop",                 0 },
992     { "lddr",                0 },
993     { "cpdr",                0 },
994     { "indr",                0 },
995     { "otdr",                0 },
996     { "nop",                 0 },
997     { "nop",                 0 },
998     { "nop",                 0 },
999     { "nop",                 0 },
1000     { "nop",                 0 },
1001     { "nop",                 0 },
1002     { "nop",                 0 },
1003     { "nop",                 0 },
1004     { "nop",                 0 },
1005     { "nop",                 0 },
1006     { "nop",                 0 },
1007     { "nop",                 0 },
1008     { "nop",                 0 },
1009     { "nop",                 0 },
1010     { "nop",                 0 },
1011     { "nop",                 0 },
1012     { "nop",                 0 },
1013     { "nop",                 0 },
1014     { "nop",                 0 },
1015     { "nop",                 0 },
1016     { "nop",                 0 },
1017     { "nop",                 0 },
1018     { "nop",                 0 },
1019     { "nop",                 0 },
1020     { "nop",                 0 },
1021     { "nop",                 0 },
1022     { "nop",                 0 },
1023     { "nop",                 0 },
1024     { "nop",                 0 },
1025     { "nop",                 0 },
1026     { "nop",                 0 },
1027     { "nop",                 0 },
1028     { "nop",                 0 },
1029     { "nop",                 0 },
1030     { "nop",                 0 },
1031     { "nop",                 0 },
1032     { "nop",                 0 },
1033     { "nop",                 0 },
1034     { "nop",                 0 },
1035     { "nop",                 0 },
1036     { "nop",                 0 },
1037     { "nop",                 0 },
1038     { "nop",                 0 },
1039     { "nop",                 0 },
1040     { "nop",                 0 },
1041     { "nop",                 0 },
1042     { "nop",                 0 },
1043     { "nop",                 0 },
1044     { "nop",                 0 },
1045     { "nop",                 0 },
1046     { "nop",                 0 },
1047     { "nop",                 0 },
1048     { "nop",                 0 },
1049     { "nop",                 0 },
1050     { "nop",                 0 },
1051     { "nop",                 0 },
1052     { "nop",                 0 },
1053     { "nop",                 0 },
1054     { "nop",                 0 },
1055     { "nop",                 0 },
1056     { "nop",                 0 },
1057     { "nop",                 0 },
1058     { "nop",                 0 },
1059     { "nop",                 0 },
1060     { "nop",                 0 },
1061     { "nop",                 0 },
1062     { "nop",                 0 },
1063     { "nop",                 0 }
1064 ];
1065 
1066 /**
1067  * IY instructions (FD) table for Z80.
1068  * Invalid instructions are marked nop.
1069  */
1070 immutable z80[] insnz80fd = [
1071     { "nop",                   0 },
1072     { "nop",                   0 },
1073     { "nop",                   0 },
1074     { "nop",                   0 },
1075     { "nop",                   0 },
1076     { "nop",                   0 },
1077     { "nop",                   0 },
1078     { "nop",                   0 },
1079     { "nop",                   0 },
1080     { "add\tiy, bc",           0 },
1081     { "nop",                   0 },
1082     { "nop",                   0 },
1083     { "nop",                   0 },
1084     { "nop",                   0 },
1085     { "nop",                   0 },
1086     { "nop",                   0 },
1087     { "nop",                   0 },
1088     { "nop",                   0 },
1089     { "nop",                   0 },
1090     { "nop",                   0 },
1091     { "nop",                   0 },
1092     { "nop",                   0 },
1093     { "nop",                   0 },
1094     { "nop",                   0 },
1095     { "nop",                   0 },
1096     { "add\tiy, de",           0 },
1097     { "nop",                   0 },
1098     { "nop",                   0 },
1099     { "nop",                   0 },
1100     { "nop",                   0 },
1101     { "nop",                   0 },
1102     { "nop",                   0 },
1103     { "nop",                   0 },
1104     { "ld\tiy, %02x%02xh",     2 },
1105     { "ld\t(%02x%02xh), iy",   2 },
1106     { "inc\tiy",               0 },
1107     { "inc\tiyh",              0 },
1108     { "dec\tiyh",              0 },
1109     { "ld\tiyh, %02xh",        1 },
1110     { "nop",                   0 },
1111     { "nop",                   0 },
1112     { "add\tiy, iy",           0 },
1113     { "ld\tiy, (%02x%02xh)",   2 },
1114     { "dec\tiy",               0 },
1115     { "inc\tiyl",              0 },
1116     { "dec\tiyl",              0 },
1117     { "ld\tiyl, %02xh",        1 },
1118     { "nop",                   0 },
1119     { "nop",                   0 },
1120     { "nop",                   0 },
1121     { "nop",                   0 },
1122     { "nop",                   0 },
1123     { "inc\t(iy+%02xh)",       1 },
1124     { "dec\t(iy+%02xh)",       1 },
1125     { "ld\t(iy+%02xh), %02xh", 2 },
1126     { "nop",                   0 },
1127     { "nop",                   0 },
1128     { "add\tiy, sp",           0 },
1129     { "nop",                   0 },
1130     { "nop",                   0 },
1131     { "nop",                   0 },
1132     { "nop",                   0 },
1133     { "nop",                   0 },
1134     { "nop",                   0 },
1135     { "nop",                   0 },
1136     { "nop",                   0 },
1137     { "nop",                   0 },
1138     { "nop",                   0 },
1139     { "ld\tb, iyh",            0 },
1140     { "ld\tb, iyl",            0 },
1141     { "ld\tb, (iy+%02xh)",     1 },
1142     { "nop",                   0 },
1143     { "nop",                   0 },
1144     { "nop",                   0 },
1145     { "nop",                   0 },
1146     { "nop",                   0 },
1147     { "ld\tc, iyh",            0 },
1148     { "ld\tc, iyl",            0 },
1149     { "ld\tc, (iy+%02xh)",     1 },
1150     { "nop",                   0 },
1151     { "nop",                   0 },
1152     { "nop",                   0 },
1153     { "nop",                   0 },
1154     { "nop",                   0 },
1155     { "ld\td, iyh",            0 },
1156     { "ld\td, iyl",            0 },
1157     { "ld\td, (iy+%02xh)",     1 },
1158     { "nop",                   0 },
1159     { "nop",                   0 },
1160     { "nop",                   0 },
1161     { "nop",                   0 },
1162     { "nop",                   0 },
1163     { "ld\te, iyh",            0 },
1164     { "ld\te, iyl",            0 },
1165     { "ld\te, (iy+%02xh)",     1 },
1166     { "nop",                   0 },
1167     { "ld\tiyh, b",            0 },
1168     { "ld\tiyh, c",            0 },
1169     { "ld\tiyh, d",            0 },
1170     { "ld\tiyh, e",            0 },
1171     { "ld\tiyh, iyh",          0 },
1172     { "ld\tiyh, iyl",          0 },
1173     { "ld\th, (iy+%02xh)",     1 },
1174     { "ld\tiyh, a",            0 },
1175     { "ld\tiyl, b",            0 },
1176     { "ld\tiyl, c",            0 },
1177     { "ld\tiyl, d",            0 },
1178     { "ld\tiyl, e",            0 },
1179     { "ld\tiyl, iyh",          0 },
1180     { "ld\tiyl, iyl",          0 },
1181     { "ld\tl, (iy+%02xh)",     1 },
1182     { "ld\tiyl, a",            0 },
1183     { "ld\t(iy+%02xh), b",     1 },
1184     { "ld\t(iy+%02xh), c",     1 },
1185     { "ld\t(iy+%02xh), d",     1 },
1186     { "ld\t(iy+%02xh), e",     1 },
1187     { "ld\t(iy+%02xh), h",     1 },
1188     { "ld\t(iy+%02xh), l",     1 },
1189     { "nop",                   0 },
1190     { "ld\t(iy+%02xh), a",     1 },
1191     { "nop",                   0 },
1192     { "nop",                   0 },
1193     { "nop",                   0 },
1194     { "nop",                   0 },
1195     { "ld\ta, iyh",            0 },
1196     { "ld\ta, iyl",            0 },
1197     { "ld\ta, (iy+%02xh)",     0 },
1198     { "nop",                   0 },
1199     { "nop",                   0 },
1200     { "nop",                   0 },
1201     { "nop",                   0 },
1202     { "nop",                   0 },
1203     { "add\ta, iyh",           0 },
1204     { "add\ta, iyl",           0 },
1205     { "add\ta, (iy+%02xh)",    1 },
1206     { "nop",                   0 },
1207     { "nop",                   0 },
1208     { "nop",                   0 },
1209     { "nop",                   0 },
1210     { "nop",                   0 },
1211     { "adc\ta, iyh",           0 },
1212     { "adc\ta, iyl",           0 },
1213     { "adc\ta, (iy+%02xh)",    0 },
1214     { "nop",                   0 },
1215     { "nop",                   0 },
1216     { "nop",                   0 },
1217     { "nop",                   0 },
1218     { "nop",                   0 },
1219     { "sub\tiyh",              0 },
1220     { "sub\tiyl",              0 },
1221     { "sub\t(iy+%02xh)",       1 },
1222     { "nop",                   0 },
1223     { "nop",                   0 },
1224     { "nop",                   0 },
1225     { "nop",                   0 },
1226     { "nop",                   0 },
1227     { "sbc\ta, iyh",           0 },
1228     { "sbc\ta, iyl",           0 },
1229     { "sbc\ta, (iy+%02xh)",    1 },
1230     { "nop",                   0 },
1231     { "nop",                   0 },
1232     { "nop",                   0 },
1233     { "nop",                   0 },
1234     { "nop",                   0 },
1235     { "and\tiyh",              0 },
1236     { "and\tiyl",              0 },
1237     { "and\t(iy+%02xh)",       1 },
1238     { "nop",                   0 },
1239     { "nop",                   0 },
1240     { "nop",                   0 },
1241     { "nop",                   0 },
1242     { "nop",                   0 },
1243     { "xor\tiyh",              0 },
1244     { "xor\tiyl",              0 },
1245     { "xor\t(iy+%02xh)",       1 },
1246     { "nop",                   0 },
1247     { "nop",                   0 },
1248     { "nop",                   0 },
1249     { "nop",                   0 },
1250     { "nop",                   0 },
1251     { "or\tiyh",               0 },
1252     { "or\tiyl",               0 },
1253     { "or\t(iy+%02xh)",        1 },
1254     { "nop",                   0 },
1255     { "nop",                   0 },
1256     { "nop",                   0 },
1257     { "nop",                   0 },
1258     { "nop",                   0 },
1259     { "cp\tiyh",               0 },
1260     { "cp\tiyl",               0 },
1261     { "cp\t(iy+%02xh)",        1 },
1262     { "nop",                   0 },
1263     { "nop",                   0 },
1264     { "nop",                   0 },
1265     { "nop",                   0 },
1266     { "nop",                   0 },
1267     { "nop",                   0 },
1268     { "nop",                   0 },
1269     { "nop",                   0 },
1270     { "nop",                   0 },
1271     { "nop",                   0 },
1272     { "nop",                   0 },
1273     { "nop",                   0 },
1274     { "IY BITS",               0 },
1275     { "nop",                   0 },
1276     { "nop",                   0 },
1277     { "nop",                   0 },
1278     { "nop",                   0 },
1279     { "nop",                   0 },
1280     { "nop",                   0 },
1281     { "nop",                   0 },
1282     { "nop",                   0 },
1283     { "nop",                   0 },
1284     { "nop",                   0 },
1285     { "nop",                   0 },
1286     { "nop",                   0 },
1287     { "nop",                   0 },
1288     { "nop",                   0 },
1289     { "nop",                   0 },
1290     { "nop",                   0 },
1291     { "nop",                   0 },
1292     { "nop",                   0 },
1293     { "nop",                   0 },
1294     { "nop",                   0 },
1295     { "nop",                   0 },
1296     { "pop\tiy",               0 },
1297     { "nop",                   0 },
1298     { "ex\t(sp), iy",          0 },
1299     { "nop",                   0 },
1300     { "push\tiy",              0 },
1301     { "nop",                   0 },
1302     { "nop",                   0 },
1303     { "nop",                   0 },
1304     { "jp\t(iy)",              0 },
1305     { "nop",                   0 },
1306     { "nop",                   0 },
1307     { "nop",                   0 },
1308     { "nop",                   0 },
1309     { "nop",                   0 },
1310     { "nop",                   0 },
1311     { "nop",                   0 },
1312     { "nop",                   0 },
1313     { "nop",                   0 },
1314     { "nop",                   0 },
1315     { "nop",                   0 },
1316     { "nop",                   0 },
1317     { "nop",                   0 },
1318     { "nop",                   0 },
1319     { "nop",                   0 },
1320     { "ld\tsp, iy",            0 },
1321     { "nop",                   0 },
1322     { "nop",                   0 },
1323     { "nop",                   0 },
1324     { "nop",                   0 },
1325     { "nop",                   0 },
1326     { "nop",                   0 }
1327 ];
1328 
1329 /**
1330  * IX bit instructions (DDCB) table for Z80.
1331  */
1332 immutable z80[] insnz80ddcb = [
1333     { "rlc\t(ix+%02xh), b",    2 },
1334     { "rlc\t(ix+%02xh), c",    2 },
1335     { "rlc\t(ix+%02xh), d",    2 },
1336     { "rlc\t(ix+%02xh), e",    2 },
1337     { "rlc\t(ix+%02xh), h",    2 },
1338     { "rlc\t(ix+%02xh), l",    2 },
1339     { "rlc\t(ix+%02xh)",       2 },
1340     { "rlc\t(ix+%02xh), a",    2 },
1341     { "rrc\t(ix+%02xh), b",    2 },
1342     { "rrc\t(ix+%02xh), c",    2 },
1343     { "rrc\t(ix+%02xh), d",    2 },
1344     { "rrc\t(ix+%02xh), e",    2 },
1345     { "rrc\t(ix+%02xh), h",    2 },
1346     { "rrc\t(ix+%02xh), l",    2 },
1347     { "rrc\t(ix+%02xh)",       2 },
1348     { "rrc\t(ix+%02xh), a",    2 },
1349     { "rl\t(ix+%02xh), b",     2 },
1350     { "rl\t(ix+%02xh), c",     2 },
1351     { "rl\t(ix+%02xh), d",     2 },
1352     { "rl\t(ix+%02xh), e",     2 },
1353     { "rl\t(ix+%02xh), h",     2 },
1354     { "rl\t(ix+%02xh), l",     2 },
1355     { "rl\t(ix+%02xh)",        2 },
1356     { "rl\t(ix+%02xh), a",     2 },
1357     { "rr\t(ix+%02xh), b",     2 },
1358     { "rr\t(ix+%02xh), c",     2 },
1359     { "rr\t(ix+%02xh), d",     2 },
1360     { "rr\t(ix+%02xh), e",     2 },
1361     { "rr\t(ix+%02xh), h",     2 },
1362     { "rr\t(ix+%02xh), l",     2 },
1363     { "rr\t(ix+%02xh)",        2 },
1364     { "rr\t(ix+%02xh), a",     2 },
1365     { "sla\t(ix+%02xh), b",    2 },
1366     { "sla\t(ix+%02xh), c",    2 },
1367     { "sla\t(ix+%02xh), d",    2 },
1368     { "sla\t(ix+%02xh), e",    2 },
1369     { "sla\t(ix+%02xh), h",    2 },
1370     { "sla\t(ix+%02xh), l",    2 },
1371     { "sla\t(ix+%02xh)",       2 },
1372     { "sla\t(ix+%02xh), a",    2 },
1373     { "sra\t(ix+%02xh), b",    2 },
1374     { "sra\t(ix+%02xh), c",    2 },
1375     { "sra\t(ix+%02xh), d",    2 },
1376     { "sra\t(ix+%02xh), e",    2 },
1377     { "sra\t(ix+%02xh), h",    2 },
1378     { "sra\t(ix+%02xh), l",    2 },
1379     { "sra\t(ix+%02xh)",       2 },
1380     { "sra\t(ix+%02xh), a",    2 },
1381     { "sll\t(ix+%02xh), b",    2 },
1382     { "sll\t(ix+%02xh), c",    2 },
1383     { "sll\t(ix+%02xh), d",    2 },
1384     { "sll\t(ix+%02xh), e",    2 },
1385     { "sll\t(ix+%02xh), h",    2 },
1386     { "sll\t(ix+%02xh), l",    2 },
1387     { "sll\t(ix+%02xh)",       2 },
1388     { "sll\t(ix+%02xh), a",    2 },
1389     { "srl\t(ix+%02xh), b",    2 },
1390     { "srl\t(ix+%02xh), c",    2 },
1391     { "srl\t(ix+%02xh), d",    2 },
1392     { "srl\t(ix+%02xh), e",    2 },
1393     { "srl\t(ix+%02xh), h",    2 },
1394     { "srl\t(ix+%02xh), l",    2 },
1395     { "srl\t(ix+%02xh)",       2 },
1396     { "srl\t(ix+%02xh), a",    2 },
1397     { "bit\t0, (ix+%02xh)",    2 },
1398     { "bit\t0, (ix+%02xh)",    2 },
1399     { "bit\t0, (ix+%02xh)",    2 },
1400     { "bit\t0, (ix+%02xh)",    2 },
1401     { "bit\t0, (ix+%02xh)",    2 },
1402     { "bit\t0, (ix+%02xh)",    2 },
1403     { "bit\t0, (ix+%02xh)",    2 },
1404     { "bit\t0, (ix+%02xh)",    2 },
1405     { "bit\t1, (ix+%02xh)",    2 },
1406     { "bit\t1, (ix+%02xh)",    2 },
1407     { "bit\t1, (ix+%02xh)",    2 },
1408     { "bit\t1, (ix+%02xh)",    2 },
1409     { "bit\t1, (ix+%02xh)",    2 },
1410     { "bit\t1, (ix+%02xh)",    2 },
1411     { "bit\t1, (ix+%02xh)",    2 },
1412     { "bit\t1, (ix+%02xh)",    2 },
1413     { "bit\t2, (ix+%02xh)",    2 },
1414     { "bit\t2, (ix+%02xh)",    2 },
1415     { "bit\t2, (ix+%02xh)",    2 },
1416     { "bit\t2, (ix+%02xh)",    2 },
1417     { "bit\t2, (ix+%02xh)",    2 },
1418     { "bit\t2, (ix+%02xh)",    2 },
1419     { "bit\t2, (ix+%02xh)",    2 },
1420     { "bit\t2, (ix+%02xh)",    2 },
1421     { "bit\t3, (ix+%02xh)",    2 },
1422     { "bit\t3, (ix+%02xh)",    2 },
1423     { "bit\t3, (ix+%02xh)",    2 },
1424     { "bit\t3, (ix+%02xh)",    2 },
1425     { "bit\t3, (ix+%02xh)",    2 },
1426     { "bit\t3, (ix+%02xh)",    2 },
1427     { "bit\t3, (ix+%02xh)",    2 },
1428     { "bit\t3, (ix+%02xh)",    2 },
1429     { "bit\t4, (ix+%02xh)",    2 },
1430     { "bit\t4, (ix+%02xh)",    2 },
1431     { "bit\t4, (ix+%02xh)",    2 },
1432     { "bit\t4, (ix+%02xh)",    2 },
1433     { "bit\t4, (ix+%02xh)",    2 },
1434     { "bit\t4, (ix+%02xh)",    2 },
1435     { "bit\t4, (ix+%02xh)",    2 },
1436     { "bit\t4, (ix+%02xh)",    2 },
1437     { "bit\t5, (ix+%02xh)",    2 },
1438     { "bit\t5, (ix+%02xh)",    2 },
1439     { "bit\t5, (ix+%02xh)",    2 },
1440     { "bit\t5, (ix+%02xh)",    2 },
1441     { "bit\t5, (ix+%02xh)",    2 },
1442     { "bit\t5, (ix+%02xh)",    2 },
1443     { "bit\t5, (ix+%02xh)",    2 },
1444     { "bit\t5, (ix+%02xh)",    2 },
1445     { "bit\t6, (ix+%02xh)",    2 },
1446     { "bit\t6, (ix+%02xh)",    2 },
1447     { "bit\t6, (ix+%02xh)",    2 },
1448     { "bit\t6, (ix+%02xh)",    2 },
1449     { "bit\t6, (ix+%02xh)",    2 },
1450     { "bit\t6, (ix+%02xh)",    2 },
1451     { "bit\t6, (ix+%02xh)",    2 },
1452     { "bit\t6, (ix+%02xh)",    2 },
1453     { "bit\t7, (ix+%02xh)",    2 },
1454     { "bit\t7, (ix+%02xh)",    2 },
1455     { "bit\t7, (ix+%02xh)",    2 },
1456     { "bit\t7, (ix+%02xh)",    2 },
1457     { "bit\t7, (ix+%02xh)",    2 },
1458     { "bit\t7, (ix+%02xh)",    2 },
1459     { "bit\t7, (ix+%02xh)",    2 },
1460     { "bit\t7, (ix+%02xh)",    2 },
1461     { "res\t0, (ix+%02xh), b", 2 },
1462     { "res\t0, (ix+%02xh), c", 2 },
1463     { "res\t0, (ix+%02xh), d", 2 },
1464     { "res\t0, (ix+%02xh), e", 2 },
1465     { "res\t0, (ix+%02xh), h", 2 },
1466     { "res\t0, (ix+%02xh), l", 2 },
1467     { "res\t0, (ix+%02xh)",    2 },
1468     { "res\t0, (ix+%02xh), a", 2 },
1469     { "res\t1, (ix+%02xh), b", 2 },
1470     { "res\t1, (ix+%02xh), c", 2 },
1471     { "res\t1, (ix+%02xh), d", 2 },
1472     { "res\t1, (ix+%02xh), e", 2 },
1473     { "res\t1, (ix+%02xh), h", 2 },
1474     { "res\t1, (ix+%02xh), l", 2 },
1475     { "res\t1, (ix+%02xh)",    2 },
1476     { "res\t1, (ix+%02xh), a", 2 },
1477     { "res\t2, (ix+%02xh), b", 2 },
1478     { "res\t2, (ix+%02xh), c", 2 },
1479     { "res\t2, (ix+%02xh), d", 2 },
1480     { "res\t2, (ix+%02xh), e", 2 },
1481     { "res\t2, (ix+%02xh), h", 2 },
1482     { "res\t2, (ix+%02xh), l", 2 },
1483     { "res\t2, (ix+%02xh)",    2 },
1484     { "res\t2, (ix+%02xh), a", 2 },
1485     { "res\t3, (ix+%02xh), b", 2 },
1486     { "res\t3, (ix+%02xh), c", 2 },
1487     { "res\t3, (ix+%02xh), d", 2 },
1488     { "res\t3, (ix+%02xh), e", 2 },
1489     { "res\t3, (ix+%02xh), h", 2 },
1490     { "res\t3, (ix+%02xh), l", 2 },
1491     { "res\t3, (ix+%02xh)",    2 },
1492     { "res\t3, (ix+%02xh), a", 2 },
1493     { "res\t4, (ix+%02xh), b", 2 },
1494     { "res\t4, (ix+%02xh), c", 2 },
1495     { "res\t4, (ix+%02xh), d", 2 },
1496     { "res\t4, (ix+%02xh), e", 2 },
1497     { "res\t4, (ix+%02xh), h", 2 },
1498     { "res\t4, (ix+%02xh), l", 2 },
1499     { "res\t4, (ix+%02xh)",    2 },
1500     { "res\t4, (ix+%02xh), a", 2 },
1501     { "res\t5, (ix+%02xh), b", 2 },
1502     { "res\t5, (ix+%02xh), c", 2 },
1503     { "res\t5, (ix+%02xh), d", 2 },
1504     { "res\t5, (ix+%02xh), e", 2 },
1505     { "res\t5, (ix+%02xh), h", 2 },
1506     { "res\t5, (ix+%02xh), l", 2 },
1507     { "res\t5, (ix+%02xh)",    2 },
1508     { "res\t5, (ix+%02xh), a", 2 },
1509     { "res\t6, (ix+%02xh), b", 2 },
1510     { "res\t6, (ix+%02xh), c", 2 },
1511     { "res\t6, (ix+%02xh), d", 2 },
1512     { "res\t6, (ix+%02xh), e", 2 },
1513     { "res\t6, (ix+%02xh), h", 2 },
1514     { "res\t6, (ix+%02xh), l", 2 },
1515     { "res\t6, (ix+%02xh)",    2 },
1516     { "res\t6, (ix+%02xh), a", 2 },
1517     { "res\t7, (ix+%02xh), b", 2 },
1518     { "res\t7, (ix+%02xh), c", 2 },
1519     { "res\t7, (ix+%02xh), d", 2 },
1520     { "res\t7, (ix+%02xh), e", 2 },
1521     { "res\t7, (ix+%02xh), h", 2 },
1522     { "res\t7, (ix+%02xh), l", 2 },
1523     { "res\t7, (ix+%02xh)",    2 },
1524     { "res\t7, (ix+%02xh), a", 2 },
1525     { "set\t0, (ix+%02xh), b", 2 },
1526     { "set\t0, (ix+%02xh), c", 2 },
1527     { "set\t0, (ix+%02xh), d", 2 },
1528     { "set\t0, (ix+%02xh), e", 2 },
1529     { "set\t0, (ix+%02xh), h", 2 },
1530     { "set\t0, (ix+%02xh), l", 2 },
1531     { "set\t0, (ix+%02xh)",    2 },
1532     { "set\t0, (ix+%02xh), a", 2 },
1533     { "set\t1, (ix+%02xh), b", 2 },
1534     { "set\t1, (ix+%02xh), c", 2 },
1535     { "set\t1, (ix+%02xh), d", 2 },
1536     { "set\t1, (ix+%02xh), e", 2 },
1537     { "set\t1, (ix+%02xh), h", 2 },
1538     { "set\t1, (ix+%02xh), l", 2 },
1539     { "set\t1, (ix+%02xh)",    2 },
1540     { "set\t1, (ix+%02xh), a", 2 },
1541     { "set\t2, (ix+%02xh), b", 2 },
1542     { "set\t2, (ix+%02xh), c", 2 },
1543     { "set\t2, (ix+%02xh), d", 2 },
1544     { "set\t2, (ix+%02xh), e", 2 },
1545     { "set\t2, (ix+%02xh), h", 2 },
1546     { "set\t2, (ix+%02xh), l", 2 },
1547     { "set\t2, (ix+%02xh)",    2 },
1548     { "set\t2, (ix+%02xh), a", 2 },
1549     { "set\t3, (ix+%02xh), b", 2 },
1550     { "set\t3, (ix+%02xh), c", 2 },
1551     { "set\t3, (ix+%02xh), d", 2 },
1552     { "set\t3, (ix+%02xh), e", 2 },
1553     { "set\t3, (ix+%02xh), h", 2 },
1554     { "set\t3, (ix+%02xh), l", 2 },
1555     { "set\t3, (ix+%02xh)",    2 },
1556     { "set\t3, (ix+%02xh), a", 2 },
1557     { "set\t4, (ix+%02xh), b", 2 },
1558     { "set\t4, (ix+%02xh), c", 2 },
1559     { "set\t4, (ix+%02xh), d", 2 },
1560     { "set\t4, (ix+%02xh), e", 2 },
1561     { "set\t4, (ix+%02xh), h", 2 },
1562     { "set\t4, (ix+%02xh), l", 2 },
1563     { "set\t4, (ix+%02xh)",    2 },
1564     { "set\t4, (ix+%02xh), a", 2 },
1565     { "set\t5, (ix+%02xh), b", 2 },
1566     { "set\t5, (ix+%02xh), c", 2 },
1567     { "set\t5, (ix+%02xh), d", 2 },
1568     { "set\t5, (ix+%02xh), e", 2 },
1569     { "set\t5, (ix+%02xh), h", 2 },
1570     { "set\t5, (ix+%02xh), l", 2 },
1571     { "set\t5, (ix+%02xh)",    2 },
1572     { "set\t5, (ix+%02xh), a", 2 },
1573     { "set\t6, (ix+%02xh), b", 2 },
1574     { "set\t6, (ix+%02xh), c", 2 },
1575     { "set\t6, (ix+%02xh), d", 2 },
1576     { "set\t6, (ix+%02xh), e", 2 },
1577     { "set\t6, (ix+%02xh), h", 2 },
1578     { "set\t6, (ix+%02xh), l", 2 },
1579     { "set\t6, (ix+%02xh)",    2 },
1580     { "set\t6, (ix+%02xh), a", 2 },
1581     { "set\t7, (ix+%02xh), b", 2 },
1582     { "set\t7, (ix+%02xh), c", 2 },
1583     { "set\t7, (ix+%02xh), d", 2 },
1584     { "set\t7, (ix+%02xh), e", 2 },
1585     { "set\t7, (ix+%02xh), h", 2 },
1586     { "set\t7, (ix+%02xh), l", 2 },
1587     { "set\t7, (ix+%02xh)",    2 },
1588     { "set\t7, (ix+%02xh), a", 2 }
1589 ];
1590 
1591 /**
1592  * IY bit instructions (FDCB) table for Z80.
1593  */
1594 immutable z80[] insnz80fdcb = [
1595     { "rlc\t(iy+%02xh), b",    2 },
1596     { "rlc\t(iy+%02xh), c",    2 },
1597     { "rlc\t(iy+%02xh), d",    2 },
1598     { "rlc\t(iy+%02xh), e",    2 },
1599     { "rlc\t(iy+%02xh), h",    2 },
1600     { "rlc\t(iy+%02xh), l",    2 },
1601     { "rlc\t(iy+%02xh)",       2 },
1602     { "rlc\t(iy+%02xh), a",    2 },
1603     { "rrc\t(iy+%02xh), b",    2 },
1604     { "rrc\t(iy+%02xh), c",    2 },
1605     { "rrc\t(iy+%02xh), d",    2 },
1606     { "rrc\t(iy+%02xh), e",    2 },
1607     { "rrc\t(iy+%02xh), h",    2 },
1608     { "rrc\t(iy+%02xh), l",    2 },
1609     { "rrc\t(iy+%02xh)",       2 },
1610     { "rrc\t(iy+%02xh), a",    2 },
1611     { "rl\t(iy+%02xh), b",     2 },
1612     { "rl\t(iy+%02xh), c",     2 },
1613     { "rl\t(iy+%02xh), d",     2 },
1614     { "rl\t(iy+%02xh), e",     2 },
1615     { "rl\t(iy+%02xh), h",     2 },
1616     { "rl\t(iy+%02xh), l",     2 },
1617     { "rl\t(iy+%02xh)",        2 },
1618     { "rl\t(iy+%02xh), a",     2 },
1619     { "rr\t(iy+%02xh), b",     2 },
1620     { "rr\t(iy+%02xh), c",     2 },
1621     { "rr\t(iy+%02xh), d",     2 },
1622     { "rr\t(iy+%02xh), e",     2 },
1623     { "rr\t(iy+%02xh), h",     2 },
1624     { "rr\t(iy+%02xh), l",     2 },
1625     { "rr\t(iy+%02xh)",        2 },
1626     { "rr\t(iy+%02xh), a",     2 },
1627     { "sla\t(iy+%02xh), b",    2 },
1628     { "sla\t(iy+%02xh), c",    2 },
1629     { "sla\t(iy+%02xh), d",    2 },
1630     { "sla\t(iy+%02xh), e",    2 },
1631     { "sla\t(iy+%02xh), h",    2 },
1632     { "sla\t(iy+%02xh), l",    2 },
1633     { "sla\t(iy+%02xh)",       2 },
1634     { "sla\t(iy+%02xh), a",    2 },
1635     { "sra\t(iy+%02xh), b",    2 },
1636     { "sra\t(iy+%02xh), c",    2 },
1637     { "sra\t(iy+%02xh), d",    2 },
1638     { "sra\t(iy+%02xh), e",    2 },
1639     { "sra\t(iy+%02xh), h",    2 },
1640     { "sra\t(iy+%02xh), l",    2 },
1641     { "sra\t(iy+%02xh)",       2 },
1642     { "sra\t(iy+%02xh), a",    2 },
1643     { "sll\t(iy+%02xh), b",    2 },
1644     { "sll\t(iy+%02xh), c",    2 },
1645     { "sll\t(iy+%02xh), d",    2 },
1646     { "sll\t(iy+%02xh), e",    2 },
1647     { "sll\t(iy+%02xh), h",    2 },
1648     { "sll\t(iy+%02xh), l",    2 },
1649     { "sll\t(iy+%02xh)",       2 },
1650     { "sll\t(iy+%02xh), a",    2 },
1651     { "srl\t(iy+%02xh), b",    2 },
1652     { "srl\t(iy+%02xh), c",    2 },
1653     { "srl\t(iy+%02xh), d",    2 },
1654     { "srl\t(iy+%02xh), e",    2 },
1655     { "srl\t(iy+%02xh), h",    2 },
1656     { "srl\t(iy+%02xh), l",    2 },
1657     { "srl\t(iy+%02xh)",       2 },
1658     { "srl\t(iy+%02xh), a",    2 },
1659     { "bit\t0, (iy+%02xh)",    2 },
1660     { "bit\t0, (iy+%02xh)",    2 },
1661     { "bit\t0, (iy+%02xh)",    2 },
1662     { "bit\t0, (iy+%02xh)",    2 },
1663     { "bit\t0, (iy+%02xh)",    2 },
1664     { "bit\t0, (iy+%02xh)",    2 },
1665     { "bit\t0, (iy+%02xh)",    2 },
1666     { "bit\t0, (iy+%02xh)",    2 },
1667     { "bit\t1, (iy+%02xh)",    2 },
1668     { "bit\t1, (iy+%02xh)",    2 },
1669     { "bit\t1, (iy+%02xh)",    2 },
1670     { "bit\t1, (iy+%02xh)",    2 },
1671     { "bit\t1, (iy+%02xh)",    2 },
1672     { "bit\t1, (iy+%02xh)",    2 },
1673     { "bit\t1, (iy+%02xh)",    2 },
1674     { "bit\t1, (iy+%02xh)",    2 },
1675     { "bit\t2, (iy+%02xh)",    2 },
1676     { "bit\t2, (iy+%02xh)",    2 },
1677     { "bit\t2, (iy+%02xh)",    2 },
1678     { "bit\t2, (iy+%02xh)",    2 },
1679     { "bit\t2, (iy+%02xh)",    2 },
1680     { "bit\t2, (iy+%02xh)",    2 },
1681     { "bit\t2, (iy+%02xh)",    2 },
1682     { "bit\t2, (iy+%02xh)",    2 },
1683     { "bit\t3, (iy+%02xh)",    2 },
1684     { "bit\t3, (iy+%02xh)",    2 },
1685     { "bit\t3, (iy+%02xh)",    2 },
1686     { "bit\t3, (iy+%02xh)",    2 },
1687     { "bit\t3, (iy+%02xh)",    2 },
1688     { "bit\t3, (iy+%02xh)",    2 },
1689     { "bit\t3, (iy+%02xh)",    2 },
1690     { "bit\t3, (iy+%02xh)",    2 },
1691     { "bit\t4, (iy+%02xh)",    2 },
1692     { "bit\t4, (iy+%02xh)",    2 },
1693     { "bit\t4, (iy+%02xh)",    2 },
1694     { "bit\t4, (iy+%02xh)",    2 },
1695     { "bit\t4, (iy+%02xh)",    2 },
1696     { "bit\t4, (iy+%02xh)",    2 },
1697     { "bit\t4, (iy+%02xh)",    2 },
1698     { "bit\t4, (iy+%02xh)",    2 },
1699     { "bit\t5, (iy+%02xh)",    2 },
1700     { "bit\t5, (iy+%02xh)",    2 },
1701     { "bit\t5, (iy+%02xh)",    2 },
1702     { "bit\t5, (iy+%02xh)",    2 },
1703     { "bit\t5, (iy+%02xh)",    2 },
1704     { "bit\t5, (iy+%02xh)",    2 },
1705     { "bit\t5, (iy+%02xh)",    2 },
1706     { "bit\t5, (iy+%02xh)",    2 },
1707     { "bit\t6, (iy+%02xh)",    2 },
1708     { "bit\t6, (iy+%02xh)",    2 },
1709     { "bit\t6, (iy+%02xh)",    2 },
1710     { "bit\t6, (iy+%02xh)",    2 },
1711     { "bit\t6, (iy+%02xh)",    2 },
1712     { "bit\t6, (iy+%02xh)",    2 },
1713     { "bit\t6, (iy+%02xh)",    2 },
1714     { "bit\t6, (iy+%02xh)",    2 },
1715     { "bit\t7, (iy+%02xh)",    2 },
1716     { "bit\t7, (iy+%02xh)",    2 },
1717     { "bit\t7, (iy+%02xh)",    2 },
1718     { "bit\t7, (iy+%02xh)",    2 },
1719     { "bit\t7, (iy+%02xh)",    2 },
1720     { "bit\t7, (iy+%02xh)",    2 },
1721     { "bit\t7, (iy+%02xh)",    2 },
1722     { "bit\t7, (iy+%02xh)",    2 },
1723     { "res\t0, (iy+%02xh), b", 2 },
1724     { "res\t0, (iy+%02xh), c", 2 },
1725     { "res\t0, (iy+%02xh), d", 2 },
1726     { "res\t0, (iy+%02xh), e", 2 },
1727     { "res\t0, (iy+%02xh), h", 2 },
1728     { "res\t0, (iy+%02xh), l", 2 },
1729     { "res\t0, (iy+%02xh)",    2 },
1730     { "res\t0, (iy+%02xh), a", 2 },
1731     { "res\t1, (iy+%02xh), b", 2 },
1732     { "res\t1, (iy+%02xh), c", 2 },
1733     { "res\t1, (iy+%02xh), d", 2 },
1734     { "res\t1, (iy+%02xh), e", 2 },
1735     { "res\t1, (iy+%02xh), h", 2 },
1736     { "res\t1, (iy+%02xh), l", 2 },
1737     { "res\t1, (iy+%02xh)",    2 },
1738     { "res\t1, (iy+%02xh), a", 2 },
1739     { "res\t2, (iy+%02xh), b", 2 },
1740     { "res\t2, (iy+%02xh), c", 2 },
1741     { "res\t2, (iy+%02xh), d", 2 },
1742     { "res\t2, (iy+%02xh), e", 2 },
1743     { "res\t2, (iy+%02xh), h", 2 },
1744     { "res\t2, (iy+%02xh), l", 2 },
1745     { "res\t2, (iy+%02xh)",    2 },
1746     { "res\t2, (iy+%02xh), a", 2 },
1747     { "res\t3, (iy+%02xh), b", 2 },
1748     { "res\t3, (iy+%02xh), c", 2 },
1749     { "res\t3, (iy+%02xh), d", 2 },
1750     { "res\t3, (iy+%02xh), e", 2 },
1751     { "res\t3, (iy+%02xh), h", 2 },
1752     { "res\t3, (iy+%02xh), l", 2 },
1753     { "res\t3, (iy+%02xh)",    2 },
1754     { "res\t3, (iy+%02xh), a", 2 },
1755     { "res\t4, (iy+%02xh), b", 2 },
1756     { "res\t4, (iy+%02xh), c", 2 },
1757     { "res\t4, (iy+%02xh), d", 2 },
1758     { "res\t4, (iy+%02xh), e", 2 },
1759     { "res\t4, (iy+%02xh), h", 2 },
1760     { "res\t4, (iy+%02xh), l", 2 },
1761     { "res\t4, (iy+%02xh)",    2 },
1762     { "res\t4, (iy+%02xh), a", 2 },
1763     { "res\t5, (iy+%02xh), b", 2 },
1764     { "res\t5, (iy+%02xh), c", 2 },
1765     { "res\t5, (iy+%02xh), d", 2 },
1766     { "res\t5, (iy+%02xh), e", 2 },
1767     { "res\t5, (iy+%02xh), h", 2 },
1768     { "res\t5, (iy+%02xh), l", 2 },
1769     { "res\t5, (iy+%02xh)",    2 },
1770     { "res\t5, (iy+%02xh), a", 2 },
1771     { "res\t6, (iy+%02xh), b", 2 },
1772     { "res\t6, (iy+%02xh), c", 2 },
1773     { "res\t6, (iy+%02xh), d", 2 },
1774     { "res\t6, (iy+%02xh), e", 2 },
1775     { "res\t6, (iy+%02xh), h", 2 },
1776     { "res\t6, (iy+%02xh), l", 2 },
1777     { "res\t6, (iy+%02xh)",    2 },
1778     { "res\t6, (iy+%02xh), a", 2 },
1779     { "res\t7, (iy+%02xh), b", 2 },
1780     { "res\t7, (iy+%02xh), c", 2 },
1781     { "res\t7, (iy+%02xh), d", 2 },
1782     { "res\t7, (iy+%02xh), e", 2 },
1783     { "res\t7, (iy+%02xh), h", 2 },
1784     { "res\t7, (iy+%02xh), l", 2 },
1785     { "res\t7, (iy+%02xh)",    2 },
1786     { "res\t7, (iy+%02xh), a", 2 },
1787     { "set\t0, (iy+%02xh), b", 2 },
1788     { "set\t0, (iy+%02xh), c", 2 },
1789     { "set\t0, (iy+%02xh), d", 2 },
1790     { "set\t0, (iy+%02xh), e", 2 },
1791     { "set\t0, (iy+%02xh), h", 2 },
1792     { "set\t0, (iy+%02xh), l", 2 },
1793     { "set\t0, (iy+%02xh)",    2 },
1794     { "set\t0, (iy+%02xh), a", 2 },
1795     { "set\t1, (iy+%02xh), b", 2 },
1796     { "set\t1, (iy+%02xh), c", 2 },
1797     { "set\t1, (iy+%02xh), d", 2 },
1798     { "set\t1, (iy+%02xh), e", 2 },
1799     { "set\t1, (iy+%02xh), h", 2 },
1800     { "set\t1, (iy+%02xh), l", 2 },
1801     { "set\t1, (iy+%02xh)",    2 },
1802     { "set\t1, (iy+%02xh), a", 2 },
1803     { "set\t2, (iy+%02xh), b", 2 },
1804     { "set\t2, (iy+%02xh), c", 2 },
1805     { "set\t2, (iy+%02xh), d", 2 },
1806     { "set\t2, (iy+%02xh), e", 2 },
1807     { "set\t2, (iy+%02xh), h", 2 },
1808     { "set\t2, (iy+%02xh), l", 2 },
1809     { "set\t2, (iy+%02xh)",    2 },
1810     { "set\t2, (iy+%02xh), a", 2 },
1811     { "set\t3, (iy+%02xh), b", 2 },
1812     { "set\t3, (iy+%02xh), c", 2 },
1813     { "set\t3, (iy+%02xh), d", 2 },
1814     { "set\t3, (iy+%02xh), e", 2 },
1815     { "set\t3, (iy+%02xh), h", 2 },
1816     { "set\t3, (iy+%02xh), l", 2 },
1817     { "set\t3, (iy+%02xh)",    2 },
1818     { "set\t3, (iy+%02xh), a", 2 },
1819     { "set\t4, (iy+%02xh), b", 2 },
1820     { "set\t4, (iy+%02xh), c", 2 },
1821     { "set\t4, (iy+%02xh), d", 2 },
1822     { "set\t4, (iy+%02xh), e", 2 },
1823     { "set\t4, (iy+%02xh), h", 2 },
1824     { "set\t4, (iy+%02xh), l", 2 },
1825     { "set\t4, (iy+%02xh)",    2 },
1826     { "set\t4, (iy+%02xh), a", 2 },
1827     { "set\t5, (iy+%02xh), b", 2 },
1828     { "set\t5, (iy+%02xh), c", 2 },
1829     { "set\t5, (iy+%02xh), d", 2 },
1830     { "set\t5, (iy+%02xh), e", 2 },
1831     { "set\t5, (iy+%02xh), h", 2 },
1832     { "set\t5, (iy+%02xh), l", 2 },
1833     { "set\t5, (iy+%02xh)",    2 },
1834     { "set\t5, (iy+%02xh), a", 2 },
1835     { "set\t6, (iy+%02xh), b", 2 },
1836     { "set\t6, (iy+%02xh), c", 2 },
1837     { "set\t6, (iy+%02xh), d", 2 },
1838     { "set\t6, (iy+%02xh), e", 2 },
1839     { "set\t6, (iy+%02xh), h", 2 },
1840     { "set\t6, (iy+%02xh), l", 2 },
1841     { "set\t6, (iy+%02xh)",    2 },
1842     { "set\t6, (iy+%02xh), a", 2 },
1843     { "set\t7, (iy+%02xh), b", 2 },
1844     { "set\t7, (iy+%02xh), c", 2 },
1845     { "set\t7, (iy+%02xh), d", 2 },
1846     { "set\t7, (iy+%02xh), e", 2 },
1847     { "set\t7, (iy+%02xh), h", 2 },
1848     { "set\t7, (iy+%02xh), l", 2 },
1849     { "set\t7, (iy+%02xh)",    2 },
1850     { "set\t7, (iy+%02xh), a", 2 }
1851 ];