Implement 386 instruction table, improve 8086/186/286 instruction table
[multi_emu.git] / cpu_z80.c
1 #include <assert.h>
2 #include <stdbool.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include "cpu_z80.h"
6
7 // initialization
8 void cpu_z80_init(
9   struct cpu_z80 *self,
10   int (*read_byte)(void *context, int addr),
11   void *read_byte_context,
12   void (*write_byte)(void *context, int addr, int data),
13   void *write_byte_context,
14   int (*in_byte)(void *context, int addr),
15   void *in_byte_context,
16   void (*out_byte)(void *context, int addr, int data),
17   void *out_byte_context
18 ) {
19   memset(self, 0, sizeof(struct cpu_z80));
20   self->read_byte = read_byte;
21   self->read_byte_context = read_byte_context;
22   self->write_byte = write_byte;
23   self->write_byte_context = write_byte_context;
24   self->in_byte = in_byte;
25   self->in_byte_context = in_byte_context;
26   self->out_byte = out_byte;
27   self->out_byte_context = out_byte_context;
28 }
29
30 void cpu_z80_reset(struct cpu_z80 *self) {
31   self->regs.word.pc = CPU_Z80_RESET_ADDR;
32   self->regs.word.af = 0xffff;
33   self->regs.word.sp = 0xffff;
34   self->regs.word.iflags = 0;
35 }
36
37 // instruction decode
38 void cpu_z80_execute(struct cpu_z80 *self) {
39   if (self->regs.bit.nmi_pending) {
40     self->regs.bit.nmi_pending = false;
41
42     self->regs.word.pc += self->regs.bit.halt_flag;
43     self->regs.bit.halt_flag = false;
44
45     self->regs.bit.iff1 = false;
46     cpu_z80_call(self, true, CPU_Z80_NMI_ADDR);
47     return;
48   }
49
50   if (
51     self->regs.bit.irq_pending &&
52     self->regs.bit.iff1 &&
53     !self->regs.bit.ei_flag
54   ) {
55     self->regs.bit.irq_pending = false;
56
57     self->regs.word.pc += self->regs.bit.halt_flag;
58     self->regs.bit.halt_flag = false;
59
60     self->regs.bit.iff1 = false;
61     self->regs.bit.iff2 = false;
62     switch (self->regs.bit.im) {
63     case 0:
64       // self->regs.byte.v contains the opcode placed on bus by peripheral
65       // only RST instructions are supported at the moment (systems with
66       // 8259 / 8228 could also use CALL, that would be extra complexity)
67       assert((self->regs.byte.v & 0xc7) == 0xc7);
68       cpu_z80_call(self, true, self->regs.byte.v & 0x38);
69       break;
70     case 1:
71       cpu_z80_call(self, true, CPU_Z80_IRQ_ADDR);
72       break;
73     case 2:
74       // self->regs.byte.v contains the vector placed on bus by peripheral
75       // it is combined with self->regs.byte.i to create vector word "iv"
76       cpu_z80_call(self, true, cpu_z80_read_word(self, self->regs.word.iv & 0xfffe));
77       break;
78     default:
79       abort();
80     } 
81     return;
82   }
83
84   self->regs.bit.halt_flag = false;
85   self->regs.bit.ei_flag = false;
86   switch (cpu_z80_fetch_byte(self)) {
87   case 0x00:
88     cpu_z80_nop(self);
89     break;
90   case 0x01:
91     cpu_z80_ld_word(self, CPU_Z80_EA_BC, cpu_z80_fetch_word(self));
92     break;
93   case 0x02:
94     cpu_z80_ld_byte(self, self->regs.word.bc, self->regs.byte.a);
95     break;
96   case 0x03:
97     cpu_z80_inc_word(self, CPU_Z80_EA_BC);
98     break;
99   case 0x04:
100     cpu_z80_inc_byte(self, CPU_Z80_EA_B);
101     break;
102   case 0x05:
103     cpu_z80_dec_byte(self, CPU_Z80_EA_B);
104     break;
105   case 0x06:
106     cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_fetch_byte(self));
107     break;
108   case 0x07:
109     cpu_z80_rlca(self);
110     break;
111   case 0x08:
112     cpu_z80_ex(self, CPU_Z80_EA_AF, CPU_Z80_EA_AF_PRIME);
113     break;
114   case 0x09:
115     cpu_z80_add_word(self, CPU_Z80_EA_HL, self->regs.word.bc);
116     break;
117   case 0x0a:
118     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.bc));
119     break;
120   case 0x0b:
121     cpu_z80_dec_word(self, CPU_Z80_EA_BC);
122     break;
123   case 0x0c:
124     cpu_z80_inc_byte(self, CPU_Z80_EA_C);
125     break;
126   case 0x0d:
127     cpu_z80_dec_byte(self, CPU_Z80_EA_C);
128     break;
129   case 0x0e:
130     cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_fetch_byte(self));
131     break;
132   case 0x0f:
133     cpu_z80_rrca(self);
134     break;
135   case 0x10:
136     cpu_z80_djnz(self, cpu_z80_relative(self));
137     break;
138   case 0x11:
139     cpu_z80_ld_word(self, CPU_Z80_EA_DE, cpu_z80_fetch_word(self));
140     break;
141   case 0x12:
142     cpu_z80_ld_byte(self, self->regs.word.de, self->regs.byte.a);
143     break;
144   case 0x13:
145     cpu_z80_inc_word(self, CPU_Z80_EA_DE);
146     break;
147   case 0x14:
148     cpu_z80_inc_byte(self, CPU_Z80_EA_D);
149     break;
150   case 0x15:
151     cpu_z80_dec_byte(self, CPU_Z80_EA_D);
152     break;
153   case 0x16:
154     cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_fetch_byte(self));
155     break;
156   case 0x17:
157     cpu_z80_rla(self);
158     break;
159   case 0x18:
160     cpu_z80_jr(self, true, cpu_z80_relative(self));
161     break;
162   case 0x19:
163     cpu_z80_add_word(self, CPU_Z80_EA_HL, self->regs.word.de);
164     break;
165   case 0x1a:
166     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.de));
167     break;
168   case 0x1b:
169     cpu_z80_dec_word(self, CPU_Z80_EA_DE);
170     break;
171   case 0x1c:
172     cpu_z80_inc_byte(self, CPU_Z80_EA_E);
173     break;
174   case 0x1d:
175     cpu_z80_dec_byte(self, CPU_Z80_EA_E);
176     break;
177   case 0x1e:
178     cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_fetch_byte(self));
179     break;
180   case 0x1f:
181     cpu_z80_rra(self);
182     break;
183   case 0x20:
184     cpu_z80_jr(self, !self->regs.bit.zf, cpu_z80_relative(self));
185     break;
186   case 0x21:
187     cpu_z80_ld_word(self, CPU_Z80_EA_HL, cpu_z80_fetch_word(self));
188     break;
189   case 0x22:
190     cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.hl);
191     break;
192   case 0x23:
193     cpu_z80_inc_word(self, CPU_Z80_EA_HL);
194     break;
195   case 0x24:
196     cpu_z80_inc_byte(self, CPU_Z80_EA_H);
197     break;
198   case 0x25:
199     cpu_z80_dec_byte(self, CPU_Z80_EA_H);
200     break;
201   case 0x26:
202     cpu_z80_ld_byte(self, CPU_Z80_EA_H, cpu_z80_fetch_byte(self));
203     break;
204   case 0x27:
205     cpu_z80_daa(self);
206     break;
207   case 0x28:
208     cpu_z80_jr(self, self->regs.bit.zf, cpu_z80_relative(self));
209     break;
210   case 0x29:
211     cpu_z80_add_word(self, CPU_Z80_EA_HL, self->regs.word.hl);
212     break;
213   case 0x2a:
214     cpu_z80_ld_word(self, CPU_Z80_EA_HL, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
215     break;
216   case 0x2b:
217     cpu_z80_dec_word(self, CPU_Z80_EA_HL);
218     break;
219   case 0x2c:
220     cpu_z80_inc_byte(self, CPU_Z80_EA_L);
221     break;
222   case 0x2d:
223     cpu_z80_dec_byte(self, CPU_Z80_EA_L);
224     break;
225   case 0x2e:
226     cpu_z80_ld_byte(self, CPU_Z80_EA_L, cpu_z80_fetch_byte(self));
227     break;
228   case 0x2f:
229     cpu_z80_cpl(self);
230     break;
231   case 0x30:
232     cpu_z80_jr(self, !self->regs.bit.cf, cpu_z80_relative(self));
233     break;
234   case 0x31:
235     cpu_z80_ld_word(self, CPU_Z80_EA_SP, cpu_z80_fetch_word(self));
236     break;
237   case 0x32:
238     cpu_z80_ld_byte(self, cpu_z80_fetch_word(self), self->regs.byte.a);
239     break;
240   case 0x33:
241     cpu_z80_inc_word(self, CPU_Z80_EA_SP);
242     break;
243   case 0x34:
244     cpu_z80_inc_byte(self, self->regs.word.hl);
245     break;
246   case 0x35:
247     cpu_z80_dec_byte(self, self->regs.word.hl);
248     break;
249   case 0x36:
250     cpu_z80_ld_byte(self, self->regs.word.hl, cpu_z80_fetch_byte(self));
251     break;
252   case 0x37:
253     cpu_z80_scf(self);
254     break;
255   case 0x38:
256     cpu_z80_jr(self, self->regs.bit.cf, cpu_z80_relative(self));
257     break;
258   case 0x39:
259     cpu_z80_add_word(self, CPU_Z80_EA_HL, self->regs.word.sp);
260     break;
261   case 0x3a:
262     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_fetch_word(self)));
263     break;
264   case 0x3b:
265     cpu_z80_dec_word(self, CPU_Z80_EA_SP);
266     break;
267   case 0x3c:
268     cpu_z80_inc_byte(self, CPU_Z80_EA_A);
269     break;
270   case 0x3d:
271     cpu_z80_dec_byte(self, CPU_Z80_EA_A);
272     break;
273   case 0x3e:
274     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
275     break;
276   case 0x3f:
277     cpu_z80_ccf(self);
278     break;
279   case 0x40:
280     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.b);
281     break;
282   case 0x41:
283     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.c);
284     break;
285   case 0x42:
286     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.d);
287     break;
288   case 0x43:
289     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.e);
290     break;
291   case 0x44:
292     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.h);
293     break;
294   case 0x45:
295     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.l);
296     break;
297   case 0x46:
298     cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_read_byte(self, self->regs.word.hl));
299     break;
300   case 0x47:
301     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.a);
302     break;
303   case 0x48:
304     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.b);
305     break;
306   case 0x49:
307     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.c);
308     break;
309   case 0x4a:
310     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.d);
311     break;
312   case 0x4b:
313     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.e);
314     break;
315   case 0x4c:
316     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.h);
317     break;
318   case 0x4d:
319     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.l);
320     break;
321   case 0x4e:
322     cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_read_byte(self, self->regs.word.hl));
323     break;
324   case 0x4f:
325     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.a);
326     break;
327   case 0x50:
328     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.b);
329     break;
330   case 0x51:
331     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.c);
332     break;
333   case 0x52:
334     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.d);
335     break;
336   case 0x53:
337     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.e);
338     break;
339   case 0x54:
340     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.h);
341     break;
342   case 0x55:
343     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.l);
344     break;
345   case 0x56:
346     cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_read_byte(self, self->regs.word.hl));
347     break;
348   case 0x57:
349     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.a);
350     break;
351   case 0x58:
352     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.b);
353     break;
354   case 0x59:
355     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.c);
356     break;
357   case 0x5a:
358     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.d);
359     break;
360   case 0x5b:
361     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.e);
362     break;
363   case 0x5c:
364     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.h);
365     break;
366   case 0x5d:
367     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.l);
368     break;
369   case 0x5e:
370     cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_read_byte(self, self->regs.word.hl));
371     break;
372   case 0x5f:
373     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.a);
374     break;
375   case 0x60:
376     cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.b);
377     break;
378   case 0x61:
379     cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.c);
380     break;
381   case 0x62:
382     cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.d);
383     break;
384   case 0x63:
385     cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.e);
386     break;
387   case 0x64:
388     cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.h);
389     break;
390   case 0x65:
391     cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.l);
392     break;
393   case 0x66:
394     cpu_z80_ld_byte(self, CPU_Z80_EA_H, cpu_z80_read_byte(self, self->regs.word.hl));
395     break;
396   case 0x67:
397     cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.a);
398     break;
399   case 0x68:
400     cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.b);
401     break;
402   case 0x69:
403     cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.c);
404     break;
405   case 0x6a:
406     cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.d);
407     break;
408   case 0x6b:
409     cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.e);
410     break;
411   case 0x6c:
412     cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.h);
413     break;
414   case 0x6d:
415     cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.l);
416     break;
417   case 0x6e:
418     cpu_z80_ld_byte(self, CPU_Z80_EA_L, cpu_z80_read_byte(self, self->regs.word.hl));
419     break;
420   case 0x6f:
421     cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.a);
422     break;
423   case 0x70:
424     cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.b);
425     break;
426   case 0x71:
427     cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.c);
428     break;
429   case 0x72:
430     cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.d);
431     break;
432   case 0x73:
433     cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.e);
434     break;
435   case 0x74:
436     cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.h);
437     break;
438   case 0x75:
439     cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.l);
440     break;
441   case 0x76:
442     cpu_z80_halt(self);
443     break;
444   case 0x77:
445     cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.a);
446     break;
447   case 0x78:
448     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
449     break;
450   case 0x79:
451     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
452     break;
453   case 0x7a:
454     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
455     break;
456   case 0x7b:
457     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
458     break;
459   case 0x7c:
460     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.h);
461     break;
462   case 0x7d:
463     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.l);
464     break;
465   case 0x7e:
466     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.hl));
467     break;
468   case 0x7f:
469     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
470     break;
471   case 0x80:
472     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
473     break;
474   case 0x81:
475     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
476     break;
477   case 0x82:
478     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
479     break;
480   case 0x83:
481     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
482     break;
483   case 0x84:
484     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.h);
485     break;
486   case 0x85:
487     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.l);
488     break;
489   case 0x86:
490     cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.hl));
491     break;
492   case 0x87:
493     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
494     break;
495   case 0x88:
496     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
497     break;
498   case 0x89:
499     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
500     break;
501   case 0x8a:
502     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
503     break;
504   case 0x8b:
505     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
506     break;
507   case 0x8c:
508     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.h);
509     break;
510   case 0x8d:
511     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.l);
512     break;
513   case 0x8e:
514     cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.hl));
515     break;
516   case 0x8f:
517     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
518     break;
519   case 0x90:
520     cpu_z80_sub(self, self->regs.byte.b);
521     break;
522   case 0x91:
523     cpu_z80_sub(self, self->regs.byte.c);
524     break;
525   case 0x92:
526     cpu_z80_sub(self, self->regs.byte.d);
527     break;
528   case 0x93:
529     cpu_z80_sub(self, self->regs.byte.e);
530     break;
531   case 0x94:
532     cpu_z80_sub(self, self->regs.byte.h);
533     break;
534   case 0x95:
535     cpu_z80_sub(self, self->regs.byte.l);
536     break;
537   case 0x96:
538     cpu_z80_sub(self, cpu_z80_read_byte(self, self->regs.word.hl));
539     break;
540   case 0x97:
541     cpu_z80_sub(self, self->regs.byte.a);
542     break;
543   case 0x98:
544     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
545     break;
546   case 0x99:
547     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
548     break;
549   case 0x9a:
550     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
551     break;
552   case 0x9b:
553     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
554     break;
555   case 0x9c:
556     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.h);
557     break;
558   case 0x9d:
559     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.l);
560     break;
561   case 0x9e:
562     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.hl));
563     break;
564   case 0x9f:
565     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
566     break;
567   case 0xa0:
568     cpu_z80_and(self, self->regs.byte.b);
569     break;
570   case 0xa1:
571     cpu_z80_and(self, self->regs.byte.c);
572     break;
573   case 0xa2:
574     cpu_z80_and(self, self->regs.byte.d);
575     break;
576   case 0xa3:
577     cpu_z80_and(self, self->regs.byte.e);
578     break;
579   case 0xa4:
580     cpu_z80_and(self, self->regs.byte.h);
581     break;
582   case 0xa5:
583     cpu_z80_and(self, self->regs.byte.l);
584     break;
585   case 0xa6:
586     cpu_z80_and(self, cpu_z80_read_byte(self, self->regs.word.hl));
587     break;
588   case 0xa7:
589     cpu_z80_and(self, self->regs.byte.a);
590     break;
591   case 0xa8:
592     cpu_z80_xor(self, self->regs.byte.b);
593     break;
594   case 0xa9:
595     cpu_z80_xor(self, self->regs.byte.c);
596     break;
597   case 0xaa:
598     cpu_z80_xor(self, self->regs.byte.d);
599     break;
600   case 0xab:
601     cpu_z80_xor(self, self->regs.byte.e);
602     break;
603   case 0xac:
604     cpu_z80_xor(self, self->regs.byte.h);
605     break;
606   case 0xad:
607     cpu_z80_xor(self, self->regs.byte.l);
608     break;
609   case 0xae:
610     cpu_z80_xor(self, cpu_z80_read_byte(self, self->regs.word.hl));
611     break;
612   case 0xaf:
613     cpu_z80_xor(self, self->regs.byte.a);
614     break;
615   case 0xb0:
616     cpu_z80_or(self, self->regs.byte.b);
617     break;
618   case 0xb1:
619     cpu_z80_or(self, self->regs.byte.c);
620     break;
621   case 0xb2:
622     cpu_z80_or(self, self->regs.byte.d);
623     break;
624   case 0xb3:
625     cpu_z80_or(self, self->regs.byte.e);
626     break;
627   case 0xb4:
628     cpu_z80_or(self, self->regs.byte.h);
629     break;
630   case 0xb5:
631     cpu_z80_or(self, self->regs.byte.l);
632     break;
633   case 0xb6:
634     cpu_z80_or(self, cpu_z80_read_byte(self, self->regs.word.hl));
635     break;
636   case 0xb7:
637     cpu_z80_or(self, self->regs.byte.a);
638     break;
639   case 0xb8:
640     cpu_z80_cp(self, self->regs.byte.b);
641     break;
642   case 0xb9:
643     cpu_z80_cp(self, self->regs.byte.c);
644     break;
645   case 0xba:
646     cpu_z80_cp(self, self->regs.byte.d);
647     break;
648   case 0xbb:
649     cpu_z80_cp(self, self->regs.byte.e);
650     break;
651   case 0xbc:
652     cpu_z80_cp(self, self->regs.byte.h);
653     break;
654   case 0xbd:
655     cpu_z80_cp(self, self->regs.byte.l);
656     break;
657   case 0xbe:
658     cpu_z80_cp(self, cpu_z80_read_byte(self, self->regs.word.hl));
659     break;
660   case 0xbf:
661     cpu_z80_cp(self, self->regs.byte.a);
662     break;
663   case 0xc0:
664     cpu_z80_ret(self, !self->regs.bit.zf);
665     break;
666   case 0xc1:
667     cpu_z80_pop(self, CPU_Z80_EA_BC);
668     break;
669   case 0xc2:
670     cpu_z80_jp(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
671     break;
672   case 0xc3:
673     cpu_z80_jp(self, true, cpu_z80_fetch_word(self));
674     break;
675   case 0xc4:
676     cpu_z80_call(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
677     break;
678   case 0xc5:
679     cpu_z80_push(self, self->regs.word.bc);
680     break;
681   case 0xc6:
682     cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
683     break;
684   case 0xc7:
685     cpu_z80_call(self, true, 0);
686     break;
687   case 0xc8:
688     cpu_z80_ret(self, self->regs.bit.zf);
689     break;
690   case 0xc9:
691     cpu_z80_ret(self, true);
692     break;
693   case 0xca:
694     cpu_z80_jp(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
695     break;
696   case 0xcb:
697     cpu_z80_execute_cb(self);
698     break;
699   case 0xcc:
700     cpu_z80_call(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
701     break;
702   case 0xcd:
703     cpu_z80_call(self, true, cpu_z80_fetch_word(self));
704     break;
705   case 0xce:
706     cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
707     break;
708   case 0xcf:
709     cpu_z80_call(self, true, 8);
710     break;
711   case 0xd0:
712     cpu_z80_ret(self, !self->regs.bit.cf);
713     break;
714   case 0xd1:
715     cpu_z80_pop(self, CPU_Z80_EA_DE);
716     break;
717   case 0xd2:
718     cpu_z80_jp(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
719     break;
720   case 0xd3:
721     cpu_z80_out(self, cpu_z80_port_word(self), self->regs.byte.a);
722     break;
723   case 0xd4:
724     cpu_z80_call(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
725     break;
726   case 0xd5:
727     cpu_z80_push(self, self->regs.word.de);
728     break;
729   case 0xd6:
730     cpu_z80_sub(self, cpu_z80_fetch_byte(self));
731     break;
732   case 0xd7:
733     cpu_z80_call(self, true, 0x10);
734     break;
735   case 0xd8:
736     cpu_z80_ret(self, self->regs.bit.cf);
737     break;
738   case 0xd9:
739     cpu_z80_ex(self, CPU_Z80_EA_BC, CPU_Z80_EA_BC_PRIME);
740     cpu_z80_ex(self, CPU_Z80_EA_DE, CPU_Z80_EA_DE_PRIME);
741     cpu_z80_ex(self, CPU_Z80_EA_HL, CPU_Z80_EA_HL_PRIME);
742     break;
743   case 0xda:
744     cpu_z80_jp(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
745     break;
746   case 0xdb:
747     cpu_z80_in(self, CPU_Z80_EA_A, cpu_z80_in_byte(self, cpu_z80_port_word(self)));
748     break;
749   case 0xdc:
750     cpu_z80_call(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
751     break;
752   case 0xdd:
753     cpu_z80_execute_dd(self);
754     break;
755   case 0xde:
756     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
757     break;
758   case 0xdf:
759     cpu_z80_call(self, true, 0x18);
760     break;
761   case 0xe0:
762     cpu_z80_ret(self, !self->regs.bit.pvf);
763     break;
764   case 0xe1:
765     cpu_z80_pop(self, CPU_Z80_EA_HL);
766     break;
767   case 0xe2:
768     cpu_z80_jp(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
769     break;
770   case 0xe3:
771     cpu_z80_ex(self, self->regs.word.sp, CPU_Z80_EA_HL);
772     break;
773   case 0xe4:
774     cpu_z80_call(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
775     break;
776   case 0xe5:
777     cpu_z80_push(self, self->regs.word.hl);
778     break;
779   case 0xe6:
780     cpu_z80_and(self, cpu_z80_fetch_byte(self));
781     break;
782   case 0xe7:
783     cpu_z80_call(self, true, 0x20);
784     break;
785   case 0xe8:
786     cpu_z80_ret(self, self->regs.bit.pvf);
787     break;
788   case 0xe9:
789     cpu_z80_jp(self, true, cpu_z80_read_word(self, self->regs.word.hl));
790     break;
791   case 0xea:
792     cpu_z80_jp(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
793     break;
794   case 0xeb:
795     cpu_z80_ex(self, CPU_Z80_EA_DE, CPU_Z80_EA_HL);
796     break;
797   case 0xec:
798     cpu_z80_call(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
799     break;
800   case 0xed:
801     cpu_z80_execute_ed(self);
802     break;
803   case 0xee:
804     cpu_z80_xor(self, cpu_z80_fetch_byte(self));
805     break;
806   case 0xef:
807     cpu_z80_call(self, true, 0x28);
808     break;
809   case 0xf0:
810     cpu_z80_ret(self, !self->regs.bit.sf);
811     break;
812   case 0xf1:
813     cpu_z80_pop(self, CPU_Z80_EA_AF);
814     break;
815   case 0xf2:
816     cpu_z80_jp(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
817     break;
818   case 0xf3:
819     cpu_z80_di(self);
820     break;
821   case 0xf4:
822     cpu_z80_call(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
823     break;
824   case 0xf5:
825     cpu_z80_push(self, self->regs.word.af);
826     break;
827   case 0xf6:
828     cpu_z80_or(self, cpu_z80_fetch_byte(self));
829     break;
830   case 0xf7:
831     cpu_z80_call(self, true, 0x30);
832     break;
833   case 0xf8:
834     cpu_z80_ret(self, self->regs.bit.sf);
835     break;
836   case 0xf9:
837     cpu_z80_ld_word(self, CPU_Z80_EA_SP, self->regs.word.hl);
838     break;
839   case 0xfa:
840     cpu_z80_jp(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
841     break;
842   case 0xfb:
843     cpu_z80_ei(self);
844     break;
845   case 0xfc:
846     cpu_z80_call(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
847     break;
848   case 0xfd:
849     cpu_z80_execute_fd(self);
850     break;
851   case 0xfe:
852     cpu_z80_cp(self, cpu_z80_fetch_byte(self));
853     break;
854   case 0xff:
855     cpu_z80_call(self, true, 0x38);
856     break;
857   }
858 }
859
860 void cpu_z80_execute_cb(struct cpu_z80 *self) {
861   switch (cpu_z80_fetch_byte(self)) {
862   case 0x00:
863     cpu_z80_rlc(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
864     break;
865   case 0x01:
866     cpu_z80_rlc(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
867     break;
868   case 0x02:
869     cpu_z80_rlc(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
870     break;
871   case 0x03:
872     cpu_z80_rlc(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
873     break;
874   case 0x04:
875     cpu_z80_rlc(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
876     break;
877   case 0x05:
878     cpu_z80_rlc(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
879     break;
880   case 0x06:
881     cpu_z80_rlc(self, self->regs.word.hl, CPU_Z80_EA_SINK);
882     break;
883   case 0x07:
884     cpu_z80_rlc(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
885     break;
886   case 0x08:
887     cpu_z80_rrc(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
888     break;
889   case 0x09:
890     cpu_z80_rrc(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
891     break;
892   case 0x0a:
893     cpu_z80_rrc(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
894     break;
895   case 0x0b:
896     cpu_z80_rrc(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
897     break;
898   case 0x0c:
899     cpu_z80_rrc(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
900     break;
901   case 0x0d:
902     cpu_z80_rrc(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
903     break;
904   case 0x0e:
905     cpu_z80_rrc(self, self->regs.word.hl, CPU_Z80_EA_SINK);
906     break;
907   case 0x0f:
908     cpu_z80_rrc(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
909     break;
910   case 0x10:
911     cpu_z80_rl(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
912     break;
913   case 0x11:
914     cpu_z80_rl(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
915     break;
916   case 0x12:
917     cpu_z80_rl(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
918     break;
919   case 0x13:
920     cpu_z80_rl(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
921     break;
922   case 0x14:
923     cpu_z80_rl(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
924     break;
925   case 0x15:
926     cpu_z80_rl(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
927     break;
928   case 0x16:
929     cpu_z80_rl(self, self->regs.word.hl, CPU_Z80_EA_SINK);
930     break;
931   case 0x17:
932     cpu_z80_rl(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
933     break;
934   case 0x18:
935     cpu_z80_rr(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
936     break;
937   case 0x19:
938     cpu_z80_rr(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
939     break;
940   case 0x1a:
941     cpu_z80_rr(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
942     break;
943   case 0x1b:
944     cpu_z80_rr(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
945     break;
946   case 0x1c:
947     cpu_z80_rr(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
948     break;
949   case 0x1d:
950     cpu_z80_rr(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
951     break;
952   case 0x1e:
953     cpu_z80_rr(self, self->regs.word.hl, CPU_Z80_EA_SINK);
954     break;
955   case 0x1f:
956     cpu_z80_rr(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
957     break;
958   case 0x20:
959     cpu_z80_sla(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
960     break;
961   case 0x21:
962     cpu_z80_sla(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
963     break;
964   case 0x22:
965     cpu_z80_sla(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
966     break;
967   case 0x23:
968     cpu_z80_sla(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
969     break;
970   case 0x24:
971     cpu_z80_sla(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
972     break;
973   case 0x25:
974     cpu_z80_sla(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
975     break;
976   case 0x26:
977     cpu_z80_sla(self, self->regs.word.hl, CPU_Z80_EA_SINK);
978     break;
979   case 0x27:
980     cpu_z80_sla(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
981     break;
982   case 0x28:
983     cpu_z80_sra(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
984     break;
985   case 0x29:
986     cpu_z80_sra(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
987     break;
988   case 0x2a:
989     cpu_z80_sra(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
990     break;
991   case 0x2b:
992     cpu_z80_sra(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
993     break;
994   case 0x2c:
995     cpu_z80_sra(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
996     break;
997   case 0x2d:
998     cpu_z80_sra(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
999     break;
1000   case 0x2e:
1001     cpu_z80_sra(self, self->regs.word.hl, CPU_Z80_EA_SINK);
1002     break;
1003   case 0x2f:
1004     cpu_z80_sra(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1005     break;
1006   case 0x30:
1007     cpu_z80_sll(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1008     break;
1009   case 0x31:
1010     cpu_z80_sll(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1011     break;
1012   case 0x32:
1013     cpu_z80_sll(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1014     break;
1015   case 0x33:
1016     cpu_z80_sll(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1017     break;
1018   case 0x34:
1019     cpu_z80_sll(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1020     break;
1021   case 0x35:
1022     cpu_z80_sll(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1023     break;
1024   case 0x36:
1025     cpu_z80_sll(self, self->regs.word.hl, CPU_Z80_EA_SINK);
1026     break;
1027   case 0x37:
1028     cpu_z80_sll(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1029     break;
1030   case 0x38:
1031     cpu_z80_srl(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1032     break;
1033   case 0x39:
1034     cpu_z80_srl(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1035     break;
1036   case 0x3a:
1037     cpu_z80_srl(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1038     break;
1039   case 0x3b:
1040     cpu_z80_srl(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1041     break;
1042   case 0x3c:
1043     cpu_z80_srl(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1044     break;
1045   case 0x3d:
1046     cpu_z80_srl(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1047     break;
1048   case 0x3e:
1049     cpu_z80_srl(self, self->regs.word.hl, CPU_Z80_EA_SINK);
1050     break;
1051   case 0x3f:
1052     cpu_z80_srl(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1053     break;
1054   case 0x40:
1055     cpu_z80_bit(self, 0, self->regs.byte.b);
1056     break;
1057   case 0x41:
1058     cpu_z80_bit(self, 0, self->regs.byte.c);
1059     break;
1060   case 0x42:
1061     cpu_z80_bit(self, 0, self->regs.byte.d);
1062     break;
1063   case 0x43:
1064     cpu_z80_bit(self, 0, self->regs.byte.e);
1065     break;
1066   case 0x44:
1067     cpu_z80_bit(self, 0, self->regs.byte.h);
1068     break;
1069   case 0x45:
1070     cpu_z80_bit(self, 0, self->regs.byte.l);
1071     break;
1072   case 0x46:
1073     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, self->regs.word.hl));
1074     break;
1075   case 0x47:
1076     cpu_z80_bit(self, 0, self->regs.byte.a);
1077     break;
1078   case 0x48:
1079     cpu_z80_bit(self, 1, self->regs.byte.b);
1080     break;
1081   case 0x49:
1082     cpu_z80_bit(self, 1, self->regs.byte.c);
1083     break;
1084   case 0x4a:
1085     cpu_z80_bit(self, 1, self->regs.byte.d);
1086     break;
1087   case 0x4b:
1088     cpu_z80_bit(self, 1, self->regs.byte.e);
1089     break;
1090   case 0x4c:
1091     cpu_z80_bit(self, 1, self->regs.byte.h);
1092     break;
1093   case 0x4d:
1094     cpu_z80_bit(self, 1, self->regs.byte.l);
1095     break;
1096   case 0x4e:
1097     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, self->regs.word.hl));
1098     break;
1099   case 0x4f:
1100     cpu_z80_bit(self, 1, self->regs.byte.a);
1101     break;
1102   case 0x50:
1103     cpu_z80_bit(self, 2, self->regs.byte.b);
1104     break;
1105   case 0x51:
1106     cpu_z80_bit(self, 2, self->regs.byte.c);
1107     break;
1108   case 0x52:
1109     cpu_z80_bit(self, 2, self->regs.byte.d);
1110     break;
1111   case 0x53:
1112     cpu_z80_bit(self, 2, self->regs.byte.e);
1113     break;
1114   case 0x54:
1115     cpu_z80_bit(self, 2, self->regs.byte.h);
1116     break;
1117   case 0x55:
1118     cpu_z80_bit(self, 2, self->regs.byte.l);
1119     break;
1120   case 0x56:
1121     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, self->regs.word.hl));
1122     break;
1123   case 0x57:
1124     cpu_z80_bit(self, 2, self->regs.byte.a);
1125     break;
1126   case 0x58:
1127     cpu_z80_bit(self, 3, self->regs.byte.b);
1128     break;
1129   case 0x59:
1130     cpu_z80_bit(self, 3, self->regs.byte.c);
1131     break;
1132   case 0x5a:
1133     cpu_z80_bit(self, 3, self->regs.byte.d);
1134     break;
1135   case 0x5b:
1136     cpu_z80_bit(self, 3, self->regs.byte.e);
1137     break;
1138   case 0x5c:
1139     cpu_z80_bit(self, 3, self->regs.byte.h);
1140     break;
1141   case 0x5d:
1142     cpu_z80_bit(self, 3, self->regs.byte.l);
1143     break;
1144   case 0x5e:
1145     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, self->regs.word.hl));
1146     break;
1147   case 0x5f:
1148     cpu_z80_bit(self, 3, self->regs.byte.a);
1149     break;
1150   case 0x60:
1151     cpu_z80_bit(self, 4, self->regs.byte.b);
1152     break;
1153   case 0x61:
1154     cpu_z80_bit(self, 4, self->regs.byte.c);
1155     break;
1156   case 0x62:
1157     cpu_z80_bit(self, 4, self->regs.byte.d);
1158     break;
1159   case 0x63:
1160     cpu_z80_bit(self, 4, self->regs.byte.e);
1161     break;
1162   case 0x64:
1163     cpu_z80_bit(self, 4, self->regs.byte.h);
1164     break;
1165   case 0x65:
1166     cpu_z80_bit(self, 4, self->regs.byte.l);
1167     break;
1168   case 0x66:
1169     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, self->regs.word.hl));
1170     break;
1171   case 0x67:
1172     cpu_z80_bit(self, 4, self->regs.byte.a);
1173     break;
1174   case 0x68:
1175     cpu_z80_bit(self, 5, self->regs.byte.b);
1176     break;
1177   case 0x69:
1178     cpu_z80_bit(self, 5, self->regs.byte.c);
1179     break;
1180   case 0x6a:
1181     cpu_z80_bit(self, 5, self->regs.byte.d);
1182     break;
1183   case 0x6b:
1184     cpu_z80_bit(self, 5, self->regs.byte.e);
1185     break;
1186   case 0x6c:
1187     cpu_z80_bit(self, 5, self->regs.byte.h);
1188     break;
1189   case 0x6d:
1190     cpu_z80_bit(self, 5, self->regs.byte.l);
1191     break;
1192   case 0x6e:
1193     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, self->regs.word.hl));
1194     break;
1195   case 0x6f:
1196     cpu_z80_bit(self, 5, self->regs.byte.a);
1197     break;
1198   case 0x70:
1199     cpu_z80_bit(self, 6, self->regs.byte.b);
1200     break;
1201   case 0x71:
1202     cpu_z80_bit(self, 6, self->regs.byte.c);
1203     break;
1204   case 0x72:
1205     cpu_z80_bit(self, 6, self->regs.byte.d);
1206     break;
1207   case 0x73:
1208     cpu_z80_bit(self, 6, self->regs.byte.e);
1209     break;
1210   case 0x74:
1211     cpu_z80_bit(self, 6, self->regs.byte.h);
1212     break;
1213   case 0x75:
1214     cpu_z80_bit(self, 6, self->regs.byte.l);
1215     break;
1216   case 0x76:
1217     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, self->regs.word.hl));
1218     break;
1219   case 0x77:
1220     cpu_z80_bit(self, 6, self->regs.byte.a);
1221     break;
1222   case 0x78:
1223     cpu_z80_bit(self, 7, self->regs.byte.b);
1224     break;
1225   case 0x79:
1226     cpu_z80_bit(self, 7, self->regs.byte.c);
1227     break;
1228   case 0x7a:
1229     cpu_z80_bit(self, 7, self->regs.byte.d);
1230     break;
1231   case 0x7b:
1232     cpu_z80_bit(self, 7, self->regs.byte.e);
1233     break;
1234   case 0x7c:
1235     cpu_z80_bit(self, 7, self->regs.byte.h);
1236     break;
1237   case 0x7d:
1238     cpu_z80_bit(self, 7, self->regs.byte.l);
1239     break;
1240   case 0x7e:
1241     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, self->regs.word.hl));
1242     break;
1243   case 0x7f:
1244     cpu_z80_bit(self, 7, self->regs.byte.a);
1245     break;
1246   case 0x80:
1247     cpu_z80_res(self, 0, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1248     break;
1249   case 0x81:
1250     cpu_z80_res(self, 0, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1251     break;
1252   case 0x82:
1253     cpu_z80_res(self, 0, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1254     break;
1255   case 0x83:
1256     cpu_z80_res(self, 0, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1257     break;
1258   case 0x84:
1259     cpu_z80_res(self, 0, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1260     break;
1261   case 0x85:
1262     cpu_z80_res(self, 0, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1263     break;
1264   case 0x86:
1265     cpu_z80_res(self, 0, self->regs.word.hl, CPU_Z80_EA_SINK);
1266     break;
1267   case 0x87:
1268     cpu_z80_res(self, 0, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1269     break;
1270   case 0x88:
1271     cpu_z80_res(self, 1, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1272     break;
1273   case 0x89:
1274     cpu_z80_res(self, 1, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1275     break;
1276   case 0x8a:
1277     cpu_z80_res(self, 1, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1278     break;
1279   case 0x8b:
1280     cpu_z80_res(self, 1, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1281     break;
1282   case 0x8c:
1283     cpu_z80_res(self, 1, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1284     break;
1285   case 0x8d:
1286     cpu_z80_res(self, 1, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1287     break;
1288   case 0x8e:
1289     cpu_z80_res(self, 1, self->regs.word.hl, CPU_Z80_EA_SINK);
1290     break;
1291   case 0x8f:
1292     cpu_z80_res(self, 1, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1293     break;
1294   case 0x90:
1295     cpu_z80_res(self, 2, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1296     break;
1297   case 0x91:
1298     cpu_z80_res(self, 2, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1299     break;
1300   case 0x92:
1301     cpu_z80_res(self, 2, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1302     break;
1303   case 0x93:
1304     cpu_z80_res(self, 2, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1305     break;
1306   case 0x94:
1307     cpu_z80_res(self, 2, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1308     break;
1309   case 0x95:
1310     cpu_z80_res(self, 2, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1311     break;
1312   case 0x96:
1313     cpu_z80_res(self, 2, self->regs.word.hl, CPU_Z80_EA_SINK);
1314     break;
1315   case 0x97:
1316     cpu_z80_res(self, 2, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1317     break;
1318   case 0x98:
1319     cpu_z80_res(self, 3, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1320     break;
1321   case 0x99:
1322     cpu_z80_res(self, 3, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1323     break;
1324   case 0x9a:
1325     cpu_z80_res(self, 3, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1326     break;
1327   case 0x9b:
1328     cpu_z80_res(self, 3, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1329     break;
1330   case 0x9c:
1331     cpu_z80_res(self, 3, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1332     break;
1333   case 0x9d:
1334     cpu_z80_res(self, 3, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1335     break;
1336   case 0x9e:
1337     cpu_z80_res(self, 3, self->regs.word.hl, CPU_Z80_EA_SINK);
1338     break;
1339   case 0x9f:
1340     cpu_z80_res(self, 3, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1341     break;
1342   case 0xa0:
1343     cpu_z80_res(self, 4, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1344     break;
1345   case 0xa1:
1346     cpu_z80_res(self, 4, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1347     break;
1348   case 0xa2:
1349     cpu_z80_res(self, 4, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1350     break;
1351   case 0xa3:
1352     cpu_z80_res(self, 4, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1353     break;
1354   case 0xa4:
1355     cpu_z80_res(self, 4, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1356     break;
1357   case 0xa5:
1358     cpu_z80_res(self, 4, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1359     break;
1360   case 0xa6:
1361     cpu_z80_res(self, 4, self->regs.word.hl, CPU_Z80_EA_SINK);
1362     break;
1363   case 0xa7:
1364     cpu_z80_res(self, 4, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1365     break;
1366   case 0xa8:
1367     cpu_z80_res(self, 5, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1368     break;
1369   case 0xa9:
1370     cpu_z80_res(self, 5, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1371     break;
1372   case 0xaa:
1373     cpu_z80_res(self, 5, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1374     break;
1375   case 0xab:
1376     cpu_z80_res(self, 5, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1377     break;
1378   case 0xac:
1379     cpu_z80_res(self, 5, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1380     break;
1381   case 0xad:
1382     cpu_z80_res(self, 5, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1383     break;
1384   case 0xae:
1385     cpu_z80_res(self, 5, self->regs.word.hl, CPU_Z80_EA_SINK);
1386     break;
1387   case 0xaf:
1388     cpu_z80_res(self, 5, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1389     break;
1390   case 0xb0:
1391     cpu_z80_res(self, 6, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1392     break;
1393   case 0xb1:
1394     cpu_z80_res(self, 6, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1395     break;
1396   case 0xb2:
1397     cpu_z80_res(self, 6, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1398     break;
1399   case 0xb3:
1400     cpu_z80_res(self, 6, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1401     break;
1402   case 0xb4:
1403     cpu_z80_res(self, 6, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1404     break;
1405   case 0xb5:
1406     cpu_z80_res(self, 6, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1407     break;
1408   case 0xb6:
1409     cpu_z80_res(self, 6, self->regs.word.hl, CPU_Z80_EA_SINK);
1410     break;
1411   case 0xb7:
1412     cpu_z80_res(self, 6, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1413     break;
1414   case 0xb8:
1415     cpu_z80_res(self, 7, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1416     break;
1417   case 0xb9:
1418     cpu_z80_res(self, 7, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1419     break;
1420   case 0xba:
1421     cpu_z80_res(self, 7, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1422     break;
1423   case 0xbb:
1424     cpu_z80_res(self, 7, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1425     break;
1426   case 0xbc:
1427     cpu_z80_res(self, 7, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1428     break;
1429   case 0xbd:
1430     cpu_z80_res(self, 7, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1431     break;
1432   case 0xbe:
1433     cpu_z80_res(self, 7, self->regs.word.hl, CPU_Z80_EA_SINK);
1434     break;
1435   case 0xbf:
1436     cpu_z80_res(self, 7, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1437     break;
1438   case 0xc0:
1439     cpu_z80_set(self, 0, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1440     break;
1441   case 0xc1:
1442     cpu_z80_set(self, 0, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1443     break;
1444   case 0xc2:
1445     cpu_z80_set(self, 0, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1446     break;
1447   case 0xc3:
1448     cpu_z80_set(self, 0, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1449     break;
1450   case 0xc4:
1451     cpu_z80_set(self, 0, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1452     break;
1453   case 0xc5:
1454     cpu_z80_set(self, 0, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1455     break;
1456   case 0xc6:
1457     cpu_z80_set(self, 0, self->regs.word.hl, CPU_Z80_EA_SINK);
1458     break;
1459   case 0xc7:
1460     cpu_z80_set(self, 0, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1461     break;
1462   case 0xc8:
1463     cpu_z80_set(self, 1, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1464     break;
1465   case 0xc9:
1466     cpu_z80_set(self, 1, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1467     break;
1468   case 0xca:
1469     cpu_z80_set(self, 1, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1470     break;
1471   case 0xcb:
1472     cpu_z80_set(self, 1, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1473     break;
1474   case 0xcc:
1475     cpu_z80_set(self, 1, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1476     break;
1477   case 0xcd:
1478     cpu_z80_set(self, 1, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1479     break;
1480   case 0xce:
1481     cpu_z80_set(self, 1, self->regs.word.hl, CPU_Z80_EA_SINK);
1482     break;
1483   case 0xcf:
1484     cpu_z80_set(self, 1, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1485     break;
1486   case 0xd0:
1487     cpu_z80_set(self, 2, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1488     break;
1489   case 0xd1:
1490     cpu_z80_set(self, 2, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1491     break;
1492   case 0xd2:
1493     cpu_z80_set(self, 2, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1494     break;
1495   case 0xd3:
1496     cpu_z80_set(self, 2, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1497     break;
1498   case 0xd4:
1499     cpu_z80_set(self, 2, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1500     break;
1501   case 0xd5:
1502     cpu_z80_set(self, 2, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1503     break;
1504   case 0xd6:
1505     cpu_z80_set(self, 2, self->regs.word.hl, CPU_Z80_EA_SINK);
1506     break;
1507   case 0xd7:
1508     cpu_z80_set(self, 2, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1509     break;
1510   case 0xd8:
1511     cpu_z80_set(self, 3, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1512     break;
1513   case 0xd9:
1514     cpu_z80_set(self, 3, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1515     break;
1516   case 0xda:
1517     cpu_z80_set(self, 3, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1518     break;
1519   case 0xdb:
1520     cpu_z80_set(self, 3, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1521     break;
1522   case 0xdc:
1523     cpu_z80_set(self, 3, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1524     break;
1525   case 0xdd:
1526     cpu_z80_set(self, 3, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1527     break;
1528   case 0xde:
1529     cpu_z80_set(self, 3, self->regs.word.hl, CPU_Z80_EA_SINK);
1530     break;
1531   case 0xdf:
1532     cpu_z80_set(self, 3, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1533     break;
1534   case 0xe0:
1535     cpu_z80_set(self, 4, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1536     break;
1537   case 0xe1:
1538     cpu_z80_set(self, 4, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1539     break;
1540   case 0xe2:
1541     cpu_z80_set(self, 4, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1542     break;
1543   case 0xe3:
1544     cpu_z80_set(self, 4, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1545     break;
1546   case 0xe4:
1547     cpu_z80_set(self, 4, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1548     break;
1549   case 0xe5:
1550     cpu_z80_set(self, 4, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1551     break;
1552   case 0xe6:
1553     cpu_z80_set(self, 4, self->regs.word.hl, CPU_Z80_EA_SINK);
1554     break;
1555   case 0xe7:
1556     cpu_z80_set(self, 4, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1557     break;
1558   case 0xe8:
1559     cpu_z80_set(self, 5, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1560     break;
1561   case 0xe9:
1562     cpu_z80_set(self, 5, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1563     break;
1564   case 0xea:
1565     cpu_z80_set(self, 5, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1566     break;
1567   case 0xeb:
1568     cpu_z80_set(self, 5, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1569     break;
1570   case 0xec:
1571     cpu_z80_set(self, 5, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1572     break;
1573   case 0xed:
1574     cpu_z80_set(self, 5, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1575     break;
1576   case 0xee:
1577     cpu_z80_set(self, 5, self->regs.word.hl, CPU_Z80_EA_SINK);
1578     break;
1579   case 0xef:
1580     cpu_z80_set(self, 5, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1581     break;
1582   case 0xf0:
1583     cpu_z80_set(self, 6, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1584     break;
1585   case 0xf1:
1586     cpu_z80_set(self, 6, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1587     break;
1588   case 0xf2:
1589     cpu_z80_set(self, 6, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1590     break;
1591   case 0xf3:
1592     cpu_z80_set(self, 6, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1593     break;
1594   case 0xf4:
1595     cpu_z80_set(self, 6, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1596     break;
1597   case 0xf5:
1598     cpu_z80_set(self, 6, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1599     break;
1600   case 0xf6:
1601     cpu_z80_set(self, 6, self->regs.word.hl, CPU_Z80_EA_SINK);
1602     break;
1603   case 0xf7:
1604     cpu_z80_set(self, 6, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1605     break;
1606   case 0xf8:
1607     cpu_z80_set(self, 7, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1608     break;
1609   case 0xf9:
1610     cpu_z80_set(self, 7, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1611     break;
1612   case 0xfa:
1613     cpu_z80_set(self, 7, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1614     break;
1615   case 0xfb:
1616     cpu_z80_set(self, 7, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1617     break;
1618   case 0xfc:
1619     cpu_z80_set(self, 7, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1620     break;
1621   case 0xfd:
1622     cpu_z80_set(self, 7, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1623     break;
1624   case 0xfe:
1625     cpu_z80_set(self, 7, self->regs.word.hl, CPU_Z80_EA_SINK);
1626     break;
1627   case 0xff:
1628     cpu_z80_set(self, 7, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1629     break;
1630   }
1631 }
1632
1633 void cpu_z80_execute_dd(struct cpu_z80 *self) {
1634   switch (cpu_z80_fetch_byte(self)) {
1635   case 0x00:
1636     cpu_z80_nop(self);
1637     break;
1638   case 0x01:
1639     cpu_z80_ld_word(self, CPU_Z80_EA_BC, cpu_z80_fetch_word(self));
1640     break;
1641   case 0x02:
1642     cpu_z80_ld_byte(self, self->regs.word.bc, self->regs.byte.a);
1643     break;
1644   case 0x03:
1645     cpu_z80_inc_word(self, CPU_Z80_EA_BC);
1646     break;
1647   case 0x04:
1648     cpu_z80_inc_byte(self, CPU_Z80_EA_B);
1649     break;
1650   case 0x05:
1651     cpu_z80_dec_byte(self, CPU_Z80_EA_B);
1652     break;
1653   case 0x06:
1654     cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_fetch_byte(self));
1655     break;
1656   case 0x07:
1657     cpu_z80_rlca(self);
1658     break;
1659   case 0x08:
1660     cpu_z80_ex(self, CPU_Z80_EA_AF, CPU_Z80_EA_AF_PRIME);
1661     break;
1662   case 0x09:
1663     cpu_z80_add_word(self, CPU_Z80_EA_IX, self->regs.word.bc);
1664     break;
1665   case 0x0a:
1666     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.bc));
1667     break;
1668   case 0x0b:
1669     cpu_z80_dec_word(self, CPU_Z80_EA_BC);
1670     break;
1671   case 0x0c:
1672     cpu_z80_inc_byte(self, CPU_Z80_EA_C);
1673     break;
1674   case 0x0d:
1675     cpu_z80_dec_byte(self, CPU_Z80_EA_C);
1676     break;
1677   case 0x0e:
1678     cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_fetch_byte(self));
1679     break;
1680   case 0x0f:
1681     cpu_z80_rrca(self);
1682     break;
1683   case 0x10:
1684     cpu_z80_djnz(self, cpu_z80_relative(self));
1685     break;
1686   case 0x11:
1687     cpu_z80_ld_word(self, CPU_Z80_EA_DE, cpu_z80_fetch_word(self));
1688     break;
1689   case 0x12:
1690     cpu_z80_ld_byte(self, self->regs.word.de, self->regs.byte.a);
1691     break;
1692   case 0x13:
1693     cpu_z80_inc_word(self, CPU_Z80_EA_DE);
1694     break;
1695   case 0x14:
1696     cpu_z80_inc_byte(self, CPU_Z80_EA_D);
1697     break;
1698   case 0x15:
1699     cpu_z80_dec_byte(self, CPU_Z80_EA_D);
1700     break;
1701   case 0x16:
1702     cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_fetch_byte(self));
1703     break;
1704   case 0x17:
1705     cpu_z80_rla(self);
1706     break;
1707   case 0x18:
1708     cpu_z80_jr(self, true, cpu_z80_relative(self));
1709     break;
1710   case 0x19:
1711     cpu_z80_add_word(self, CPU_Z80_EA_IX, self->regs.word.de);
1712     break;
1713   case 0x1a:
1714     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.de));
1715     break;
1716   case 0x1b:
1717     cpu_z80_dec_word(self, CPU_Z80_EA_DE);
1718     break;
1719   case 0x1c:
1720     cpu_z80_inc_byte(self, CPU_Z80_EA_E);
1721     break;
1722   case 0x1d:
1723     cpu_z80_dec_byte(self, CPU_Z80_EA_E);
1724     break;
1725   case 0x1e:
1726     cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_fetch_byte(self));
1727     break;
1728   case 0x1f:
1729     cpu_z80_rra(self);
1730     break;
1731   case 0x20:
1732     cpu_z80_jr(self, !self->regs.bit.zf, cpu_z80_relative(self));
1733     break;
1734   case 0x21:
1735     cpu_z80_ld_word(self, CPU_Z80_EA_IX, cpu_z80_fetch_word(self));
1736     break;
1737   case 0x22:
1738     cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.ix);
1739     break;
1740   case 0x23:
1741     cpu_z80_inc_word(self, CPU_Z80_EA_IX);
1742     break;
1743   case 0x24:
1744     cpu_z80_inc_byte(self, CPU_Z80_EA_IXH);
1745     break;
1746   case 0x25:
1747     cpu_z80_dec_byte(self, CPU_Z80_EA_IXH);
1748     break;
1749   case 0x26:
1750     cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, cpu_z80_fetch_byte(self));
1751     break;
1752   case 0x27:
1753     cpu_z80_daa(self);
1754     break;
1755   case 0x28:
1756     cpu_z80_jr(self, self->regs.bit.zf, cpu_z80_relative(self));
1757     break;
1758   case 0x29:
1759     cpu_z80_add_word(self, CPU_Z80_EA_IX, self->regs.word.ix);
1760     break;
1761   case 0x2a:
1762     cpu_z80_ld_word(self, CPU_Z80_EA_IX, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
1763     break;
1764   case 0x2b:
1765     cpu_z80_dec_word(self, CPU_Z80_EA_IX);
1766     break;
1767   case 0x2c:
1768     cpu_z80_inc_byte(self, CPU_Z80_EA_IXL);
1769     break;
1770   case 0x2d:
1771     cpu_z80_dec_byte(self, CPU_Z80_EA_IXL);
1772     break;
1773   case 0x2e:
1774     cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, cpu_z80_fetch_byte(self));
1775     break;
1776   case 0x2f:
1777     cpu_z80_cpl(self);
1778     break;
1779   case 0x30:
1780     cpu_z80_jr(self, !self->regs.bit.cf, cpu_z80_relative(self));
1781     break;
1782   case 0x31:
1783     cpu_z80_ld_word(self, CPU_Z80_EA_SP, cpu_z80_fetch_word(self));
1784     break;
1785   case 0x32:
1786     cpu_z80_ld_byte(self, cpu_z80_fetch_word(self), self->regs.byte.a);
1787     break;
1788   case 0x33:
1789     cpu_z80_inc_word(self, CPU_Z80_EA_SP);
1790     break;
1791   case 0x34:
1792     cpu_z80_inc_byte(self, cpu_z80_displacement(self, self->regs.word.ix));
1793     break;
1794   case 0x35:
1795     cpu_z80_dec_byte(self, cpu_z80_displacement(self, self->regs.word.ix));
1796     break;
1797   case 0x36:
1798     {
1799       int ea = cpu_z80_displacement(self, self->regs.word.ix);
1800       cpu_z80_ld_byte(self, ea, cpu_z80_fetch_byte(self));
1801     }
1802     break;
1803   case 0x37:
1804     cpu_z80_scf(self);
1805     break;
1806   case 0x38:
1807     cpu_z80_jr(self, self->regs.bit.cf, cpu_z80_relative(self));
1808     break;
1809   case 0x39:
1810     cpu_z80_add_word(self, CPU_Z80_EA_IX, self->regs.word.sp);
1811     break;
1812   case 0x3a:
1813     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_fetch_word(self)));
1814     break;
1815   case 0x3b:
1816     cpu_z80_dec_word(self, CPU_Z80_EA_SP);
1817     break;
1818   case 0x3c:
1819     cpu_z80_inc_byte(self, CPU_Z80_EA_A);
1820     break;
1821   case 0x3d:
1822     cpu_z80_dec_byte(self, CPU_Z80_EA_A);
1823     break;
1824   case 0x3e:
1825     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
1826     break;
1827   case 0x3f:
1828     cpu_z80_ccf(self);
1829     break;
1830   case 0x40:
1831     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.b);
1832     break;
1833   case 0x41:
1834     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.c);
1835     break;
1836   case 0x42:
1837     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.d);
1838     break;
1839   case 0x43:
1840     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.e);
1841     break;
1842   case 0x44:
1843     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.ixh);
1844     break;
1845   case 0x45:
1846     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.ixl);
1847     break;
1848   case 0x46:
1849     cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1850     break;
1851   case 0x47:
1852     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.a);
1853     break;
1854   case 0x48:
1855     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.b);
1856     break;
1857   case 0x49:
1858     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.c);
1859     break;
1860   case 0x4a:
1861     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.d);
1862     break;
1863   case 0x4b:
1864     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.e);
1865     break;
1866   case 0x4c:
1867     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.ixh);
1868     break;
1869   case 0x4d:
1870     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.ixl);
1871     break;
1872   case 0x4e:
1873     cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1874     break;
1875   case 0x4f:
1876     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.a);
1877     break;
1878   case 0x50:
1879     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.b);
1880     break;
1881   case 0x51:
1882     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.c);
1883     break;
1884   case 0x52:
1885     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.d);
1886     break;
1887   case 0x53:
1888     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.e);
1889     break;
1890   case 0x54:
1891     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.ixh);
1892     break;
1893   case 0x55:
1894     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.ixl);
1895     break;
1896   case 0x56:
1897     cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1898     break;
1899   case 0x57:
1900     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.a);
1901     break;
1902   case 0x58:
1903     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.b);
1904     break;
1905   case 0x59:
1906     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.c);
1907     break;
1908   case 0x5a:
1909     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.d);
1910     break;
1911   case 0x5b:
1912     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.e);
1913     break;
1914   case 0x5c:
1915     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.ixh);
1916     break;
1917   case 0x5d:
1918     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.ixl);
1919     break;
1920   case 0x5e:
1921     cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1922     break;
1923   case 0x5f:
1924     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.a);
1925     break;
1926   case 0x60:
1927     cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.b);
1928     break;
1929   case 0x61:
1930     cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.c);
1931     break;
1932   case 0x62:
1933     cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.d);
1934     break;
1935   case 0x63:
1936     cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.e);
1937     break;
1938   case 0x64:
1939     cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.ixh);
1940     break;
1941   case 0x65:
1942     cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.ixl);
1943     break;
1944   case 0x66:
1945     cpu_z80_ld_byte(self, CPU_Z80_EA_H, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1946     break;
1947   case 0x67:
1948     cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.a);
1949     break;
1950   case 0x68:
1951     cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.b);
1952     break;
1953   case 0x69:
1954     cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.c);
1955     break;
1956   case 0x6a:
1957     cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.d);
1958     break;
1959   case 0x6b:
1960     cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.e);
1961     break;
1962   case 0x6c:
1963     cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.ixh);
1964     break;
1965   case 0x6d:
1966     cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.ixl);
1967     break;
1968   case 0x6e:
1969     cpu_z80_ld_byte(self, CPU_Z80_EA_L, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1970     break;
1971   case 0x6f:
1972     cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.a);
1973     break;
1974   case 0x70:
1975     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.b);
1976     break;
1977   case 0x71:
1978     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.c);
1979     break;
1980   case 0x72:
1981     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.d);
1982     break;
1983   case 0x73:
1984     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.e);
1985     break;
1986   case 0x74:
1987     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.h);
1988     break;
1989   case 0x75:
1990     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.l);
1991     break;
1992   case 0x76:
1993     cpu_z80_halt(self);
1994     break;
1995   case 0x77:
1996     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.a);
1997     break;
1998   case 0x78:
1999     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
2000     break;
2001   case 0x79:
2002     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
2003     break;
2004   case 0x7a:
2005     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
2006     break;
2007   case 0x7b:
2008     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
2009     break;
2010   case 0x7c:
2011     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.ixh);
2012     break;
2013   case 0x7d:
2014     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.ixl);
2015     break;
2016   case 0x7e:
2017     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2018     break;
2019   case 0x7f:
2020     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
2021     break;
2022   case 0x80:
2023     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
2024     break;
2025   case 0x81:
2026     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
2027     break;
2028   case 0x82:
2029     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
2030     break;
2031   case 0x83:
2032     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
2033     break;
2034   case 0x84:
2035     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.ixh);
2036     break;
2037   case 0x85:
2038     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.ixl);
2039     break;
2040   case 0x86:
2041     cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2042     break;
2043   case 0x87:
2044     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
2045     break;
2046   case 0x88:
2047     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
2048     break;
2049   case 0x89:
2050     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
2051     break;
2052   case 0x8a:
2053     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
2054     break;
2055   case 0x8b:
2056     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
2057     break;
2058   case 0x8c:
2059     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.ixh);
2060     break;
2061   case 0x8d:
2062     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.ixl);
2063     break;
2064   case 0x8e:
2065     cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2066     break;
2067   case 0x8f:
2068     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
2069     break;
2070   case 0x90:
2071     cpu_z80_sub(self, self->regs.byte.b);
2072     break;
2073   case 0x91:
2074     cpu_z80_sub(self, self->regs.byte.c);
2075     break;
2076   case 0x92:
2077     cpu_z80_sub(self, self->regs.byte.d);
2078     break;
2079   case 0x93:
2080     cpu_z80_sub(self, self->regs.byte.e);
2081     break;
2082   case 0x94:
2083     cpu_z80_sub(self, self->regs.byte.ixh);
2084     break;
2085   case 0x95:
2086     cpu_z80_sub(self, self->regs.byte.ixl);
2087     break;
2088   case 0x96:
2089     cpu_z80_sub(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2090     break;
2091   case 0x97:
2092     cpu_z80_sub(self, self->regs.byte.a);
2093     break;
2094   case 0x98:
2095     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
2096     break;
2097   case 0x99:
2098     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
2099     break;
2100   case 0x9a:
2101     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
2102     break;
2103   case 0x9b:
2104     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
2105     break;
2106   case 0x9c:
2107     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.ixh);
2108     break;
2109   case 0x9d:
2110     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.ixl);
2111     break;
2112   case 0x9e:
2113     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2114     break;
2115   case 0x9f:
2116     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
2117     break;
2118   case 0xa0:
2119     cpu_z80_and(self, self->regs.byte.b);
2120     break;
2121   case 0xa1:
2122     cpu_z80_and(self, self->regs.byte.c);
2123     break;
2124   case 0xa2:
2125     cpu_z80_and(self, self->regs.byte.d);
2126     break;
2127   case 0xa3:
2128     cpu_z80_and(self, self->regs.byte.e);
2129     break;
2130   case 0xa4:
2131     cpu_z80_and(self, self->regs.byte.ixh);
2132     break;
2133   case 0xa5:
2134     cpu_z80_and(self, self->regs.byte.ixl);
2135     break;
2136   case 0xa6:
2137     cpu_z80_and(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2138     break;
2139   case 0xa7:
2140     cpu_z80_and(self, self->regs.byte.a);
2141     break;
2142   case 0xa8:
2143     cpu_z80_xor(self, self->regs.byte.b);
2144     break;
2145   case 0xa9:
2146     cpu_z80_xor(self, self->regs.byte.c);
2147     break;
2148   case 0xaa:
2149     cpu_z80_xor(self, self->regs.byte.d);
2150     break;
2151   case 0xab:
2152     cpu_z80_xor(self, self->regs.byte.e);
2153     break;
2154   case 0xac:
2155     cpu_z80_xor(self, self->regs.byte.ixh);
2156     break;
2157   case 0xad:
2158     cpu_z80_xor(self, self->regs.byte.ixl);
2159     break;
2160   case 0xae:
2161     cpu_z80_xor(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2162     break;
2163   case 0xaf:
2164     cpu_z80_xor(self, self->regs.byte.a);
2165     break;
2166   case 0xb0:
2167     cpu_z80_or(self, self->regs.byte.b);
2168     break;
2169   case 0xb1:
2170     cpu_z80_or(self, self->regs.byte.c);
2171     break;
2172   case 0xb2:
2173     cpu_z80_or(self, self->regs.byte.d);
2174     break;
2175   case 0xb3:
2176     cpu_z80_or(self, self->regs.byte.e);
2177     break;
2178   case 0xb4:
2179     cpu_z80_or(self, self->regs.byte.ixh);
2180     break;
2181   case 0xb5:
2182     cpu_z80_or(self, self->regs.byte.ixl);
2183     break;
2184   case 0xb6:
2185     cpu_z80_or(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2186     break;
2187   case 0xb7:
2188     cpu_z80_or(self, self->regs.byte.a);
2189     break;
2190   case 0xb8:
2191     cpu_z80_cp(self, self->regs.byte.b);
2192     break;
2193   case 0xb9:
2194     cpu_z80_cp(self, self->regs.byte.c);
2195     break;
2196   case 0xba:
2197     cpu_z80_cp(self, self->regs.byte.d);
2198     break;
2199   case 0xbb:
2200     cpu_z80_cp(self, self->regs.byte.e);
2201     break;
2202   case 0xbc:
2203     cpu_z80_cp(self, self->regs.byte.ixh);
2204     break;
2205   case 0xbd:
2206     cpu_z80_cp(self, self->regs.byte.ixl);
2207     break;
2208   case 0xbe:
2209     cpu_z80_cp(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2210     break;
2211   case 0xbf:
2212     cpu_z80_cp(self, self->regs.byte.a);
2213     break;
2214   case 0xc0:
2215     cpu_z80_ret(self, !self->regs.bit.zf);
2216     break;
2217   case 0xc1:
2218     cpu_z80_pop(self, CPU_Z80_EA_BC);
2219     break;
2220   case 0xc2:
2221     cpu_z80_jp(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
2222     break;
2223   case 0xc3:
2224     cpu_z80_jp(self, true, cpu_z80_fetch_word(self));
2225     break;
2226   case 0xc4:
2227     cpu_z80_call(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
2228     break;
2229   case 0xc5:
2230     cpu_z80_push(self, self->regs.word.bc);
2231     break;
2232   case 0xc6:
2233     cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
2234     break;
2235   case 0xc7:
2236     cpu_z80_call(self, true, 0);
2237     break;
2238   case 0xc8:
2239     cpu_z80_ret(self, self->regs.bit.zf);
2240     break;
2241   case 0xc9:
2242     cpu_z80_ret(self, true);
2243     break;
2244   case 0xca:
2245     cpu_z80_jp(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
2246     break;
2247   case 0xcb:
2248     cpu_z80_execute_dd_cb(self);
2249     break;
2250   case 0xcc:
2251     cpu_z80_call(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
2252     break;
2253   case 0xcd:
2254     cpu_z80_call(self, true, cpu_z80_fetch_word(self));
2255     break;
2256   case 0xce:
2257     cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
2258     break;
2259   case 0xcf:
2260     cpu_z80_call(self, true, 8);
2261     break;
2262   case 0xd0:
2263     cpu_z80_ret(self, !self->regs.bit.cf);
2264     break;
2265   case 0xd1:
2266     cpu_z80_pop(self, CPU_Z80_EA_DE);
2267     break;
2268   case 0xd2:
2269     cpu_z80_jp(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
2270     break;
2271   case 0xd3:
2272     cpu_z80_out(self, cpu_z80_port_word(self), self->regs.byte.a);
2273     break;
2274   case 0xd4:
2275     cpu_z80_call(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
2276     break;
2277   case 0xd5:
2278     cpu_z80_push(self, self->regs.word.de);
2279     break;
2280   case 0xd6:
2281     cpu_z80_sub(self, cpu_z80_fetch_byte(self));
2282     break;
2283   case 0xd7:
2284     cpu_z80_call(self, true, 0x10);
2285     break;
2286   case 0xd8:
2287     cpu_z80_ret(self, self->regs.bit.cf);
2288     break;
2289   case 0xd9:
2290     cpu_z80_ex(self, CPU_Z80_EA_BC, CPU_Z80_EA_BC_PRIME);
2291     cpu_z80_ex(self, CPU_Z80_EA_DE, CPU_Z80_EA_DE_PRIME);
2292     cpu_z80_ex(self, CPU_Z80_EA_HL, CPU_Z80_EA_HL_PRIME);
2293     break;
2294   case 0xda:
2295     cpu_z80_jp(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
2296     break;
2297   case 0xdb:
2298     cpu_z80_in(self, CPU_Z80_EA_A, cpu_z80_in_byte(self, cpu_z80_port_word(self)));
2299     break;
2300   case 0xdc:
2301     cpu_z80_call(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
2302     break;
2303   case 0xdd:
2304     cpu_z80_ill(self);
2305     break;
2306   case 0xde:
2307     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
2308     break;
2309   case 0xdf:
2310     cpu_z80_call(self, true, 0x18);
2311     break;
2312   case 0xe0:
2313     cpu_z80_ret(self, !self->regs.bit.pvf);
2314     break;
2315   case 0xe1:
2316     cpu_z80_pop(self, CPU_Z80_EA_IX);
2317     break;
2318   case 0xe2:
2319     cpu_z80_jp(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
2320     break;
2321   case 0xe3:
2322     cpu_z80_ex(self, self->regs.word.sp, CPU_Z80_EA_IX);
2323     break;
2324   case 0xe4:
2325     cpu_z80_call(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
2326     break;
2327   case 0xe5:
2328     cpu_z80_push(self, self->regs.word.ix);
2329     break;
2330   case 0xe6:
2331     cpu_z80_and(self, cpu_z80_fetch_byte(self));
2332     break;
2333   case 0xe7:
2334     cpu_z80_call(self, true, 0x20);
2335     break;
2336   case 0xe8:
2337     cpu_z80_ret(self, self->regs.bit.pvf);
2338     break;
2339   case 0xe9:
2340     cpu_z80_jp(self, true, cpu_z80_read_word(self, self->regs.word.ix));
2341     break;
2342   case 0xea:
2343     cpu_z80_jp(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
2344     break;
2345   case 0xeb:
2346     cpu_z80_ex(self, CPU_Z80_EA_DE, CPU_Z80_EA_HL);
2347     break;
2348   case 0xec:
2349     cpu_z80_call(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
2350     break;
2351   case 0xed:
2352     cpu_z80_ill(self);
2353     break;
2354   case 0xee:
2355     cpu_z80_xor(self, cpu_z80_fetch_byte(self));
2356     break;
2357   case 0xef:
2358     cpu_z80_call(self, true, 0x28);
2359     break;
2360   case 0xf0:
2361     cpu_z80_ret(self, !self->regs.bit.sf);
2362     break;
2363   case 0xf1:
2364     cpu_z80_pop(self, CPU_Z80_EA_AF);
2365     break;
2366   case 0xf2:
2367     cpu_z80_jp(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
2368     break;
2369   case 0xf3:
2370     cpu_z80_di(self);
2371     break;
2372   case 0xf4:
2373     cpu_z80_call(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
2374     break;
2375   case 0xf5:
2376     cpu_z80_push(self, self->regs.word.af);
2377     break;
2378   case 0xf6:
2379     cpu_z80_or(self, cpu_z80_fetch_byte(self));
2380     break;
2381   case 0xf7:
2382     cpu_z80_call(self, true, 0x30);
2383     break;
2384   case 0xf8:
2385     cpu_z80_ret(self, self->regs.bit.sf);
2386     break;
2387   case 0xf9:
2388     cpu_z80_ld_word(self, CPU_Z80_EA_SP, self->regs.word.ix);
2389     break;
2390   case 0xfa:
2391     cpu_z80_jp(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
2392     break;
2393   case 0xfb:
2394     cpu_z80_ei(self);
2395     break;
2396   case 0xfc:
2397     cpu_z80_call(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
2398     break;
2399   case 0xfd:
2400     cpu_z80_ill(self);
2401     break;
2402   case 0xfe:
2403     cpu_z80_cp(self, cpu_z80_fetch_byte(self));
2404     break;
2405   case 0xff:
2406     cpu_z80_call(self, true, 0x38);
2407     break;
2408   }
2409 }
2410
2411 void cpu_z80_execute_dd_cb(struct cpu_z80 *self) {
2412   int ea = cpu_z80_displacement(self, self->regs.word.ix);
2413   switch (cpu_z80_fetch_byte(self)) {
2414   case 0x00:
2415     cpu_z80_rlc(self, ea, CPU_Z80_EA_B);
2416     break;
2417   case 0x01:
2418     cpu_z80_rlc(self, ea, CPU_Z80_EA_C);
2419     break;
2420   case 0x02:
2421     cpu_z80_rlc(self, ea, CPU_Z80_EA_D);
2422     break;
2423   case 0x03:
2424     cpu_z80_rlc(self, ea, CPU_Z80_EA_E);
2425     break;
2426   case 0x04:
2427     cpu_z80_rlc(self, ea, CPU_Z80_EA_H);
2428     break;
2429   case 0x05:
2430     cpu_z80_rlc(self, ea, CPU_Z80_EA_L);
2431     break;
2432   case 0x06:
2433     cpu_z80_rlc(self, ea, CPU_Z80_EA_SINK);
2434     break;
2435   case 0x07:
2436     cpu_z80_rlc(self, ea, CPU_Z80_EA_A);
2437     break;
2438   case 0x08:
2439     cpu_z80_rrc(self, ea, CPU_Z80_EA_B);
2440     break;
2441   case 0x09:
2442     cpu_z80_rrc(self, ea, CPU_Z80_EA_C);
2443     break;
2444   case 0x0a:
2445     cpu_z80_rrc(self, ea, CPU_Z80_EA_D);
2446     break;
2447   case 0x0b:
2448     cpu_z80_rrc(self, ea, CPU_Z80_EA_E);
2449     break;
2450   case 0x0c:
2451     cpu_z80_rrc(self, ea, CPU_Z80_EA_H);
2452     break;
2453   case 0x0d:
2454     cpu_z80_rrc(self, ea, CPU_Z80_EA_L);
2455     break;
2456   case 0x0e:
2457     cpu_z80_rrc(self, ea, CPU_Z80_EA_SINK);
2458     break;
2459   case 0x0f:
2460     cpu_z80_rrc(self, ea, CPU_Z80_EA_A);
2461     break;
2462   case 0x10:
2463     cpu_z80_rl(self, ea, CPU_Z80_EA_B);
2464     break;
2465   case 0x11:
2466     cpu_z80_rl(self, ea, CPU_Z80_EA_C);
2467     break;
2468   case 0x12:
2469     cpu_z80_rl(self, ea, CPU_Z80_EA_D);
2470     break;
2471   case 0x13:
2472     cpu_z80_rl(self, ea, CPU_Z80_EA_E);
2473     break;
2474   case 0x14:
2475     cpu_z80_rl(self, ea, CPU_Z80_EA_H);
2476     break;
2477   case 0x15:
2478     cpu_z80_rl(self, ea, CPU_Z80_EA_L);
2479     break;
2480   case 0x16:
2481     cpu_z80_rl(self, ea, CPU_Z80_EA_SINK);
2482     break;
2483   case 0x17:
2484     cpu_z80_rl(self, ea, CPU_Z80_EA_A);
2485     break;
2486   case 0x18:
2487     cpu_z80_rr(self, ea, CPU_Z80_EA_B);
2488     break;
2489   case 0x19:
2490     cpu_z80_rr(self, ea, CPU_Z80_EA_C);
2491     break;
2492   case 0x1a:
2493     cpu_z80_rr(self, ea, CPU_Z80_EA_D);
2494     break;
2495   case 0x1b:
2496     cpu_z80_rr(self, ea, CPU_Z80_EA_E);
2497     break;
2498   case 0x1c:
2499     cpu_z80_rr(self, ea, CPU_Z80_EA_H);
2500     break;
2501   case 0x1d:
2502     cpu_z80_rr(self, ea, CPU_Z80_EA_L);
2503     break;
2504   case 0x1e:
2505     cpu_z80_rr(self, ea, CPU_Z80_EA_SINK);
2506     break;
2507   case 0x1f:
2508     cpu_z80_rr(self, ea, CPU_Z80_EA_A);
2509     break;
2510   case 0x20:
2511     cpu_z80_sla(self, ea, CPU_Z80_EA_B);
2512     break;
2513   case 0x21:
2514     cpu_z80_sla(self, ea, CPU_Z80_EA_C);
2515     break;
2516   case 0x22:
2517     cpu_z80_sla(self, ea, CPU_Z80_EA_D);
2518     break;
2519   case 0x23:
2520     cpu_z80_sla(self, ea, CPU_Z80_EA_E);
2521     break;
2522   case 0x24:
2523     cpu_z80_sla(self, ea, CPU_Z80_EA_H);
2524     break;
2525   case 0x25:
2526     cpu_z80_sla(self, ea, CPU_Z80_EA_L);
2527     break;
2528   case 0x26:
2529     cpu_z80_sla(self, ea, CPU_Z80_EA_SINK);
2530     break;
2531   case 0x27:
2532     cpu_z80_sla(self, ea, CPU_Z80_EA_A);
2533     break;
2534   case 0x28:
2535     cpu_z80_sra(self, ea, CPU_Z80_EA_B);
2536     break;
2537   case 0x29:
2538     cpu_z80_sra(self, ea, CPU_Z80_EA_C);
2539     break;
2540   case 0x2a:
2541     cpu_z80_sra(self, ea, CPU_Z80_EA_D);
2542     break;
2543   case 0x2b:
2544     cpu_z80_sra(self, ea, CPU_Z80_EA_E);
2545     break;
2546   case 0x2c:
2547     cpu_z80_sra(self, ea, CPU_Z80_EA_H);
2548     break;
2549   case 0x2d:
2550     cpu_z80_sra(self, ea, CPU_Z80_EA_L);
2551     break;
2552   case 0x2e:
2553     cpu_z80_sra(self, ea, CPU_Z80_EA_SINK);
2554     break;
2555   case 0x2f:
2556     cpu_z80_sra(self, ea, CPU_Z80_EA_A);
2557     break;
2558   case 0x30:
2559     cpu_z80_sll(self, ea, CPU_Z80_EA_B);
2560     break;
2561   case 0x31:
2562     cpu_z80_sll(self, ea, CPU_Z80_EA_C);
2563     break;
2564   case 0x32:
2565     cpu_z80_sll(self, ea, CPU_Z80_EA_D);
2566     break;
2567   case 0x33:
2568     cpu_z80_sll(self, ea, CPU_Z80_EA_E);
2569     break;
2570   case 0x34:
2571     cpu_z80_sll(self, ea, CPU_Z80_EA_H);
2572     break;
2573   case 0x35:
2574     cpu_z80_sll(self, ea, CPU_Z80_EA_L);
2575     break;
2576   case 0x36:
2577     cpu_z80_sll(self, ea, CPU_Z80_EA_SINK);
2578     break;
2579   case 0x37:
2580     cpu_z80_sll(self, ea, CPU_Z80_EA_A);
2581     break;
2582   case 0x38:
2583     cpu_z80_srl(self, ea, CPU_Z80_EA_B);
2584     break;
2585   case 0x39:
2586     cpu_z80_srl(self, ea, CPU_Z80_EA_C);
2587     break;
2588   case 0x3a:
2589     cpu_z80_srl(self, ea, CPU_Z80_EA_D);
2590     break;
2591   case 0x3b:
2592     cpu_z80_srl(self, ea, CPU_Z80_EA_E);
2593     break;
2594   case 0x3c:
2595     cpu_z80_srl(self, ea, CPU_Z80_EA_H);
2596     break;
2597   case 0x3d:
2598     cpu_z80_srl(self, ea, CPU_Z80_EA_L);
2599     break;
2600   case 0x3e:
2601     cpu_z80_srl(self, ea, CPU_Z80_EA_SINK);
2602     break;
2603   case 0x3f:
2604     cpu_z80_srl(self, ea, CPU_Z80_EA_A);
2605     break;
2606   case 0x40:
2607     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2608     break;
2609   case 0x41:
2610     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2611     break;
2612   case 0x42:
2613     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2614     break;
2615   case 0x43:
2616     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2617     break;
2618   case 0x44:
2619     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2620     break;
2621   case 0x45:
2622     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2623     break;
2624   case 0x46:
2625     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2626     break;
2627   case 0x47:
2628     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2629     break;
2630   case 0x48:
2631     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2632     break;
2633   case 0x49:
2634     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2635     break;
2636   case 0x4a:
2637     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2638     break;
2639   case 0x4b:
2640     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2641     break;
2642   case 0x4c:
2643     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2644     break;
2645   case 0x4d:
2646     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2647     break;
2648   case 0x4e:
2649     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2650     break;
2651   case 0x4f:
2652     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2653     break;
2654   case 0x50:
2655     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2656     break;
2657   case 0x51:
2658     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2659     break;
2660   case 0x52:
2661     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2662     break;
2663   case 0x53:
2664     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2665     break;
2666   case 0x54:
2667     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2668     break;
2669   case 0x55:
2670     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2671     break;
2672   case 0x56:
2673     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2674     break;
2675   case 0x57:
2676     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2677     break;
2678   case 0x58:
2679     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2680     break;
2681   case 0x59:
2682     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2683     break;
2684   case 0x5a:
2685     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2686     break;
2687   case 0x5b:
2688     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2689     break;
2690   case 0x5c:
2691     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2692     break;
2693   case 0x5d:
2694     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2695     break;
2696   case 0x5e:
2697     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2698     break;
2699   case 0x5f:
2700     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2701     break;
2702   case 0x60:
2703     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2704     break;
2705   case 0x61:
2706     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2707     break;
2708   case 0x62:
2709     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2710     break;
2711   case 0x63:
2712     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2713     break;
2714   case 0x64:
2715     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2716     break;
2717   case 0x65:
2718     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2719     break;
2720   case 0x66:
2721     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2722     break;
2723   case 0x67:
2724     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2725     break;
2726   case 0x68:
2727     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2728     break;
2729   case 0x69:
2730     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2731     break;
2732   case 0x6a:
2733     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2734     break;
2735   case 0x6b:
2736     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2737     break;
2738   case 0x6c:
2739     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2740     break;
2741   case 0x6d:
2742     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2743     break;
2744   case 0x6e:
2745     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2746     break;
2747   case 0x6f:
2748     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2749     break;
2750   case 0x70:
2751     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2752     break;
2753   case 0x71:
2754     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2755     break;
2756   case 0x72:
2757     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2758     break;
2759   case 0x73:
2760     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2761     break;
2762   case 0x74:
2763     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2764     break;
2765   case 0x75:
2766     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2767     break;
2768   case 0x76:
2769     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2770     break;
2771   case 0x77:
2772     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2773     break;
2774   case 0x78:
2775     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2776     break;
2777   case 0x79:
2778     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2779     break;
2780   case 0x7a:
2781     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2782     break;
2783   case 0x7b:
2784     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2785     break;
2786   case 0x7c:
2787     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2788     break;
2789   case 0x7d:
2790     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2791     break;
2792   case 0x7e:
2793     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2794     break;
2795   case 0x7f:
2796     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2797     break;
2798   case 0x80:
2799     cpu_z80_res(self, 0, ea, CPU_Z80_EA_B);
2800     break;
2801   case 0x81:
2802     cpu_z80_res(self, 0, ea, CPU_Z80_EA_C);
2803     break;
2804   case 0x82:
2805     cpu_z80_res(self, 0, ea, CPU_Z80_EA_D);
2806     break;
2807   case 0x83:
2808     cpu_z80_res(self, 0, ea, CPU_Z80_EA_E);
2809     break;
2810   case 0x84:
2811     cpu_z80_res(self, 0, ea, CPU_Z80_EA_H);
2812     break;
2813   case 0x85:
2814     cpu_z80_res(self, 0, ea, CPU_Z80_EA_L);
2815     break;
2816   case 0x86:
2817     cpu_z80_res(self, 0, ea, CPU_Z80_EA_SINK);
2818     break;
2819   case 0x87:
2820     cpu_z80_res(self, 0, ea, CPU_Z80_EA_A);
2821     break;
2822   case 0x88:
2823     cpu_z80_res(self, 1, ea, CPU_Z80_EA_B);
2824     break;
2825   case 0x89:
2826     cpu_z80_res(self, 1, ea, CPU_Z80_EA_C);
2827     break;
2828   case 0x8a:
2829     cpu_z80_res(self, 1, ea, CPU_Z80_EA_D);
2830     break;
2831   case 0x8b:
2832     cpu_z80_res(self, 1, ea, CPU_Z80_EA_E);
2833     break;
2834   case 0x8c:
2835     cpu_z80_res(self, 1, ea, CPU_Z80_EA_H);
2836     break;
2837   case 0x8d:
2838     cpu_z80_res(self, 1, ea, CPU_Z80_EA_L);
2839     break;
2840   case 0x8e:
2841     cpu_z80_res(self, 1, ea, CPU_Z80_EA_SINK);
2842     break;
2843   case 0x8f:
2844     cpu_z80_res(self, 1, ea, CPU_Z80_EA_A);
2845     break;
2846   case 0x90:
2847     cpu_z80_res(self, 2, ea, CPU_Z80_EA_B);
2848     break;
2849   case 0x91:
2850     cpu_z80_res(self, 2, ea, CPU_Z80_EA_C);
2851     break;
2852   case 0x92:
2853     cpu_z80_res(self, 2, ea, CPU_Z80_EA_D);
2854     break;
2855   case 0x93:
2856     cpu_z80_res(self, 2, ea, CPU_Z80_EA_E);
2857     break;
2858   case 0x94:
2859     cpu_z80_res(self, 2, ea, CPU_Z80_EA_H);
2860     break;
2861   case 0x95:
2862     cpu_z80_res(self, 2, ea, CPU_Z80_EA_L);
2863     break;
2864   case 0x96:
2865     cpu_z80_res(self, 2, ea, CPU_Z80_EA_SINK);
2866     break;
2867   case 0x97:
2868     cpu_z80_res(self, 2, ea, CPU_Z80_EA_A);
2869     break;
2870   case 0x98:
2871     cpu_z80_res(self, 3, ea, CPU_Z80_EA_B);
2872     break;
2873   case 0x99:
2874     cpu_z80_res(self, 3, ea, CPU_Z80_EA_C);
2875     break;
2876   case 0x9a:
2877     cpu_z80_res(self, 3, ea, CPU_Z80_EA_D);
2878     break;
2879   case 0x9b:
2880     cpu_z80_res(self, 3, ea, CPU_Z80_EA_E);
2881     break;
2882   case 0x9c:
2883     cpu_z80_res(self, 3, ea, CPU_Z80_EA_H);
2884     break;
2885   case 0x9d:
2886     cpu_z80_res(self, 3, ea, CPU_Z80_EA_L);
2887     break;
2888   case 0x9e:
2889     cpu_z80_res(self, 3, ea, CPU_Z80_EA_SINK);
2890     break;
2891   case 0x9f:
2892     cpu_z80_res(self, 3, ea, CPU_Z80_EA_A);
2893     break;
2894   case 0xa0:
2895     cpu_z80_res(self, 4, ea, CPU_Z80_EA_B);
2896     break;
2897   case 0xa1:
2898     cpu_z80_res(self, 4, ea, CPU_Z80_EA_C);
2899     break;
2900   case 0xa2:
2901     cpu_z80_res(self, 4, ea, CPU_Z80_EA_D);
2902     break;
2903   case 0xa3:
2904     cpu_z80_res(self, 4, ea, CPU_Z80_EA_E);
2905     break;
2906   case 0xa4:
2907     cpu_z80_res(self, 4, ea, CPU_Z80_EA_H);
2908     break;
2909   case 0xa5:
2910     cpu_z80_res(self, 4, ea, CPU_Z80_EA_L);
2911     break;
2912   case 0xa6:
2913     cpu_z80_res(self, 4, ea, CPU_Z80_EA_SINK);
2914     break;
2915   case 0xa7:
2916     cpu_z80_res(self, 4, ea, CPU_Z80_EA_A);
2917     break;
2918   case 0xa8:
2919     cpu_z80_res(self, 5, ea, CPU_Z80_EA_B);
2920     break;
2921   case 0xa9:
2922     cpu_z80_res(self, 5, ea, CPU_Z80_EA_C);
2923     break;
2924   case 0xaa:
2925     cpu_z80_res(self, 5, ea, CPU_Z80_EA_D);
2926     break;
2927   case 0xab:
2928     cpu_z80_res(self, 5, ea, CPU_Z80_EA_E);
2929     break;
2930   case 0xac:
2931     cpu_z80_res(self, 5, ea, CPU_Z80_EA_H);
2932     break;
2933   case 0xad:
2934     cpu_z80_res(self, 5, ea, CPU_Z80_EA_L);
2935     break;
2936   case 0xae:
2937     cpu_z80_res(self, 5, ea, CPU_Z80_EA_SINK);
2938     break;
2939   case 0xaf:
2940     cpu_z80_res(self, 5, ea, CPU_Z80_EA_A);
2941     break;
2942   case 0xb0:
2943     cpu_z80_res(self, 6, ea, CPU_Z80_EA_B);
2944     break;
2945   case 0xb1:
2946     cpu_z80_res(self, 6, ea, CPU_Z80_EA_C);
2947     break;
2948   case 0xb2:
2949     cpu_z80_res(self, 6, ea, CPU_Z80_EA_D);
2950     break;
2951   case 0xb3:
2952     cpu_z80_res(self, 6, ea, CPU_Z80_EA_E);
2953     break;
2954   case 0xb4:
2955     cpu_z80_res(self, 6, ea, CPU_Z80_EA_H);
2956     break;
2957   case 0xb5:
2958     cpu_z80_res(self, 6, ea, CPU_Z80_EA_L);
2959     break;
2960   case 0xb6:
2961     cpu_z80_res(self, 6, ea, CPU_Z80_EA_SINK);
2962     break;
2963   case 0xb7:
2964     cpu_z80_res(self, 6, ea, CPU_Z80_EA_A);
2965     break;
2966   case 0xb8:
2967     cpu_z80_res(self, 7, ea, CPU_Z80_EA_B);
2968     break;
2969   case 0xb9:
2970     cpu_z80_res(self, 7, ea, CPU_Z80_EA_C);
2971     break;
2972   case 0xba:
2973     cpu_z80_res(self, 7, ea, CPU_Z80_EA_D);
2974     break;
2975   case 0xbb:
2976     cpu_z80_res(self, 7, ea, CPU_Z80_EA_E);
2977     break;
2978   case 0xbc:
2979     cpu_z80_res(self, 7, ea, CPU_Z80_EA_H);
2980     break;
2981   case 0xbd:
2982     cpu_z80_res(self, 7, ea, CPU_Z80_EA_L);
2983     break;
2984   case 0xbe:
2985     cpu_z80_res(self, 7, ea, CPU_Z80_EA_SINK);
2986     break;
2987   case 0xbf:
2988     cpu_z80_res(self, 7, ea, CPU_Z80_EA_A);
2989     break;
2990   case 0xc0:
2991     cpu_z80_set(self, 0, ea, CPU_Z80_EA_B);
2992     break;
2993   case 0xc1:
2994     cpu_z80_set(self, 0, ea, CPU_Z80_EA_C);
2995     break;
2996   case 0xc2:
2997     cpu_z80_set(self, 0, ea, CPU_Z80_EA_D);
2998     break;
2999   case 0xc3:
3000     cpu_z80_set(self, 0, ea, CPU_Z80_EA_E);
3001     break;
3002   case 0xc4:
3003     cpu_z80_set(self, 0, ea, CPU_Z80_EA_H);
3004     break;
3005   case 0xc5:
3006     cpu_z80_set(self, 0, ea, CPU_Z80_EA_L);
3007     break;
3008   case 0xc6:
3009     cpu_z80_set(self, 0, ea, CPU_Z80_EA_SINK);
3010     break;
3011   case 0xc7:
3012     cpu_z80_set(self, 0, ea, CPU_Z80_EA_A);
3013     break;
3014   case 0xc8:
3015     cpu_z80_set(self, 1, ea, CPU_Z80_EA_B);
3016     break;
3017   case 0xc9:
3018     cpu_z80_set(self, 1, ea, CPU_Z80_EA_C);
3019     break;
3020   case 0xca:
3021     cpu_z80_set(self, 1, ea, CPU_Z80_EA_D);
3022     break;
3023   case 0xcb:
3024     cpu_z80_set(self, 1, ea, CPU_Z80_EA_E);
3025     break;
3026   case 0xcc:
3027     cpu_z80_set(self, 1, ea, CPU_Z80_EA_H);
3028     break;
3029   case 0xcd:
3030     cpu_z80_set(self, 1, ea, CPU_Z80_EA_L);
3031     break;
3032   case 0xce:
3033     cpu_z80_set(self, 1, ea, CPU_Z80_EA_SINK);
3034     break;
3035   case 0xcf:
3036     cpu_z80_set(self, 1, ea, CPU_Z80_EA_A);
3037     break;
3038   case 0xd0:
3039     cpu_z80_set(self, 2, ea, CPU_Z80_EA_B);
3040     break;
3041   case 0xd1:
3042     cpu_z80_set(self, 2, ea, CPU_Z80_EA_C);
3043     break;
3044   case 0xd2:
3045     cpu_z80_set(self, 2, ea, CPU_Z80_EA_D);
3046     break;
3047   case 0xd3:
3048     cpu_z80_set(self, 2, ea, CPU_Z80_EA_E);
3049     break;
3050   case 0xd4:
3051     cpu_z80_set(self, 2, ea, CPU_Z80_EA_H);
3052     break;
3053   case 0xd5:
3054     cpu_z80_set(self, 2, ea, CPU_Z80_EA_L);
3055     break;
3056   case 0xd6:
3057     cpu_z80_set(self, 2, ea, CPU_Z80_EA_SINK);
3058     break;
3059   case 0xd7:
3060     cpu_z80_set(self, 2, ea, CPU_Z80_EA_A);
3061     break;
3062   case 0xd8:
3063     cpu_z80_set(self, 3, ea, CPU_Z80_EA_B);
3064     break;
3065   case 0xd9:
3066     cpu_z80_set(self, 3, ea, CPU_Z80_EA_C);
3067     break;
3068   case 0xda:
3069     cpu_z80_set(self, 3, ea, CPU_Z80_EA_D);
3070     break;
3071   case 0xdb:
3072     cpu_z80_set(self, 3, ea, CPU_Z80_EA_E);
3073     break;
3074   case 0xdc:
3075     cpu_z80_set(self, 3, ea, CPU_Z80_EA_H);
3076     break;
3077   case 0xdd:
3078     cpu_z80_set(self, 3, ea, CPU_Z80_EA_L);
3079     break;
3080   case 0xde:
3081     cpu_z80_set(self, 3, ea, CPU_Z80_EA_SINK);
3082     break;
3083   case 0xdf:
3084     cpu_z80_set(self, 3, ea, CPU_Z80_EA_A);
3085     break;
3086   case 0xe0:
3087     cpu_z80_set(self, 4, ea, CPU_Z80_EA_B);
3088     break;
3089   case 0xe1:
3090     cpu_z80_set(self, 4, ea, CPU_Z80_EA_C);
3091     break;
3092   case 0xe2:
3093     cpu_z80_set(self, 4, ea, CPU_Z80_EA_D);
3094     break;
3095   case 0xe3:
3096     cpu_z80_set(self, 4, ea, CPU_Z80_EA_E);
3097     break;
3098   case 0xe4:
3099     cpu_z80_set(self, 4, ea, CPU_Z80_EA_H);
3100     break;
3101   case 0xe5:
3102     cpu_z80_set(self, 4, ea, CPU_Z80_EA_L);
3103     break;
3104   case 0xe6:
3105     cpu_z80_set(self, 4, ea, CPU_Z80_EA_SINK);
3106     break;
3107   case 0xe7:
3108     cpu_z80_set(self, 4, ea, CPU_Z80_EA_A);
3109     break;
3110   case 0xe8:
3111     cpu_z80_set(self, 5, ea, CPU_Z80_EA_B);
3112     break;
3113   case 0xe9:
3114     cpu_z80_set(self, 5, ea, CPU_Z80_EA_C);
3115     break;
3116   case 0xea:
3117     cpu_z80_set(self, 5, ea, CPU_Z80_EA_D);
3118     break;
3119   case 0xeb:
3120     cpu_z80_set(self, 5, ea, CPU_Z80_EA_E);
3121     break;
3122   case 0xec:
3123     cpu_z80_set(self, 5, ea, CPU_Z80_EA_H);
3124     break;
3125   case 0xed:
3126     cpu_z80_set(self, 5, ea, CPU_Z80_EA_L);
3127     break;
3128   case 0xee:
3129     cpu_z80_set(self, 5, ea, CPU_Z80_EA_SINK);
3130     break;
3131   case 0xef:
3132     cpu_z80_set(self, 5, ea, CPU_Z80_EA_A);
3133     break;
3134   case 0xf0:
3135     cpu_z80_set(self, 6, ea, CPU_Z80_EA_B);
3136     break;
3137   case 0xf1:
3138     cpu_z80_set(self, 6, ea, CPU_Z80_EA_C);
3139     break;
3140   case 0xf2:
3141     cpu_z80_set(self, 6, ea, CPU_Z80_EA_D);
3142     break;
3143   case 0xf3:
3144     cpu_z80_set(self, 6, ea, CPU_Z80_EA_E);
3145     break;
3146   case 0xf4:
3147     cpu_z80_set(self, 6, ea, CPU_Z80_EA_H);
3148     break;
3149   case 0xf5:
3150     cpu_z80_set(self, 6, ea, CPU_Z80_EA_L);
3151     break;
3152   case 0xf6:
3153     cpu_z80_set(self, 6, ea, CPU_Z80_EA_SINK);
3154     break;
3155   case 0xf7:
3156     cpu_z80_set(self, 6, ea, CPU_Z80_EA_A);
3157     break;
3158   case 0xf8:
3159     cpu_z80_set(self, 7, ea, CPU_Z80_EA_B);
3160     break;
3161   case 0xf9:
3162     cpu_z80_set(self, 7, ea, CPU_Z80_EA_C);
3163     break;
3164   case 0xfa:
3165     cpu_z80_set(self, 7, ea, CPU_Z80_EA_D);
3166     break;
3167   case 0xfb:
3168     cpu_z80_set(self, 7, ea, CPU_Z80_EA_E);
3169     break;
3170   case 0xfc:
3171     cpu_z80_set(self, 7, ea, CPU_Z80_EA_H);
3172     break;
3173   case 0xfd:
3174     cpu_z80_set(self, 7, ea, CPU_Z80_EA_L);
3175     break;
3176   case 0xfe:
3177     cpu_z80_set(self, 7, ea, CPU_Z80_EA_SINK);
3178     break;
3179   case 0xff:
3180     cpu_z80_set(self, 7, ea, CPU_Z80_EA_A);
3181     break;
3182   }
3183 }
3184
3185 void cpu_z80_execute_ed(struct cpu_z80 *self) {
3186   switch (cpu_z80_fetch_byte(self)) {
3187   case 0x00:
3188     cpu_z80_ill(self);
3189     break;
3190   case 0x01:
3191     cpu_z80_ill(self);
3192     break;
3193   case 0x02:
3194     cpu_z80_ill(self);
3195     break;
3196   case 0x03:
3197     cpu_z80_ill(self);
3198     break;
3199   case 0x04:
3200     cpu_z80_ill(self);
3201     break;
3202   case 0x05:
3203     cpu_z80_ill(self);
3204     break;
3205   case 0x06:
3206     cpu_z80_ill(self);
3207     break;
3208   case 0x07:
3209     cpu_z80_ill(self);
3210     break;
3211   case 0x08:
3212     cpu_z80_ill(self);
3213     break;
3214   case 0x09:
3215     cpu_z80_ill(self);
3216     break;
3217   case 0x0a:
3218     cpu_z80_ill(self);
3219     break;
3220   case 0x0b:
3221     cpu_z80_ill(self);
3222     break;
3223   case 0x0c:
3224     cpu_z80_ill(self);
3225     break;
3226   case 0x0d:
3227     cpu_z80_ill(self);
3228     break;
3229   case 0x0e:
3230     cpu_z80_ill(self);
3231     break;
3232   case 0x0f:
3233     cpu_z80_ill(self);
3234     break;
3235   case 0x10:
3236     cpu_z80_ill(self);
3237     break;
3238   case 0x11:
3239     cpu_z80_ill(self);
3240     break;
3241   case 0x12:
3242     cpu_z80_ill(self);
3243     break;
3244   case 0x13:
3245     cpu_z80_ill(self);
3246     break;
3247   case 0x14:
3248     cpu_z80_ill(self);
3249     break;
3250   case 0x15:
3251     cpu_z80_ill(self);
3252     break;
3253   case 0x16:
3254     cpu_z80_ill(self);
3255     break;
3256   case 0x17:
3257     cpu_z80_ill(self);
3258     break;
3259   case 0x18:
3260     cpu_z80_ill(self);
3261     break;
3262   case 0x19:
3263     cpu_z80_ill(self);
3264     break;
3265   case 0x1a:
3266     cpu_z80_ill(self);
3267     break;
3268   case 0x1b:
3269     cpu_z80_ill(self);
3270     break;
3271   case 0x1c:
3272     cpu_z80_ill(self);
3273     break;
3274   case 0x1d:
3275     cpu_z80_ill(self);
3276     break;
3277   case 0x1e:
3278     cpu_z80_ill(self);
3279     break;
3280   case 0x1f:
3281     cpu_z80_ill(self);
3282     break;
3283   case 0x20:
3284     cpu_z80_ill(self);
3285     break;
3286   case 0x21:
3287     cpu_z80_ill(self);
3288     break;
3289   case 0x22:
3290     cpu_z80_ill(self);
3291     break;
3292   case 0x23:
3293     cpu_z80_ill(self);
3294     break;
3295   case 0x24:
3296     cpu_z80_ill(self);
3297     break;
3298   case 0x25:
3299     cpu_z80_ill(self);
3300     break;
3301   case 0x26:
3302     cpu_z80_ill(self);
3303     break;
3304   case 0x27:
3305     cpu_z80_ill(self);
3306     break;
3307   case 0x28:
3308     cpu_z80_ill(self);
3309     break;
3310   case 0x29:
3311     cpu_z80_ill(self);
3312     break;
3313   case 0x2a:
3314     cpu_z80_ill(self);
3315     break;
3316   case 0x2b:
3317     cpu_z80_ill(self);
3318     break;
3319   case 0x2c:
3320     cpu_z80_ill(self);
3321     break;
3322   case 0x2d:
3323     cpu_z80_ill(self);
3324     break;
3325   case 0x2e:
3326     cpu_z80_ill(self);
3327     break;
3328   case 0x2f:
3329     cpu_z80_ill(self);
3330     break;
3331   case 0x30:
3332     cpu_z80_ill(self);
3333     break;
3334   case 0x31:
3335     cpu_z80_ill(self);
3336     break;
3337   case 0x32:
3338     cpu_z80_ill(self);
3339     break;
3340   case 0x33:
3341     cpu_z80_ill(self);
3342     break;
3343   case 0x34:
3344     cpu_z80_ill(self);
3345     break;
3346   case 0x35:
3347     cpu_z80_ill(self);
3348     break;
3349   case 0x36:
3350     cpu_z80_ill(self);
3351     break;
3352   case 0x37:
3353     cpu_z80_ill(self);
3354     break;
3355   case 0x38:
3356     cpu_z80_ill(self);
3357     break;
3358   case 0x39:
3359     cpu_z80_ill(self);
3360     break;
3361   case 0x3a:
3362     cpu_z80_ill(self);
3363     break;
3364   case 0x3b:
3365     cpu_z80_ill(self);
3366     break;
3367   case 0x3c:
3368     cpu_z80_ill(self);
3369     break;
3370   case 0x3d:
3371     cpu_z80_ill(self);
3372     break;
3373   case 0x3e:
3374     cpu_z80_ill(self);
3375     break;
3376   case 0x3f:
3377     cpu_z80_ill(self);
3378     break;
3379   case 0x40:
3380     cpu_z80_in_z80(self, CPU_Z80_EA_B, cpu_z80_in_byte(self, self->regs.word.bc));
3381     break;
3382   case 0x41:
3383     cpu_z80_out(self, self->regs.word.bc, self->regs.byte.b);
3384     break;
3385   case 0x42:
3386     cpu_z80_sbc_word(self, CPU_Z80_EA_HL, self->regs.word.bc);
3387     break;
3388   case 0x43:
3389     cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.bc);
3390     break;
3391   case 0x44:
3392     cpu_z80_neg(self);
3393     break;
3394   case 0x45:
3395     cpu_z80_retn(self);
3396     break;
3397   case 0x46:
3398     cpu_z80_im(self, 0);
3399     break;
3400   case 0x47:
3401     cpu_z80_ld_byte(self, CPU_Z80_EA_I, self->regs.byte.a);
3402     break;
3403   case 0x48:
3404     cpu_z80_in_z80(self, CPU_Z80_EA_C, cpu_z80_in_byte(self, self->regs.word.bc));
3405     break;
3406   case 0x49:
3407     cpu_z80_out(self, self->regs.word.bc, self->regs.byte.c);
3408     break;
3409   case 0x4a:
3410     cpu_z80_adc_word(self, CPU_Z80_EA_HL, self->regs.word.bc);
3411     break;
3412   case 0x4b:
3413     cpu_z80_ld_word(self, CPU_Z80_EA_BC, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
3414     break;
3415   case 0x4c:
3416     cpu_z80_neg(self);
3417     break;
3418   case 0x4d:
3419     cpu_z80_reti(self);
3420     break;
3421   case 0x4e:
3422     cpu_z80_im(self, 0);
3423     break;
3424   case 0x4f:
3425     cpu_z80_ld_byte(self, CPU_Z80_EA_R, self->regs.byte.a);
3426     break;
3427   case 0x50:
3428     cpu_z80_in_z80(self, CPU_Z80_EA_D, cpu_z80_in_byte(self, self->regs.word.bc));
3429     break;
3430   case 0x51:
3431     cpu_z80_out(self, self->regs.word.bc, self->regs.byte.d);
3432     break;
3433   case 0x52:
3434     cpu_z80_sbc_word(self, CPU_Z80_EA_HL, self->regs.word.de);
3435     break;
3436   case 0x53:
3437     cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.de);
3438     break;
3439   case 0x54:
3440     cpu_z80_neg(self);
3441     break;
3442   case 0x55:
3443     cpu_z80_retn(self);
3444     break;
3445   case 0x56:
3446     cpu_z80_im(self, 1);
3447     break;
3448   case 0x57:
3449     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.i);
3450     break;
3451   case 0x58:
3452     cpu_z80_in_z80(self, CPU_Z80_EA_E, cpu_z80_in_byte(self, self->regs.word.bc));
3453     break;
3454   case 0x59:
3455     cpu_z80_out(self, self->regs.word.bc, self->regs.byte.e);
3456     break;
3457   case 0x5a:
3458     cpu_z80_adc_word(self, CPU_Z80_EA_HL, self->regs.word.de);
3459     break;
3460   case 0x5b:
3461     cpu_z80_ld_word(self, CPU_Z80_EA_DE, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
3462     break;
3463   case 0x5c:
3464     cpu_z80_neg(self);
3465     break;
3466   case 0x5d:
3467     cpu_z80_reti(self);
3468     break;
3469   case 0x5e:
3470     cpu_z80_im(self, 2);
3471     break;
3472   case 0x5f:
3473     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.r);
3474     break;
3475   case 0x60:
3476     cpu_z80_in_z80(self, CPU_Z80_EA_H, cpu_z80_in_byte(self, self->regs.word.bc));
3477     break;
3478   case 0x61:
3479     cpu_z80_out(self, self->regs.word.bc, self->regs.byte.h);
3480     break;
3481   case 0x62:
3482     cpu_z80_sbc_word(self, CPU_Z80_EA_HL, self->regs.word.hl);
3483     break;
3484   case 0x63:
3485     cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.hl);
3486     break;
3487   case 0x64:
3488     cpu_z80_neg(self);
3489     break;
3490   case 0x65:
3491     cpu_z80_retn(self);
3492     break;
3493   case 0x66:
3494     cpu_z80_im(self, 0);
3495     break;
3496   case 0x67:
3497     cpu_z80_rrd(self);
3498     break;
3499   case 0x68:
3500     cpu_z80_in_z80(self, CPU_Z80_EA_L, cpu_z80_in_byte(self, self->regs.word.bc));
3501     break;
3502   case 0x69:
3503     cpu_z80_out(self, self->regs.word.bc, self->regs.byte.l);
3504     break;
3505   case 0x6a:
3506     cpu_z80_adc_word(self, CPU_Z80_EA_HL, self->regs.word.hl);
3507     break;
3508   case 0x6b:
3509     cpu_z80_ld_word(self, CPU_Z80_EA_HL, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
3510     break;
3511   case 0x6c:
3512     cpu_z80_neg(self);
3513     break;
3514   case 0x6d:
3515     cpu_z80_reti(self);
3516     break;
3517   case 0x6e:
3518     cpu_z80_im(self, 0);
3519     break;
3520   case 0x6f:
3521     cpu_z80_rld(self);
3522     break;
3523   case 0x70:
3524     cpu_z80_in_z80(self, CPU_Z80_EA_SINK, cpu_z80_in_byte(self, self->regs.word.bc));
3525     break;
3526   case 0x71:
3527     cpu_z80_out(self, self->regs.word.bc, 0);
3528     break;
3529   case 0x72:
3530     cpu_z80_sbc_word(self, CPU_Z80_EA_HL, self->regs.word.sp);
3531     break;
3532   case 0x73:
3533     cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.sp);
3534     break;
3535   case 0x74:
3536     cpu_z80_neg(self);
3537     break;
3538   case 0x75:
3539     cpu_z80_retn(self);
3540     break;
3541   case 0x76:
3542     cpu_z80_im(self, 1);
3543     break;
3544   case 0x77:
3545     cpu_z80_nop(self);
3546     break;
3547   case 0x78:
3548     cpu_z80_in_z80(self, CPU_Z80_EA_A, cpu_z80_in_byte(self, self->regs.word.bc));
3549     break;
3550   case 0x79:
3551     cpu_z80_out(self, self->regs.word.bc, self->regs.byte.a);
3552     break;
3553   case 0x7a:
3554     cpu_z80_adc_word(self, CPU_Z80_EA_HL, self->regs.word.sp);
3555     break;
3556   case 0x7b:
3557     cpu_z80_ld_word(self, CPU_Z80_EA_SP, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
3558     break;
3559   case 0x7c:
3560     cpu_z80_neg(self);
3561     break;
3562   case 0x7d:
3563     cpu_z80_reti(self);
3564     break;
3565   case 0x7e:
3566     cpu_z80_im(self, 2);
3567     break;
3568   case 0x7f:
3569     cpu_z80_nop(self);
3570     break;
3571   case 0x80:
3572     cpu_z80_ill(self);
3573     break;
3574   case 0x81:
3575     cpu_z80_ill(self);
3576     break;
3577   case 0x82:
3578     cpu_z80_ill(self);
3579     break;
3580   case 0x83:
3581     cpu_z80_ill(self);
3582     break;
3583   case 0x84:
3584     cpu_z80_ill(self);
3585     break;
3586   case 0x85:
3587     cpu_z80_ill(self);
3588     break;
3589   case 0x86:
3590     cpu_z80_ill(self);
3591     break;
3592   case 0x87:
3593     cpu_z80_ill(self);
3594     break;
3595   case 0x88:
3596     cpu_z80_ill(self);
3597     break;
3598   case 0x89:
3599     cpu_z80_ill(self);
3600     break;
3601   case 0x8a:
3602     cpu_z80_ill(self);
3603     break;
3604   case 0x8b:
3605     cpu_z80_ill(self);
3606     break;
3607   case 0x8c:
3608     cpu_z80_ill(self);
3609     break;
3610   case 0x8d:
3611     cpu_z80_ill(self);
3612     break;
3613   case 0x8e:
3614     cpu_z80_ill(self);
3615     break;
3616   case 0x8f:
3617     cpu_z80_ill(self);
3618     break;
3619   case 0x90:
3620     cpu_z80_ill(self);
3621     break;
3622   case 0x91:
3623     cpu_z80_ill(self);
3624     break;
3625   case 0x92:
3626     cpu_z80_ill(self);
3627     break;
3628   case 0x93:
3629     cpu_z80_ill(self);
3630     break;
3631   case 0x94:
3632     cpu_z80_ill(self);
3633     break;
3634   case 0x95:
3635     cpu_z80_ill(self);
3636     break;
3637   case 0x96:
3638     cpu_z80_ill(self);
3639     break;
3640   case 0x97:
3641     cpu_z80_ill(self);
3642     break;
3643   case 0x98:
3644     cpu_z80_ill(self);
3645     break;
3646   case 0x99:
3647     cpu_z80_ill(self);
3648     break;
3649   case 0x9a:
3650     cpu_z80_ill(self);
3651     break;
3652   case 0x9b:
3653     cpu_z80_ill(self);
3654     break;
3655   case 0x9c:
3656     cpu_z80_ill(self);
3657     break;
3658   case 0x9d:
3659     cpu_z80_ill(self);
3660     break;
3661   case 0x9e:
3662     cpu_z80_ill(self);
3663     break;
3664   case 0x9f:
3665     cpu_z80_ill(self);
3666     break;
3667   case 0xa0:
3668     cpu_z80_ldi(self);
3669     break;
3670   case 0xa1:
3671     cpu_z80_cpi(self);
3672     break;
3673   case 0xa2:
3674     cpu_z80_ini(self);
3675     break;
3676   case 0xa3:
3677     cpu_z80_outi(self);
3678     break;
3679   case 0xa4:
3680     cpu_z80_ill(self);
3681     break;
3682   case 0xa5:
3683     cpu_z80_ill(self);
3684     break;
3685   case 0xa6:
3686     cpu_z80_ill(self);
3687     break;
3688   case 0xa7:
3689     cpu_z80_ill(self);
3690     break;
3691   case 0xa8:
3692     cpu_z80_ldd(self);
3693     break;
3694   case 0xa9:
3695     cpu_z80_cpd(self);
3696     break;
3697   case 0xaa:
3698     cpu_z80_ind(self);
3699     break;
3700   case 0xab:
3701     cpu_z80_outd(self);
3702     break;
3703   case 0xac:
3704     cpu_z80_ill(self);
3705     break;
3706   case 0xad:
3707     cpu_z80_ill(self);
3708     break;
3709   case 0xae:
3710     cpu_z80_ill(self);
3711     break;
3712   case 0xaf:
3713     cpu_z80_ill(self);
3714     break;
3715   case 0xb0:
3716     cpu_z80_ldir(self);
3717     break;
3718   case 0xb1:
3719     cpu_z80_cpir(self);
3720     break;
3721   case 0xb2:
3722     cpu_z80_inir(self);
3723     break;
3724   case 0xb3:
3725     cpu_z80_otir(self);
3726     break;
3727   case 0xb4:
3728     cpu_z80_ill(self);
3729     break;
3730   case 0xb5:
3731     cpu_z80_ill(self);
3732     break;
3733   case 0xb6:
3734     cpu_z80_ill(self);
3735     break;
3736   case 0xb7:
3737     cpu_z80_ill(self);
3738     break;
3739   case 0xb8:
3740     cpu_z80_lddr(self);
3741     break;
3742   case 0xb9:
3743     cpu_z80_cpdr(self);
3744     break;
3745   case 0xba:
3746     cpu_z80_indr(self);
3747     break;
3748   case 0xbb:
3749     cpu_z80_otdr(self);
3750     break;
3751   case 0xbc:
3752     cpu_z80_ill(self);
3753     break;
3754   case 0xbd:
3755     cpu_z80_ill(self);
3756     break;
3757   case 0xbe:
3758     cpu_z80_ill(self);
3759     break;
3760   case 0xbf:
3761     cpu_z80_ill(self);
3762     break;
3763   case 0xc0:
3764     cpu_z80_ill(self);
3765     break;
3766   case 0xc1:
3767     cpu_z80_ill(self);
3768     break;
3769   case 0xc2:
3770     cpu_z80_ill(self);
3771     break;
3772   case 0xc3:
3773     cpu_z80_ill(self);
3774     break;
3775   case 0xc4:
3776     cpu_z80_ill(self);
3777     break;
3778   case 0xc5:
3779     cpu_z80_ill(self);
3780     break;
3781   case 0xc6:
3782     cpu_z80_ill(self);
3783     break;
3784   case 0xc7:
3785     cpu_z80_ill(self);
3786     break;
3787   case 0xc8:
3788     cpu_z80_ill(self);
3789     break;
3790   case 0xc9:
3791     cpu_z80_ill(self);
3792     break;
3793   case 0xca:
3794     cpu_z80_ill(self);
3795     break;
3796   case 0xcb:
3797     cpu_z80_ill(self);
3798     break;
3799   case 0xcc:
3800     cpu_z80_ill(self);
3801     break;
3802   case 0xcd:
3803     cpu_z80_ill(self);
3804     break;
3805   case 0xce:
3806     cpu_z80_ill(self);
3807     break;
3808   case 0xcf:
3809     cpu_z80_ill(self);
3810     break;
3811   case 0xd0:
3812     cpu_z80_ill(self);
3813     break;
3814   case 0xd1:
3815     cpu_z80_ill(self);
3816     break;
3817   case 0xd2:
3818     cpu_z80_ill(self);
3819     break;
3820   case 0xd3:
3821     cpu_z80_ill(self);
3822     break;
3823   case 0xd4:
3824     cpu_z80_ill(self);
3825     break;
3826   case 0xd5:
3827     cpu_z80_ill(self);
3828     break;
3829   case 0xd6:
3830     cpu_z80_ill(self);
3831     break;
3832   case 0xd7:
3833     cpu_z80_ill(self);
3834     break;
3835   case 0xd8:
3836     cpu_z80_ill(self);
3837     break;
3838   case 0xd9:
3839     cpu_z80_ill(self);
3840     break;
3841   case 0xda:
3842     cpu_z80_ill(self);
3843     break;
3844   case 0xdb:
3845     cpu_z80_ill(self);
3846     break;
3847   case 0xdc:
3848     cpu_z80_ill(self);
3849     break;
3850   case 0xdd:
3851     cpu_z80_ill(self);
3852     break;
3853   case 0xde:
3854     cpu_z80_ill(self);
3855     break;
3856   case 0xdf:
3857     cpu_z80_ill(self);
3858     break;
3859   case 0xe0:
3860     cpu_z80_ill(self);
3861     break;
3862   case 0xe1:
3863     cpu_z80_ill(self);
3864     break;
3865   case 0xe2:
3866     cpu_z80_ill(self);
3867     break;
3868   case 0xe3:
3869     cpu_z80_ill(self);
3870     break;
3871   case 0xe4:
3872     cpu_z80_ill(self);
3873     break;
3874   case 0xe5:
3875     cpu_z80_ill(self);
3876     break;
3877   case 0xe6:
3878     cpu_z80_ill(self);
3879     break;
3880   case 0xe7:
3881     cpu_z80_ill(self);
3882     break;
3883   case 0xe8:
3884     cpu_z80_ill(self);
3885     break;
3886   case 0xe9:
3887     cpu_z80_ill(self);
3888     break;
3889   case 0xea:
3890     cpu_z80_ill(self);
3891     break;
3892   case 0xeb:
3893     cpu_z80_ill(self);
3894     break;
3895   case 0xec:
3896     cpu_z80_ill(self);
3897     break;
3898   case 0xed:
3899     cpu_z80_ill(self);
3900     break;
3901   case 0xee:
3902     cpu_z80_ill(self);
3903     break;
3904   case 0xef:
3905     cpu_z80_ill(self);
3906     break;
3907   case 0xf0:
3908     cpu_z80_ill(self);
3909     break;
3910   case 0xf1:
3911     cpu_z80_ill(self);
3912     break;
3913   case 0xf2:
3914     cpu_z80_ill(self);
3915     break;
3916   case 0xf3:
3917     cpu_z80_ill(self);
3918     break;
3919   case 0xf4:
3920     cpu_z80_ill(self);
3921     break;
3922   case 0xf5:
3923     cpu_z80_ill(self);
3924     break;
3925   case 0xf6:
3926     cpu_z80_ill(self);
3927     break;
3928   case 0xf7:
3929     cpu_z80_ill(self);
3930     break;
3931   case 0xf8:
3932     cpu_z80_ill(self);
3933     break;
3934   case 0xf9:
3935     cpu_z80_ill(self);
3936     break;
3937   case 0xfa:
3938     cpu_z80_ill(self);
3939     break;
3940   case 0xfb:
3941     cpu_z80_ill(self);
3942     break;
3943   case 0xfc:
3944     cpu_z80_ill(self);
3945     break;
3946   case 0xfd:
3947     cpu_z80_ill(self);
3948     break;
3949   case 0xfe:
3950     cpu_z80_ill(self);
3951     break;
3952   case 0xff:
3953     cpu_z80_ill(self);
3954     break;
3955   }
3956 }
3957
3958 void cpu_z80_execute_fd(struct cpu_z80 *self) {
3959   switch (cpu_z80_fetch_byte(self)) {
3960   case 0x00:
3961     cpu_z80_nop(self);
3962     break;
3963   case 0x01:
3964     cpu_z80_ld_word(self, CPU_Z80_EA_BC, cpu_z80_fetch_word(self));
3965     break;
3966   case 0x02:
3967     cpu_z80_ld_byte(self, self->regs.word.bc, self->regs.byte.a);
3968     break;
3969   case 0x03:
3970     cpu_z80_inc_word(self, CPU_Z80_EA_BC);
3971     break;
3972   case 0x04:
3973     cpu_z80_inc_byte(self, CPU_Z80_EA_B);
3974     break;
3975   case 0x05:
3976     cpu_z80_dec_byte(self, CPU_Z80_EA_B);
3977     break;
3978   case 0x06:
3979     cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_fetch_byte(self));
3980     break;
3981   case 0x07:
3982     cpu_z80_rlca(self);
3983     break;
3984   case 0x08:
3985     cpu_z80_ex(self, CPU_Z80_EA_AF, CPU_Z80_EA_AF_PRIME);
3986     break;
3987   case 0x09:
3988     cpu_z80_add_word(self, CPU_Z80_EA_IY, self->regs.word.bc);
3989     break;
3990   case 0x0a:
3991     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.bc));
3992     break;
3993   case 0x0b:
3994     cpu_z80_dec_word(self, CPU_Z80_EA_BC);
3995     break;
3996   case 0x0c:
3997     cpu_z80_inc_byte(self, CPU_Z80_EA_C);
3998     break;
3999   case 0x0d:
4000     cpu_z80_dec_byte(self, CPU_Z80_EA_C);
4001     break;
4002   case 0x0e:
4003     cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_fetch_byte(self));
4004     break;
4005   case 0x0f:
4006     cpu_z80_rrca(self);
4007     break;
4008   case 0x10:
4009     cpu_z80_djnz(self, cpu_z80_relative(self));
4010     break;
4011   case 0x11:
4012     cpu_z80_ld_word(self, CPU_Z80_EA_DE, cpu_z80_fetch_word(self));
4013     break;
4014   case 0x12:
4015     cpu_z80_ld_byte(self, self->regs.word.de, self->regs.byte.a);
4016     break;
4017   case 0x13:
4018     cpu_z80_inc_word(self, CPU_Z80_EA_DE);
4019     break;
4020   case 0x14:
4021     cpu_z80_inc_byte(self, CPU_Z80_EA_D);
4022     break;
4023   case 0x15:
4024     cpu_z80_dec_byte(self, CPU_Z80_EA_D);
4025     break;
4026   case 0x16:
4027     cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_fetch_byte(self));
4028     break;
4029   case 0x17:
4030     cpu_z80_rla(self);
4031     break;
4032   case 0x18:
4033     cpu_z80_jr(self, true, cpu_z80_relative(self));
4034     break;
4035   case 0x19:
4036     cpu_z80_add_word(self, CPU_Z80_EA_IY, self->regs.word.de);
4037     break;
4038   case 0x1a:
4039     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.de));
4040     break;
4041   case 0x1b:
4042     cpu_z80_dec_word(self, CPU_Z80_EA_DE);
4043     break;
4044   case 0x1c:
4045     cpu_z80_inc_byte(self, CPU_Z80_EA_E);
4046     break;
4047   case 0x1d:
4048     cpu_z80_dec_byte(self, CPU_Z80_EA_E);
4049     break;
4050   case 0x1e:
4051     cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_fetch_byte(self));
4052     break;
4053   case 0x1f:
4054     cpu_z80_rra(self);
4055     break;
4056   case 0x20:
4057     cpu_z80_jr(self, !self->regs.bit.zf, cpu_z80_relative(self));
4058     break;
4059   case 0x21:
4060     cpu_z80_ld_word(self, CPU_Z80_EA_IY, cpu_z80_fetch_word(self));
4061     break;
4062   case 0x22:
4063     cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.iy);
4064     break;
4065   case 0x23:
4066     cpu_z80_inc_word(self, CPU_Z80_EA_IY);
4067     break;
4068   case 0x24:
4069     cpu_z80_inc_byte(self, CPU_Z80_EA_IYH);
4070     break;
4071   case 0x25:
4072     cpu_z80_dec_byte(self, CPU_Z80_EA_IYH);
4073     break;
4074   case 0x26:
4075     cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, cpu_z80_fetch_byte(self));
4076     break;
4077   case 0x27:
4078     cpu_z80_daa(self);
4079     break;
4080   case 0x28:
4081     cpu_z80_jr(self, self->regs.bit.zf, cpu_z80_relative(self));
4082     break;
4083   case 0x29:
4084     cpu_z80_add_word(self, CPU_Z80_EA_IY, self->regs.word.iy);
4085     break;
4086   case 0x2a:
4087     cpu_z80_ld_word(self, CPU_Z80_EA_IY, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
4088     break;
4089   case 0x2b:
4090     cpu_z80_dec_word(self, CPU_Z80_EA_IY);
4091     break;
4092   case 0x2c:
4093     cpu_z80_inc_byte(self, CPU_Z80_EA_IYL);
4094     break;
4095   case 0x2d:
4096     cpu_z80_dec_byte(self, CPU_Z80_EA_IYL);
4097     break;
4098   case 0x2e:
4099     cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, cpu_z80_fetch_byte(self));
4100     break;
4101   case 0x2f:
4102     cpu_z80_cpl(self);
4103     break;
4104   case 0x30:
4105     cpu_z80_jr(self, !self->regs.bit.cf, cpu_z80_relative(self));
4106     break;
4107   case 0x31:
4108     cpu_z80_ld_word(self, CPU_Z80_EA_SP, cpu_z80_fetch_word(self));
4109     break;
4110   case 0x32:
4111     cpu_z80_ld_byte(self, cpu_z80_fetch_word(self), self->regs.byte.a);
4112     break;
4113   case 0x33:
4114     cpu_z80_inc_word(self, CPU_Z80_EA_SP);
4115     break;
4116   case 0x34:
4117     cpu_z80_inc_byte(self, cpu_z80_displacement(self, self->regs.word.iy));
4118     break;
4119   case 0x35:
4120     cpu_z80_dec_byte(self, cpu_z80_displacement(self, self->regs.word.iy));
4121     break;
4122   case 0x36:
4123     {
4124       int ea = cpu_z80_displacement(self, self->regs.word.iy);
4125       cpu_z80_ld_byte(self, ea, cpu_z80_fetch_byte(self));
4126     }
4127     break;
4128   case 0x37:
4129     cpu_z80_scf(self);
4130     break;
4131   case 0x38:
4132     cpu_z80_jr(self, self->regs.bit.cf, cpu_z80_relative(self));
4133     break;
4134   case 0x39:
4135     cpu_z80_add_word(self, CPU_Z80_EA_IY, self->regs.word.sp);
4136     break;
4137   case 0x3a:
4138     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_fetch_word(self)));
4139     break;
4140   case 0x3b:
4141     cpu_z80_dec_word(self, CPU_Z80_EA_SP);
4142     break;
4143   case 0x3c:
4144     cpu_z80_inc_byte(self, CPU_Z80_EA_A);
4145     break;
4146   case 0x3d:
4147     cpu_z80_dec_byte(self, CPU_Z80_EA_A);
4148     break;
4149   case 0x3e:
4150     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
4151     break;
4152   case 0x3f:
4153     cpu_z80_ccf(self);
4154     break;
4155   case 0x40:
4156     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.b);
4157     break;
4158   case 0x41:
4159     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.c);
4160     break;
4161   case 0x42:
4162     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.d);
4163     break;
4164   case 0x43:
4165     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.e);
4166     break;
4167   case 0x44:
4168     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.iyh);
4169     break;
4170   case 0x45:
4171     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.iyl);
4172     break;
4173   case 0x46:
4174     cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4175     break;
4176   case 0x47:
4177     cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.a);
4178     break;
4179   case 0x48:
4180     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.b);
4181     break;
4182   case 0x49:
4183     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.c);
4184     break;
4185   case 0x4a:
4186     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.d);
4187     break;
4188   case 0x4b:
4189     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.e);
4190     break;
4191   case 0x4c:
4192     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.iyh);
4193     break;
4194   case 0x4d:
4195     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.iyl);
4196     break;
4197   case 0x4e:
4198     cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4199     break;
4200   case 0x4f:
4201     cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.a);
4202     break;
4203   case 0x50:
4204     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.b);
4205     break;
4206   case 0x51:
4207     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.c);
4208     break;
4209   case 0x52:
4210     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.d);
4211     break;
4212   case 0x53:
4213     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.e);
4214     break;
4215   case 0x54:
4216     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.iyh);
4217     break;
4218   case 0x55:
4219     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.iyl);
4220     break;
4221   case 0x56:
4222     cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4223     break;
4224   case 0x57:
4225     cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.a);
4226     break;
4227   case 0x58:
4228     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.b);
4229     break;
4230   case 0x59:
4231     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.c);
4232     break;
4233   case 0x5a:
4234     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.d);
4235     break;
4236   case 0x5b:
4237     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.e);
4238     break;
4239   case 0x5c:
4240     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.iyh);
4241     break;
4242   case 0x5d:
4243     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.iyl);
4244     break;
4245   case 0x5e:
4246     cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4247     break;
4248   case 0x5f:
4249     cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.a);
4250     break;
4251   case 0x60:
4252     cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.b);
4253     break;
4254   case 0x61:
4255     cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.c);
4256     break;
4257   case 0x62:
4258     cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.d);
4259     break;
4260   case 0x63:
4261     cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.e);
4262     break;
4263   case 0x64:
4264     cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.iyh);
4265     break;
4266   case 0x65:
4267     cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.iyl);
4268     break;
4269   case 0x66:
4270     cpu_z80_ld_byte(self, CPU_Z80_EA_H, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4271     break;
4272   case 0x67:
4273     cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.a);
4274     break;
4275   case 0x68:
4276     cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.b);
4277     break;
4278   case 0x69:
4279     cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.c);
4280     break;
4281   case 0x6a:
4282     cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.d);
4283     break;
4284   case 0x6b:
4285     cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.e);
4286     break;
4287   case 0x6c:
4288     cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.iyh);
4289     break;
4290   case 0x6d:
4291     cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.iyl);
4292     break;
4293   case 0x6e:
4294     cpu_z80_ld_byte(self, CPU_Z80_EA_L, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4295     break;
4296   case 0x6f:
4297     cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.a);
4298     break;
4299   case 0x70:
4300     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.b);
4301     break;
4302   case 0x71:
4303     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.c);
4304     break;
4305   case 0x72:
4306     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.d);
4307     break;
4308   case 0x73:
4309     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.e);
4310     break;
4311   case 0x74:
4312     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.h);
4313     break;
4314   case 0x75:
4315     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.l);
4316     break;
4317   case 0x76:
4318     cpu_z80_halt(self);
4319     break;
4320   case 0x77:
4321     cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.a);
4322     break;
4323   case 0x78:
4324     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
4325     break;
4326   case 0x79:
4327     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
4328     break;
4329   case 0x7a:
4330     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
4331     break;
4332   case 0x7b:
4333     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
4334     break;
4335   case 0x7c:
4336     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.iyh);
4337     break;
4338   case 0x7d:
4339     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.iyl);
4340     break;
4341   case 0x7e:
4342     cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4343     break;
4344   case 0x7f:
4345     cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
4346     break;
4347   case 0x80:
4348     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
4349     break;
4350   case 0x81:
4351     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
4352     break;
4353   case 0x82:
4354     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
4355     break;
4356   case 0x83:
4357     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
4358     break;
4359   case 0x84:
4360     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.iyh);
4361     break;
4362   case 0x85:
4363     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.iyl);
4364     break;
4365   case 0x86:
4366     cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4367     break;
4368   case 0x87:
4369     cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
4370     break;
4371   case 0x88:
4372     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
4373     break;
4374   case 0x89:
4375     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
4376     break;
4377   case 0x8a:
4378     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
4379     break;
4380   case 0x8b:
4381     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
4382     break;
4383   case 0x8c:
4384     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.iyh);
4385     break;
4386   case 0x8d:
4387     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.iyl);
4388     break;
4389   case 0x8e:
4390     cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4391     break;
4392   case 0x8f:
4393     cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
4394     break;
4395   case 0x90:
4396     cpu_z80_sub(self, self->regs.byte.b);
4397     break;
4398   case 0x91:
4399     cpu_z80_sub(self, self->regs.byte.c);
4400     break;
4401   case 0x92:
4402     cpu_z80_sub(self, self->regs.byte.d);
4403     break;
4404   case 0x93:
4405     cpu_z80_sub(self, self->regs.byte.e);
4406     break;
4407   case 0x94:
4408     cpu_z80_sub(self, self->regs.byte.iyh);
4409     break;
4410   case 0x95:
4411     cpu_z80_sub(self, self->regs.byte.iyl);
4412     break;
4413   case 0x96:
4414     cpu_z80_sub(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4415     break;
4416   case 0x97:
4417     cpu_z80_sub(self, self->regs.byte.a);
4418     break;
4419   case 0x98:
4420     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
4421     break;
4422   case 0x99:
4423     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
4424     break;
4425   case 0x9a:
4426     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
4427     break;
4428   case 0x9b:
4429     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
4430     break;
4431   case 0x9c:
4432     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.iyh);
4433     break;
4434   case 0x9d:
4435     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.iyl);
4436     break;
4437   case 0x9e:
4438     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4439     break;
4440   case 0x9f:
4441     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
4442     break;
4443   case 0xa0:
4444     cpu_z80_and(self, self->regs.byte.b);
4445     break;
4446   case 0xa1:
4447     cpu_z80_and(self, self->regs.byte.c);
4448     break;
4449   case 0xa2:
4450     cpu_z80_and(self, self->regs.byte.d);
4451     break;
4452   case 0xa3:
4453     cpu_z80_and(self, self->regs.byte.e);
4454     break;
4455   case 0xa4:
4456     cpu_z80_and(self, self->regs.byte.iyh);
4457     break;
4458   case 0xa5:
4459     cpu_z80_and(self, self->regs.byte.iyl);
4460     break;
4461   case 0xa6:
4462     cpu_z80_and(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4463     break;
4464   case 0xa7:
4465     cpu_z80_and(self, self->regs.byte.a);
4466     break;
4467   case 0xa8:
4468     cpu_z80_xor(self, self->regs.byte.b);
4469     break;
4470   case 0xa9:
4471     cpu_z80_xor(self, self->regs.byte.c);
4472     break;
4473   case 0xaa:
4474     cpu_z80_xor(self, self->regs.byte.d);
4475     break;
4476   case 0xab:
4477     cpu_z80_xor(self, self->regs.byte.e);
4478     break;
4479   case 0xac:
4480     cpu_z80_xor(self, self->regs.byte.iyh);
4481     break;
4482   case 0xad:
4483     cpu_z80_xor(self, self->regs.byte.iyl);
4484     break;
4485   case 0xae:
4486     cpu_z80_xor(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4487     break;
4488   case 0xaf:
4489     cpu_z80_xor(self, self->regs.byte.a);
4490     break;
4491   case 0xb0:
4492     cpu_z80_or(self, self->regs.byte.b);
4493     break;
4494   case 0xb1:
4495     cpu_z80_or(self, self->regs.byte.c);
4496     break;
4497   case 0xb2:
4498     cpu_z80_or(self, self->regs.byte.d);
4499     break;
4500   case 0xb3:
4501     cpu_z80_or(self, self->regs.byte.e);
4502     break;
4503   case 0xb4:
4504     cpu_z80_or(self, self->regs.byte.iyh);
4505     break;
4506   case 0xb5:
4507     cpu_z80_or(self, self->regs.byte.iyl);
4508     break;
4509   case 0xb6:
4510     cpu_z80_or(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4511     break;
4512   case 0xb7:
4513     cpu_z80_or(self, self->regs.byte.a);
4514     break;
4515   case 0xb8:
4516     cpu_z80_cp(self, self->regs.byte.b);
4517     break;
4518   case 0xb9:
4519     cpu_z80_cp(self, self->regs.byte.c);
4520     break;
4521   case 0xba:
4522     cpu_z80_cp(self, self->regs.byte.d);
4523     break;
4524   case 0xbb:
4525     cpu_z80_cp(self, self->regs.byte.e);
4526     break;
4527   case 0xbc:
4528     cpu_z80_cp(self, self->regs.byte.iyh);
4529     break;
4530   case 0xbd:
4531     cpu_z80_cp(self, self->regs.byte.iyl);
4532     break;
4533   case 0xbe:
4534     cpu_z80_cp(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4535     break;
4536   case 0xbf:
4537     cpu_z80_cp(self, self->regs.byte.a);
4538     break;
4539   case 0xc0:
4540     cpu_z80_ret(self, !self->regs.bit.zf);
4541     break;
4542   case 0xc1:
4543     cpu_z80_pop(self, CPU_Z80_EA_BC);
4544     break;
4545   case 0xc2:
4546     cpu_z80_jp(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
4547     break;
4548   case 0xc3:
4549     cpu_z80_jp(self, true, cpu_z80_fetch_word(self));
4550     break;
4551   case 0xc4:
4552     cpu_z80_call(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
4553     break;
4554   case 0xc5:
4555     cpu_z80_push(self, self->regs.word.bc);
4556     break;
4557   case 0xc6:
4558     cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
4559     break;
4560   case 0xc7:
4561     cpu_z80_call(self, true, 0);
4562     break;
4563   case 0xc8:
4564     cpu_z80_ret(self, self->regs.bit.zf);
4565     break;
4566   case 0xc9:
4567     cpu_z80_ret(self, true);
4568     break;
4569   case 0xca:
4570     cpu_z80_jp(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
4571     break;
4572   case 0xcb:
4573     cpu_z80_execute_fd_cb(self);
4574     break;
4575   case 0xcc:
4576     cpu_z80_call(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
4577     break;
4578   case 0xcd:
4579     cpu_z80_call(self, true, cpu_z80_fetch_word(self));
4580     break;
4581   case 0xce:
4582     cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
4583     break;
4584   case 0xcf:
4585     cpu_z80_call(self, true, 8);
4586     break;
4587   case 0xd0:
4588     cpu_z80_ret(self, !self->regs.bit.cf);
4589     break;
4590   case 0xd1:
4591     cpu_z80_pop(self, CPU_Z80_EA_DE);
4592     break;
4593   case 0xd2:
4594     cpu_z80_jp(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
4595     break;
4596   case 0xd3:
4597     cpu_z80_out(self, cpu_z80_port_word(self), self->regs.byte.a);
4598     break;
4599   case 0xd4:
4600     cpu_z80_call(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
4601     break;
4602   case 0xd5:
4603     cpu_z80_push(self, self->regs.word.de);
4604     break;
4605   case 0xd6:
4606     cpu_z80_sub(self, cpu_z80_fetch_byte(self));
4607     break;
4608   case 0xd7:
4609     cpu_z80_call(self, true, 0x10);
4610     break;
4611   case 0xd8:
4612     cpu_z80_ret(self, self->regs.bit.cf);
4613     break;
4614   case 0xd9:
4615     cpu_z80_ex(self, CPU_Z80_EA_BC, CPU_Z80_EA_BC_PRIME);
4616     cpu_z80_ex(self, CPU_Z80_EA_DE, CPU_Z80_EA_DE_PRIME);
4617     cpu_z80_ex(self, CPU_Z80_EA_HL, CPU_Z80_EA_HL_PRIME);
4618     break;
4619   case 0xda:
4620     cpu_z80_jp(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
4621     break;
4622   case 0xdb:
4623     cpu_z80_in(self, CPU_Z80_EA_A, cpu_z80_in_byte(self, cpu_z80_port_word(self)));
4624     break;
4625   case 0xdc:
4626     cpu_z80_call(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
4627     break;
4628   case 0xdd:
4629     cpu_z80_ill(self);
4630     break;
4631   case 0xde:
4632     cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
4633     break;
4634   case 0xdf:
4635     cpu_z80_call(self, true, 0x18);
4636     break;
4637   case 0xe0:
4638     cpu_z80_ret(self, !self->regs.bit.pvf);
4639     break;
4640   case 0xe1:
4641     cpu_z80_pop(self, CPU_Z80_EA_IY);
4642     break;
4643   case 0xe2:
4644     cpu_z80_jp(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
4645     break;
4646   case 0xe3:
4647     cpu_z80_ex(self, self->regs.word.sp, CPU_Z80_EA_IY);
4648     break;
4649   case 0xe4:
4650     cpu_z80_call(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
4651     break;
4652   case 0xe5:
4653     cpu_z80_push(self, self->regs.word.iy);
4654     break;
4655   case 0xe6:
4656     cpu_z80_and(self, cpu_z80_fetch_byte(self));
4657     break;
4658   case 0xe7:
4659     cpu_z80_call(self, true, 0x20);
4660     break;
4661   case 0xe8:
4662     cpu_z80_ret(self, self->regs.bit.pvf);
4663     break;
4664   case 0xe9:
4665     cpu_z80_jp(self, true, cpu_z80_read_word(self, self->regs.word.iy));
4666     break;
4667   case 0xea:
4668     cpu_z80_jp(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
4669     break;
4670   case 0xeb:
4671     cpu_z80_ex(self, CPU_Z80_EA_DE, CPU_Z80_EA_HL);
4672     break;
4673   case 0xec:
4674     cpu_z80_call(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
4675     break;
4676   case 0xed:
4677     cpu_z80_ill(self);
4678     break;
4679   case 0xee:
4680     cpu_z80_xor(self, cpu_z80_fetch_byte(self));
4681     break;
4682   case 0xef:
4683     cpu_z80_call(self, true, 0x28);
4684     break;
4685   case 0xf0:
4686     cpu_z80_ret(self, !self->regs.bit.sf);
4687     break;
4688   case 0xf1:
4689     cpu_z80_pop(self, CPU_Z80_EA_AF);
4690     break;
4691   case 0xf2:
4692     cpu_z80_jp(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
4693     break;
4694   case 0xf3:
4695     cpu_z80_di(self);
4696     break;
4697   case 0xf4:
4698     cpu_z80_call(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
4699     break;
4700   case 0xf5:
4701     cpu_z80_push(self, self->regs.word.af);
4702     break;
4703   case 0xf6:
4704     cpu_z80_or(self, cpu_z80_fetch_byte(self));
4705     break;
4706   case 0xf7:
4707     cpu_z80_call(self, true, 0x30);
4708     break;
4709   case 0xf8:
4710     cpu_z80_ret(self, self->regs.bit.sf);
4711     break;
4712   case 0xf9:
4713     cpu_z80_ld_word(self, CPU_Z80_EA_SP, self->regs.word.iy);
4714     break;
4715   case 0xfa:
4716     cpu_z80_jp(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
4717     break;
4718   case 0xfb:
4719     cpu_z80_ei(self);
4720     break;
4721   case 0xfc:
4722     cpu_z80_call(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
4723     break;
4724   case 0xfd:
4725     cpu_z80_ill(self);
4726     break;
4727   case 0xfe:
4728     cpu_z80_cp(self, cpu_z80_fetch_byte(self));
4729     break;
4730   case 0xff:
4731     cpu_z80_call(self, true, 0x38);
4732     break;
4733   }
4734 }
4735
4736 void cpu_z80_execute_fd_cb(struct cpu_z80 *self) {
4737   int ea = cpu_z80_displacement(self, self->regs.word.iy);
4738   switch (cpu_z80_fetch_byte(self)) {
4739   case 0x00:
4740     cpu_z80_rlc(self, ea, CPU_Z80_EA_B);
4741     break;
4742   case 0x01:
4743     cpu_z80_rlc(self, ea, CPU_Z80_EA_C);
4744     break;
4745   case 0x02:
4746     cpu_z80_rlc(self, ea, CPU_Z80_EA_D);
4747     break;
4748   case 0x03:
4749     cpu_z80_rlc(self, ea, CPU_Z80_EA_E);
4750     break;
4751   case 0x04:
4752     cpu_z80_rlc(self, ea, CPU_Z80_EA_H);
4753     break;
4754   case 0x05:
4755     cpu_z80_rlc(self, ea, CPU_Z80_EA_L);
4756     break;
4757   case 0x06:
4758     cpu_z80_rlc(self, ea, CPU_Z80_EA_SINK);
4759     break;
4760   case 0x07:
4761     cpu_z80_rlc(self, ea, CPU_Z80_EA_A);
4762     break;
4763   case 0x08:
4764     cpu_z80_rrc(self, ea, CPU_Z80_EA_B);
4765     break;
4766   case 0x09:
4767     cpu_z80_rrc(self, ea, CPU_Z80_EA_C);
4768     break;
4769   case 0x0a:
4770     cpu_z80_rrc(self, ea, CPU_Z80_EA_D);
4771     break;
4772   case 0x0b:
4773     cpu_z80_rrc(self, ea, CPU_Z80_EA_E);
4774     break;
4775   case 0x0c:
4776     cpu_z80_rrc(self, ea, CPU_Z80_EA_H);
4777     break;
4778   case 0x0d:
4779     cpu_z80_rrc(self, ea, CPU_Z80_EA_L);
4780     break;
4781   case 0x0e:
4782     cpu_z80_rrc(self, ea, CPU_Z80_EA_SINK);
4783     break;
4784   case 0x0f:
4785     cpu_z80_rrc(self, ea, CPU_Z80_EA_A);
4786     break;
4787   case 0x10:
4788     cpu_z80_rl(self, ea, CPU_Z80_EA_B);
4789     break;
4790   case 0x11:
4791     cpu_z80_rl(self, ea, CPU_Z80_EA_C);
4792     break;
4793   case 0x12:
4794     cpu_z80_rl(self, ea, CPU_Z80_EA_D);
4795     break;
4796   case 0x13:
4797     cpu_z80_rl(self, ea, CPU_Z80_EA_E);
4798     break;
4799   case 0x14:
4800     cpu_z80_rl(self, ea, CPU_Z80_EA_H);
4801     break;
4802   case 0x15:
4803     cpu_z80_rl(self, ea, CPU_Z80_EA_L);
4804     break;
4805   case 0x16:
4806     cpu_z80_rl(self, ea, CPU_Z80_EA_SINK);
4807     break;
4808   case 0x17:
4809     cpu_z80_rl(self, ea, CPU_Z80_EA_A);
4810     break;
4811   case 0x18:
4812     cpu_z80_rr(self, ea, CPU_Z80_EA_B);
4813     break;
4814   case 0x19:
4815     cpu_z80_rr(self, ea, CPU_Z80_EA_C);
4816     break;
4817   case 0x1a:
4818     cpu_z80_rr(self, ea, CPU_Z80_EA_D);
4819     break;
4820   case 0x1b:
4821     cpu_z80_rr(self, ea, CPU_Z80_EA_E);
4822     break;
4823   case 0x1c:
4824     cpu_z80_rr(self, ea, CPU_Z80_EA_H);
4825     break;
4826   case 0x1d:
4827     cpu_z80_rr(self, ea, CPU_Z80_EA_L);
4828     break;
4829   case 0x1e:
4830     cpu_z80_rr(self, ea, CPU_Z80_EA_SINK);
4831     break;
4832   case 0x1f:
4833     cpu_z80_rr(self, ea, CPU_Z80_EA_A);
4834     break;
4835   case 0x20:
4836     cpu_z80_sla(self, ea, CPU_Z80_EA_B);
4837     break;
4838   case 0x21:
4839     cpu_z80_sla(self, ea, CPU_Z80_EA_C);
4840     break;
4841   case 0x22:
4842     cpu_z80_sla(self, ea, CPU_Z80_EA_D);
4843     break;
4844   case 0x23:
4845     cpu_z80_sla(self, ea, CPU_Z80_EA_E);
4846     break;
4847   case 0x24:
4848     cpu_z80_sla(self, ea, CPU_Z80_EA_H);
4849     break;
4850   case 0x25:
4851     cpu_z80_sla(self, ea, CPU_Z80_EA_L);
4852     break;
4853   case 0x26:
4854     cpu_z80_sla(self, ea, CPU_Z80_EA_SINK);
4855     break;
4856   case 0x27:
4857     cpu_z80_sla(self, ea, CPU_Z80_EA_A);
4858     break;
4859   case 0x28:
4860     cpu_z80_sra(self, ea, CPU_Z80_EA_B);
4861     break;
4862   case 0x29:
4863     cpu_z80_sra(self, ea, CPU_Z80_EA_C);
4864     break;
4865   case 0x2a:
4866     cpu_z80_sra(self, ea, CPU_Z80_EA_D);
4867     break;
4868   case 0x2b:
4869     cpu_z80_sra(self, ea, CPU_Z80_EA_E);
4870     break;
4871   case 0x2c:
4872     cpu_z80_sra(self, ea, CPU_Z80_EA_H);
4873     break;
4874   case 0x2d:
4875     cpu_z80_sra(self, ea, CPU_Z80_EA_L);
4876     break;
4877   case 0x2e:
4878     cpu_z80_sra(self, ea, CPU_Z80_EA_SINK);
4879     break;
4880   case 0x2f:
4881     cpu_z80_sra(self, ea, CPU_Z80_EA_A);
4882     break;
4883   case 0x30:
4884     cpu_z80_sll(self, ea, CPU_Z80_EA_B);
4885     break;
4886   case 0x31:
4887     cpu_z80_sll(self, ea, CPU_Z80_EA_C);
4888     break;
4889   case 0x32:
4890     cpu_z80_sll(self, ea, CPU_Z80_EA_D);
4891     break;
4892   case 0x33:
4893     cpu_z80_sll(self, ea, CPU_Z80_EA_E);
4894     break;
4895   case 0x34:
4896     cpu_z80_sll(self, ea, CPU_Z80_EA_H);
4897     break;
4898   case 0x35:
4899     cpu_z80_sll(self, ea, CPU_Z80_EA_L);
4900     break;
4901   case 0x36:
4902     cpu_z80_sll(self, ea, CPU_Z80_EA_SINK);
4903     break;
4904   case 0x37:
4905     cpu_z80_sll(self, ea, CPU_Z80_EA_A);
4906     break;
4907   case 0x38:
4908     cpu_z80_srl(self, ea, CPU_Z80_EA_B);
4909     break;
4910   case 0x39:
4911     cpu_z80_srl(self, ea, CPU_Z80_EA_C);
4912     break;
4913   case 0x3a:
4914     cpu_z80_srl(self, ea, CPU_Z80_EA_D);
4915     break;
4916   case 0x3b:
4917     cpu_z80_srl(self, ea, CPU_Z80_EA_E);
4918     break;
4919   case 0x3c:
4920     cpu_z80_srl(self, ea, CPU_Z80_EA_H);
4921     break;
4922   case 0x3d:
4923     cpu_z80_srl(self, ea, CPU_Z80_EA_L);
4924     break;
4925   case 0x3e:
4926     cpu_z80_srl(self, ea, CPU_Z80_EA_SINK);
4927     break;
4928   case 0x3f:
4929     cpu_z80_srl(self, ea, CPU_Z80_EA_A);
4930     break;
4931   case 0x40:
4932     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4933     break;
4934   case 0x41:
4935     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4936     break;
4937   case 0x42:
4938     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4939     break;
4940   case 0x43:
4941     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4942     break;
4943   case 0x44:
4944     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4945     break;
4946   case 0x45:
4947     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4948     break;
4949   case 0x46:
4950     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4951     break;
4952   case 0x47:
4953     cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4954     break;
4955   case 0x48:
4956     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4957     break;
4958   case 0x49:
4959     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4960     break;
4961   case 0x4a:
4962     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4963     break;
4964   case 0x4b:
4965     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4966     break;
4967   case 0x4c:
4968     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4969     break;
4970   case 0x4d:
4971     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4972     break;
4973   case 0x4e:
4974     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4975     break;
4976   case 0x4f:
4977     cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4978     break;
4979   case 0x50:
4980     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4981     break;
4982   case 0x51:
4983     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4984     break;
4985   case 0x52:
4986     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4987     break;
4988   case 0x53:
4989     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4990     break;
4991   case 0x54:
4992     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4993     break;
4994   case 0x55:
4995     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4996     break;
4997   case 0x56:
4998     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4999     break;
5000   case 0x57:
5001     cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
5002     break;
5003   case 0x58:
5004     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5005     break;
5006   case 0x59:
5007     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5008     break;
5009   case 0x5a:
5010     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5011     break;
5012   case 0x5b:
5013     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5014     break;
5015   case 0x5c:
5016     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5017     break;
5018   case 0x5d:
5019     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5020     break;
5021   case 0x5e:
5022     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5023     break;
5024   case 0x5f:
5025     cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5026     break;
5027   case 0x60:
5028     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5029     break;
5030   case 0x61:
5031     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5032     break;
5033   case 0x62:
5034     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5035     break;
5036   case 0x63:
5037     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5038     break;
5039   case 0x64:
5040     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5041     break;
5042   case 0x65:
5043     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5044     break;
5045   case 0x66:
5046     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5047     break;
5048   case 0x67:
5049     cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5050     break;
5051   case 0x68:
5052     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5053     break;
5054   case 0x69:
5055     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5056     break;
5057   case 0x6a:
5058     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5059     break;
5060   case 0x6b:
5061     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5062     break;
5063   case 0x6c:
5064     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5065     break;
5066   case 0x6d:
5067     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5068     break;
5069   case 0x6e:
5070     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5071     break;
5072   case 0x6f:
5073     cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5074     break;
5075   case 0x70:
5076     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5077     break;
5078   case 0x71:
5079     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5080     break;
5081   case 0x72:
5082     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5083     break;
5084   case 0x73:
5085     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5086     break;
5087   case 0x74:
5088     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5089     break;
5090   case 0x75:
5091     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5092     break;
5093   case 0x76:
5094     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5095     break;
5096   case 0x77:
5097     cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5098     break;
5099   case 0x78:
5100     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5101     break;
5102   case 0x79:
5103     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5104     break;
5105   case 0x7a:
5106     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5107     break;
5108   case 0x7b:
5109     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5110     break;
5111   case 0x7c:
5112     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5113     break;
5114   case 0x7d:
5115     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5116     break;
5117   case 0x7e:
5118     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5119     break;
5120   case 0x7f:
5121     cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5122     break;
5123   case 0x80:
5124     cpu_z80_res(self, 0, ea, CPU_Z80_EA_B);
5125     break;
5126   case 0x81:
5127     cpu_z80_res(self, 0, ea, CPU_Z80_EA_C);
5128     break;
5129   case 0x82:
5130     cpu_z80_res(self, 0, ea, CPU_Z80_EA_D);
5131     break;
5132   case 0x83:
5133     cpu_z80_res(self, 0, ea, CPU_Z80_EA_E);
5134     break;
5135   case 0x84:
5136     cpu_z80_res(self, 0, ea, CPU_Z80_EA_H);
5137     break;
5138   case 0x85:
5139     cpu_z80_res(self, 0, ea, CPU_Z80_EA_L);
5140     break;
5141   case 0x86:
5142     cpu_z80_res(self, 0, ea, CPU_Z80_EA_SINK);
5143     break;
5144   case 0x87:
5145     cpu_z80_res(self, 0, ea, CPU_Z80_EA_A);
5146     break;
5147   case 0x88:
5148     cpu_z80_res(self, 1, ea, CPU_Z80_EA_B);
5149     break;
5150   case 0x89:
5151     cpu_z80_res(self, 1, ea, CPU_Z80_EA_C);
5152     break;
5153   case 0x8a:
5154     cpu_z80_res(self, 1, ea, CPU_Z80_EA_D);
5155     break;
5156   case 0x8b:
5157     cpu_z80_res(self, 1, ea, CPU_Z80_EA_E);
5158     break;
5159   case 0x8c:
5160     cpu_z80_res(self, 1, ea, CPU_Z80_EA_H);
5161     break;
5162   case 0x8d:
5163     cpu_z80_res(self, 1, ea, CPU_Z80_EA_L);
5164     break;
5165   case 0x8e:
5166     cpu_z80_res(self, 1, ea, CPU_Z80_EA_SINK);
5167     break;
5168   case 0x8f:
5169     cpu_z80_res(self, 1, ea, CPU_Z80_EA_A);
5170     break;
5171   case 0x90:
5172     cpu_z80_res(self, 2, ea, CPU_Z80_EA_B);
5173     break;
5174   case 0x91:
5175     cpu_z80_res(self, 2, ea, CPU_Z80_EA_C);
5176     break;
5177   case 0x92:
5178     cpu_z80_res(self, 2, ea, CPU_Z80_EA_D);
5179     break;
5180   case 0x93:
5181     cpu_z80_res(self, 2, ea, CPU_Z80_EA_E);
5182     break;
5183   case 0x94:
5184     cpu_z80_res(self, 2, ea, CPU_Z80_EA_H);
5185     break;
5186   case 0x95:
5187     cpu_z80_res(self, 2, ea, CPU_Z80_EA_L);
5188     break;
5189   case 0x96:
5190     cpu_z80_res(self, 2, ea, CPU_Z80_EA_SINK);
5191     break;
5192   case 0x97:
5193     cpu_z80_res(self, 2, ea, CPU_Z80_EA_A);
5194     break;
5195   case 0x98:
5196     cpu_z80_res(self, 3, ea, CPU_Z80_EA_B);
5197     break;
5198   case 0x99:
5199     cpu_z80_res(self, 3, ea, CPU_Z80_EA_C);
5200     break;
5201   case 0x9a:
5202     cpu_z80_res(self, 3, ea, CPU_Z80_EA_D);
5203     break;
5204   case 0x9b:
5205     cpu_z80_res(self, 3, ea, CPU_Z80_EA_E);
5206     break;
5207   case 0x9c:
5208     cpu_z80_res(self, 3, ea, CPU_Z80_EA_H);
5209     break;
5210   case 0x9d:
5211     cpu_z80_res(self, 3, ea, CPU_Z80_EA_L);
5212     break;
5213   case 0x9e:
5214     cpu_z80_res(self, 3, ea, CPU_Z80_EA_SINK);
5215     break;
5216   case 0x9f:
5217     cpu_z80_res(self, 3, ea, CPU_Z80_EA_A);
5218     break;
5219   case 0xa0:
5220     cpu_z80_res(self, 4, ea, CPU_Z80_EA_B);
5221     break;
5222   case 0xa1:
5223     cpu_z80_res(self, 4, ea, CPU_Z80_EA_C);
5224     break;
5225   case 0xa2:
5226     cpu_z80_res(self, 4, ea, CPU_Z80_EA_D);
5227     break;
5228   case 0xa3:
5229     cpu_z80_res(self, 4, ea, CPU_Z80_EA_E);
5230     break;
5231   case 0xa4:
5232     cpu_z80_res(self, 4, ea, CPU_Z80_EA_H);
5233     break;
5234   case 0xa5:
5235     cpu_z80_res(self, 4, ea, CPU_Z80_EA_L);
5236     break;
5237   case 0xa6:
5238     cpu_z80_res(self, 4, ea, CPU_Z80_EA_SINK);
5239     break;
5240   case 0xa7:
5241     cpu_z80_res(self, 4, ea, CPU_Z80_EA_A);
5242     break;
5243   case 0xa8:
5244     cpu_z80_res(self, 5, ea, CPU_Z80_EA_B);
5245     break;
5246   case 0xa9:
5247     cpu_z80_res(self, 5, ea, CPU_Z80_EA_C);
5248     break;
5249   case 0xaa:
5250     cpu_z80_res(self, 5, ea, CPU_Z80_EA_D);
5251     break;
5252   case 0xab:
5253     cpu_z80_res(self, 5, ea, CPU_Z80_EA_E);
5254     break;
5255   case 0xac:
5256     cpu_z80_res(self, 5, ea, CPU_Z80_EA_H);
5257     break;
5258   case 0xad:
5259     cpu_z80_res(self, 5, ea, CPU_Z80_EA_L);
5260     break;
5261   case 0xae:
5262     cpu_z80_res(self, 5, ea, CPU_Z80_EA_SINK);
5263     break;
5264   case 0xaf:
5265     cpu_z80_res(self, 5, ea, CPU_Z80_EA_A);
5266     break;
5267   case 0xb0:
5268     cpu_z80_res(self, 6, ea, CPU_Z80_EA_B);
5269     break;
5270   case 0xb1:
5271     cpu_z80_res(self, 6, ea, CPU_Z80_EA_C);
5272     break;
5273   case 0xb2:
5274     cpu_z80_res(self, 6, ea, CPU_Z80_EA_D);
5275     break;
5276   case 0xb3:
5277     cpu_z80_res(self, 6, ea, CPU_Z80_EA_E);
5278     break;
5279   case 0xb4:
5280     cpu_z80_res(self, 6, ea, CPU_Z80_EA_H);
5281     break;
5282   case 0xb5:
5283     cpu_z80_res(self, 6, ea, CPU_Z80_EA_L);
5284     break;
5285   case 0xb6:
5286     cpu_z80_res(self, 6, ea, CPU_Z80_EA_SINK);
5287     break;
5288   case 0xb7:
5289     cpu_z80_res(self, 6, ea, CPU_Z80_EA_A);
5290     break;
5291   case 0xb8:
5292     cpu_z80_res(self, 7, ea, CPU_Z80_EA_B);
5293     break;
5294   case 0xb9:
5295     cpu_z80_res(self, 7, ea, CPU_Z80_EA_C);
5296     break;
5297   case 0xba:
5298     cpu_z80_res(self, 7, ea, CPU_Z80_EA_D);
5299     break;
5300   case 0xbb:
5301     cpu_z80_res(self, 7, ea, CPU_Z80_EA_E);
5302     break;
5303   case 0xbc:
5304     cpu_z80_res(self, 7, ea, CPU_Z80_EA_H);
5305     break;
5306   case 0xbd:
5307     cpu_z80_res(self, 7, ea, CPU_Z80_EA_L);
5308     break;
5309   case 0xbe:
5310     cpu_z80_res(self, 7, ea, CPU_Z80_EA_SINK);
5311     break;
5312   case 0xbf:
5313     cpu_z80_res(self, 7, ea, CPU_Z80_EA_A);
5314     break;
5315   case 0xc0:
5316     cpu_z80_set(self, 0, ea, CPU_Z80_EA_B);
5317     break;
5318   case 0xc1:
5319     cpu_z80_set(self, 0, ea, CPU_Z80_EA_C);
5320     break;
5321   case 0xc2:
5322     cpu_z80_set(self, 0, ea, CPU_Z80_EA_D);
5323     break;
5324   case 0xc3:
5325     cpu_z80_set(self, 0, ea, CPU_Z80_EA_E);
5326     break;
5327   case 0xc4:
5328     cpu_z80_set(self, 0, ea, CPU_Z80_EA_H);
5329     break;
5330   case 0xc5:
5331     cpu_z80_set(self, 0, ea, CPU_Z80_EA_L);
5332     break;
5333   case 0xc6:
5334     cpu_z80_set(self, 0, ea, CPU_Z80_EA_SINK);
5335     break;
5336   case 0xc7:
5337     cpu_z80_set(self, 0, ea, CPU_Z80_EA_A);
5338     break;
5339   case 0xc8:
5340     cpu_z80_set(self, 1, ea, CPU_Z80_EA_B);
5341     break;
5342   case 0xc9:
5343     cpu_z80_set(self, 1, ea, CPU_Z80_EA_C);
5344     break;
5345   case 0xca:
5346     cpu_z80_set(self, 1, ea, CPU_Z80_EA_D);
5347     break;
5348   case 0xcb:
5349     cpu_z80_set(self, 1, ea, CPU_Z80_EA_E);
5350     break;
5351   case 0xcc:
5352     cpu_z80_set(self, 1, ea, CPU_Z80_EA_H);
5353     break;
5354   case 0xcd:
5355     cpu_z80_set(self, 1, ea, CPU_Z80_EA_L);
5356     break;
5357   case 0xce:
5358     cpu_z80_set(self, 1, ea, CPU_Z80_EA_SINK);
5359     break;
5360   case 0xcf:
5361     cpu_z80_set(self, 1, ea, CPU_Z80_EA_A);
5362     break;
5363   case 0xd0:
5364     cpu_z80_set(self, 2, ea, CPU_Z80_EA_B);
5365     break;
5366   case 0xd1:
5367     cpu_z80_set(self, 2, ea, CPU_Z80_EA_C);
5368     break;
5369   case 0xd2:
5370     cpu_z80_set(self, 2, ea, CPU_Z80_EA_D);
5371     break;
5372   case 0xd3:
5373     cpu_z80_set(self, 2, ea, CPU_Z80_EA_E);
5374     break;
5375   case 0xd4:
5376     cpu_z80_set(self, 2, ea, CPU_Z80_EA_H);
5377     break;
5378   case 0xd5:
5379     cpu_z80_set(self, 2, ea, CPU_Z80_EA_L);
5380     break;
5381   case 0xd6:
5382     cpu_z80_set(self, 2, ea, CPU_Z80_EA_SINK);
5383     break;
5384   case 0xd7:
5385     cpu_z80_set(self, 2, ea, CPU_Z80_EA_A);
5386     break;
5387   case 0xd8:
5388     cpu_z80_set(self, 3, ea, CPU_Z80_EA_B);
5389     break;
5390   case 0xd9:
5391     cpu_z80_set(self, 3, ea, CPU_Z80_EA_C);
5392     break;
5393   case 0xda:
5394     cpu_z80_set(self, 3, ea, CPU_Z80_EA_D);
5395     break;
5396   case 0xdb:
5397     cpu_z80_set(self, 3, ea, CPU_Z80_EA_E);
5398     break;
5399   case 0xdc:
5400     cpu_z80_set(self, 3, ea, CPU_Z80_EA_H);
5401     break;
5402   case 0xdd:
5403     cpu_z80_set(self, 3, ea, CPU_Z80_EA_L);
5404     break;
5405   case 0xde:
5406     cpu_z80_set(self, 3, ea, CPU_Z80_EA_SINK);
5407     break;
5408   case 0xdf:
5409     cpu_z80_set(self, 3, ea, CPU_Z80_EA_A);
5410     break;
5411   case 0xe0:
5412     cpu_z80_set(self, 4, ea, CPU_Z80_EA_B);
5413     break;
5414   case 0xe1:
5415     cpu_z80_set(self, 4, ea, CPU_Z80_EA_C);
5416     break;
5417   case 0xe2:
5418     cpu_z80_set(self, 4, ea, CPU_Z80_EA_D);
5419     break;
5420   case 0xe3:
5421     cpu_z80_set(self, 4, ea, CPU_Z80_EA_E);
5422     break;
5423   case 0xe4:
5424     cpu_z80_set(self, 4, ea, CPU_Z80_EA_H);
5425     break;
5426   case 0xe5:
5427     cpu_z80_set(self, 4, ea, CPU_Z80_EA_L);
5428     break;
5429   case 0xe6:
5430     cpu_z80_set(self, 4, ea, CPU_Z80_EA_SINK);
5431     break;
5432   case 0xe7:
5433     cpu_z80_set(self, 4, ea, CPU_Z80_EA_A);
5434     break;
5435   case 0xe8:
5436     cpu_z80_set(self, 5, ea, CPU_Z80_EA_B);
5437     break;
5438   case 0xe9:
5439     cpu_z80_set(self, 5, ea, CPU_Z80_EA_C);
5440     break;
5441   case 0xea:
5442     cpu_z80_set(self, 5, ea, CPU_Z80_EA_D);
5443     break;
5444   case 0xeb:
5445     cpu_z80_set(self, 5, ea, CPU_Z80_EA_E);
5446     break;
5447   case 0xec:
5448     cpu_z80_set(self, 5, ea, CPU_Z80_EA_H);
5449     break;
5450   case 0xed:
5451     cpu_z80_set(self, 5, ea, CPU_Z80_EA_L);
5452     break;
5453   case 0xee:
5454     cpu_z80_set(self, 5, ea, CPU_Z80_EA_SINK);
5455     break;
5456   case 0xef:
5457     cpu_z80_set(self, 5, ea, CPU_Z80_EA_A);
5458     break;
5459   case 0xf0:
5460     cpu_z80_set(self, 6, ea, CPU_Z80_EA_B);
5461     break;
5462   case 0xf1:
5463     cpu_z80_set(self, 6, ea, CPU_Z80_EA_C);
5464     break;
5465   case 0xf2:
5466     cpu_z80_set(self, 6, ea, CPU_Z80_EA_D);
5467     break;
5468   case 0xf3:
5469     cpu_z80_set(self, 6, ea, CPU_Z80_EA_E);
5470     break;
5471   case 0xf4:
5472     cpu_z80_set(self, 6, ea, CPU_Z80_EA_H);
5473     break;
5474   case 0xf5:
5475     cpu_z80_set(self, 6, ea, CPU_Z80_EA_L);
5476     break;
5477   case 0xf6:
5478     cpu_z80_set(self, 6, ea, CPU_Z80_EA_SINK);
5479     break;
5480   case 0xf7:
5481     cpu_z80_set(self, 6, ea, CPU_Z80_EA_A);
5482     break;
5483   case 0xf8:
5484     cpu_z80_set(self, 7, ea, CPU_Z80_EA_B);
5485     break;
5486   case 0xf9:
5487     cpu_z80_set(self, 7, ea, CPU_Z80_EA_C);
5488     break;
5489   case 0xfa:
5490     cpu_z80_set(self, 7, ea, CPU_Z80_EA_D);
5491     break;
5492   case 0xfb:
5493     cpu_z80_set(self, 7, ea, CPU_Z80_EA_E);
5494     break;
5495   case 0xfc:
5496     cpu_z80_set(self, 7, ea, CPU_Z80_EA_H);
5497     break;
5498   case 0xfd:
5499     cpu_z80_set(self, 7, ea, CPU_Z80_EA_L);
5500     break;
5501   case 0xfe:
5502     cpu_z80_set(self, 7, ea, CPU_Z80_EA_SINK);
5503     break;
5504   case 0xff:
5505     cpu_z80_set(self, 7, ea, CPU_Z80_EA_A);
5506     break;
5507   }
5508 }
5509