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
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;
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;
38 void cpu_z80_execute(struct cpu_z80 *self) {
39 if (self->regs.bit.nmi_pending) {
40 self->regs.bit.nmi_pending = false;
42 self->regs.word.pc += self->regs.bit.halt_flag;
43 self->regs.bit.halt_flag = false;
45 self->regs.bit.iff1 = false;
46 cpu_z80_call(self, true, CPU_Z80_NMI_ADDR);
51 self->regs.bit.irq_pending &&
52 self->regs.bit.iff1 &&
53 !self->regs.bit.ei_flag
55 self->regs.bit.irq_pending = false;
57 self->regs.word.pc += self->regs.bit.halt_flag;
58 self->regs.bit.halt_flag = false;
60 self->regs.bit.iff1 = false;
61 self->regs.bit.iff2 = false;
62 switch (self->regs.bit.im) {
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);
71 cpu_z80_call(self, true, CPU_Z80_IRQ_ADDR);
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));
84 self->regs.bit.halt_flag = false;
85 self->regs.bit.ei_flag = false;
86 switch (cpu_z80_fetch_byte(self)) {
91 cpu_z80_ld_word(self, CPU_Z80_EA_BC, cpu_z80_fetch_word(self));
94 cpu_z80_ld_byte(self, self->regs.word.bc, self->regs.byte.a);
97 cpu_z80_inc_word(self, CPU_Z80_EA_BC);
100 cpu_z80_inc_byte(self, CPU_Z80_EA_B);
103 cpu_z80_dec_byte(self, CPU_Z80_EA_B);
106 cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_fetch_byte(self));
112 cpu_z80_ex(self, CPU_Z80_EA_AF, CPU_Z80_EA_AF_PRIME);
115 cpu_z80_add_word(self, CPU_Z80_EA_HL, self->regs.word.bc);
118 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.bc));
121 cpu_z80_dec_word(self, CPU_Z80_EA_BC);
124 cpu_z80_inc_byte(self, CPU_Z80_EA_C);
127 cpu_z80_dec_byte(self, CPU_Z80_EA_C);
130 cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_fetch_byte(self));
136 cpu_z80_djnz(self, cpu_z80_relative(self));
139 cpu_z80_ld_word(self, CPU_Z80_EA_DE, cpu_z80_fetch_word(self));
142 cpu_z80_ld_byte(self, self->regs.word.de, self->regs.byte.a);
145 cpu_z80_inc_word(self, CPU_Z80_EA_DE);
148 cpu_z80_inc_byte(self, CPU_Z80_EA_D);
151 cpu_z80_dec_byte(self, CPU_Z80_EA_D);
154 cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_fetch_byte(self));
160 cpu_z80_jr(self, true, cpu_z80_relative(self));
163 cpu_z80_add_word(self, CPU_Z80_EA_HL, self->regs.word.de);
166 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.de));
169 cpu_z80_dec_word(self, CPU_Z80_EA_DE);
172 cpu_z80_inc_byte(self, CPU_Z80_EA_E);
175 cpu_z80_dec_byte(self, CPU_Z80_EA_E);
178 cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_fetch_byte(self));
184 cpu_z80_jr(self, !self->regs.bit.zf, cpu_z80_relative(self));
187 cpu_z80_ld_word(self, CPU_Z80_EA_HL, cpu_z80_fetch_word(self));
190 cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.hl);
193 cpu_z80_inc_word(self, CPU_Z80_EA_HL);
196 cpu_z80_inc_byte(self, CPU_Z80_EA_H);
199 cpu_z80_dec_byte(self, CPU_Z80_EA_H);
202 cpu_z80_ld_byte(self, CPU_Z80_EA_H, cpu_z80_fetch_byte(self));
208 cpu_z80_jr(self, self->regs.bit.zf, cpu_z80_relative(self));
211 cpu_z80_add_word(self, CPU_Z80_EA_HL, self->regs.word.hl);
214 cpu_z80_ld_word(self, CPU_Z80_EA_HL, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
217 cpu_z80_dec_word(self, CPU_Z80_EA_HL);
220 cpu_z80_inc_byte(self, CPU_Z80_EA_L);
223 cpu_z80_dec_byte(self, CPU_Z80_EA_L);
226 cpu_z80_ld_byte(self, CPU_Z80_EA_L, cpu_z80_fetch_byte(self));
232 cpu_z80_jr(self, !self->regs.bit.cf, cpu_z80_relative(self));
235 cpu_z80_ld_word(self, CPU_Z80_EA_SP, cpu_z80_fetch_word(self));
238 cpu_z80_ld_byte(self, cpu_z80_fetch_word(self), self->regs.byte.a);
241 cpu_z80_inc_word(self, CPU_Z80_EA_SP);
244 cpu_z80_inc_byte(self, self->regs.word.hl);
247 cpu_z80_dec_byte(self, self->regs.word.hl);
250 cpu_z80_ld_byte(self, self->regs.word.hl, cpu_z80_fetch_byte(self));
256 cpu_z80_jr(self, self->regs.bit.cf, cpu_z80_relative(self));
259 cpu_z80_add_word(self, CPU_Z80_EA_HL, self->regs.word.sp);
262 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_fetch_word(self)));
265 cpu_z80_dec_word(self, CPU_Z80_EA_SP);
268 cpu_z80_inc_byte(self, CPU_Z80_EA_A);
271 cpu_z80_dec_byte(self, CPU_Z80_EA_A);
274 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
280 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.b);
283 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.c);
286 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.d);
289 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.e);
292 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.h);
295 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.l);
298 cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_read_byte(self, self->regs.word.hl));
301 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.a);
304 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.b);
307 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.c);
310 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.d);
313 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.e);
316 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.h);
319 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.l);
322 cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_read_byte(self, self->regs.word.hl));
325 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.a);
328 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.b);
331 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.c);
334 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.d);
337 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.e);
340 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.h);
343 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.l);
346 cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_read_byte(self, self->regs.word.hl));
349 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.a);
352 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.b);
355 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.c);
358 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.d);
361 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.e);
364 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.h);
367 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.l);
370 cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_read_byte(self, self->regs.word.hl));
373 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.a);
376 cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.b);
379 cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.c);
382 cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.d);
385 cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.e);
388 cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.h);
391 cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.l);
394 cpu_z80_ld_byte(self, CPU_Z80_EA_H, cpu_z80_read_byte(self, self->regs.word.hl));
397 cpu_z80_ld_byte(self, CPU_Z80_EA_H, self->regs.byte.a);
400 cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.b);
403 cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.c);
406 cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.d);
409 cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.e);
412 cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.h);
415 cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.l);
418 cpu_z80_ld_byte(self, CPU_Z80_EA_L, cpu_z80_read_byte(self, self->regs.word.hl));
421 cpu_z80_ld_byte(self, CPU_Z80_EA_L, self->regs.byte.a);
424 cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.b);
427 cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.c);
430 cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.d);
433 cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.e);
436 cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.h);
439 cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.l);
445 cpu_z80_ld_byte(self, self->regs.word.hl, self->regs.byte.a);
448 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
451 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
454 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
457 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
460 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.h);
463 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.l);
466 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.hl));
469 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
472 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
475 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
478 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
481 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
484 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.h);
487 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.l);
490 cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.hl));
493 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
496 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
499 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
502 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
505 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
508 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.h);
511 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.l);
514 cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.hl));
517 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
520 cpu_z80_sub(self, self->regs.byte.b);
523 cpu_z80_sub(self, self->regs.byte.c);
526 cpu_z80_sub(self, self->regs.byte.d);
529 cpu_z80_sub(self, self->regs.byte.e);
532 cpu_z80_sub(self, self->regs.byte.h);
535 cpu_z80_sub(self, self->regs.byte.l);
538 cpu_z80_sub(self, cpu_z80_read_byte(self, self->regs.word.hl));
541 cpu_z80_sub(self, self->regs.byte.a);
544 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
547 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
550 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
553 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
556 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.h);
559 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.l);
562 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.hl));
565 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
568 cpu_z80_and(self, self->regs.byte.b);
571 cpu_z80_and(self, self->regs.byte.c);
574 cpu_z80_and(self, self->regs.byte.d);
577 cpu_z80_and(self, self->regs.byte.e);
580 cpu_z80_and(self, self->regs.byte.h);
583 cpu_z80_and(self, self->regs.byte.l);
586 cpu_z80_and(self, cpu_z80_read_byte(self, self->regs.word.hl));
589 cpu_z80_and(self, self->regs.byte.a);
592 cpu_z80_xor(self, self->regs.byte.b);
595 cpu_z80_xor(self, self->regs.byte.c);
598 cpu_z80_xor(self, self->regs.byte.d);
601 cpu_z80_xor(self, self->regs.byte.e);
604 cpu_z80_xor(self, self->regs.byte.h);
607 cpu_z80_xor(self, self->regs.byte.l);
610 cpu_z80_xor(self, cpu_z80_read_byte(self, self->regs.word.hl));
613 cpu_z80_xor(self, self->regs.byte.a);
616 cpu_z80_or(self, self->regs.byte.b);
619 cpu_z80_or(self, self->regs.byte.c);
622 cpu_z80_or(self, self->regs.byte.d);
625 cpu_z80_or(self, self->regs.byte.e);
628 cpu_z80_or(self, self->regs.byte.h);
631 cpu_z80_or(self, self->regs.byte.l);
634 cpu_z80_or(self, cpu_z80_read_byte(self, self->regs.word.hl));
637 cpu_z80_or(self, self->regs.byte.a);
640 cpu_z80_cp(self, self->regs.byte.b);
643 cpu_z80_cp(self, self->regs.byte.c);
646 cpu_z80_cp(self, self->regs.byte.d);
649 cpu_z80_cp(self, self->regs.byte.e);
652 cpu_z80_cp(self, self->regs.byte.h);
655 cpu_z80_cp(self, self->regs.byte.l);
658 cpu_z80_cp(self, cpu_z80_read_byte(self, self->regs.word.hl));
661 cpu_z80_cp(self, self->regs.byte.a);
664 cpu_z80_ret(self, !self->regs.bit.zf);
667 cpu_z80_pop(self, CPU_Z80_EA_BC);
670 cpu_z80_jp(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
673 cpu_z80_jp(self, true, cpu_z80_fetch_word(self));
676 cpu_z80_call(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
679 cpu_z80_push(self, self->regs.word.bc);
682 cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
685 cpu_z80_call(self, true, 0);
688 cpu_z80_ret(self, self->regs.bit.zf);
691 cpu_z80_ret(self, true);
694 cpu_z80_jp(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
697 cpu_z80_execute_cb(self);
700 cpu_z80_call(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
703 cpu_z80_call(self, true, cpu_z80_fetch_word(self));
706 cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
709 cpu_z80_call(self, true, 8);
712 cpu_z80_ret(self, !self->regs.bit.cf);
715 cpu_z80_pop(self, CPU_Z80_EA_DE);
718 cpu_z80_jp(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
721 cpu_z80_out(self, cpu_z80_port_word(self), self->regs.byte.a);
724 cpu_z80_call(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
727 cpu_z80_push(self, self->regs.word.de);
730 cpu_z80_sub(self, cpu_z80_fetch_byte(self));
733 cpu_z80_call(self, true, 0x10);
736 cpu_z80_ret(self, self->regs.bit.cf);
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);
744 cpu_z80_jp(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
747 cpu_z80_in(self, CPU_Z80_EA_A, cpu_z80_in_byte(self, cpu_z80_port_word(self)));
750 cpu_z80_call(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
753 cpu_z80_execute_dd(self);
756 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
759 cpu_z80_call(self, true, 0x18);
762 cpu_z80_ret(self, !self->regs.bit.pvf);
765 cpu_z80_pop(self, CPU_Z80_EA_HL);
768 cpu_z80_jp(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
771 cpu_z80_ex(self, self->regs.word.sp, CPU_Z80_EA_HL);
774 cpu_z80_call(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
777 cpu_z80_push(self, self->regs.word.hl);
780 cpu_z80_and(self, cpu_z80_fetch_byte(self));
783 cpu_z80_call(self, true, 0x20);
786 cpu_z80_ret(self, self->regs.bit.pvf);
789 cpu_z80_jp(self, true, cpu_z80_read_word(self, self->regs.word.hl));
792 cpu_z80_jp(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
795 cpu_z80_ex(self, CPU_Z80_EA_DE, CPU_Z80_EA_HL);
798 cpu_z80_call(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
801 cpu_z80_execute_ed(self);
804 cpu_z80_xor(self, cpu_z80_fetch_byte(self));
807 cpu_z80_call(self, true, 0x28);
810 cpu_z80_ret(self, !self->regs.bit.sf);
813 cpu_z80_pop(self, CPU_Z80_EA_AF);
816 cpu_z80_jp(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
822 cpu_z80_call(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
825 cpu_z80_push(self, self->regs.word.af);
828 cpu_z80_or(self, cpu_z80_fetch_byte(self));
831 cpu_z80_call(self, true, 0x30);
834 cpu_z80_ret(self, self->regs.bit.sf);
837 cpu_z80_ld_word(self, CPU_Z80_EA_SP, self->regs.word.hl);
840 cpu_z80_jp(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
846 cpu_z80_call(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
849 cpu_z80_execute_fd(self);
852 cpu_z80_cp(self, cpu_z80_fetch_byte(self));
855 cpu_z80_call(self, true, 0x38);
860 void cpu_z80_execute_cb(struct cpu_z80 *self) {
861 switch (cpu_z80_fetch_byte(self)) {
863 cpu_z80_rlc(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
866 cpu_z80_rlc(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
869 cpu_z80_rlc(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
872 cpu_z80_rlc(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
875 cpu_z80_rlc(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
878 cpu_z80_rlc(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
881 cpu_z80_rlc(self, self->regs.word.hl, CPU_Z80_EA_SINK);
884 cpu_z80_rlc(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
887 cpu_z80_rrc(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
890 cpu_z80_rrc(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
893 cpu_z80_rrc(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
896 cpu_z80_rrc(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
899 cpu_z80_rrc(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
902 cpu_z80_rrc(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
905 cpu_z80_rrc(self, self->regs.word.hl, CPU_Z80_EA_SINK);
908 cpu_z80_rrc(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
911 cpu_z80_rl(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
914 cpu_z80_rl(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
917 cpu_z80_rl(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
920 cpu_z80_rl(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
923 cpu_z80_rl(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
926 cpu_z80_rl(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
929 cpu_z80_rl(self, self->regs.word.hl, CPU_Z80_EA_SINK);
932 cpu_z80_rl(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
935 cpu_z80_rr(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
938 cpu_z80_rr(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
941 cpu_z80_rr(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
944 cpu_z80_rr(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
947 cpu_z80_rr(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
950 cpu_z80_rr(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
953 cpu_z80_rr(self, self->regs.word.hl, CPU_Z80_EA_SINK);
956 cpu_z80_rr(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
959 cpu_z80_sla(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
962 cpu_z80_sla(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
965 cpu_z80_sla(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
968 cpu_z80_sla(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
971 cpu_z80_sla(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
974 cpu_z80_sla(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
977 cpu_z80_sla(self, self->regs.word.hl, CPU_Z80_EA_SINK);
980 cpu_z80_sla(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
983 cpu_z80_sra(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
986 cpu_z80_sra(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
989 cpu_z80_sra(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
992 cpu_z80_sra(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
995 cpu_z80_sra(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
998 cpu_z80_sra(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1001 cpu_z80_sra(self, self->regs.word.hl, CPU_Z80_EA_SINK);
1004 cpu_z80_sra(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1007 cpu_z80_sll(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1010 cpu_z80_sll(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1013 cpu_z80_sll(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1016 cpu_z80_sll(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1019 cpu_z80_sll(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1022 cpu_z80_sll(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1025 cpu_z80_sll(self, self->regs.word.hl, CPU_Z80_EA_SINK);
1028 cpu_z80_sll(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1031 cpu_z80_srl(self, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1034 cpu_z80_srl(self, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1037 cpu_z80_srl(self, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1040 cpu_z80_srl(self, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1043 cpu_z80_srl(self, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1046 cpu_z80_srl(self, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1049 cpu_z80_srl(self, self->regs.word.hl, CPU_Z80_EA_SINK);
1052 cpu_z80_srl(self, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1055 cpu_z80_bit(self, 0, self->regs.byte.b);
1058 cpu_z80_bit(self, 0, self->regs.byte.c);
1061 cpu_z80_bit(self, 0, self->regs.byte.d);
1064 cpu_z80_bit(self, 0, self->regs.byte.e);
1067 cpu_z80_bit(self, 0, self->regs.byte.h);
1070 cpu_z80_bit(self, 0, self->regs.byte.l);
1073 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, self->regs.word.hl));
1076 cpu_z80_bit(self, 0, self->regs.byte.a);
1079 cpu_z80_bit(self, 1, self->regs.byte.b);
1082 cpu_z80_bit(self, 1, self->regs.byte.c);
1085 cpu_z80_bit(self, 1, self->regs.byte.d);
1088 cpu_z80_bit(self, 1, self->regs.byte.e);
1091 cpu_z80_bit(self, 1, self->regs.byte.h);
1094 cpu_z80_bit(self, 1, self->regs.byte.l);
1097 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, self->regs.word.hl));
1100 cpu_z80_bit(self, 1, self->regs.byte.a);
1103 cpu_z80_bit(self, 2, self->regs.byte.b);
1106 cpu_z80_bit(self, 2, self->regs.byte.c);
1109 cpu_z80_bit(self, 2, self->regs.byte.d);
1112 cpu_z80_bit(self, 2, self->regs.byte.e);
1115 cpu_z80_bit(self, 2, self->regs.byte.h);
1118 cpu_z80_bit(self, 2, self->regs.byte.l);
1121 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, self->regs.word.hl));
1124 cpu_z80_bit(self, 2, self->regs.byte.a);
1127 cpu_z80_bit(self, 3, self->regs.byte.b);
1130 cpu_z80_bit(self, 3, self->regs.byte.c);
1133 cpu_z80_bit(self, 3, self->regs.byte.d);
1136 cpu_z80_bit(self, 3, self->regs.byte.e);
1139 cpu_z80_bit(self, 3, self->regs.byte.h);
1142 cpu_z80_bit(self, 3, self->regs.byte.l);
1145 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, self->regs.word.hl));
1148 cpu_z80_bit(self, 3, self->regs.byte.a);
1151 cpu_z80_bit(self, 4, self->regs.byte.b);
1154 cpu_z80_bit(self, 4, self->regs.byte.c);
1157 cpu_z80_bit(self, 4, self->regs.byte.d);
1160 cpu_z80_bit(self, 4, self->regs.byte.e);
1163 cpu_z80_bit(self, 4, self->regs.byte.h);
1166 cpu_z80_bit(self, 4, self->regs.byte.l);
1169 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, self->regs.word.hl));
1172 cpu_z80_bit(self, 4, self->regs.byte.a);
1175 cpu_z80_bit(self, 5, self->regs.byte.b);
1178 cpu_z80_bit(self, 5, self->regs.byte.c);
1181 cpu_z80_bit(self, 5, self->regs.byte.d);
1184 cpu_z80_bit(self, 5, self->regs.byte.e);
1187 cpu_z80_bit(self, 5, self->regs.byte.h);
1190 cpu_z80_bit(self, 5, self->regs.byte.l);
1193 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, self->regs.word.hl));
1196 cpu_z80_bit(self, 5, self->regs.byte.a);
1199 cpu_z80_bit(self, 6, self->regs.byte.b);
1202 cpu_z80_bit(self, 6, self->regs.byte.c);
1205 cpu_z80_bit(self, 6, self->regs.byte.d);
1208 cpu_z80_bit(self, 6, self->regs.byte.e);
1211 cpu_z80_bit(self, 6, self->regs.byte.h);
1214 cpu_z80_bit(self, 6, self->regs.byte.l);
1217 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, self->regs.word.hl));
1220 cpu_z80_bit(self, 6, self->regs.byte.a);
1223 cpu_z80_bit(self, 7, self->regs.byte.b);
1226 cpu_z80_bit(self, 7, self->regs.byte.c);
1229 cpu_z80_bit(self, 7, self->regs.byte.d);
1232 cpu_z80_bit(self, 7, self->regs.byte.e);
1235 cpu_z80_bit(self, 7, self->regs.byte.h);
1238 cpu_z80_bit(self, 7, self->regs.byte.l);
1241 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, self->regs.word.hl));
1244 cpu_z80_bit(self, 7, self->regs.byte.a);
1247 cpu_z80_res(self, 0, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1250 cpu_z80_res(self, 0, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1253 cpu_z80_res(self, 0, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1256 cpu_z80_res(self, 0, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1259 cpu_z80_res(self, 0, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1262 cpu_z80_res(self, 0, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1265 cpu_z80_res(self, 0, self->regs.word.hl, CPU_Z80_EA_SINK);
1268 cpu_z80_res(self, 0, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1271 cpu_z80_res(self, 1, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1274 cpu_z80_res(self, 1, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1277 cpu_z80_res(self, 1, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1280 cpu_z80_res(self, 1, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1283 cpu_z80_res(self, 1, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1286 cpu_z80_res(self, 1, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1289 cpu_z80_res(self, 1, self->regs.word.hl, CPU_Z80_EA_SINK);
1292 cpu_z80_res(self, 1, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1295 cpu_z80_res(self, 2, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1298 cpu_z80_res(self, 2, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1301 cpu_z80_res(self, 2, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1304 cpu_z80_res(self, 2, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1307 cpu_z80_res(self, 2, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1310 cpu_z80_res(self, 2, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1313 cpu_z80_res(self, 2, self->regs.word.hl, CPU_Z80_EA_SINK);
1316 cpu_z80_res(self, 2, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1319 cpu_z80_res(self, 3, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1322 cpu_z80_res(self, 3, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1325 cpu_z80_res(self, 3, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1328 cpu_z80_res(self, 3, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1331 cpu_z80_res(self, 3, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1334 cpu_z80_res(self, 3, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1337 cpu_z80_res(self, 3, self->regs.word.hl, CPU_Z80_EA_SINK);
1340 cpu_z80_res(self, 3, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1343 cpu_z80_res(self, 4, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1346 cpu_z80_res(self, 4, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1349 cpu_z80_res(self, 4, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1352 cpu_z80_res(self, 4, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1355 cpu_z80_res(self, 4, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1358 cpu_z80_res(self, 4, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1361 cpu_z80_res(self, 4, self->regs.word.hl, CPU_Z80_EA_SINK);
1364 cpu_z80_res(self, 4, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1367 cpu_z80_res(self, 5, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1370 cpu_z80_res(self, 5, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1373 cpu_z80_res(self, 5, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1376 cpu_z80_res(self, 5, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1379 cpu_z80_res(self, 5, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1382 cpu_z80_res(self, 5, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1385 cpu_z80_res(self, 5, self->regs.word.hl, CPU_Z80_EA_SINK);
1388 cpu_z80_res(self, 5, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1391 cpu_z80_res(self, 6, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1394 cpu_z80_res(self, 6, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1397 cpu_z80_res(self, 6, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1400 cpu_z80_res(self, 6, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1403 cpu_z80_res(self, 6, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1406 cpu_z80_res(self, 6, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1409 cpu_z80_res(self, 6, self->regs.word.hl, CPU_Z80_EA_SINK);
1412 cpu_z80_res(self, 6, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1415 cpu_z80_res(self, 7, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1418 cpu_z80_res(self, 7, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1421 cpu_z80_res(self, 7, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1424 cpu_z80_res(self, 7, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1427 cpu_z80_res(self, 7, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1430 cpu_z80_res(self, 7, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1433 cpu_z80_res(self, 7, self->regs.word.hl, CPU_Z80_EA_SINK);
1436 cpu_z80_res(self, 7, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1439 cpu_z80_set(self, 0, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1442 cpu_z80_set(self, 0, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1445 cpu_z80_set(self, 0, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1448 cpu_z80_set(self, 0, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1451 cpu_z80_set(self, 0, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1454 cpu_z80_set(self, 0, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1457 cpu_z80_set(self, 0, self->regs.word.hl, CPU_Z80_EA_SINK);
1460 cpu_z80_set(self, 0, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1463 cpu_z80_set(self, 1, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1466 cpu_z80_set(self, 1, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1469 cpu_z80_set(self, 1, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1472 cpu_z80_set(self, 1, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1475 cpu_z80_set(self, 1, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1478 cpu_z80_set(self, 1, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1481 cpu_z80_set(self, 1, self->regs.word.hl, CPU_Z80_EA_SINK);
1484 cpu_z80_set(self, 1, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1487 cpu_z80_set(self, 2, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1490 cpu_z80_set(self, 2, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1493 cpu_z80_set(self, 2, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1496 cpu_z80_set(self, 2, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1499 cpu_z80_set(self, 2, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1502 cpu_z80_set(self, 2, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1505 cpu_z80_set(self, 2, self->regs.word.hl, CPU_Z80_EA_SINK);
1508 cpu_z80_set(self, 2, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1511 cpu_z80_set(self, 3, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1514 cpu_z80_set(self, 3, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1517 cpu_z80_set(self, 3, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1520 cpu_z80_set(self, 3, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1523 cpu_z80_set(self, 3, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1526 cpu_z80_set(self, 3, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1529 cpu_z80_set(self, 3, self->regs.word.hl, CPU_Z80_EA_SINK);
1532 cpu_z80_set(self, 3, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1535 cpu_z80_set(self, 4, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1538 cpu_z80_set(self, 4, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1541 cpu_z80_set(self, 4, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1544 cpu_z80_set(self, 4, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1547 cpu_z80_set(self, 4, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1550 cpu_z80_set(self, 4, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1553 cpu_z80_set(self, 4, self->regs.word.hl, CPU_Z80_EA_SINK);
1556 cpu_z80_set(self, 4, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1559 cpu_z80_set(self, 5, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1562 cpu_z80_set(self, 5, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1565 cpu_z80_set(self, 5, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1568 cpu_z80_set(self, 5, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1571 cpu_z80_set(self, 5, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1574 cpu_z80_set(self, 5, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1577 cpu_z80_set(self, 5, self->regs.word.hl, CPU_Z80_EA_SINK);
1580 cpu_z80_set(self, 5, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1583 cpu_z80_set(self, 6, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1586 cpu_z80_set(self, 6, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1589 cpu_z80_set(self, 6, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1592 cpu_z80_set(self, 6, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1595 cpu_z80_set(self, 6, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1598 cpu_z80_set(self, 6, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1601 cpu_z80_set(self, 6, self->regs.word.hl, CPU_Z80_EA_SINK);
1604 cpu_z80_set(self, 6, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1607 cpu_z80_set(self, 7, CPU_Z80_EA_B, CPU_Z80_EA_SINK);
1610 cpu_z80_set(self, 7, CPU_Z80_EA_C, CPU_Z80_EA_SINK);
1613 cpu_z80_set(self, 7, CPU_Z80_EA_D, CPU_Z80_EA_SINK);
1616 cpu_z80_set(self, 7, CPU_Z80_EA_E, CPU_Z80_EA_SINK);
1619 cpu_z80_set(self, 7, CPU_Z80_EA_H, CPU_Z80_EA_SINK);
1622 cpu_z80_set(self, 7, CPU_Z80_EA_L, CPU_Z80_EA_SINK);
1625 cpu_z80_set(self, 7, self->regs.word.hl, CPU_Z80_EA_SINK);
1628 cpu_z80_set(self, 7, CPU_Z80_EA_A, CPU_Z80_EA_SINK);
1633 void cpu_z80_execute_dd(struct cpu_z80 *self) {
1634 switch (cpu_z80_fetch_byte(self)) {
1639 cpu_z80_ld_word(self, CPU_Z80_EA_BC, cpu_z80_fetch_word(self));
1642 cpu_z80_ld_byte(self, self->regs.word.bc, self->regs.byte.a);
1645 cpu_z80_inc_word(self, CPU_Z80_EA_BC);
1648 cpu_z80_inc_byte(self, CPU_Z80_EA_B);
1651 cpu_z80_dec_byte(self, CPU_Z80_EA_B);
1654 cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_fetch_byte(self));
1660 cpu_z80_ex(self, CPU_Z80_EA_AF, CPU_Z80_EA_AF_PRIME);
1663 cpu_z80_add_word(self, CPU_Z80_EA_IX, self->regs.word.bc);
1666 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.bc));
1669 cpu_z80_dec_word(self, CPU_Z80_EA_BC);
1672 cpu_z80_inc_byte(self, CPU_Z80_EA_C);
1675 cpu_z80_dec_byte(self, CPU_Z80_EA_C);
1678 cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_fetch_byte(self));
1684 cpu_z80_djnz(self, cpu_z80_relative(self));
1687 cpu_z80_ld_word(self, CPU_Z80_EA_DE, cpu_z80_fetch_word(self));
1690 cpu_z80_ld_byte(self, self->regs.word.de, self->regs.byte.a);
1693 cpu_z80_inc_word(self, CPU_Z80_EA_DE);
1696 cpu_z80_inc_byte(self, CPU_Z80_EA_D);
1699 cpu_z80_dec_byte(self, CPU_Z80_EA_D);
1702 cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_fetch_byte(self));
1708 cpu_z80_jr(self, true, cpu_z80_relative(self));
1711 cpu_z80_add_word(self, CPU_Z80_EA_IX, self->regs.word.de);
1714 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.de));
1717 cpu_z80_dec_word(self, CPU_Z80_EA_DE);
1720 cpu_z80_inc_byte(self, CPU_Z80_EA_E);
1723 cpu_z80_dec_byte(self, CPU_Z80_EA_E);
1726 cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_fetch_byte(self));
1732 cpu_z80_jr(self, !self->regs.bit.zf, cpu_z80_relative(self));
1735 cpu_z80_ld_word(self, CPU_Z80_EA_IX, cpu_z80_fetch_word(self));
1738 cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.ix);
1741 cpu_z80_inc_word(self, CPU_Z80_EA_IX);
1744 cpu_z80_inc_byte(self, CPU_Z80_EA_IXH);
1747 cpu_z80_dec_byte(self, CPU_Z80_EA_IXH);
1750 cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, cpu_z80_fetch_byte(self));
1756 cpu_z80_jr(self, self->regs.bit.zf, cpu_z80_relative(self));
1759 cpu_z80_add_word(self, CPU_Z80_EA_IX, self->regs.word.ix);
1762 cpu_z80_ld_word(self, CPU_Z80_EA_IX, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
1765 cpu_z80_dec_word(self, CPU_Z80_EA_IX);
1768 cpu_z80_inc_byte(self, CPU_Z80_EA_IXL);
1771 cpu_z80_dec_byte(self, CPU_Z80_EA_IXL);
1774 cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, cpu_z80_fetch_byte(self));
1780 cpu_z80_jr(self, !self->regs.bit.cf, cpu_z80_relative(self));
1783 cpu_z80_ld_word(self, CPU_Z80_EA_SP, cpu_z80_fetch_word(self));
1786 cpu_z80_ld_byte(self, cpu_z80_fetch_word(self), self->regs.byte.a);
1789 cpu_z80_inc_word(self, CPU_Z80_EA_SP);
1792 cpu_z80_inc_byte(self, cpu_z80_displacement(self, self->regs.word.ix));
1795 cpu_z80_dec_byte(self, cpu_z80_displacement(self, self->regs.word.ix));
1799 int ea = cpu_z80_displacement(self, self->regs.word.ix);
1800 cpu_z80_ld_byte(self, ea, cpu_z80_fetch_byte(self));
1807 cpu_z80_jr(self, self->regs.bit.cf, cpu_z80_relative(self));
1810 cpu_z80_add_word(self, CPU_Z80_EA_IX, self->regs.word.sp);
1813 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_fetch_word(self)));
1816 cpu_z80_dec_word(self, CPU_Z80_EA_SP);
1819 cpu_z80_inc_byte(self, CPU_Z80_EA_A);
1822 cpu_z80_dec_byte(self, CPU_Z80_EA_A);
1825 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
1831 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.b);
1834 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.c);
1837 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.d);
1840 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.e);
1843 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.ixh);
1846 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.ixl);
1849 cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1852 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.a);
1855 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.b);
1858 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.c);
1861 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.d);
1864 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.e);
1867 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.ixh);
1870 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.ixl);
1873 cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1876 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.a);
1879 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.b);
1882 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.c);
1885 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.d);
1888 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.e);
1891 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.ixh);
1894 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.ixl);
1897 cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1900 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.a);
1903 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.b);
1906 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.c);
1909 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.d);
1912 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.e);
1915 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.ixh);
1918 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.ixl);
1921 cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1924 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.a);
1927 cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.b);
1930 cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.c);
1933 cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.d);
1936 cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.e);
1939 cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.ixh);
1942 cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.ixl);
1945 cpu_z80_ld_byte(self, CPU_Z80_EA_H, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1948 cpu_z80_ld_byte(self, CPU_Z80_EA_IXH, self->regs.byte.a);
1951 cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.b);
1954 cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.c);
1957 cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.d);
1960 cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.e);
1963 cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.ixh);
1966 cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.ixl);
1969 cpu_z80_ld_byte(self, CPU_Z80_EA_L, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
1972 cpu_z80_ld_byte(self, CPU_Z80_EA_IXL, self->regs.byte.a);
1975 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.b);
1978 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.c);
1981 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.d);
1984 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.e);
1987 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.h);
1990 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.l);
1996 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.ix), self->regs.byte.a);
1999 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
2002 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
2005 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
2008 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
2011 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.ixh);
2014 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.ixl);
2017 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2020 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
2023 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
2026 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
2029 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
2032 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
2035 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.ixh);
2038 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.ixl);
2041 cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2044 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
2047 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
2050 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
2053 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
2056 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
2059 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.ixh);
2062 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.ixl);
2065 cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2068 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
2071 cpu_z80_sub(self, self->regs.byte.b);
2074 cpu_z80_sub(self, self->regs.byte.c);
2077 cpu_z80_sub(self, self->regs.byte.d);
2080 cpu_z80_sub(self, self->regs.byte.e);
2083 cpu_z80_sub(self, self->regs.byte.ixh);
2086 cpu_z80_sub(self, self->regs.byte.ixl);
2089 cpu_z80_sub(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2092 cpu_z80_sub(self, self->regs.byte.a);
2095 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
2098 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
2101 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
2104 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
2107 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.ixh);
2110 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.ixl);
2113 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2116 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
2119 cpu_z80_and(self, self->regs.byte.b);
2122 cpu_z80_and(self, self->regs.byte.c);
2125 cpu_z80_and(self, self->regs.byte.d);
2128 cpu_z80_and(self, self->regs.byte.e);
2131 cpu_z80_and(self, self->regs.byte.ixh);
2134 cpu_z80_and(self, self->regs.byte.ixl);
2137 cpu_z80_and(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2140 cpu_z80_and(self, self->regs.byte.a);
2143 cpu_z80_xor(self, self->regs.byte.b);
2146 cpu_z80_xor(self, self->regs.byte.c);
2149 cpu_z80_xor(self, self->regs.byte.d);
2152 cpu_z80_xor(self, self->regs.byte.e);
2155 cpu_z80_xor(self, self->regs.byte.ixh);
2158 cpu_z80_xor(self, self->regs.byte.ixl);
2161 cpu_z80_xor(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2164 cpu_z80_xor(self, self->regs.byte.a);
2167 cpu_z80_or(self, self->regs.byte.b);
2170 cpu_z80_or(self, self->regs.byte.c);
2173 cpu_z80_or(self, self->regs.byte.d);
2176 cpu_z80_or(self, self->regs.byte.e);
2179 cpu_z80_or(self, self->regs.byte.ixh);
2182 cpu_z80_or(self, self->regs.byte.ixl);
2185 cpu_z80_or(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2188 cpu_z80_or(self, self->regs.byte.a);
2191 cpu_z80_cp(self, self->regs.byte.b);
2194 cpu_z80_cp(self, self->regs.byte.c);
2197 cpu_z80_cp(self, self->regs.byte.d);
2200 cpu_z80_cp(self, self->regs.byte.e);
2203 cpu_z80_cp(self, self->regs.byte.ixh);
2206 cpu_z80_cp(self, self->regs.byte.ixl);
2209 cpu_z80_cp(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.ix)));
2212 cpu_z80_cp(self, self->regs.byte.a);
2215 cpu_z80_ret(self, !self->regs.bit.zf);
2218 cpu_z80_pop(self, CPU_Z80_EA_BC);
2221 cpu_z80_jp(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
2224 cpu_z80_jp(self, true, cpu_z80_fetch_word(self));
2227 cpu_z80_call(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
2230 cpu_z80_push(self, self->regs.word.bc);
2233 cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
2236 cpu_z80_call(self, true, 0);
2239 cpu_z80_ret(self, self->regs.bit.zf);
2242 cpu_z80_ret(self, true);
2245 cpu_z80_jp(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
2248 cpu_z80_execute_dd_cb(self);
2251 cpu_z80_call(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
2254 cpu_z80_call(self, true, cpu_z80_fetch_word(self));
2257 cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
2260 cpu_z80_call(self, true, 8);
2263 cpu_z80_ret(self, !self->regs.bit.cf);
2266 cpu_z80_pop(self, CPU_Z80_EA_DE);
2269 cpu_z80_jp(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
2272 cpu_z80_out(self, cpu_z80_port_word(self), self->regs.byte.a);
2275 cpu_z80_call(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
2278 cpu_z80_push(self, self->regs.word.de);
2281 cpu_z80_sub(self, cpu_z80_fetch_byte(self));
2284 cpu_z80_call(self, true, 0x10);
2287 cpu_z80_ret(self, self->regs.bit.cf);
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);
2295 cpu_z80_jp(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
2298 cpu_z80_in(self, CPU_Z80_EA_A, cpu_z80_in_byte(self, cpu_z80_port_word(self)));
2301 cpu_z80_call(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
2307 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
2310 cpu_z80_call(self, true, 0x18);
2313 cpu_z80_ret(self, !self->regs.bit.pvf);
2316 cpu_z80_pop(self, CPU_Z80_EA_IX);
2319 cpu_z80_jp(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
2322 cpu_z80_ex(self, self->regs.word.sp, CPU_Z80_EA_IX);
2325 cpu_z80_call(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
2328 cpu_z80_push(self, self->regs.word.ix);
2331 cpu_z80_and(self, cpu_z80_fetch_byte(self));
2334 cpu_z80_call(self, true, 0x20);
2337 cpu_z80_ret(self, self->regs.bit.pvf);
2340 cpu_z80_jp(self, true, cpu_z80_read_word(self, self->regs.word.ix));
2343 cpu_z80_jp(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
2346 cpu_z80_ex(self, CPU_Z80_EA_DE, CPU_Z80_EA_HL);
2349 cpu_z80_call(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
2355 cpu_z80_xor(self, cpu_z80_fetch_byte(self));
2358 cpu_z80_call(self, true, 0x28);
2361 cpu_z80_ret(self, !self->regs.bit.sf);
2364 cpu_z80_pop(self, CPU_Z80_EA_AF);
2367 cpu_z80_jp(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
2373 cpu_z80_call(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
2376 cpu_z80_push(self, self->regs.word.af);
2379 cpu_z80_or(self, cpu_z80_fetch_byte(self));
2382 cpu_z80_call(self, true, 0x30);
2385 cpu_z80_ret(self, self->regs.bit.sf);
2388 cpu_z80_ld_word(self, CPU_Z80_EA_SP, self->regs.word.ix);
2391 cpu_z80_jp(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
2397 cpu_z80_call(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
2403 cpu_z80_cp(self, cpu_z80_fetch_byte(self));
2406 cpu_z80_call(self, true, 0x38);
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)) {
2415 cpu_z80_rlc(self, ea, CPU_Z80_EA_B);
2418 cpu_z80_rlc(self, ea, CPU_Z80_EA_C);
2421 cpu_z80_rlc(self, ea, CPU_Z80_EA_D);
2424 cpu_z80_rlc(self, ea, CPU_Z80_EA_E);
2427 cpu_z80_rlc(self, ea, CPU_Z80_EA_H);
2430 cpu_z80_rlc(self, ea, CPU_Z80_EA_L);
2433 cpu_z80_rlc(self, ea, CPU_Z80_EA_SINK);
2436 cpu_z80_rlc(self, ea, CPU_Z80_EA_A);
2439 cpu_z80_rrc(self, ea, CPU_Z80_EA_B);
2442 cpu_z80_rrc(self, ea, CPU_Z80_EA_C);
2445 cpu_z80_rrc(self, ea, CPU_Z80_EA_D);
2448 cpu_z80_rrc(self, ea, CPU_Z80_EA_E);
2451 cpu_z80_rrc(self, ea, CPU_Z80_EA_H);
2454 cpu_z80_rrc(self, ea, CPU_Z80_EA_L);
2457 cpu_z80_rrc(self, ea, CPU_Z80_EA_SINK);
2460 cpu_z80_rrc(self, ea, CPU_Z80_EA_A);
2463 cpu_z80_rl(self, ea, CPU_Z80_EA_B);
2466 cpu_z80_rl(self, ea, CPU_Z80_EA_C);
2469 cpu_z80_rl(self, ea, CPU_Z80_EA_D);
2472 cpu_z80_rl(self, ea, CPU_Z80_EA_E);
2475 cpu_z80_rl(self, ea, CPU_Z80_EA_H);
2478 cpu_z80_rl(self, ea, CPU_Z80_EA_L);
2481 cpu_z80_rl(self, ea, CPU_Z80_EA_SINK);
2484 cpu_z80_rl(self, ea, CPU_Z80_EA_A);
2487 cpu_z80_rr(self, ea, CPU_Z80_EA_B);
2490 cpu_z80_rr(self, ea, CPU_Z80_EA_C);
2493 cpu_z80_rr(self, ea, CPU_Z80_EA_D);
2496 cpu_z80_rr(self, ea, CPU_Z80_EA_E);
2499 cpu_z80_rr(self, ea, CPU_Z80_EA_H);
2502 cpu_z80_rr(self, ea, CPU_Z80_EA_L);
2505 cpu_z80_rr(self, ea, CPU_Z80_EA_SINK);
2508 cpu_z80_rr(self, ea, CPU_Z80_EA_A);
2511 cpu_z80_sla(self, ea, CPU_Z80_EA_B);
2514 cpu_z80_sla(self, ea, CPU_Z80_EA_C);
2517 cpu_z80_sla(self, ea, CPU_Z80_EA_D);
2520 cpu_z80_sla(self, ea, CPU_Z80_EA_E);
2523 cpu_z80_sla(self, ea, CPU_Z80_EA_H);
2526 cpu_z80_sla(self, ea, CPU_Z80_EA_L);
2529 cpu_z80_sla(self, ea, CPU_Z80_EA_SINK);
2532 cpu_z80_sla(self, ea, CPU_Z80_EA_A);
2535 cpu_z80_sra(self, ea, CPU_Z80_EA_B);
2538 cpu_z80_sra(self, ea, CPU_Z80_EA_C);
2541 cpu_z80_sra(self, ea, CPU_Z80_EA_D);
2544 cpu_z80_sra(self, ea, CPU_Z80_EA_E);
2547 cpu_z80_sra(self, ea, CPU_Z80_EA_H);
2550 cpu_z80_sra(self, ea, CPU_Z80_EA_L);
2553 cpu_z80_sra(self, ea, CPU_Z80_EA_SINK);
2556 cpu_z80_sra(self, ea, CPU_Z80_EA_A);
2559 cpu_z80_sll(self, ea, CPU_Z80_EA_B);
2562 cpu_z80_sll(self, ea, CPU_Z80_EA_C);
2565 cpu_z80_sll(self, ea, CPU_Z80_EA_D);
2568 cpu_z80_sll(self, ea, CPU_Z80_EA_E);
2571 cpu_z80_sll(self, ea, CPU_Z80_EA_H);
2574 cpu_z80_sll(self, ea, CPU_Z80_EA_L);
2577 cpu_z80_sll(self, ea, CPU_Z80_EA_SINK);
2580 cpu_z80_sll(self, ea, CPU_Z80_EA_A);
2583 cpu_z80_srl(self, ea, CPU_Z80_EA_B);
2586 cpu_z80_srl(self, ea, CPU_Z80_EA_C);
2589 cpu_z80_srl(self, ea, CPU_Z80_EA_D);
2592 cpu_z80_srl(self, ea, CPU_Z80_EA_E);
2595 cpu_z80_srl(self, ea, CPU_Z80_EA_H);
2598 cpu_z80_srl(self, ea, CPU_Z80_EA_L);
2601 cpu_z80_srl(self, ea, CPU_Z80_EA_SINK);
2604 cpu_z80_srl(self, ea, CPU_Z80_EA_A);
2607 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2610 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2613 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2616 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2619 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2622 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2625 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2628 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
2631 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2634 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2637 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2640 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2643 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2646 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2649 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2652 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
2655 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2658 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2661 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2664 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2667 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2670 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2673 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2676 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
2679 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2682 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2685 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2688 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2691 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2694 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2697 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2700 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
2703 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2706 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2709 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2712 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2715 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2718 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2721 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2724 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
2727 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2730 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2733 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2736 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2739 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2742 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2745 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2748 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
2751 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2754 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2757 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2760 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2763 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2766 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2769 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2772 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
2775 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2778 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2781 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2784 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2787 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2790 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2793 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2796 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
2799 cpu_z80_res(self, 0, ea, CPU_Z80_EA_B);
2802 cpu_z80_res(self, 0, ea, CPU_Z80_EA_C);
2805 cpu_z80_res(self, 0, ea, CPU_Z80_EA_D);
2808 cpu_z80_res(self, 0, ea, CPU_Z80_EA_E);
2811 cpu_z80_res(self, 0, ea, CPU_Z80_EA_H);
2814 cpu_z80_res(self, 0, ea, CPU_Z80_EA_L);
2817 cpu_z80_res(self, 0, ea, CPU_Z80_EA_SINK);
2820 cpu_z80_res(self, 0, ea, CPU_Z80_EA_A);
2823 cpu_z80_res(self, 1, ea, CPU_Z80_EA_B);
2826 cpu_z80_res(self, 1, ea, CPU_Z80_EA_C);
2829 cpu_z80_res(self, 1, ea, CPU_Z80_EA_D);
2832 cpu_z80_res(self, 1, ea, CPU_Z80_EA_E);
2835 cpu_z80_res(self, 1, ea, CPU_Z80_EA_H);
2838 cpu_z80_res(self, 1, ea, CPU_Z80_EA_L);
2841 cpu_z80_res(self, 1, ea, CPU_Z80_EA_SINK);
2844 cpu_z80_res(self, 1, ea, CPU_Z80_EA_A);
2847 cpu_z80_res(self, 2, ea, CPU_Z80_EA_B);
2850 cpu_z80_res(self, 2, ea, CPU_Z80_EA_C);
2853 cpu_z80_res(self, 2, ea, CPU_Z80_EA_D);
2856 cpu_z80_res(self, 2, ea, CPU_Z80_EA_E);
2859 cpu_z80_res(self, 2, ea, CPU_Z80_EA_H);
2862 cpu_z80_res(self, 2, ea, CPU_Z80_EA_L);
2865 cpu_z80_res(self, 2, ea, CPU_Z80_EA_SINK);
2868 cpu_z80_res(self, 2, ea, CPU_Z80_EA_A);
2871 cpu_z80_res(self, 3, ea, CPU_Z80_EA_B);
2874 cpu_z80_res(self, 3, ea, CPU_Z80_EA_C);
2877 cpu_z80_res(self, 3, ea, CPU_Z80_EA_D);
2880 cpu_z80_res(self, 3, ea, CPU_Z80_EA_E);
2883 cpu_z80_res(self, 3, ea, CPU_Z80_EA_H);
2886 cpu_z80_res(self, 3, ea, CPU_Z80_EA_L);
2889 cpu_z80_res(self, 3, ea, CPU_Z80_EA_SINK);
2892 cpu_z80_res(self, 3, ea, CPU_Z80_EA_A);
2895 cpu_z80_res(self, 4, ea, CPU_Z80_EA_B);
2898 cpu_z80_res(self, 4, ea, CPU_Z80_EA_C);
2901 cpu_z80_res(self, 4, ea, CPU_Z80_EA_D);
2904 cpu_z80_res(self, 4, ea, CPU_Z80_EA_E);
2907 cpu_z80_res(self, 4, ea, CPU_Z80_EA_H);
2910 cpu_z80_res(self, 4, ea, CPU_Z80_EA_L);
2913 cpu_z80_res(self, 4, ea, CPU_Z80_EA_SINK);
2916 cpu_z80_res(self, 4, ea, CPU_Z80_EA_A);
2919 cpu_z80_res(self, 5, ea, CPU_Z80_EA_B);
2922 cpu_z80_res(self, 5, ea, CPU_Z80_EA_C);
2925 cpu_z80_res(self, 5, ea, CPU_Z80_EA_D);
2928 cpu_z80_res(self, 5, ea, CPU_Z80_EA_E);
2931 cpu_z80_res(self, 5, ea, CPU_Z80_EA_H);
2934 cpu_z80_res(self, 5, ea, CPU_Z80_EA_L);
2937 cpu_z80_res(self, 5, ea, CPU_Z80_EA_SINK);
2940 cpu_z80_res(self, 5, ea, CPU_Z80_EA_A);
2943 cpu_z80_res(self, 6, ea, CPU_Z80_EA_B);
2946 cpu_z80_res(self, 6, ea, CPU_Z80_EA_C);
2949 cpu_z80_res(self, 6, ea, CPU_Z80_EA_D);
2952 cpu_z80_res(self, 6, ea, CPU_Z80_EA_E);
2955 cpu_z80_res(self, 6, ea, CPU_Z80_EA_H);
2958 cpu_z80_res(self, 6, ea, CPU_Z80_EA_L);
2961 cpu_z80_res(self, 6, ea, CPU_Z80_EA_SINK);
2964 cpu_z80_res(self, 6, ea, CPU_Z80_EA_A);
2967 cpu_z80_res(self, 7, ea, CPU_Z80_EA_B);
2970 cpu_z80_res(self, 7, ea, CPU_Z80_EA_C);
2973 cpu_z80_res(self, 7, ea, CPU_Z80_EA_D);
2976 cpu_z80_res(self, 7, ea, CPU_Z80_EA_E);
2979 cpu_z80_res(self, 7, ea, CPU_Z80_EA_H);
2982 cpu_z80_res(self, 7, ea, CPU_Z80_EA_L);
2985 cpu_z80_res(self, 7, ea, CPU_Z80_EA_SINK);
2988 cpu_z80_res(self, 7, ea, CPU_Z80_EA_A);
2991 cpu_z80_set(self, 0, ea, CPU_Z80_EA_B);
2994 cpu_z80_set(self, 0, ea, CPU_Z80_EA_C);
2997 cpu_z80_set(self, 0, ea, CPU_Z80_EA_D);
3000 cpu_z80_set(self, 0, ea, CPU_Z80_EA_E);
3003 cpu_z80_set(self, 0, ea, CPU_Z80_EA_H);
3006 cpu_z80_set(self, 0, ea, CPU_Z80_EA_L);
3009 cpu_z80_set(self, 0, ea, CPU_Z80_EA_SINK);
3012 cpu_z80_set(self, 0, ea, CPU_Z80_EA_A);
3015 cpu_z80_set(self, 1, ea, CPU_Z80_EA_B);
3018 cpu_z80_set(self, 1, ea, CPU_Z80_EA_C);
3021 cpu_z80_set(self, 1, ea, CPU_Z80_EA_D);
3024 cpu_z80_set(self, 1, ea, CPU_Z80_EA_E);
3027 cpu_z80_set(self, 1, ea, CPU_Z80_EA_H);
3030 cpu_z80_set(self, 1, ea, CPU_Z80_EA_L);
3033 cpu_z80_set(self, 1, ea, CPU_Z80_EA_SINK);
3036 cpu_z80_set(self, 1, ea, CPU_Z80_EA_A);
3039 cpu_z80_set(self, 2, ea, CPU_Z80_EA_B);
3042 cpu_z80_set(self, 2, ea, CPU_Z80_EA_C);
3045 cpu_z80_set(self, 2, ea, CPU_Z80_EA_D);
3048 cpu_z80_set(self, 2, ea, CPU_Z80_EA_E);
3051 cpu_z80_set(self, 2, ea, CPU_Z80_EA_H);
3054 cpu_z80_set(self, 2, ea, CPU_Z80_EA_L);
3057 cpu_z80_set(self, 2, ea, CPU_Z80_EA_SINK);
3060 cpu_z80_set(self, 2, ea, CPU_Z80_EA_A);
3063 cpu_z80_set(self, 3, ea, CPU_Z80_EA_B);
3066 cpu_z80_set(self, 3, ea, CPU_Z80_EA_C);
3069 cpu_z80_set(self, 3, ea, CPU_Z80_EA_D);
3072 cpu_z80_set(self, 3, ea, CPU_Z80_EA_E);
3075 cpu_z80_set(self, 3, ea, CPU_Z80_EA_H);
3078 cpu_z80_set(self, 3, ea, CPU_Z80_EA_L);
3081 cpu_z80_set(self, 3, ea, CPU_Z80_EA_SINK);
3084 cpu_z80_set(self, 3, ea, CPU_Z80_EA_A);
3087 cpu_z80_set(self, 4, ea, CPU_Z80_EA_B);
3090 cpu_z80_set(self, 4, ea, CPU_Z80_EA_C);
3093 cpu_z80_set(self, 4, ea, CPU_Z80_EA_D);
3096 cpu_z80_set(self, 4, ea, CPU_Z80_EA_E);
3099 cpu_z80_set(self, 4, ea, CPU_Z80_EA_H);
3102 cpu_z80_set(self, 4, ea, CPU_Z80_EA_L);
3105 cpu_z80_set(self, 4, ea, CPU_Z80_EA_SINK);
3108 cpu_z80_set(self, 4, ea, CPU_Z80_EA_A);
3111 cpu_z80_set(self, 5, ea, CPU_Z80_EA_B);
3114 cpu_z80_set(self, 5, ea, CPU_Z80_EA_C);
3117 cpu_z80_set(self, 5, ea, CPU_Z80_EA_D);
3120 cpu_z80_set(self, 5, ea, CPU_Z80_EA_E);
3123 cpu_z80_set(self, 5, ea, CPU_Z80_EA_H);
3126 cpu_z80_set(self, 5, ea, CPU_Z80_EA_L);
3129 cpu_z80_set(self, 5, ea, CPU_Z80_EA_SINK);
3132 cpu_z80_set(self, 5, ea, CPU_Z80_EA_A);
3135 cpu_z80_set(self, 6, ea, CPU_Z80_EA_B);
3138 cpu_z80_set(self, 6, ea, CPU_Z80_EA_C);
3141 cpu_z80_set(self, 6, ea, CPU_Z80_EA_D);
3144 cpu_z80_set(self, 6, ea, CPU_Z80_EA_E);
3147 cpu_z80_set(self, 6, ea, CPU_Z80_EA_H);
3150 cpu_z80_set(self, 6, ea, CPU_Z80_EA_L);
3153 cpu_z80_set(self, 6, ea, CPU_Z80_EA_SINK);
3156 cpu_z80_set(self, 6, ea, CPU_Z80_EA_A);
3159 cpu_z80_set(self, 7, ea, CPU_Z80_EA_B);
3162 cpu_z80_set(self, 7, ea, CPU_Z80_EA_C);
3165 cpu_z80_set(self, 7, ea, CPU_Z80_EA_D);
3168 cpu_z80_set(self, 7, ea, CPU_Z80_EA_E);
3171 cpu_z80_set(self, 7, ea, CPU_Z80_EA_H);
3174 cpu_z80_set(self, 7, ea, CPU_Z80_EA_L);
3177 cpu_z80_set(self, 7, ea, CPU_Z80_EA_SINK);
3180 cpu_z80_set(self, 7, ea, CPU_Z80_EA_A);
3185 void cpu_z80_execute_ed(struct cpu_z80 *self) {
3186 switch (cpu_z80_fetch_byte(self)) {
3380 cpu_z80_in_z80(self, CPU_Z80_EA_B, cpu_z80_in_byte(self, self->regs.word.bc));
3383 cpu_z80_out(self, self->regs.word.bc, self->regs.byte.b);
3386 cpu_z80_sbc_word(self, CPU_Z80_EA_HL, self->regs.word.bc);
3389 cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.bc);
3398 cpu_z80_im(self, 0);
3401 cpu_z80_ld_byte(self, CPU_Z80_EA_I, self->regs.byte.a);
3404 cpu_z80_in_z80(self, CPU_Z80_EA_C, cpu_z80_in_byte(self, self->regs.word.bc));
3407 cpu_z80_out(self, self->regs.word.bc, self->regs.byte.c);
3410 cpu_z80_adc_word(self, CPU_Z80_EA_HL, self->regs.word.bc);
3413 cpu_z80_ld_word(self, CPU_Z80_EA_BC, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
3422 cpu_z80_im(self, 0);
3425 cpu_z80_ld_byte(self, CPU_Z80_EA_R, self->regs.byte.a);
3428 cpu_z80_in_z80(self, CPU_Z80_EA_D, cpu_z80_in_byte(self, self->regs.word.bc));
3431 cpu_z80_out(self, self->regs.word.bc, self->regs.byte.d);
3434 cpu_z80_sbc_word(self, CPU_Z80_EA_HL, self->regs.word.de);
3437 cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.de);
3446 cpu_z80_im(self, 1);
3449 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.i);
3452 cpu_z80_in_z80(self, CPU_Z80_EA_E, cpu_z80_in_byte(self, self->regs.word.bc));
3455 cpu_z80_out(self, self->regs.word.bc, self->regs.byte.e);
3458 cpu_z80_adc_word(self, CPU_Z80_EA_HL, self->regs.word.de);
3461 cpu_z80_ld_word(self, CPU_Z80_EA_DE, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
3470 cpu_z80_im(self, 2);
3473 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.r);
3476 cpu_z80_in_z80(self, CPU_Z80_EA_H, cpu_z80_in_byte(self, self->regs.word.bc));
3479 cpu_z80_out(self, self->regs.word.bc, self->regs.byte.h);
3482 cpu_z80_sbc_word(self, CPU_Z80_EA_HL, self->regs.word.hl);
3485 cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.hl);
3494 cpu_z80_im(self, 0);
3500 cpu_z80_in_z80(self, CPU_Z80_EA_L, cpu_z80_in_byte(self, self->regs.word.bc));
3503 cpu_z80_out(self, self->regs.word.bc, self->regs.byte.l);
3506 cpu_z80_adc_word(self, CPU_Z80_EA_HL, self->regs.word.hl);
3509 cpu_z80_ld_word(self, CPU_Z80_EA_HL, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
3518 cpu_z80_im(self, 0);
3524 cpu_z80_in_z80(self, CPU_Z80_EA_SINK, cpu_z80_in_byte(self, self->regs.word.bc));
3527 cpu_z80_out(self, self->regs.word.bc, 0);
3530 cpu_z80_sbc_word(self, CPU_Z80_EA_HL, self->regs.word.sp);
3533 cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.sp);
3542 cpu_z80_im(self, 1);
3548 cpu_z80_in_z80(self, CPU_Z80_EA_A, cpu_z80_in_byte(self, self->regs.word.bc));
3551 cpu_z80_out(self, self->regs.word.bc, self->regs.byte.a);
3554 cpu_z80_adc_word(self, CPU_Z80_EA_HL, self->regs.word.sp);
3557 cpu_z80_ld_word(self, CPU_Z80_EA_SP, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
3566 cpu_z80_im(self, 2);
3958 void cpu_z80_execute_fd(struct cpu_z80 *self) {
3959 switch (cpu_z80_fetch_byte(self)) {
3964 cpu_z80_ld_word(self, CPU_Z80_EA_BC, cpu_z80_fetch_word(self));
3967 cpu_z80_ld_byte(self, self->regs.word.bc, self->regs.byte.a);
3970 cpu_z80_inc_word(self, CPU_Z80_EA_BC);
3973 cpu_z80_inc_byte(self, CPU_Z80_EA_B);
3976 cpu_z80_dec_byte(self, CPU_Z80_EA_B);
3979 cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_fetch_byte(self));
3985 cpu_z80_ex(self, CPU_Z80_EA_AF, CPU_Z80_EA_AF_PRIME);
3988 cpu_z80_add_word(self, CPU_Z80_EA_IY, self->regs.word.bc);
3991 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.bc));
3994 cpu_z80_dec_word(self, CPU_Z80_EA_BC);
3997 cpu_z80_inc_byte(self, CPU_Z80_EA_C);
4000 cpu_z80_dec_byte(self, CPU_Z80_EA_C);
4003 cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_fetch_byte(self));
4009 cpu_z80_djnz(self, cpu_z80_relative(self));
4012 cpu_z80_ld_word(self, CPU_Z80_EA_DE, cpu_z80_fetch_word(self));
4015 cpu_z80_ld_byte(self, self->regs.word.de, self->regs.byte.a);
4018 cpu_z80_inc_word(self, CPU_Z80_EA_DE);
4021 cpu_z80_inc_byte(self, CPU_Z80_EA_D);
4024 cpu_z80_dec_byte(self, CPU_Z80_EA_D);
4027 cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_fetch_byte(self));
4033 cpu_z80_jr(self, true, cpu_z80_relative(self));
4036 cpu_z80_add_word(self, CPU_Z80_EA_IY, self->regs.word.de);
4039 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, self->regs.word.de));
4042 cpu_z80_dec_word(self, CPU_Z80_EA_DE);
4045 cpu_z80_inc_byte(self, CPU_Z80_EA_E);
4048 cpu_z80_dec_byte(self, CPU_Z80_EA_E);
4051 cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_fetch_byte(self));
4057 cpu_z80_jr(self, !self->regs.bit.zf, cpu_z80_relative(self));
4060 cpu_z80_ld_word(self, CPU_Z80_EA_IY, cpu_z80_fetch_word(self));
4063 cpu_z80_ld_word(self, cpu_z80_fetch_word(self), self->regs.word.iy);
4066 cpu_z80_inc_word(self, CPU_Z80_EA_IY);
4069 cpu_z80_inc_byte(self, CPU_Z80_EA_IYH);
4072 cpu_z80_dec_byte(self, CPU_Z80_EA_IYH);
4075 cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, cpu_z80_fetch_byte(self));
4081 cpu_z80_jr(self, self->regs.bit.zf, cpu_z80_relative(self));
4084 cpu_z80_add_word(self, CPU_Z80_EA_IY, self->regs.word.iy);
4087 cpu_z80_ld_word(self, CPU_Z80_EA_IY, cpu_z80_read_word(self, cpu_z80_fetch_word(self)));
4090 cpu_z80_dec_word(self, CPU_Z80_EA_IY);
4093 cpu_z80_inc_byte(self, CPU_Z80_EA_IYL);
4096 cpu_z80_dec_byte(self, CPU_Z80_EA_IYL);
4099 cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, cpu_z80_fetch_byte(self));
4105 cpu_z80_jr(self, !self->regs.bit.cf, cpu_z80_relative(self));
4108 cpu_z80_ld_word(self, CPU_Z80_EA_SP, cpu_z80_fetch_word(self));
4111 cpu_z80_ld_byte(self, cpu_z80_fetch_word(self), self->regs.byte.a);
4114 cpu_z80_inc_word(self, CPU_Z80_EA_SP);
4117 cpu_z80_inc_byte(self, cpu_z80_displacement(self, self->regs.word.iy));
4120 cpu_z80_dec_byte(self, cpu_z80_displacement(self, self->regs.word.iy));
4124 int ea = cpu_z80_displacement(self, self->regs.word.iy);
4125 cpu_z80_ld_byte(self, ea, cpu_z80_fetch_byte(self));
4132 cpu_z80_jr(self, self->regs.bit.cf, cpu_z80_relative(self));
4135 cpu_z80_add_word(self, CPU_Z80_EA_IY, self->regs.word.sp);
4138 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_fetch_word(self)));
4141 cpu_z80_dec_word(self, CPU_Z80_EA_SP);
4144 cpu_z80_inc_byte(self, CPU_Z80_EA_A);
4147 cpu_z80_dec_byte(self, CPU_Z80_EA_A);
4150 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
4156 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.b);
4159 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.c);
4162 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.d);
4165 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.e);
4168 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.iyh);
4171 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.iyl);
4174 cpu_z80_ld_byte(self, CPU_Z80_EA_B, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4177 cpu_z80_ld_byte(self, CPU_Z80_EA_B, self->regs.byte.a);
4180 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.b);
4183 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.c);
4186 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.d);
4189 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.e);
4192 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.iyh);
4195 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.iyl);
4198 cpu_z80_ld_byte(self, CPU_Z80_EA_C, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4201 cpu_z80_ld_byte(self, CPU_Z80_EA_C, self->regs.byte.a);
4204 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.b);
4207 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.c);
4210 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.d);
4213 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.e);
4216 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.iyh);
4219 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.iyl);
4222 cpu_z80_ld_byte(self, CPU_Z80_EA_D, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4225 cpu_z80_ld_byte(self, CPU_Z80_EA_D, self->regs.byte.a);
4228 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.b);
4231 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.c);
4234 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.d);
4237 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.e);
4240 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.iyh);
4243 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.iyl);
4246 cpu_z80_ld_byte(self, CPU_Z80_EA_E, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4249 cpu_z80_ld_byte(self, CPU_Z80_EA_E, self->regs.byte.a);
4252 cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.b);
4255 cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.c);
4258 cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.d);
4261 cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.e);
4264 cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.iyh);
4267 cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.iyl);
4270 cpu_z80_ld_byte(self, CPU_Z80_EA_H, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4273 cpu_z80_ld_byte(self, CPU_Z80_EA_IYH, self->regs.byte.a);
4276 cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.b);
4279 cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.c);
4282 cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.d);
4285 cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.e);
4288 cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.iyh);
4291 cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.iyl);
4294 cpu_z80_ld_byte(self, CPU_Z80_EA_L, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4297 cpu_z80_ld_byte(self, CPU_Z80_EA_IYL, self->regs.byte.a);
4300 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.b);
4303 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.c);
4306 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.d);
4309 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.e);
4312 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.h);
4315 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.l);
4321 cpu_z80_ld_byte(self, cpu_z80_displacement(self, self->regs.word.iy), self->regs.byte.a);
4324 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
4327 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
4330 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
4333 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
4336 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.iyh);
4339 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.iyl);
4342 cpu_z80_ld_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4345 cpu_z80_ld_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
4348 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
4351 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
4354 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
4357 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
4360 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.iyh);
4363 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.iyl);
4366 cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4369 cpu_z80_add_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
4372 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
4375 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
4378 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
4381 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
4384 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.iyh);
4387 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.iyl);
4390 cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4393 cpu_z80_adc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
4396 cpu_z80_sub(self, self->regs.byte.b);
4399 cpu_z80_sub(self, self->regs.byte.c);
4402 cpu_z80_sub(self, self->regs.byte.d);
4405 cpu_z80_sub(self, self->regs.byte.e);
4408 cpu_z80_sub(self, self->regs.byte.iyh);
4411 cpu_z80_sub(self, self->regs.byte.iyl);
4414 cpu_z80_sub(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4417 cpu_z80_sub(self, self->regs.byte.a);
4420 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.b);
4423 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.c);
4426 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.d);
4429 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.e);
4432 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.iyh);
4435 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.iyl);
4438 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4441 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, self->regs.byte.a);
4444 cpu_z80_and(self, self->regs.byte.b);
4447 cpu_z80_and(self, self->regs.byte.c);
4450 cpu_z80_and(self, self->regs.byte.d);
4453 cpu_z80_and(self, self->regs.byte.e);
4456 cpu_z80_and(self, self->regs.byte.iyh);
4459 cpu_z80_and(self, self->regs.byte.iyl);
4462 cpu_z80_and(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4465 cpu_z80_and(self, self->regs.byte.a);
4468 cpu_z80_xor(self, self->regs.byte.b);
4471 cpu_z80_xor(self, self->regs.byte.c);
4474 cpu_z80_xor(self, self->regs.byte.d);
4477 cpu_z80_xor(self, self->regs.byte.e);
4480 cpu_z80_xor(self, self->regs.byte.iyh);
4483 cpu_z80_xor(self, self->regs.byte.iyl);
4486 cpu_z80_xor(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4489 cpu_z80_xor(self, self->regs.byte.a);
4492 cpu_z80_or(self, self->regs.byte.b);
4495 cpu_z80_or(self, self->regs.byte.c);
4498 cpu_z80_or(self, self->regs.byte.d);
4501 cpu_z80_or(self, self->regs.byte.e);
4504 cpu_z80_or(self, self->regs.byte.iyh);
4507 cpu_z80_or(self, self->regs.byte.iyl);
4510 cpu_z80_or(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4513 cpu_z80_or(self, self->regs.byte.a);
4516 cpu_z80_cp(self, self->regs.byte.b);
4519 cpu_z80_cp(self, self->regs.byte.c);
4522 cpu_z80_cp(self, self->regs.byte.d);
4525 cpu_z80_cp(self, self->regs.byte.e);
4528 cpu_z80_cp(self, self->regs.byte.iyh);
4531 cpu_z80_cp(self, self->regs.byte.iyl);
4534 cpu_z80_cp(self, cpu_z80_read_byte(self, cpu_z80_displacement(self, self->regs.word.iy)));
4537 cpu_z80_cp(self, self->regs.byte.a);
4540 cpu_z80_ret(self, !self->regs.bit.zf);
4543 cpu_z80_pop(self, CPU_Z80_EA_BC);
4546 cpu_z80_jp(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
4549 cpu_z80_jp(self, true, cpu_z80_fetch_word(self));
4552 cpu_z80_call(self, !self->regs.bit.zf, cpu_z80_fetch_word(self));
4555 cpu_z80_push(self, self->regs.word.bc);
4558 cpu_z80_add_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
4561 cpu_z80_call(self, true, 0);
4564 cpu_z80_ret(self, self->regs.bit.zf);
4567 cpu_z80_ret(self, true);
4570 cpu_z80_jp(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
4573 cpu_z80_execute_fd_cb(self);
4576 cpu_z80_call(self, self->regs.bit.zf, cpu_z80_fetch_word(self));
4579 cpu_z80_call(self, true, cpu_z80_fetch_word(self));
4582 cpu_z80_adc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
4585 cpu_z80_call(self, true, 8);
4588 cpu_z80_ret(self, !self->regs.bit.cf);
4591 cpu_z80_pop(self, CPU_Z80_EA_DE);
4594 cpu_z80_jp(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
4597 cpu_z80_out(self, cpu_z80_port_word(self), self->regs.byte.a);
4600 cpu_z80_call(self, !self->regs.bit.cf, cpu_z80_fetch_word(self));
4603 cpu_z80_push(self, self->regs.word.de);
4606 cpu_z80_sub(self, cpu_z80_fetch_byte(self));
4609 cpu_z80_call(self, true, 0x10);
4612 cpu_z80_ret(self, self->regs.bit.cf);
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);
4620 cpu_z80_jp(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
4623 cpu_z80_in(self, CPU_Z80_EA_A, cpu_z80_in_byte(self, cpu_z80_port_word(self)));
4626 cpu_z80_call(self, self->regs.bit.cf, cpu_z80_fetch_word(self));
4632 cpu_z80_sbc_byte(self, CPU_Z80_EA_A, cpu_z80_fetch_byte(self));
4635 cpu_z80_call(self, true, 0x18);
4638 cpu_z80_ret(self, !self->regs.bit.pvf);
4641 cpu_z80_pop(self, CPU_Z80_EA_IY);
4644 cpu_z80_jp(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
4647 cpu_z80_ex(self, self->regs.word.sp, CPU_Z80_EA_IY);
4650 cpu_z80_call(self, !self->regs.bit.pvf, cpu_z80_fetch_word(self));
4653 cpu_z80_push(self, self->regs.word.iy);
4656 cpu_z80_and(self, cpu_z80_fetch_byte(self));
4659 cpu_z80_call(self, true, 0x20);
4662 cpu_z80_ret(self, self->regs.bit.pvf);
4665 cpu_z80_jp(self, true, cpu_z80_read_word(self, self->regs.word.iy));
4668 cpu_z80_jp(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
4671 cpu_z80_ex(self, CPU_Z80_EA_DE, CPU_Z80_EA_HL);
4674 cpu_z80_call(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
4680 cpu_z80_xor(self, cpu_z80_fetch_byte(self));
4683 cpu_z80_call(self, true, 0x28);
4686 cpu_z80_ret(self, !self->regs.bit.sf);
4689 cpu_z80_pop(self, CPU_Z80_EA_AF);
4692 cpu_z80_jp(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
4698 cpu_z80_call(self, !self->regs.bit.sf, cpu_z80_fetch_word(self));
4701 cpu_z80_push(self, self->regs.word.af);
4704 cpu_z80_or(self, cpu_z80_fetch_byte(self));
4707 cpu_z80_call(self, true, 0x30);
4710 cpu_z80_ret(self, self->regs.bit.sf);
4713 cpu_z80_ld_word(self, CPU_Z80_EA_SP, self->regs.word.iy);
4716 cpu_z80_jp(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
4722 cpu_z80_call(self, self->regs.bit.sf, cpu_z80_fetch_word(self));
4728 cpu_z80_cp(self, cpu_z80_fetch_byte(self));
4731 cpu_z80_call(self, true, 0x38);
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)) {
4740 cpu_z80_rlc(self, ea, CPU_Z80_EA_B);
4743 cpu_z80_rlc(self, ea, CPU_Z80_EA_C);
4746 cpu_z80_rlc(self, ea, CPU_Z80_EA_D);
4749 cpu_z80_rlc(self, ea, CPU_Z80_EA_E);
4752 cpu_z80_rlc(self, ea, CPU_Z80_EA_H);
4755 cpu_z80_rlc(self, ea, CPU_Z80_EA_L);
4758 cpu_z80_rlc(self, ea, CPU_Z80_EA_SINK);
4761 cpu_z80_rlc(self, ea, CPU_Z80_EA_A);
4764 cpu_z80_rrc(self, ea, CPU_Z80_EA_B);
4767 cpu_z80_rrc(self, ea, CPU_Z80_EA_C);
4770 cpu_z80_rrc(self, ea, CPU_Z80_EA_D);
4773 cpu_z80_rrc(self, ea, CPU_Z80_EA_E);
4776 cpu_z80_rrc(self, ea, CPU_Z80_EA_H);
4779 cpu_z80_rrc(self, ea, CPU_Z80_EA_L);
4782 cpu_z80_rrc(self, ea, CPU_Z80_EA_SINK);
4785 cpu_z80_rrc(self, ea, CPU_Z80_EA_A);
4788 cpu_z80_rl(self, ea, CPU_Z80_EA_B);
4791 cpu_z80_rl(self, ea, CPU_Z80_EA_C);
4794 cpu_z80_rl(self, ea, CPU_Z80_EA_D);
4797 cpu_z80_rl(self, ea, CPU_Z80_EA_E);
4800 cpu_z80_rl(self, ea, CPU_Z80_EA_H);
4803 cpu_z80_rl(self, ea, CPU_Z80_EA_L);
4806 cpu_z80_rl(self, ea, CPU_Z80_EA_SINK);
4809 cpu_z80_rl(self, ea, CPU_Z80_EA_A);
4812 cpu_z80_rr(self, ea, CPU_Z80_EA_B);
4815 cpu_z80_rr(self, ea, CPU_Z80_EA_C);
4818 cpu_z80_rr(self, ea, CPU_Z80_EA_D);
4821 cpu_z80_rr(self, ea, CPU_Z80_EA_E);
4824 cpu_z80_rr(self, ea, CPU_Z80_EA_H);
4827 cpu_z80_rr(self, ea, CPU_Z80_EA_L);
4830 cpu_z80_rr(self, ea, CPU_Z80_EA_SINK);
4833 cpu_z80_rr(self, ea, CPU_Z80_EA_A);
4836 cpu_z80_sla(self, ea, CPU_Z80_EA_B);
4839 cpu_z80_sla(self, ea, CPU_Z80_EA_C);
4842 cpu_z80_sla(self, ea, CPU_Z80_EA_D);
4845 cpu_z80_sla(self, ea, CPU_Z80_EA_E);
4848 cpu_z80_sla(self, ea, CPU_Z80_EA_H);
4851 cpu_z80_sla(self, ea, CPU_Z80_EA_L);
4854 cpu_z80_sla(self, ea, CPU_Z80_EA_SINK);
4857 cpu_z80_sla(self, ea, CPU_Z80_EA_A);
4860 cpu_z80_sra(self, ea, CPU_Z80_EA_B);
4863 cpu_z80_sra(self, ea, CPU_Z80_EA_C);
4866 cpu_z80_sra(self, ea, CPU_Z80_EA_D);
4869 cpu_z80_sra(self, ea, CPU_Z80_EA_E);
4872 cpu_z80_sra(self, ea, CPU_Z80_EA_H);
4875 cpu_z80_sra(self, ea, CPU_Z80_EA_L);
4878 cpu_z80_sra(self, ea, CPU_Z80_EA_SINK);
4881 cpu_z80_sra(self, ea, CPU_Z80_EA_A);
4884 cpu_z80_sll(self, ea, CPU_Z80_EA_B);
4887 cpu_z80_sll(self, ea, CPU_Z80_EA_C);
4890 cpu_z80_sll(self, ea, CPU_Z80_EA_D);
4893 cpu_z80_sll(self, ea, CPU_Z80_EA_E);
4896 cpu_z80_sll(self, ea, CPU_Z80_EA_H);
4899 cpu_z80_sll(self, ea, CPU_Z80_EA_L);
4902 cpu_z80_sll(self, ea, CPU_Z80_EA_SINK);
4905 cpu_z80_sll(self, ea, CPU_Z80_EA_A);
4908 cpu_z80_srl(self, ea, CPU_Z80_EA_B);
4911 cpu_z80_srl(self, ea, CPU_Z80_EA_C);
4914 cpu_z80_srl(self, ea, CPU_Z80_EA_D);
4917 cpu_z80_srl(self, ea, CPU_Z80_EA_E);
4920 cpu_z80_srl(self, ea, CPU_Z80_EA_H);
4923 cpu_z80_srl(self, ea, CPU_Z80_EA_L);
4926 cpu_z80_srl(self, ea, CPU_Z80_EA_SINK);
4929 cpu_z80_srl(self, ea, CPU_Z80_EA_A);
4932 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4935 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4938 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4941 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4944 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4947 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4950 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4953 cpu_z80_bit(self, 0, cpu_z80_read_byte(self, ea));
4956 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4959 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4962 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4965 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4968 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4971 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4974 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4977 cpu_z80_bit(self, 1, cpu_z80_read_byte(self, ea));
4980 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4983 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4986 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4989 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4992 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4995 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
4998 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
5001 cpu_z80_bit(self, 2, cpu_z80_read_byte(self, ea));
5004 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5007 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5010 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5013 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5016 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5019 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5022 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5025 cpu_z80_bit(self, 3, cpu_z80_read_byte(self, ea));
5028 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5031 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5034 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5037 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5040 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5043 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5046 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5049 cpu_z80_bit(self, 4, cpu_z80_read_byte(self, ea));
5052 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5055 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5058 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5061 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5064 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5067 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5070 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5073 cpu_z80_bit(self, 5, cpu_z80_read_byte(self, ea));
5076 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5079 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5082 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5085 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5088 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5091 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5094 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5097 cpu_z80_bit(self, 6, cpu_z80_read_byte(self, ea));
5100 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5103 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5106 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5109 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5112 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5115 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5118 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5121 cpu_z80_bit(self, 7, cpu_z80_read_byte(self, ea));
5124 cpu_z80_res(self, 0, ea, CPU_Z80_EA_B);
5127 cpu_z80_res(self, 0, ea, CPU_Z80_EA_C);
5130 cpu_z80_res(self, 0, ea, CPU_Z80_EA_D);
5133 cpu_z80_res(self, 0, ea, CPU_Z80_EA_E);
5136 cpu_z80_res(self, 0, ea, CPU_Z80_EA_H);
5139 cpu_z80_res(self, 0, ea, CPU_Z80_EA_L);
5142 cpu_z80_res(self, 0, ea, CPU_Z80_EA_SINK);
5145 cpu_z80_res(self, 0, ea, CPU_Z80_EA_A);
5148 cpu_z80_res(self, 1, ea, CPU_Z80_EA_B);
5151 cpu_z80_res(self, 1, ea, CPU_Z80_EA_C);
5154 cpu_z80_res(self, 1, ea, CPU_Z80_EA_D);
5157 cpu_z80_res(self, 1, ea, CPU_Z80_EA_E);
5160 cpu_z80_res(self, 1, ea, CPU_Z80_EA_H);
5163 cpu_z80_res(self, 1, ea, CPU_Z80_EA_L);
5166 cpu_z80_res(self, 1, ea, CPU_Z80_EA_SINK);
5169 cpu_z80_res(self, 1, ea, CPU_Z80_EA_A);
5172 cpu_z80_res(self, 2, ea, CPU_Z80_EA_B);
5175 cpu_z80_res(self, 2, ea, CPU_Z80_EA_C);
5178 cpu_z80_res(self, 2, ea, CPU_Z80_EA_D);
5181 cpu_z80_res(self, 2, ea, CPU_Z80_EA_E);
5184 cpu_z80_res(self, 2, ea, CPU_Z80_EA_H);
5187 cpu_z80_res(self, 2, ea, CPU_Z80_EA_L);
5190 cpu_z80_res(self, 2, ea, CPU_Z80_EA_SINK);
5193 cpu_z80_res(self, 2, ea, CPU_Z80_EA_A);
5196 cpu_z80_res(self, 3, ea, CPU_Z80_EA_B);
5199 cpu_z80_res(self, 3, ea, CPU_Z80_EA_C);
5202 cpu_z80_res(self, 3, ea, CPU_Z80_EA_D);
5205 cpu_z80_res(self, 3, ea, CPU_Z80_EA_E);
5208 cpu_z80_res(self, 3, ea, CPU_Z80_EA_H);
5211 cpu_z80_res(self, 3, ea, CPU_Z80_EA_L);
5214 cpu_z80_res(self, 3, ea, CPU_Z80_EA_SINK);
5217 cpu_z80_res(self, 3, ea, CPU_Z80_EA_A);
5220 cpu_z80_res(self, 4, ea, CPU_Z80_EA_B);
5223 cpu_z80_res(self, 4, ea, CPU_Z80_EA_C);
5226 cpu_z80_res(self, 4, ea, CPU_Z80_EA_D);
5229 cpu_z80_res(self, 4, ea, CPU_Z80_EA_E);
5232 cpu_z80_res(self, 4, ea, CPU_Z80_EA_H);
5235 cpu_z80_res(self, 4, ea, CPU_Z80_EA_L);
5238 cpu_z80_res(self, 4, ea, CPU_Z80_EA_SINK);
5241 cpu_z80_res(self, 4, ea, CPU_Z80_EA_A);
5244 cpu_z80_res(self, 5, ea, CPU_Z80_EA_B);
5247 cpu_z80_res(self, 5, ea, CPU_Z80_EA_C);
5250 cpu_z80_res(self, 5, ea, CPU_Z80_EA_D);
5253 cpu_z80_res(self, 5, ea, CPU_Z80_EA_E);
5256 cpu_z80_res(self, 5, ea, CPU_Z80_EA_H);
5259 cpu_z80_res(self, 5, ea, CPU_Z80_EA_L);
5262 cpu_z80_res(self, 5, ea, CPU_Z80_EA_SINK);
5265 cpu_z80_res(self, 5, ea, CPU_Z80_EA_A);
5268 cpu_z80_res(self, 6, ea, CPU_Z80_EA_B);
5271 cpu_z80_res(self, 6, ea, CPU_Z80_EA_C);
5274 cpu_z80_res(self, 6, ea, CPU_Z80_EA_D);
5277 cpu_z80_res(self, 6, ea, CPU_Z80_EA_E);
5280 cpu_z80_res(self, 6, ea, CPU_Z80_EA_H);
5283 cpu_z80_res(self, 6, ea, CPU_Z80_EA_L);
5286 cpu_z80_res(self, 6, ea, CPU_Z80_EA_SINK);
5289 cpu_z80_res(self, 6, ea, CPU_Z80_EA_A);
5292 cpu_z80_res(self, 7, ea, CPU_Z80_EA_B);
5295 cpu_z80_res(self, 7, ea, CPU_Z80_EA_C);
5298 cpu_z80_res(self, 7, ea, CPU_Z80_EA_D);
5301 cpu_z80_res(self, 7, ea, CPU_Z80_EA_E);
5304 cpu_z80_res(self, 7, ea, CPU_Z80_EA_H);
5307 cpu_z80_res(self, 7, ea, CPU_Z80_EA_L);
5310 cpu_z80_res(self, 7, ea, CPU_Z80_EA_SINK);
5313 cpu_z80_res(self, 7, ea, CPU_Z80_EA_A);
5316 cpu_z80_set(self, 0, ea, CPU_Z80_EA_B);
5319 cpu_z80_set(self, 0, ea, CPU_Z80_EA_C);
5322 cpu_z80_set(self, 0, ea, CPU_Z80_EA_D);
5325 cpu_z80_set(self, 0, ea, CPU_Z80_EA_E);
5328 cpu_z80_set(self, 0, ea, CPU_Z80_EA_H);
5331 cpu_z80_set(self, 0, ea, CPU_Z80_EA_L);
5334 cpu_z80_set(self, 0, ea, CPU_Z80_EA_SINK);
5337 cpu_z80_set(self, 0, ea, CPU_Z80_EA_A);
5340 cpu_z80_set(self, 1, ea, CPU_Z80_EA_B);
5343 cpu_z80_set(self, 1, ea, CPU_Z80_EA_C);
5346 cpu_z80_set(self, 1, ea, CPU_Z80_EA_D);
5349 cpu_z80_set(self, 1, ea, CPU_Z80_EA_E);
5352 cpu_z80_set(self, 1, ea, CPU_Z80_EA_H);
5355 cpu_z80_set(self, 1, ea, CPU_Z80_EA_L);
5358 cpu_z80_set(self, 1, ea, CPU_Z80_EA_SINK);
5361 cpu_z80_set(self, 1, ea, CPU_Z80_EA_A);
5364 cpu_z80_set(self, 2, ea, CPU_Z80_EA_B);
5367 cpu_z80_set(self, 2, ea, CPU_Z80_EA_C);
5370 cpu_z80_set(self, 2, ea, CPU_Z80_EA_D);
5373 cpu_z80_set(self, 2, ea, CPU_Z80_EA_E);
5376 cpu_z80_set(self, 2, ea, CPU_Z80_EA_H);
5379 cpu_z80_set(self, 2, ea, CPU_Z80_EA_L);
5382 cpu_z80_set(self, 2, ea, CPU_Z80_EA_SINK);
5385 cpu_z80_set(self, 2, ea, CPU_Z80_EA_A);
5388 cpu_z80_set(self, 3, ea, CPU_Z80_EA_B);
5391 cpu_z80_set(self, 3, ea, CPU_Z80_EA_C);
5394 cpu_z80_set(self, 3, ea, CPU_Z80_EA_D);
5397 cpu_z80_set(self, 3, ea, CPU_Z80_EA_E);
5400 cpu_z80_set(self, 3, ea, CPU_Z80_EA_H);
5403 cpu_z80_set(self, 3, ea, CPU_Z80_EA_L);
5406 cpu_z80_set(self, 3, ea, CPU_Z80_EA_SINK);
5409 cpu_z80_set(self, 3, ea, CPU_Z80_EA_A);
5412 cpu_z80_set(self, 4, ea, CPU_Z80_EA_B);
5415 cpu_z80_set(self, 4, ea, CPU_Z80_EA_C);
5418 cpu_z80_set(self, 4, ea, CPU_Z80_EA_D);
5421 cpu_z80_set(self, 4, ea, CPU_Z80_EA_E);
5424 cpu_z80_set(self, 4, ea, CPU_Z80_EA_H);
5427 cpu_z80_set(self, 4, ea, CPU_Z80_EA_L);
5430 cpu_z80_set(self, 4, ea, CPU_Z80_EA_SINK);
5433 cpu_z80_set(self, 4, ea, CPU_Z80_EA_A);
5436 cpu_z80_set(self, 5, ea, CPU_Z80_EA_B);
5439 cpu_z80_set(self, 5, ea, CPU_Z80_EA_C);
5442 cpu_z80_set(self, 5, ea, CPU_Z80_EA_D);
5445 cpu_z80_set(self, 5, ea, CPU_Z80_EA_E);
5448 cpu_z80_set(self, 5, ea, CPU_Z80_EA_H);
5451 cpu_z80_set(self, 5, ea, CPU_Z80_EA_L);
5454 cpu_z80_set(self, 5, ea, CPU_Z80_EA_SINK);
5457 cpu_z80_set(self, 5, ea, CPU_Z80_EA_A);
5460 cpu_z80_set(self, 6, ea, CPU_Z80_EA_B);
5463 cpu_z80_set(self, 6, ea, CPU_Z80_EA_C);
5466 cpu_z80_set(self, 6, ea, CPU_Z80_EA_D);
5469 cpu_z80_set(self, 6, ea, CPU_Z80_EA_E);
5472 cpu_z80_set(self, 6, ea, CPU_Z80_EA_H);
5475 cpu_z80_set(self, 6, ea, CPU_Z80_EA_L);
5478 cpu_z80_set(self, 6, ea, CPU_Z80_EA_SINK);
5481 cpu_z80_set(self, 6, ea, CPU_Z80_EA_A);
5484 cpu_z80_set(self, 7, ea, CPU_Z80_EA_B);
5487 cpu_z80_set(self, 7, ea, CPU_Z80_EA_C);
5490 cpu_z80_set(self, 7, ea, CPU_Z80_EA_D);
5493 cpu_z80_set(self, 7, ea, CPU_Z80_EA_E);
5496 cpu_z80_set(self, 7, ea, CPU_Z80_EA_H);
5499 cpu_z80_set(self, 7, ea, CPU_Z80_EA_L);
5502 cpu_z80_set(self, 7, ea, CPU_Z80_EA_SINK);
5505 cpu_z80_set(self, 7, ea, CPU_Z80_EA_A);