2 Skelton for retropc emulator
5 Author : Takeda.Toshiya
13 //#include "debugger.h"
16 //#ifndef CPU_START_ADDR
17 //#define CPU_START_ADDR 0
20 #define NMI_REQ_BIT 0x80000000
90 // opecode definitions
92 #define ENTER_HALT() do { \
97 #define LEAVE_HALT() do { \
104 #define UPDATE_EXTRA_EVENT(clock) do { \
107 busreq_icount += (clock); \
109 update_extra_event(clock); \
113 Z80_INLINE uint8_t __FASTCALL Z80_BASE::RM8(uint32_t addr)
115 //#ifdef Z80_MEMORY_WAIT
116 UPDATE_EXTRA_EVENT(1);
117 if(has_memory_wait) {
119 uint8_t val = d_mem->read_data8w(addr, &wait);
121 UPDATE_EXTRA_EVENT(2 + wait);
125 uint8_t val = d_mem->read_data8(addr);
126 UPDATE_EXTRA_EVENT(2);
132 Z80_INLINE void __FASTCALL Z80_BASE::WM8(uint32_t addr, uint8_t val)
134 //#ifdef Z80_MEMORY_WAIT
135 UPDATE_EXTRA_EVENT(1);
136 if(has_memory_wait) {
138 d_mem->write_data8w(addr, val, &wait);
140 UPDATE_EXTRA_EVENT(2 + wait);
143 d_mem->write_data8(addr, val);
144 UPDATE_EXTRA_EVENT(2);
149 Z80_INLINE void __FASTCALL Z80_BASE::RM16(uint32_t addr, pair32_t *r)
152 r->b.h = RM8((addr + 1) & 0xffff);
155 Z80_INLINE void __FASTCALL Z80_BASE::WM16(uint32_t addr, pair32_t *r)
158 WM8((addr + 1) & 0xffff, r->b.h);
161 Z80_INLINE uint8_t __FASTCALL Z80_BASE::FETCHOP()
163 unsigned pctmp = PCD;
167 // consider m1 cycle wait
168 UPDATE_EXTRA_EVENT(1);
170 uint8_t val = d_mem->fetch_op(pctmp, &wait);
172 UPDATE_EXTRA_EVENT(3 + wait);
176 Z80_INLINE uint8_t __FASTCALL Z80_BASE::FETCH8()
178 unsigned pctmp = PCD;
183 Z80_INLINE uint32_t __FASTCALL Z80_BASE::FETCH16()
185 unsigned pctmp = PCD;
187 return RM8(pctmp) | ((uint32_t)RM8((pctmp + 1) & 0xffff) << 8);
190 Z80_INLINE uint8_t __FASTCALL Z80_BASE::IN8(uint32_t addr)
193 UPDATE_EXTRA_EVENT(2);
196 uint8_t val = d_io->read_io8w(addr, &wait);
198 UPDATE_EXTRA_EVENT(2 + wait);
202 uint8_t val = d_io->read_io8(addr);
203 UPDATE_EXTRA_EVENT(2);
209 Z80_INLINE void __FASTCALL Z80_BASE::OUT8(uint32_t addr, uint8_t val)
212 UPDATE_EXTRA_EVENT(2);
214 if((addr & 0xff) == 0xbb) {
216 UPDATE_EXTRA_EVENT(2);
224 d_io->write_io8w(addr, val, &wait);
226 UPDATE_EXTRA_EVENT(2 + wait);
229 d_io->write_io8(addr, val);
230 UPDATE_EXTRA_EVENT(2);
236 ea = (uint32_t)(uint16_t)(IX + (int8_t)FETCH8()); \
241 ea = (uint32_t)(uint16_t)(IY + (int8_t)FETCH8()); \
245 #define POP(DR) do { \
250 #define PUSH(SR) do { \
260 #define JP_COND(cond) do { \
265 WZ = FETCH16(); /* implicit do PC += 2 */ \
270 int8_t arg = (int8_t)FETCH8(); /* FETCH8() also increments PC */ \
271 PC += arg; /* so don't do PC += FETCH8() */ \
275 #define JR_COND(cond, opcode) do { \
278 icount -= cc_ex[opcode]; \
282 #define CALL() do { \
289 #define CALL_COND(cond, opcode) do { \
295 icount -= cc_ex[opcode]; \
297 WZ = FETCH16(); /* implicit call PC+=2; */ \
301 #define RET_COND(cond, opcode) do { \
305 icount -= cc_ex[opcode]; \
309 #define RETN() do { \
315 #define RETI() do { \
319 if(d_pic != NULL) d_pic->notify_intr_reti(); \
322 #define LD_R_A() do { \
324 R2 = A & 0x80; /* keep bit 7 of r */ \
327 #define LD_A_R() do { \
328 A = (R & 0x7f) | R2; \
329 F = (F & CF) | SZ[A] | (iff2 << 2); \
330 after_ldair = true; \
333 #define LD_I_A() do { \
337 #define LD_A_I() do { \
339 F = (F & CF) | SZ[A] | (iff2 << 2); \
340 after_ldair = true; \
343 #define RST(addr) do { \
349 Z80_INLINE uint8_t __FASTCALL Z80_BASE::INC(uint8_t value)
351 uint8_t res = value + 1;
352 F = (F & CF) | SZHV_inc[res];
356 Z80_INLINE uint8_t Z80_BASE::DEC(uint8_t value)
358 uint8_t res = value - 1;
359 F = (F & CF) | SZHV_dec[res];
363 #define RLCA() do { \
364 A = (A << 1) | (A >> 7); \
365 F = (F & (SF | ZF | PF)) | (A & (YF | XF | CF)); \
368 #define RRCA() do { \
369 F = (F & (SF | ZF | PF)) | (A & CF); \
370 A = (A >> 1) | (A << 7); \
371 F |= (A & (YF | XF)); \
375 uint8_t res = (A << 1) | (F & CF); \
376 uint8_t c = (A & 0x80) ? CF : 0; \
377 F = (F & (SF | ZF | PF)) | c | (res & (YF | XF)); \
382 uint8_t res = (A >> 1) | (F << 7); \
383 uint8_t c = (A & 0x01) ? CF : 0; \
384 F = (F & (SF | ZF | PF)) | c | (res & (YF | XF)); \
389 uint8_t n = RM8(HL); \
391 WM8(HL, (n >> 4) | (A << 4)); \
392 A = (A & 0xf0) | (n & 0x0f); \
393 F = (F & CF) | SZP[A]; \
397 uint8_t n = RM8(HL); \
399 WM8(HL, (n << 4) | (A & 0x0f)); \
400 A = (A & 0xf0) | (n >> 4); \
401 F = (F & CF) | SZP[A]; \
404 #define ADD(value) do { \
405 uint32_t ah = AFD & 0xff00; \
406 uint32_t res = (uint8_t)((ah >> 8) + value); \
407 F = SZHVC_add[ah | res]; \
411 #define ADC(value) do { \
412 uint32_t ah = AFD & 0xff00, c = AFD & 1; \
413 uint32_t res = (uint8_t)((ah >> 8) + value + c); \
414 F = SZHVC_add[(c << 16) | ah | res]; \
418 #define SUB(value) do { \
419 uint32_t ah = AFD & 0xff00; \
420 uint32_t res = (uint8_t)((ah >> 8) - value); \
421 F = SZHVC_sub[ah | res]; \
425 #define SBC(value) do { \
426 uint32_t ah = AFD & 0xff00, c = AFD & 1; \
427 uint32_t res = (uint8_t)((ah >> 8) - value - c); \
428 F = SZHVC_sub[(c << 16) | ah | res]; \
441 if((F & HF) | ((A & 0xf) > 9)) a -= 6; \
442 if((F & CF) | (A > 0x99)) a -= 0x60; \
444 if((F & HF) | ((A & 0xf) > 9)) a += 6; \
445 if((F & CF) | (A > 0x99)) a += 0x60; \
447 F = (F & (CF | NF)) | (A > 0x99) | ((A ^ a) & HF) | SZP[a]; \
451 #define AND(value) do { \
456 #define OR(value) do { \
461 #define XOR(value) do { \
466 #define CP(value) do { \
467 unsigned val = value; \
468 uint32_t ah = AFD & 0xff00; \
469 uint32_t res = (uint8_t)((ah >> 8) - val); \
470 F = (SZHVC_sub[ah | res] & ~(YF | XF)) | (val & (YF | XF)); \
473 #define EX_AF() do { \
475 tmp = af; af = af2; af2 = tmp; \
478 #define EX_DE_HL() do { \
480 tmp = de; de = hl; hl = tmp; \
485 tmp = bc; bc = bc2; bc2 = tmp; \
486 tmp = de; de = de2; de2 = tmp; \
487 tmp = hl; hl = hl2; hl2 = tmp; \
490 #define EXSP(DR) do { \
499 #define ADD16(DR, SR) do { \
500 uint32_t res = DR.d + SR.d; \
502 F = (F & (SF | ZF | VF)) | (((DR.d ^ res ^ SR.d) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (YF | XF)); \
503 DR.w.l = (uint16_t)res; \
506 #define ADC16(Reg) do { \
507 uint32_t res = HLD + Reg.d + (F & CF); \
509 F = (((HLD ^ res ^ Reg.d) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((Reg.d ^ HLD ^ 0x8000) & (Reg.d ^ res) & 0x8000) >> 13); \
510 HL = (uint16_t)res; \
513 #define SBC16(Reg) do { \
514 uint32_t res = HLD - Reg.d - (F & CF); \
516 F = (((HLD ^ res ^ Reg.d) >> 8) & HF) | NF | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((Reg.d ^ HLD) & (HLD ^ res) &0x8000) >> 13); \
517 HL = (uint16_t)res; \
520 Z80_INLINE uint8_t __FASTCALL Z80_BASE::RLC(uint8_t value)
522 unsigned res = value;
523 unsigned c = (res & 0x80) ? CF : 0;
524 res = ((res << 1) | (res >> 7)) & 0xff;
529 Z80_INLINE uint8_t __FASTCALL Z80_BASE::RRC(uint8_t value)
531 unsigned res = value;
532 unsigned c = (res & 0x01) ? CF : 0;
533 res = ((res >> 1) | (res << 7)) & 0xff;
538 Z80_INLINE uint8_t __FASTCALL Z80_BASE::RL(uint8_t value)
540 unsigned res = value;
541 unsigned c = (res & 0x80) ? CF : 0;
542 res = ((res << 1) | (F & CF)) & 0xff;
547 Z80_INLINE uint8_t __FASTCALL Z80_BASE::RR(uint8_t value)
549 unsigned res = value;
550 unsigned c = (res & 0x01) ? CF : 0;
551 res = ((res >> 1) | (F << 7)) & 0xff;
556 Z80_INLINE uint8_t __FASTCALL Z80_BASE::SLA(uint8_t value)
558 unsigned res = value;
559 unsigned c = (res & 0x80) ? CF : 0;
560 res = (res << 1) & 0xff;
565 Z80_INLINE uint8_t __FASTCALL Z80_BASE::SRA(uint8_t value)
567 unsigned res = value;
568 unsigned c = (res & 0x01) ? CF : 0;
569 res = ((res >> 1) | (res & 0x80)) & 0xff;
574 Z80_INLINE uint8_t __FASTCALL Z80_BASE::SLL(uint8_t value)
576 unsigned res = value;
577 unsigned c = (res & 0x80) ? CF : 0;
578 res = ((res << 1) | 0x01) & 0xff;
583 Z80_INLINE uint8_t __FASTCALL Z80_BASE::SRL(uint8_t value)
585 unsigned res = value;
586 unsigned c = (res & 0x01) ? CF : 0;
587 res = (res >> 1) & 0xff;
592 #define BIT(bit, reg) do { \
593 F = (F & CF) | HF | (SZ_BIT[reg & (1 << bit)] & ~(YF | XF)) | (reg & (YF | XF)); \
596 #define BIT_HL(bit, reg) do { \
597 F = (F & CF) | HF | (SZ_BIT[reg & (1 << bit)] & ~(YF | XF)) | (WZ_H & (YF | XF)); \
600 #define BIT_XY(bit, reg) do { \
601 F = (F & CF) | HF | (SZ_BIT[reg & (1 << bit)] & ~(YF | XF)) | ((ea >> 8) & (YF | XF)); \
604 Z80_INLINE uint8_t __FASTCALL Z80_BASE::RES(uint8_t bit, uint8_t value)
606 return value & ~(1 << bit);
609 Z80_INLINE uint8_t __FASTCALL Z80_BASE::SET(uint8_t bit, uint8_t value)
611 return value | (1 << bit);
615 uint8_t io = RM8(HL); \
618 if((A + io) & 0x02) F |= YF; /* bit 1 -> flag 5 */ \
619 if((A + io) & 0x08) F |= XF; /* bit 3 -> flag 3 */ \
625 uint8_t val = RM8(HL); \
626 uint8_t res = A - val; \
629 F = (F & CF) | (SZ[res] & ~(YF | XF)) | ((A ^ val ^ res) & HF) | NF; \
630 if(F & HF) res -= 1; \
631 if(res & 0x02) F |= YF; /* bit 1 -> flag 5 */ \
632 if(res & 0x08) F |= XF; /* bit 3 -> flag 3 */ \
638 uint8_t io = IN8(BC); \
644 t = (unsigned)((C + 1) & 0xff) + (unsigned)io; \
645 if(io & SF) F |= NF; \
646 if(t & 0x100) F |= HF | CF; \
647 F |= SZP[(uint8_t)(t & 0x07) ^ B] & PF; \
650 #define OUTI() do { \
652 uint8_t io = RM8(HL); \
658 t = (unsigned)L + (unsigned)io; \
659 if(io & SF) F |= NF; \
660 if(t & 0x100) F |= HF | CF; \
661 F |= SZP[(uint8_t)(t & 0x07) ^ B] & PF; \
665 uint8_t io = RM8(HL); \
668 if((A + io) & 0x02) F |= YF; /* bit 1 -> flag 5 */ \
669 if((A + io) & 0x08) F |= XF; /* bit 3 -> flag 3 */ \
675 uint8_t val = RM8(HL); \
676 uint8_t res = A - val; \
679 F = (F & CF) | (SZ[res] & ~(YF | XF)) | ((A ^ val ^ res) & HF) | NF; \
680 if(F & HF) res -= 1; \
681 if(res & 0x02) F |= YF; /* bit 1 -> flag 5 */ \
682 if(res & 0x08) F |= XF; /* bit 3 -> flag 3 */ \
688 uint8_t io = IN8(BC); \
694 t = ((unsigned)(C - 1) & 0xff) + (unsigned)io; \
695 if(io & SF) F |= NF; \
696 if(t & 0x100) F |= HF | CF; \
697 F |= SZP[(uint8_t)(t & 0x07) ^ B] & PF; \
700 #define OUTD() do { \
702 uint8_t io = RM8(HL); \
708 t = (unsigned)L + (unsigned)io; \
709 if(io & SF) F |= NF; \
710 if(t & 0x100) F |= HF | CF; \
711 F |= SZP[(uint8_t)(t & 0x07) ^ B] & PF; \
714 #define LDIR() do { \
719 icount -= cc_ex[0xb0]; \
723 #define CPIR() do { \
725 if(BC != 0 && !(F & ZF)) { \
728 icount -= cc_ex[0xb1]; \
732 #define INIR() do { \
736 icount -= cc_ex[0xb2]; \
740 #define OTIR() do { \
744 icount -= cc_ex[0xb3]; \
748 #define LDDR() do { \
753 icount -= cc_ex[0xb8]; \
757 #define CPDR() do { \
759 if(BC != 0 && !(F & ZF)) { \
762 icount -= cc_ex[0xb9]; \
766 #define INDR() do { \
770 icount -= cc_ex[0xba]; \
774 #define OTDR() do { \
778 icount -= cc_ex[0xbb]; \
787 void Z80_BASE::OP_CB(uint8_t code)
789 icount -= cc_cb[code];
792 case 0x00: B = RLC(B); break; /* RLC B */
793 case 0x01: C = RLC(C); break; /* RLC C */
794 case 0x02: D = RLC(D); break; /* RLC D */
795 case 0x03: E = RLC(E); break; /* RLC E */
796 case 0x04: H = RLC(H); break; /* RLC H */
797 case 0x05: L = RLC(L); break; /* RLC L */
798 case 0x06: WM8(HL, RLC(RM8(HL))); break; /* RLC (HL) */
799 case 0x07: A = RLC(A); break; /* RLC A */
800 case 0x08: B = RRC(B); break; /* RRC B */
801 case 0x09: C = RRC(C); break; /* RRC C */
802 case 0x0a: D = RRC(D); break; /* RRC D */
803 case 0x0b: E = RRC(E); break; /* RRC E */
804 case 0x0c: H = RRC(H); break; /* RRC H */
805 case 0x0d: L = RRC(L); break; /* RRC L */
806 case 0x0e: WM8(HL, RRC(RM8(HL))); break; /* RRC (HL) */
807 case 0x0f: A = RRC(A); break; /* RRC A */
808 case 0x10: B = RL(B); break; /* RL B */
809 case 0x11: C = RL(C); break; /* RL C */
810 case 0x12: D = RL(D); break; /* RL D */
811 case 0x13: E = RL(E); break; /* RL E */
812 case 0x14: H = RL(H); break; /* RL H */
813 case 0x15: L = RL(L); break; /* RL L */
814 case 0x16: WM8(HL, RL(RM8(HL))); break; /* RL (HL) */
815 case 0x17: A = RL(A); break; /* RL A */
816 case 0x18: B = RR(B); break; /* RR B */
817 case 0x19: C = RR(C); break; /* RR C */
818 case 0x1a: D = RR(D); break; /* RR D */
819 case 0x1b: E = RR(E); break; /* RR E */
820 case 0x1c: H = RR(H); break; /* RR H */
821 case 0x1d: L = RR(L); break; /* RR L */
822 case 0x1e: WM8(HL, RR(RM8(HL))); break; /* RR (HL) */
823 case 0x1f: A = RR(A); break; /* RR A */
824 case 0x20: B = SLA(B); break; /* SLA B */
825 case 0x21: C = SLA(C); break; /* SLA C */
826 case 0x22: D = SLA(D); break; /* SLA D */
827 case 0x23: E = SLA(E); break; /* SLA E */
828 case 0x24: H = SLA(H); break; /* SLA H */
829 case 0x25: L = SLA(L); break; /* SLA L */
830 case 0x26: WM8(HL, SLA(RM8(HL))); break; /* SLA (HL) */
831 case 0x27: A = SLA(A); break; /* SLA A */
832 case 0x28: B = SRA(B); break; /* SRA B */
833 case 0x29: C = SRA(C); break; /* SRA C */
834 case 0x2a: D = SRA(D); break; /* SRA D */
835 case 0x2b: E = SRA(E); break; /* SRA E */
836 case 0x2c: H = SRA(H); break; /* SRA H */
837 case 0x2d: L = SRA(L); break; /* SRA L */
838 case 0x2e: WM8(HL, SRA(RM8(HL))); break; /* SRA (HL) */
839 case 0x2f: A = SRA(A); break; /* SRA A */
840 case 0x30: B = SLL(B); break; /* SLL B */
841 case 0x31: C = SLL(C); break; /* SLL C */
842 case 0x32: D = SLL(D); break; /* SLL D */
843 case 0x33: E = SLL(E); break; /* SLL E */
844 case 0x34: H = SLL(H); break; /* SLL H */
845 case 0x35: L = SLL(L); break; /* SLL L */
846 case 0x36: WM8(HL, SLL(RM8(HL))); break; /* SLL (HL) */
847 case 0x37: A = SLL(A); break; /* SLL A */
848 case 0x38: B = SRL(B); break; /* SRL B */
849 case 0x39: C = SRL(C); break; /* SRL C */
850 case 0x3a: D = SRL(D); break; /* SRL D */
851 case 0x3b: E = SRL(E); break; /* SRL E */
852 case 0x3c: H = SRL(H); break; /* SRL H */
853 case 0x3d: L = SRL(L); break; /* SRL L */
854 case 0x3e: WM8(HL, SRL(RM8(HL))); break; /* SRL (HL) */
855 case 0x3f: A = SRL(A); break; /* SRL A */
856 case 0x40: BIT(0, B); break; /* BIT 0,B */
857 case 0x41: BIT(0, C); break; /* BIT 0,C */
858 case 0x42: BIT(0, D); break; /* BIT 0,D */
859 case 0x43: BIT(0, E); break; /* BIT 0,E */
860 case 0x44: BIT(0, H); break; /* BIT 0,H */
861 case 0x45: BIT(0, L); break; /* BIT 0,L */
862 case 0x46: BIT_HL(0, RM8(HL)); break; /* BIT 0,(HL) */
863 case 0x47: BIT(0, A); break; /* BIT 0,A */
864 case 0x48: BIT(1, B); break; /* BIT 1,B */
865 case 0x49: BIT(1, C); break; /* BIT 1,C */
866 case 0x4a: BIT(1, D); break; /* BIT 1,D */
867 case 0x4b: BIT(1, E); break; /* BIT 1,E */
868 case 0x4c: BIT(1, H); break; /* BIT 1,H */
869 case 0x4d: BIT(1, L); break; /* BIT 1,L */
870 case 0x4e: BIT_HL(1, RM8(HL)); break; /* BIT 1,(HL) */
871 case 0x4f: BIT(1, A); break; /* BIT 1,A */
872 case 0x50: BIT(2, B); break; /* BIT 2,B */
873 case 0x51: BIT(2, C); break; /* BIT 2,C */
874 case 0x52: BIT(2, D); break; /* BIT 2,D */
875 case 0x53: BIT(2, E); break; /* BIT 2,E */
876 case 0x54: BIT(2, H); break; /* BIT 2,H */
877 case 0x55: BIT(2, L); break; /* BIT 2,L */
878 case 0x56: BIT_HL(2, RM8(HL)); break; /* BIT 2,(HL) */
879 case 0x57: BIT(2, A); break; /* BIT 2,A */
880 case 0x58: BIT(3, B); break; /* BIT 3,B */
881 case 0x59: BIT(3, C); break; /* BIT 3,C */
882 case 0x5a: BIT(3, D); break; /* BIT 3,D */
883 case 0x5b: BIT(3, E); break; /* BIT 3,E */
884 case 0x5c: BIT(3, H); break; /* BIT 3,H */
885 case 0x5d: BIT(3, L); break; /* BIT 3,L */
886 case 0x5e: BIT_HL(3, RM8(HL)); break; /* BIT 3,(HL) */
887 case 0x5f: BIT(3, A); break; /* BIT 3,A */
888 case 0x60: BIT(4, B); break; /* BIT 4,B */
889 case 0x61: BIT(4, C); break; /* BIT 4,C */
890 case 0x62: BIT(4, D); break; /* BIT 4,D */
891 case 0x63: BIT(4, E); break; /* BIT 4,E */
892 case 0x64: BIT(4, H); break; /* BIT 4,H */
893 case 0x65: BIT(4, L); break; /* BIT 4,L */
894 case 0x66: BIT_HL(4, RM8(HL)); break; /* BIT 4,(HL) */
895 case 0x67: BIT(4, A); break; /* BIT 4,A */
896 case 0x68: BIT(5, B); break; /* BIT 5,B */
897 case 0x69: BIT(5, C); break; /* BIT 5,C */
898 case 0x6a: BIT(5, D); break; /* BIT 5,D */
899 case 0x6b: BIT(5, E); break; /* BIT 5,E */
900 case 0x6c: BIT(5, H); break; /* BIT 5,H */
901 case 0x6d: BIT(5, L); break; /* BIT 5,L */
902 case 0x6e: BIT_HL(5, RM8(HL)); break; /* BIT 5,(HL) */
903 case 0x6f: BIT(5, A); break; /* BIT 5,A */
904 case 0x70: BIT(6, B); break; /* BIT 6,B */
905 case 0x71: BIT(6, C); break; /* BIT 6,C */
906 case 0x72: BIT(6, D); break; /* BIT 6,D */
907 case 0x73: BIT(6, E); break; /* BIT 6,E */
908 case 0x74: BIT(6, H); break; /* BIT 6,H */
909 case 0x75: BIT(6, L); break; /* BIT 6,L */
910 case 0x76: BIT_HL(6, RM8(HL)); break; /* BIT 6,(HL) */
911 case 0x77: BIT(6, A); break; /* BIT 6,A */
912 case 0x78: BIT(7, B); break; /* BIT 7,B */
913 case 0x79: BIT(7, C); break; /* BIT 7,C */
914 case 0x7a: BIT(7, D); break; /* BIT 7,D */
915 case 0x7b: BIT(7, E); break; /* BIT 7,E */
916 case 0x7c: BIT(7, H); break; /* BIT 7,H */
917 case 0x7d: BIT(7, L); break; /* BIT 7,L */
918 case 0x7e: BIT_HL(7, RM8(HL)); break; /* BIT 7,(HL) */
919 case 0x7f: BIT(7, A); break; /* BIT 7,A */
920 case 0x80: B = RES(0, B); break; /* RES 0,B */
921 case 0x81: C = RES(0, C); break; /* RES 0,C */
922 case 0x82: D = RES(0, D); break; /* RES 0,D */
923 case 0x83: E = RES(0, E); break; /* RES 0,E */
924 case 0x84: H = RES(0, H); break; /* RES 0,H */
925 case 0x85: L = RES(0, L); break; /* RES 0,L */
926 case 0x86: WM8(HL, RES(0, RM8(HL))); break; /* RES 0,(HL) */
927 case 0x87: A = RES(0, A); break; /* RES 0,A */
928 case 0x88: B = RES(1, B); break; /* RES 1,B */
929 case 0x89: C = RES(1, C); break; /* RES 1,C */
930 case 0x8a: D = RES(1, D); break; /* RES 1,D */
931 case 0x8b: E = RES(1, E); break; /* RES 1,E */
932 case 0x8c: H = RES(1, H); break; /* RES 1,H */
933 case 0x8d: L = RES(1, L); break; /* RES 1,L */
934 case 0x8e: WM8(HL, RES(1, RM8(HL))); break; /* RES 1,(HL) */
935 case 0x8f: A = RES(1, A); break; /* RES 1,A */
936 case 0x90: B = RES(2, B); break; /* RES 2,B */
937 case 0x91: C = RES(2, C); break; /* RES 2,C */
938 case 0x92: D = RES(2, D); break; /* RES 2,D */
939 case 0x93: E = RES(2, E); break; /* RES 2,E */
940 case 0x94: H = RES(2, H); break; /* RES 2,H */
941 case 0x95: L = RES(2, L); break; /* RES 2,L */
942 case 0x96: WM8(HL, RES(2, RM8(HL))); break; /* RES 2,(HL) */
943 case 0x97: A = RES(2, A); break; /* RES 2,A */
944 case 0x98: B = RES(3, B); break; /* RES 3,B */
945 case 0x99: C = RES(3, C); break; /* RES 3,C */
946 case 0x9a: D = RES(3, D); break; /* RES 3,D */
947 case 0x9b: E = RES(3, E); break; /* RES 3,E */
948 case 0x9c: H = RES(3, H); break; /* RES 3,H */
949 case 0x9d: L = RES(3, L); break; /* RES 3,L */
950 case 0x9e: WM8(HL, RES(3, RM8(HL))); break; /* RES 3,(HL) */
951 case 0x9f: A = RES(3, A); break; /* RES 3,A */
952 case 0xa0: B = RES(4, B); break; /* RES 4,B */
953 case 0xa1: C = RES(4, C); break; /* RES 4,C */
954 case 0xa2: D = RES(4, D); break; /* RES 4,D */
955 case 0xa3: E = RES(4, E); break; /* RES 4,E */
956 case 0xa4: H = RES(4, H); break; /* RES 4,H */
957 case 0xa5: L = RES(4, L); break; /* RES 4,L */
958 case 0xa6: WM8(HL, RES(4, RM8(HL))); break; /* RES 4,(HL) */
959 case 0xa7: A = RES(4, A); break; /* RES 4,A */
960 case 0xa8: B = RES(5, B); break; /* RES 5,B */
961 case 0xa9: C = RES(5, C); break; /* RES 5,C */
962 case 0xaa: D = RES(5, D); break; /* RES 5,D */
963 case 0xab: E = RES(5, E); break; /* RES 5,E */
964 case 0xac: H = RES(5, H); break; /* RES 5,H */
965 case 0xad: L = RES(5, L); break; /* RES 5,L */
966 case 0xae: WM8(HL, RES(5, RM8(HL))); break; /* RES 5,(HL) */
967 case 0xaf: A = RES(5, A); break; /* RES 5,A */
968 case 0xb0: B = RES(6, B); break; /* RES 6,B */
969 case 0xb1: C = RES(6, C); break; /* RES 6,C */
970 case 0xb2: D = RES(6, D); break; /* RES 6,D */
971 case 0xb3: E = RES(6, E); break; /* RES 6,E */
972 case 0xb4: H = RES(6, H); break; /* RES 6,H */
973 case 0xb5: L = RES(6, L); break; /* RES 6,L */
974 case 0xb6: WM8(HL, RES(6, RM8(HL))); break; /* RES 6,(HL) */
975 case 0xb7: A = RES(6, A); break; /* RES 6,A */
976 case 0xb8: B = RES(7, B); break; /* RES 7,B */
977 case 0xb9: C = RES(7, C); break; /* RES 7,C */
978 case 0xba: D = RES(7, D); break; /* RES 7,D */
979 case 0xbb: E = RES(7, E); break; /* RES 7,E */
980 case 0xbc: H = RES(7, H); break; /* RES 7,H */
981 case 0xbd: L = RES(7, L); break; /* RES 7,L */
982 case 0xbe: WM8(HL, RES(7, RM8(HL))); break; /* RES 7,(HL) */
983 case 0xbf: A = RES(7, A); break; /* RES 7,A */
984 case 0xc0: B = SET(0, B); break; /* SET 0,B */
985 case 0xc1: C = SET(0, C); break; /* SET 0,C */
986 case 0xc2: D = SET(0, D); break; /* SET 0,D */
987 case 0xc3: E = SET(0, E); break; /* SET 0,E */
988 case 0xc4: H = SET(0, H); break; /* SET 0,H */
989 case 0xc5: L = SET(0, L); break; /* SET 0,L */
990 case 0xc6: WM8(HL, SET(0, RM8(HL))); break; /* SET 0,(HL) */
991 case 0xc7: A = SET(0, A); break; /* SET 0,A */
992 case 0xc8: B = SET(1, B); break; /* SET 1,B */
993 case 0xc9: C = SET(1, C); break; /* SET 1,C */
994 case 0xca: D = SET(1, D); break; /* SET 1,D */
995 case 0xcb: E = SET(1, E); break; /* SET 1,E */
996 case 0xcc: H = SET(1, H); break; /* SET 1,H */
997 case 0xcd: L = SET(1, L); break; /* SET 1,L */
998 case 0xce: WM8(HL, SET(1, RM8(HL))); break; /* SET 1,(HL) */
999 case 0xcf: A = SET(1, A); break; /* SET 1,A */
1000 case 0xd0: B = SET(2, B); break; /* SET 2,B */
1001 case 0xd1: C = SET(2, C); break; /* SET 2,C */
1002 case 0xd2: D = SET(2, D); break; /* SET 2,D */
1003 case 0xd3: E = SET(2, E); break; /* SET 2,E */
1004 case 0xd4: H = SET(2, H); break; /* SET 2,H */
1005 case 0xd5: L = SET(2, L); break; /* SET 2,L */
1006 case 0xd6: WM8(HL, SET(2, RM8(HL))); break; /* SET 2,(HL) */
1007 case 0xd7: A = SET(2, A); break; /* SET 2,A */
1008 case 0xd8: B = SET(3, B); break; /* SET 3,B */
1009 case 0xd9: C = SET(3, C); break; /* SET 3,C */
1010 case 0xda: D = SET(3, D); break; /* SET 3,D */
1011 case 0xdb: E = SET(3, E); break; /* SET 3,E */
1012 case 0xdc: H = SET(3, H); break; /* SET 3,H */
1013 case 0xdd: L = SET(3, L); break; /* SET 3,L */
1014 case 0xde: WM8(HL, SET(3, RM8(HL))); break; /* SET 3,(HL) */
1015 case 0xdf: A = SET(3, A); break; /* SET 3,A */
1016 case 0xe0: B = SET(4, B); break; /* SET 4,B */
1017 case 0xe1: C = SET(4, C); break; /* SET 4,C */
1018 case 0xe2: D = SET(4, D); break; /* SET 4,D */
1019 case 0xe3: E = SET(4, E); break; /* SET 4,E */
1020 case 0xe4: H = SET(4, H); break; /* SET 4,H */
1021 case 0xe5: L = SET(4, L); break; /* SET 4,L */
1022 case 0xe6: WM8(HL, SET(4, RM8(HL))); break; /* SET 4,(HL) */
1023 case 0xe7: A = SET(4, A); break; /* SET 4,A */
1024 case 0xe8: B = SET(5, B); break; /* SET 5,B */
1025 case 0xe9: C = SET(5, C); break; /* SET 5,C */
1026 case 0xea: D = SET(5, D); break; /* SET 5,D */
1027 case 0xeb: E = SET(5, E); break; /* SET 5,E */
1028 case 0xec: H = SET(5, H); break; /* SET 5,H */
1029 case 0xed: L = SET(5, L); break; /* SET 5,L */
1030 case 0xee: WM8(HL, SET(5, RM8(HL))); break; /* SET 5,(HL) */
1031 case 0xef: A = SET(5, A); break; /* SET 5,A */
1032 case 0xf0: B = SET(6, B); break; /* SET 6,B */
1033 case 0xf1: C = SET(6, C); break; /* SET 6,C */
1034 case 0xf2: D = SET(6, D); break; /* SET 6,D */
1035 case 0xf3: E = SET(6, E); break; /* SET 6,E */
1036 case 0xf4: H = SET(6, H); break; /* SET 6,H */
1037 case 0xf5: L = SET(6, L); break; /* SET 6,L */
1038 case 0xf6: WM8(HL, SET(6, RM8(HL))); break; /* SET 6,(HL) */
1039 case 0xf7: A = SET(6, A); break; /* SET 6,A */
1040 case 0xf8: B = SET(7, B); break; /* SET 7,B */
1041 case 0xf9: C = SET(7, C); break; /* SET 7,C */
1042 case 0xfa: D = SET(7, D); break; /* SET 7,D */
1043 case 0xfb: E = SET(7, E); break; /* SET 7,E */
1044 case 0xfc: H = SET(7, H); break; /* SET 7,H */
1045 case 0xfd: L = SET(7, L); break; /* SET 7,L */
1046 case 0xfe: WM8(HL, SET(7, RM8(HL))); break; /* SET 7,(HL) */
1047 case 0xff: A = SET(7, A); break; /* SET 7,A */
1048 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
1049 default: __assume(0);
1054 void Z80_BASE::OP_XY(uint8_t code)
1056 icount -= cc_xycb[code];
1059 case 0x00: B = RLC(RM8(ea)); WM8(ea, B); break; /* RLC B=(XY+o) */
1060 case 0x01: C = RLC(RM8(ea)); WM8(ea, C); break; /* RLC C=(XY+o) */
1061 case 0x02: D = RLC(RM8(ea)); WM8(ea, D); break; /* RLC D=(XY+o) */
1062 case 0x03: E = RLC(RM8(ea)); WM8(ea, E); break; /* RLC E=(XY+o) */
1063 case 0x04: H = RLC(RM8(ea)); WM8(ea, H); break; /* RLC H=(XY+o) */
1064 case 0x05: L = RLC(RM8(ea)); WM8(ea, L); break; /* RLC L=(XY+o) */
1065 case 0x06: WM8(ea, RLC(RM8(ea))); break; /* RLC (XY+o) */
1066 case 0x07: A = RLC(RM8(ea)); WM8(ea, A); break; /* RLC A=(XY+o) */
1067 case 0x08: B = RRC(RM8(ea)); WM8(ea, B); break; /* RRC B=(XY+o) */
1068 case 0x09: C = RRC(RM8(ea)); WM8(ea, C); break; /* RRC C=(XY+o) */
1069 case 0x0a: D = RRC(RM8(ea)); WM8(ea, D); break; /* RRC D=(XY+o) */
1070 case 0x0b: E = RRC(RM8(ea)); WM8(ea, E); break; /* RRC E=(XY+o) */
1071 case 0x0c: H = RRC(RM8(ea)); WM8(ea, H); break; /* RRC H=(XY+o) */
1072 case 0x0d: L = RRC(RM8(ea)); WM8(ea, L); break; /* RRC L=(XY+o) */
1073 case 0x0e: WM8(ea, RRC(RM8(ea))); break; /* RRC (XY+o) */
1074 case 0x0f: A = RRC(RM8(ea)); WM8(ea, A); break; /* RRC A=(XY+o) */
1075 case 0x10: B = RL(RM8(ea)); WM8(ea, B); break; /* RL B=(XY+o) */
1076 case 0x11: C = RL(RM8(ea)); WM8(ea, C); break; /* RL C=(XY+o) */
1077 case 0x12: D = RL(RM8(ea)); WM8(ea, D); break; /* RL D=(XY+o) */
1078 case 0x13: E = RL(RM8(ea)); WM8(ea, E); break; /* RL E=(XY+o) */
1079 case 0x14: H = RL(RM8(ea)); WM8(ea, H); break; /* RL H=(XY+o) */
1080 case 0x15: L = RL(RM8(ea)); WM8(ea, L); break; /* RL L=(XY+o) */
1081 case 0x16: WM8(ea, RL(RM8(ea))); break; /* RL (XY+o) */
1082 case 0x17: A = RL(RM8(ea)); WM8(ea, A); break; /* RL A=(XY+o) */
1083 case 0x18: B = RR(RM8(ea)); WM8(ea, B); break; /* RR B=(XY+o) */
1084 case 0x19: C = RR(RM8(ea)); WM8(ea, C); break; /* RR C=(XY+o) */
1085 case 0x1a: D = RR(RM8(ea)); WM8(ea, D); break; /* RR D=(XY+o) */
1086 case 0x1b: E = RR(RM8(ea)); WM8(ea, E); break; /* RR E=(XY+o) */
1087 case 0x1c: H = RR(RM8(ea)); WM8(ea, H); break; /* RR H=(XY+o) */
1088 case 0x1d: L = RR(RM8(ea)); WM8(ea, L); break; /* RR L=(XY+o) */
1089 case 0x1e: WM8(ea, RR(RM8(ea))); break; /* RR (XY+o) */
1090 case 0x1f: A = RR(RM8(ea)); WM8(ea, A); break; /* RR A=(XY+o) */
1091 case 0x20: B = SLA(RM8(ea)); WM8(ea, B); break; /* SLA B=(XY+o) */
1092 case 0x21: C = SLA(RM8(ea)); WM8(ea, C); break; /* SLA C=(XY+o) */
1093 case 0x22: D = SLA(RM8(ea)); WM8(ea, D); break; /* SLA D=(XY+o) */
1094 case 0x23: E = SLA(RM8(ea)); WM8(ea, E); break; /* SLA E=(XY+o) */
1095 case 0x24: H = SLA(RM8(ea)); WM8(ea, H); break; /* SLA H=(XY+o) */
1096 case 0x25: L = SLA(RM8(ea)); WM8(ea, L); break; /* SLA L=(XY+o) */
1097 case 0x26: WM8(ea, SLA(RM8(ea))); break; /* SLA (XY+o) */
1098 case 0x27: A = SLA(RM8(ea)); WM8(ea, A); break; /* SLA A=(XY+o) */
1099 case 0x28: B = SRA(RM8(ea)); WM8(ea, B); break; /* SRA B=(XY+o) */
1100 case 0x29: C = SRA(RM8(ea)); WM8(ea, C); break; /* SRA C=(XY+o) */
1101 case 0x2a: D = SRA(RM8(ea)); WM8(ea, D); break; /* SRA D=(XY+o) */
1102 case 0x2b: E = SRA(RM8(ea)); WM8(ea, E); break; /* SRA E=(XY+o) */
1103 case 0x2c: H = SRA(RM8(ea)); WM8(ea, H); break; /* SRA H=(XY+o) */
1104 case 0x2d: L = SRA(RM8(ea)); WM8(ea, L); break; /* SRA L=(XY+o) */
1105 case 0x2e: WM8(ea, SRA(RM8(ea))); break; /* SRA (XY+o) */
1106 case 0x2f: A = SRA(RM8(ea)); WM8(ea, A); break; /* SRA A=(XY+o) */
1107 case 0x30: B = SLL(RM8(ea)); WM8(ea, B); break; /* SLL B=(XY+o) */
1108 case 0x31: C = SLL(RM8(ea)); WM8(ea, C); break; /* SLL C=(XY+o) */
1109 case 0x32: D = SLL(RM8(ea)); WM8(ea, D); break; /* SLL D=(XY+o) */
1110 case 0x33: E = SLL(RM8(ea)); WM8(ea, E); break; /* SLL E=(XY+o) */
1111 case 0x34: H = SLL(RM8(ea)); WM8(ea, H); break; /* SLL H=(XY+o) */
1112 case 0x35: L = SLL(RM8(ea)); WM8(ea, L); break; /* SLL L=(XY+o) */
1113 case 0x36: WM8(ea, SLL(RM8(ea))); break; /* SLL (XY+o) */
1114 case 0x37: A = SLL(RM8(ea)); WM8(ea, A); break; /* SLL A=(XY+o) */
1115 case 0x38: B = SRL(RM8(ea)); WM8(ea, B); break; /* SRL B=(XY+o) */
1116 case 0x39: C = SRL(RM8(ea)); WM8(ea, C); break; /* SRL C=(XY+o) */
1117 case 0x3a: D = SRL(RM8(ea)); WM8(ea, D); break; /* SRL D=(XY+o) */
1118 case 0x3b: E = SRL(RM8(ea)); WM8(ea, E); break; /* SRL E=(XY+o) */
1119 case 0x3c: H = SRL(RM8(ea)); WM8(ea, H); break; /* SRL H=(XY+o) */
1120 case 0x3d: L = SRL(RM8(ea)); WM8(ea, L); break; /* SRL L=(XY+o) */
1121 case 0x3e: WM8(ea, SRL(RM8(ea))); break; /* SRL (XY+o) */
1122 case 0x3f: A = SRL(RM8(ea)); WM8(ea, A); break; /* SRL A=(XY+o) */
1123 case 0x40: BIT_XY(0, RM8(ea)); break; /* BIT 0,(XY+o) */
1124 case 0x41: BIT_XY(0, RM8(ea)); break; /* BIT 0,(XY+o) */
1125 case 0x42: BIT_XY(0, RM8(ea)); break; /* BIT 0,(XY+o) */
1126 case 0x43: BIT_XY(0, RM8(ea)); break; /* BIT 0,(XY+o) */
1127 case 0x44: BIT_XY(0, RM8(ea)); break; /* BIT 0,(XY+o) */
1128 case 0x45: BIT_XY(0, RM8(ea)); break; /* BIT 0,(XY+o) */
1129 case 0x46: BIT_XY(0, RM8(ea)); break; /* BIT 0,(XY+o) */
1130 case 0x47: BIT_XY(0, RM8(ea)); break; /* BIT 0,(XY+o) */
1131 case 0x48: BIT_XY(1, RM8(ea)); break; /* BIT 1,(XY+o) */
1132 case 0x49: BIT_XY(1, RM8(ea)); break; /* BIT 1,(XY+o) */
1133 case 0x4a: BIT_XY(1, RM8(ea)); break; /* BIT 1,(XY+o) */
1134 case 0x4b: BIT_XY(1, RM8(ea)); break; /* BIT 1,(XY+o) */
1135 case 0x4c: BIT_XY(1, RM8(ea)); break; /* BIT 1,(XY+o) */
1136 case 0x4d: BIT_XY(1, RM8(ea)); break; /* BIT 1,(XY+o) */
1137 case 0x4e: BIT_XY(1, RM8(ea)); break; /* BIT 1,(XY+o) */
1138 case 0x4f: BIT_XY(1, RM8(ea)); break; /* BIT 1,(XY+o) */
1139 case 0x50: BIT_XY(2, RM8(ea)); break; /* BIT 2,(XY+o) */
1140 case 0x51: BIT_XY(2, RM8(ea)); break; /* BIT 2,(XY+o) */
1141 case 0x52: BIT_XY(2, RM8(ea)); break; /* BIT 2,(XY+o) */
1142 case 0x53: BIT_XY(2, RM8(ea)); break; /* BIT 2,(XY+o) */
1143 case 0x54: BIT_XY(2, RM8(ea)); break; /* BIT 2,(XY+o) */
1144 case 0x55: BIT_XY(2, RM8(ea)); break; /* BIT 2,(XY+o) */
1145 case 0x56: BIT_XY(2, RM8(ea)); break; /* BIT 2,(XY+o) */
1146 case 0x57: BIT_XY(2, RM8(ea)); break; /* BIT 2,(XY+o) */
1147 case 0x58: BIT_XY(3, RM8(ea)); break; /* BIT 3,(XY+o) */
1148 case 0x59: BIT_XY(3, RM8(ea)); break; /* BIT 3,(XY+o) */
1149 case 0x5a: BIT_XY(3, RM8(ea)); break; /* BIT 3,(XY+o) */
1150 case 0x5b: BIT_XY(3, RM8(ea)); break; /* BIT 3,(XY+o) */
1151 case 0x5c: BIT_XY(3, RM8(ea)); break; /* BIT 3,(XY+o) */
1152 case 0x5d: BIT_XY(3, RM8(ea)); break; /* BIT 3,(XY+o) */
1153 case 0x5e: BIT_XY(3, RM8(ea)); break; /* BIT 3,(XY+o) */
1154 case 0x5f: BIT_XY(3, RM8(ea)); break; /* BIT 3,(XY+o) */
1155 case 0x60: BIT_XY(4, RM8(ea)); break; /* BIT 4,(XY+o) */
1156 case 0x61: BIT_XY(4, RM8(ea)); break; /* BIT 4,(XY+o) */
1157 case 0x62: BIT_XY(4, RM8(ea)); break; /* BIT 4,(XY+o) */
1158 case 0x63: BIT_XY(4, RM8(ea)); break; /* BIT 4,(XY+o) */
1159 case 0x64: BIT_XY(4, RM8(ea)); break; /* BIT 4,(XY+o) */
1160 case 0x65: BIT_XY(4, RM8(ea)); break; /* BIT 4,(XY+o) */
1161 case 0x66: BIT_XY(4, RM8(ea)); break; /* BIT 4,(XY+o) */
1162 case 0x67: BIT_XY(4, RM8(ea)); break; /* BIT 4,(XY+o) */
1163 case 0x68: BIT_XY(5, RM8(ea)); break; /* BIT 5,(XY+o) */
1164 case 0x69: BIT_XY(5, RM8(ea)); break; /* BIT 5,(XY+o) */
1165 case 0x6a: BIT_XY(5, RM8(ea)); break; /* BIT 5,(XY+o) */
1166 case 0x6b: BIT_XY(5, RM8(ea)); break; /* BIT 5,(XY+o) */
1167 case 0x6c: BIT_XY(5, RM8(ea)); break; /* BIT 5,(XY+o) */
1168 case 0x6d: BIT_XY(5, RM8(ea)); break; /* BIT 5,(XY+o) */
1169 case 0x6e: BIT_XY(5, RM8(ea)); break; /* BIT 5,(XY+o) */
1170 case 0x6f: BIT_XY(5, RM8(ea)); break; /* BIT 5,(XY+o) */
1171 case 0x70: BIT_XY(6, RM8(ea)); break; /* BIT 6,(XY+o) */
1172 case 0x71: BIT_XY(6, RM8(ea)); break; /* BIT 6,(XY+o) */
1173 case 0x72: BIT_XY(6, RM8(ea)); break; /* BIT 6,(XY+o) */
1174 case 0x73: BIT_XY(6, RM8(ea)); break; /* BIT 6,(XY+o) */
1175 case 0x74: BIT_XY(6, RM8(ea)); break; /* BIT 6,(XY+o) */
1176 case 0x75: BIT_XY(6, RM8(ea)); break; /* BIT 6,(XY+o) */
1177 case 0x76: BIT_XY(6, RM8(ea)); break; /* BIT 6,(XY+o) */
1178 case 0x77: BIT_XY(6, RM8(ea)); break; /* BIT 6,(XY+o) */
1179 case 0x78: BIT_XY(7, RM8(ea)); break; /* BIT 7,(XY+o) */
1180 case 0x79: BIT_XY(7, RM8(ea)); break; /* BIT 7,(XY+o) */
1181 case 0x7a: BIT_XY(7, RM8(ea)); break; /* BIT 7,(XY+o) */
1182 case 0x7b: BIT_XY(7, RM8(ea)); break; /* BIT 7,(XY+o) */
1183 case 0x7c: BIT_XY(7, RM8(ea)); break; /* BIT 7,(XY+o) */
1184 case 0x7d: BIT_XY(7, RM8(ea)); break; /* BIT 7,(XY+o) */
1185 case 0x7e: BIT_XY(7, RM8(ea)); break; /* BIT 7,(XY+o) */
1186 case 0x7f: BIT_XY(7, RM8(ea)); break; /* BIT 7,(XY+o) */
1187 case 0x80: B = RES(0, RM8(ea)); WM8(ea, B); break; /* RES 0,B=(XY+o) */
1188 case 0x81: C = RES(0, RM8(ea)); WM8(ea, C); break; /* RES 0,C=(XY+o) */
1189 case 0x82: D = RES(0, RM8(ea)); WM8(ea, D); break; /* RES 0,D=(XY+o) */
1190 case 0x83: E = RES(0, RM8(ea)); WM8(ea, E); break; /* RES 0,E=(XY+o) */
1191 case 0x84: H = RES(0, RM8(ea)); WM8(ea, H); break; /* RES 0,H=(XY+o) */
1192 case 0x85: L = RES(0, RM8(ea)); WM8(ea, L); break; /* RES 0,L=(XY+o) */
1193 case 0x86: WM8(ea, RES(0, RM8(ea))); break; /* RES 0,(XY+o) */
1194 case 0x87: A = RES(0, RM8(ea)); WM8(ea, A); break; /* RES 0,A=(XY+o) */
1195 case 0x88: B = RES(1, RM8(ea)); WM8(ea, B); break; /* RES 1,B=(XY+o) */
1196 case 0x89: C = RES(1, RM8(ea)); WM8(ea, C); break; /* RES 1,C=(XY+o) */
1197 case 0x8a: D = RES(1, RM8(ea)); WM8(ea, D); break; /* RES 1,D=(XY+o) */
1198 case 0x8b: E = RES(1, RM8(ea)); WM8(ea, E); break; /* RES 1,E=(XY+o) */
1199 case 0x8c: H = RES(1, RM8(ea)); WM8(ea, H); break; /* RES 1,H=(XY+o) */
1200 case 0x8d: L = RES(1, RM8(ea)); WM8(ea, L); break; /* RES 1,L=(XY+o) */
1201 case 0x8e: WM8(ea, RES(1, RM8(ea))); break; /* RES 1,(XY+o) */
1202 case 0x8f: A = RES(1, RM8(ea)); WM8(ea, A); break; /* RES 1,A=(XY+o) */
1203 case 0x90: B = RES(2, RM8(ea)); WM8(ea, B); break; /* RES 2,B=(XY+o) */
1204 case 0x91: C = RES(2, RM8(ea)); WM8(ea, C); break; /* RES 2,C=(XY+o) */
1205 case 0x92: D = RES(2, RM8(ea)); WM8(ea, D); break; /* RES 2,D=(XY+o) */
1206 case 0x93: E = RES(2, RM8(ea)); WM8(ea, E); break; /* RES 2,E=(XY+o) */
1207 case 0x94: H = RES(2, RM8(ea)); WM8(ea, H); break; /* RES 2,H=(XY+o) */
1208 case 0x95: L = RES(2, RM8(ea)); WM8(ea, L); break; /* RES 2,L=(XY+o) */
1209 case 0x96: WM8(ea, RES(2, RM8(ea))); break; /* RES 2,(XY+o) */
1210 case 0x97: A = RES(2, RM8(ea)); WM8(ea, A); break; /* RES 2,A=(XY+o) */
1211 case 0x98: B = RES(3, RM8(ea)); WM8(ea, B); break; /* RES 3,B=(XY+o) */
1212 case 0x99: C = RES(3, RM8(ea)); WM8(ea, C); break; /* RES 3,C=(XY+o) */
1213 case 0x9a: D = RES(3, RM8(ea)); WM8(ea, D); break; /* RES 3,D=(XY+o) */
1214 case 0x9b: E = RES(3, RM8(ea)); WM8(ea, E); break; /* RES 3,E=(XY+o) */
1215 case 0x9c: H = RES(3, RM8(ea)); WM8(ea, H); break; /* RES 3,H=(XY+o) */
1216 case 0x9d: L = RES(3, RM8(ea)); WM8(ea, L); break; /* RES 3,L=(XY+o) */
1217 case 0x9e: WM8(ea, RES(3, RM8(ea))); break; /* RES 3,(XY+o) */
1218 case 0x9f: A = RES(3, RM8(ea)); WM8(ea, A); break; /* RES 3,A=(XY+o) */
1219 case 0xa0: B = RES(4, RM8(ea)); WM8(ea, B); break; /* RES 4,B=(XY+o) */
1220 case 0xa1: C = RES(4, RM8(ea)); WM8(ea, C); break; /* RES 4,C=(XY+o) */
1221 case 0xa2: D = RES(4, RM8(ea)); WM8(ea, D); break; /* RES 4,D=(XY+o) */
1222 case 0xa3: E = RES(4, RM8(ea)); WM8(ea, E); break; /* RES 4,E=(XY+o) */
1223 case 0xa4: H = RES(4, RM8(ea)); WM8(ea, H); break; /* RES 4,H=(XY+o) */
1224 case 0xa5: L = RES(4, RM8(ea)); WM8(ea, L); break; /* RES 4,L=(XY+o) */
1225 case 0xa6: WM8(ea, RES(4, RM8(ea))); break; /* RES 4,(XY+o) */
1226 case 0xa7: A = RES(4, RM8(ea)); WM8(ea, A); break; /* RES 4,A=(XY+o) */
1227 case 0xa8: B = RES(5, RM8(ea)); WM8(ea, B); break; /* RES 5,B=(XY+o) */
1228 case 0xa9: C = RES(5, RM8(ea)); WM8(ea, C); break; /* RES 5,C=(XY+o) */
1229 case 0xaa: D = RES(5, RM8(ea)); WM8(ea, D); break; /* RES 5,D=(XY+o) */
1230 case 0xab: E = RES(5, RM8(ea)); WM8(ea, E); break; /* RES 5,E=(XY+o) */
1231 case 0xac: H = RES(5, RM8(ea)); WM8(ea, H); break; /* RES 5,H=(XY+o) */
1232 case 0xad: L = RES(5, RM8(ea)); WM8(ea, L); break; /* RES 5,L=(XY+o) */
1233 case 0xae: WM8(ea, RES(5, RM8(ea))); break; /* RES 5,(XY+o) */
1234 case 0xaf: A = RES(5, RM8(ea)); WM8(ea, A); break; /* RES 5,A=(XY+o) */
1235 case 0xb0: B = RES(6, RM8(ea)); WM8(ea, B); break; /* RES 6,B=(XY+o) */
1236 case 0xb1: C = RES(6, RM8(ea)); WM8(ea, C); break; /* RES 6,C=(XY+o) */
1237 case 0xb2: D = RES(6, RM8(ea)); WM8(ea, D); break; /* RES 6,D=(XY+o) */
1238 case 0xb3: E = RES(6, RM8(ea)); WM8(ea, E); break; /* RES 6,E=(XY+o) */
1239 case 0xb4: H = RES(6, RM8(ea)); WM8(ea, H); break; /* RES 6,H=(XY+o) */
1240 case 0xb5: L = RES(6, RM8(ea)); WM8(ea, L); break; /* RES 6,L=(XY+o) */
1241 case 0xb6: WM8(ea, RES(6, RM8(ea))); break; /* RES 6,(XY+o) */
1242 case 0xb7: A = RES(6, RM8(ea)); WM8(ea, A); break; /* RES 6,A=(XY+o) */
1243 case 0xb8: B = RES(7, RM8(ea)); WM8(ea, B); break; /* RES 7,B=(XY+o) */
1244 case 0xb9: C = RES(7, RM8(ea)); WM8(ea, C); break; /* RES 7,C=(XY+o) */
1245 case 0xba: D = RES(7, RM8(ea)); WM8(ea, D); break; /* RES 7,D=(XY+o) */
1246 case 0xbb: E = RES(7, RM8(ea)); WM8(ea, E); break; /* RES 7,E=(XY+o) */
1247 case 0xbc: H = RES(7, RM8(ea)); WM8(ea, H); break; /* RES 7,H=(XY+o) */
1248 case 0xbd: L = RES(7, RM8(ea)); WM8(ea, L); break; /* RES 7,L=(XY+o) */
1249 case 0xbe: WM8(ea, RES(7, RM8(ea))); break; /* RES 7,(XY+o) */
1250 case 0xbf: A = RES(7, RM8(ea)); WM8(ea, A); break; /* RES 7,A=(XY+o) */
1251 case 0xc0: B = SET(0, RM8(ea)); WM8(ea, B); break; /* SET 0,B=(XY+o) */
1252 case 0xc1: C = SET(0, RM8(ea)); WM8(ea, C); break; /* SET 0,C=(XY+o) */
1253 case 0xc2: D = SET(0, RM8(ea)); WM8(ea, D); break; /* SET 0,D=(XY+o) */
1254 case 0xc3: E = SET(0, RM8(ea)); WM8(ea, E); break; /* SET 0,E=(XY+o) */
1255 case 0xc4: H = SET(0, RM8(ea)); WM8(ea, H); break; /* SET 0,H=(XY+o) */
1256 case 0xc5: L = SET(0, RM8(ea)); WM8(ea, L); break; /* SET 0,L=(XY+o) */
1257 case 0xc6: WM8(ea, SET(0, RM8(ea))); break; /* SET 0,(XY+o) */
1258 case 0xc7: A = SET(0, RM8(ea)); WM8(ea, A); break; /* SET 0,A=(XY+o) */
1259 case 0xc8: B = SET(1, RM8(ea)); WM8(ea, B); break; /* SET 1,B=(XY+o) */
1260 case 0xc9: C = SET(1, RM8(ea)); WM8(ea, C); break; /* SET 1,C=(XY+o) */
1261 case 0xca: D = SET(1, RM8(ea)); WM8(ea, D); break; /* SET 1,D=(XY+o) */
1262 case 0xcb: E = SET(1, RM8(ea)); WM8(ea, E); break; /* SET 1,E=(XY+o) */
1263 case 0xcc: H = SET(1, RM8(ea)); WM8(ea, H); break; /* SET 1,H=(XY+o) */
1264 case 0xcd: L = SET(1, RM8(ea)); WM8(ea, L); break; /* SET 1,L=(XY+o) */
1265 case 0xce: WM8(ea, SET(1, RM8(ea))); break; /* SET 1,(XY+o) */
1266 case 0xcf: A = SET(1, RM8(ea)); WM8(ea, A); break; /* SET 1,A=(XY+o) */
1267 case 0xd0: B = SET(2, RM8(ea)); WM8(ea, B); break; /* SET 2,B=(XY+o) */
1268 case 0xd1: C = SET(2, RM8(ea)); WM8(ea, C); break; /* SET 2,C=(XY+o) */
1269 case 0xd2: D = SET(2, RM8(ea)); WM8(ea, D); break; /* SET 2,D=(XY+o) */
1270 case 0xd3: E = SET(2, RM8(ea)); WM8(ea, E); break; /* SET 2,E=(XY+o) */
1271 case 0xd4: H = SET(2, RM8(ea)); WM8(ea, H); break; /* SET 2,H=(XY+o) */
1272 case 0xd5: L = SET(2, RM8(ea)); WM8(ea, L); break; /* SET 2,L=(XY+o) */
1273 case 0xd6: WM8(ea, SET(2, RM8(ea))); break; /* SET 2,(XY+o) */
1274 case 0xd7: A = SET(2, RM8(ea)); WM8(ea, A); break; /* SET 2,A=(XY+o) */
1275 case 0xd8: B = SET(3, RM8(ea)); WM8(ea, B); break; /* SET 3,B=(XY+o) */
1276 case 0xd9: C = SET(3, RM8(ea)); WM8(ea, C); break; /* SET 3,C=(XY+o) */
1277 case 0xda: D = SET(3, RM8(ea)); WM8(ea, D); break; /* SET 3,D=(XY+o) */
1278 case 0xdb: E = SET(3, RM8(ea)); WM8(ea, E); break; /* SET 3,E=(XY+o) */
1279 case 0xdc: H = SET(3, RM8(ea)); WM8(ea, H); break; /* SET 3,H=(XY+o) */
1280 case 0xdd: L = SET(3, RM8(ea)); WM8(ea, L); break; /* SET 3,L=(XY+o) */
1281 case 0xde: WM8(ea, SET(3, RM8(ea))); break; /* SET 3,(XY+o) */
1282 case 0xdf: A = SET(3, RM8(ea)); WM8(ea, A); break; /* SET 3,A=(XY+o) */
1283 case 0xe0: B = SET(4, RM8(ea)); WM8(ea, B); break; /* SET 4,B=(XY+o) */
1284 case 0xe1: C = SET(4, RM8(ea)); WM8(ea, C); break; /* SET 4,C=(XY+o) */
1285 case 0xe2: D = SET(4, RM8(ea)); WM8(ea, D); break; /* SET 4,D=(XY+o) */
1286 case 0xe3: E = SET(4, RM8(ea)); WM8(ea, E); break; /* SET 4,E=(XY+o) */
1287 case 0xe4: H = SET(4, RM8(ea)); WM8(ea, H); break; /* SET 4,H=(XY+o) */
1288 case 0xe5: L = SET(4, RM8(ea)); WM8(ea, L); break; /* SET 4,L=(XY+o) */
1289 case 0xe6: WM8(ea, SET(4, RM8(ea))); break; /* SET 4,(XY+o) */
1290 case 0xe7: A = SET(4, RM8(ea)); WM8(ea, A); break; /* SET 4,A=(XY+o) */
1291 case 0xe8: B = SET(5, RM8(ea)); WM8(ea, B); break; /* SET 5,B=(XY+o) */
1292 case 0xe9: C = SET(5, RM8(ea)); WM8(ea, C); break; /* SET 5,C=(XY+o) */
1293 case 0xea: D = SET(5, RM8(ea)); WM8(ea, D); break; /* SET 5,D=(XY+o) */
1294 case 0xeb: E = SET(5, RM8(ea)); WM8(ea, E); break; /* SET 5,E=(XY+o) */
1295 case 0xec: H = SET(5, RM8(ea)); WM8(ea, H); break; /* SET 5,H=(XY+o) */
1296 case 0xed: L = SET(5, RM8(ea)); WM8(ea, L); break; /* SET 5,L=(XY+o) */
1297 case 0xee: WM8(ea, SET(5, RM8(ea))); break; /* SET 5,(XY+o) */
1298 case 0xef: A = SET(5, RM8(ea)); WM8(ea, A); break; /* SET 5,A=(XY+o) */
1299 case 0xf0: B = SET(6, RM8(ea)); WM8(ea, B); break; /* SET 6,B=(XY+o) */
1300 case 0xf1: C = SET(6, RM8(ea)); WM8(ea, C); break; /* SET 6,C=(XY+o) */
1301 case 0xf2: D = SET(6, RM8(ea)); WM8(ea, D); break; /* SET 6,D=(XY+o) */
1302 case 0xf3: E = SET(6, RM8(ea)); WM8(ea, E); break; /* SET 6,E=(XY+o) */
1303 case 0xf4: H = SET(6, RM8(ea)); WM8(ea, H); break; /* SET 6,H=(XY+o) */
1304 case 0xf5: L = SET(6, RM8(ea)); WM8(ea, L); break; /* SET 6,L=(XY+o) */
1305 case 0xf6: WM8(ea, SET(6, RM8(ea))); break; /* SET 6,(XY+o) */
1306 case 0xf7: A = SET(6, RM8(ea)); WM8(ea, A); break; /* SET 6,A=(XY+o) */
1307 case 0xf8: B = SET(7, RM8(ea)); WM8(ea, B); break; /* SET 7,B=(XY+o) */
1308 case 0xf9: C = SET(7, RM8(ea)); WM8(ea, C); break; /* SET 7,C=(XY+o) */
1309 case 0xfa: D = SET(7, RM8(ea)); WM8(ea, D); break; /* SET 7,D=(XY+o) */
1310 case 0xfb: E = SET(7, RM8(ea)); WM8(ea, E); break; /* SET 7,E=(XY+o) */
1311 case 0xfc: H = SET(7, RM8(ea)); WM8(ea, H); break; /* SET 7,H=(XY+o) */
1312 case 0xfd: L = SET(7, RM8(ea)); WM8(ea, L); break; /* SET 7,L=(XY+o) */
1313 case 0xfe: WM8(ea, SET(7, RM8(ea))); break; /* SET 7,(XY+o) */
1314 case 0xff: A = SET(7, RM8(ea)); WM8(ea, A); break; /* SET 7,A=(XY+o) */
1315 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
1316 default: __assume(0);
1321 void Z80_BASE::OP_DD(uint8_t code)
1323 icount -= cc_xy[code];
1326 case 0x09: ADD16(ix, bc); break; /* ADD IX,BC */
1327 case 0x19: ADD16(ix, de); break; /* ADD IX,DE */
1328 case 0x21: IX = FETCH16(); break; /* LD IX,w */
1329 case 0x22: ea = FETCH16(); WM16(ea, &ix); WZ = ea + 1; break; /* LD (w),IX */
1330 case 0x23: IX++; break; /* INC IX */
1331 case 0x24: HX = INC(HX); break; /* INC HX */
1332 case 0x25: HX = DEC(HX); break; /* DEC HX */
1333 case 0x26: HX = FETCH8(); break; /* LD HX,n */
1334 case 0x29: ADD16(ix, ix); break; /* ADD IX,IX */
1335 case 0x2a: ea = FETCH16(); RM16(ea, &ix); WZ = ea + 1; break; /* LD IX,(w) */
1336 case 0x2b: IX--; break; /* DEC IX */
1337 case 0x2c: LX = INC(LX); break; /* INC LX */
1338 case 0x2d: LX = DEC(LX); break; /* DEC LX */
1339 case 0x2e: LX = FETCH8(); break; /* LD LX,n */
1340 case 0x34: EAX(); WM8(ea, INC(RM8(ea))); break; /* INC (IX+o) */
1341 case 0x35: EAX(); WM8(ea, DEC(RM8(ea))); break; /* DEC (IX+o) */
1342 case 0x36: EAX(); WM8(ea, FETCH8()); break; /* LD (IX+o),n */
1343 case 0x39: ADD16(ix, sp); break; /* ADD IX,SP */
1344 case 0x44: B = HX; break; /* LD B,HX */
1345 case 0x45: B = LX; break; /* LD B,LX */
1346 case 0x46: EAX(); B = RM8(ea); break; /* LD B,(IX+o) */
1347 case 0x4c: C = HX; break; /* LD C,HX */
1348 case 0x4d: C = LX; break; /* LD C,LX */
1349 case 0x4e: EAX(); C = RM8(ea); break; /* LD C,(IX+o) */
1350 case 0x54: D = HX; break; /* LD D,HX */
1351 case 0x55: D = LX; break; /* LD D,LX */
1352 case 0x56: EAX(); D = RM8(ea); break; /* LD D,(IX+o) */
1353 case 0x5c: E = HX; break; /* LD E,HX */
1354 case 0x5d: E = LX; break; /* LD E,LX */
1355 case 0x5e: EAX(); E = RM8(ea); break; /* LD E,(IX+o) */
1356 case 0x60: HX = B; break; /* LD HX,B */
1357 case 0x61: HX = C; break; /* LD HX,C */
1358 case 0x62: HX = D; break; /* LD HX,D */
1359 case 0x63: HX = E; break; /* LD HX,E */
1360 case 0x64: break; /* LD HX,HX */
1361 case 0x65: HX = LX; break; /* LD HX,LX */
1362 case 0x66: EAX(); H = RM8(ea); break; /* LD H,(IX+o) */
1363 case 0x67: HX = A; break; /* LD HX,A */
1364 case 0x68: LX = B; break; /* LD LX,B */
1365 case 0x69: LX = C; break; /* LD LX,C */
1366 case 0x6a: LX = D; break; /* LD LX,D */
1367 case 0x6b: LX = E; break; /* LD LX,E */
1368 case 0x6c: LX = HX; break; /* LD LX,HX */
1369 case 0x6d: break; /* LD LX,LX */
1370 case 0x6e: EAX(); L = RM8(ea); break; /* LD L,(IX+o) */
1371 case 0x6f: LX = A; break; /* LD LX,A */
1372 case 0x70: EAX(); WM8(ea, B); break; /* LD (IX+o),B */
1373 case 0x71: EAX(); WM8(ea, C); break; /* LD (IX+o),C */
1374 case 0x72: EAX(); WM8(ea, D); break; /* LD (IX+o),D */
1375 case 0x73: EAX(); WM8(ea, E); break; /* LD (IX+o),E */
1376 case 0x74: EAX(); WM8(ea, H); break; /* LD (IX+o),H */
1377 case 0x75: EAX(); WM8(ea, L); break; /* LD (IX+o),L */
1378 case 0x77: EAX(); WM8(ea, A); break; /* LD (IX+o),A */
1379 case 0x7c: A = HX; break; /* LD A,HX */
1380 case 0x7d: A = LX; break; /* LD A,LX */
1381 case 0x7e: EAX(); A = RM8(ea); break; /* LD A,(IX+o) */
1382 case 0x84: ADD(HX); break; /* ADD A,HX */
1383 case 0x85: ADD(LX); break; /* ADD A,LX */
1384 case 0x86: EAX(); ADD(RM8(ea)); break; /* ADD A,(IX+o) */
1385 case 0x8c: ADC(HX); break; /* ADC A,HX */
1386 case 0x8d: ADC(LX); break; /* ADC A,LX */
1387 case 0x8e: EAX(); ADC(RM8(ea)); break; /* ADC A,(IX+o) */
1388 case 0x94: SUB(HX); break; /* SUB HX */
1389 case 0x95: SUB(LX); break; /* SUB LX */
1390 case 0x96: EAX(); SUB(RM8(ea)); break; /* SUB (IX+o) */
1391 case 0x9c: SBC(HX); break; /* SBC A,HX */
1392 case 0x9d: SBC(LX); break; /* SBC A,LX */
1393 case 0x9e: EAX(); SBC(RM8(ea)); break; /* SBC A,(IX+o) */
1394 case 0xa4: AND(HX); break; /* AND HX */
1395 case 0xa5: AND(LX); break; /* AND LX */
1396 case 0xa6: EAX(); AND(RM8(ea)); break; /* AND (IX+o) */
1397 case 0xac: XOR(HX); break; /* XOR HX */
1398 case 0xad: XOR(LX); break; /* XOR LX */
1399 case 0xae: EAX(); XOR(RM8(ea)); break; /* XOR (IX+o) */
1400 case 0xb4: OR(HX); break; /* OR HX */
1401 case 0xb5: OR(LX); break; /* OR LX */
1402 case 0xb6: EAX(); OR(RM8(ea)); break; /* OR (IX+o) */
1403 case 0xbc: CP(HX); break; /* CP HX */
1404 case 0xbd: CP(LX); break; /* CP LX */
1405 case 0xbe: EAX(); CP(RM8(ea)); break; /* CP (IX+o) */
1406 case 0xcb: EAX(); OP_XY(FETCH8()); break; /* ** DD CB xx */
1407 case 0xe1: POP(ix); break; /* POP IX */
1408 case 0xe3: EXSP(ix); break; /* EX (SP),IX */
1409 case 0xe5: PUSH(ix); break; /* PUSH IX */
1410 case 0xe9: PC = IX; break; /* JP (IX) */
1411 case 0xf9: SP = IX; break; /* LD SP,IX */
1412 default: OP(code); break;
1416 void Z80_BASE::OP_FD(uint8_t code)
1418 icount -= cc_xy[code];
1421 case 0x09: ADD16(iy, bc); break; /* ADD IY,BC */
1422 case 0x19: ADD16(iy, de); break; /* ADD IY,DE */
1423 case 0x21: IY = FETCH16(); break; /* LD IY,w */
1424 case 0x22: ea = FETCH16(); WM16(ea, &iy); WZ = ea + 1; break; /* LD (w),IY */
1425 case 0x23: IY++; break; /* INC IY */
1426 case 0x24: HY = INC(HY); break; /* INC HY */
1427 case 0x25: HY = DEC(HY); break; /* DEC HY */
1428 case 0x26: HY = FETCH8(); break; /* LD HY,n */
1429 case 0x29: ADD16(iy, iy); break; /* ADD IY,IY */
1430 case 0x2a: ea = FETCH16(); RM16(ea, &iy); WZ = ea + 1; break; /* LD IY,(w) */
1431 case 0x2b: IY--; break; /* DEC IY */
1432 case 0x2c: LY = INC(LY); break; /* INC LY */
1433 case 0x2d: LY = DEC(LY); break; /* DEC LY */
1434 case 0x2e: LY = FETCH8(); break; /* LD LY,n */
1435 case 0x34: EAY(); WM8(ea, INC(RM8(ea))); break; /* INC (IY+o) */
1436 case 0x35: EAY(); WM8(ea, DEC(RM8(ea))); break; /* DEC (IY+o) */
1437 case 0x36: EAY(); WM8(ea, FETCH8()); break; /* LD (IY+o),n */
1438 case 0x39: ADD16(iy, sp); break; /* ADD IY,SP */
1439 case 0x44: B = HY; break; /* LD B,HY */
1440 case 0x45: B = LY; break; /* LD B,LY */
1441 case 0x46: EAY(); B = RM8(ea); break; /* LD B,(IY+o) */
1442 case 0x4c: C = HY; break; /* LD C,HY */
1443 case 0x4d: C = LY; break; /* LD C,LY */
1444 case 0x4e: EAY(); C = RM8(ea); break; /* LD C,(IY+o) */
1445 case 0x54: D = HY; break; /* LD D,HY */
1446 case 0x55: D = LY; break; /* LD D,LY */
1447 case 0x56: EAY(); D = RM8(ea); break; /* LD D,(IY+o) */
1448 case 0x5c: E = HY; break; /* LD E,HY */
1449 case 0x5d: E = LY; break; /* LD E,LY */
1450 case 0x5e: EAY(); E = RM8(ea); break; /* LD E,(IY+o) */
1451 case 0x60: HY = B; break; /* LD HY,B */
1452 case 0x61: HY = C; break; /* LD HY,C */
1453 case 0x62: HY = D; break; /* LD HY,D */
1454 case 0x63: HY = E; break; /* LD HY,E */
1455 case 0x64: break; /* LD HY,HY */
1456 case 0x65: HY = LY; break; /* LD HY,LY */
1457 case 0x66: EAY(); H = RM8(ea); break; /* LD H,(IY+o) */
1458 case 0x67: HY = A; break; /* LD HY,A */
1459 case 0x68: LY = B; break; /* LD LY,B */
1460 case 0x69: LY = C; break; /* LD LY,C */
1461 case 0x6a: LY = D; break; /* LD LY,D */
1462 case 0x6b: LY = E; break; /* LD LY,E */
1463 case 0x6c: LY = HY; break; /* LD LY,HY */
1464 case 0x6d: break; /* LD LY,LY */
1465 case 0x6e: EAY(); L = RM8(ea); break; /* LD L,(IY+o) */
1466 case 0x6f: LY = A; break; /* LD LY,A */
1467 case 0x70: EAY(); WM8(ea, B); break; /* LD (IY+o),B */
1468 case 0x71: EAY(); WM8(ea, C); break; /* LD (IY+o),C */
1469 case 0x72: EAY(); WM8(ea, D); break; /* LD (IY+o),D */
1470 case 0x73: EAY(); WM8(ea, E); break; /* LD (IY+o),E */
1471 case 0x74: EAY(); WM8(ea, H); break; /* LD (IY+o),H */
1472 case 0x75: EAY(); WM8(ea, L); break; /* LD (IY+o),L */
1473 case 0x77: EAY(); WM8(ea, A); break; /* LD (IY+o),A */
1474 case 0x7c: A = HY; break; /* LD A,HY */
1475 case 0x7d: A = LY; break; /* LD A,LY */
1476 case 0x7e: EAY(); A = RM8(ea); break; /* LD A,(IY+o) */
1477 case 0x84: ADD(HY); break; /* ADD A,HY */
1478 case 0x85: ADD(LY); break; /* ADD A,LY */
1479 case 0x86: EAY(); ADD(RM8(ea)); break; /* ADD A,(IY+o) */
1480 case 0x8c: ADC(HY); break; /* ADC A,HY */
1481 case 0x8d: ADC(LY); break; /* ADC A,LY */
1482 case 0x8e: EAY(); ADC(RM8(ea)); break; /* ADC A,(IY+o) */
1483 case 0x94: SUB(HY); break; /* SUB HY */
1484 case 0x95: SUB(LY); break; /* SUB LY */
1485 case 0x96: EAY(); SUB(RM8(ea)); break; /* SUB (IY+o) */
1486 case 0x9c: SBC(HY); break; /* SBC A,HY */
1487 case 0x9d: SBC(LY); break; /* SBC A,LY */
1488 case 0x9e: EAY(); SBC(RM8(ea)); break; /* SBC A,(IY+o) */
1489 case 0xa4: AND(HY); break; /* AND HY */
1490 case 0xa5: AND(LY); break; /* AND LY */
1491 case 0xa6: EAY(); AND(RM8(ea)); break; /* AND (IY+o) */
1492 case 0xac: XOR(HY); break; /* XOR HY */
1493 case 0xad: XOR(LY); break; /* XOR LY */
1494 case 0xae: EAY(); XOR(RM8(ea)); break; /* XOR (IY+o) */
1495 case 0xb4: OR(HY); break; /* OR HY */
1496 case 0xb5: OR(LY); break; /* OR LY */
1497 case 0xb6: EAY(); OR(RM8(ea)); break; /* OR (IY+o) */
1498 case 0xbc: CP(HY); break; /* CP HY */
1499 case 0xbd: CP(LY); break; /* CP LY */
1500 case 0xbe: EAY(); CP(RM8(ea)); break; /* CP (IY+o) */
1501 case 0xcb: EAY(); OP_XY(FETCH8()); break; /* ** FD CB xx */
1502 case 0xe1: POP(iy); break; /* POP IY */
1503 case 0xe3: EXSP(iy); break; /* EX (SP),IY */
1504 case 0xe5: PUSH(iy); break; /* PUSH IY */
1505 case 0xe9: PC = IY; break; /* JP (IY) */
1506 case 0xf9: SP = IY; break; /* LD SP,IY */
1507 default: OP(code); break;
1511 void Z80_BASE::OP_ED(uint8_t code)
1513 icount -= cc_ed[code];
1516 case 0x40: B = IN8(BC); F = (F & CF) | SZP[B]; break; /* IN B,(C) */
1517 case 0x41: OUT8(BC, B); break; /* OUT (C),B */
1518 case 0x42: SBC16(bc); break; /* SBC HL,BC */
1519 case 0x43: ea = FETCH16(); WM16(ea, &bc); WZ = ea + 1; break; /* LD (w),BC */
1520 case 0x44: NEG(); break; /* NEG */
1521 case 0x45: RETN(); break; /* RETN */
1522 case 0x46: im = 0; break; /* im 0 */
1523 case 0x47: LD_I_A(); break; /* LD i,A */
1524 case 0x48: C = IN8(BC); F = (F & CF) | SZP[C]; break; /* IN C,(C) */
1525 case 0x49: OUT8(BC, C); break; /* OUT (C),C */
1526 case 0x4a: ADC16(bc); break; /* ADC HL,BC */
1527 case 0x4b: ea = FETCH16(); RM16(ea, &bc); WZ = ea + 1; break; /* LD BC,(w) */
1528 case 0x4c: NEG(); break; /* NEG */
1529 case 0x4d: RETI(); break; /* RETI */
1530 case 0x4e: im = 0; break; /* im 0 */
1531 case 0x4f: LD_R_A(); break; /* LD r,A */
1532 case 0x50: D = IN8(BC); F = (F & CF) | SZP[D]; break; /* IN D,(C) */
1533 case 0x51: OUT8(BC, D); break; /* OUT (C),D */
1534 case 0x52: SBC16(de); break; /* SBC HL,DE */
1535 case 0x53: ea = FETCH16(); WM16(ea, &de); WZ = ea + 1; break; /* LD (w),DE */
1536 case 0x54: NEG(); break; /* NEG */
1537 case 0x55: RETN(); break; /* RETN */
1538 case 0x56: im = 1; break; /* im 1 */
1539 case 0x57: LD_A_I(); break; /* LD A,i */
1540 case 0x58: E = IN8(BC); F = (F & CF) | SZP[E]; break; /* IN E,(C) */
1541 case 0x59: OUT8(BC, E); break; /* OUT (C),E */
1542 case 0x5a: ADC16(de); break; /* ADC HL,DE */
1543 case 0x5b: ea = FETCH16(); RM16(ea, &de); WZ = ea + 1; break; /* LD DE,(w) */
1544 case 0x5c: NEG(); break; /* NEG */
1545 case 0x5d: RETI(); break; /* RETI */
1546 case 0x5e: im = 2; break; /* im 2 */
1547 case 0x5f: LD_A_R(); break; /* LD A,r */
1548 case 0x60: H = IN8(BC); F = (F & CF) | SZP[H]; break; /* IN H,(C) */
1549 case 0x61: OUT8(BC, H); break; /* OUT (C),H */
1550 case 0x62: SBC16(hl); break; /* SBC HL,HL */
1551 case 0x63: ea = FETCH16(); WM16(ea, &hl); WZ = ea + 1; break; /* LD (w),HL */
1552 case 0x64: NEG(); break; /* NEG */
1553 case 0x65: RETN(); break; /* RETN */
1554 case 0x66: im = 0; break; /* im 0 */
1555 case 0x67: RRD(); break; /* RRD (HL) */
1556 case 0x68: L = IN8(BC); F = (F & CF) | SZP[L]; break; /* IN L,(C) */
1557 case 0x69: OUT8(BC, L); break; /* OUT (C),L */
1558 case 0x6a: ADC16(hl); break; /* ADC HL,HL */
1559 case 0x6b: ea = FETCH16(); RM16(ea, &hl); WZ = ea + 1; break; /* LD HL,(w) */
1560 case 0x6c: NEG(); break; /* NEG */
1561 case 0x6d: RETI(); break; /* RETI */
1562 case 0x6e: im = 0; break; /* im 0 */
1563 case 0x6f: RLD(); break; /* RLD (HL) */
1564 case 0x70: {uint8_t res = IN8(BC); F = (F & CF) | SZP[res];} break; /* IN F,(C) */
1565 case 0x71: OUT8(BC, 0); break; /* OUT (C),0 */
1566 case 0x72: SBC16(sp); break; /* SBC HL,SP */
1567 case 0x73: ea = FETCH16(); WM16(ea, &sp); WZ = ea + 1; break; /* LD (w),SP */
1568 case 0x74: NEG(); break; /* NEG */
1569 case 0x75: RETN(); break; /* RETN */
1570 case 0x76: im = 1; break; /* im 1 */
1571 case 0x78: A = IN8(BC); F = (F & CF) | SZP[A]; WZ = BC + 1; break; /* IN A,(C) */
1572 case 0x79: OUT8(BC, A); WZ = BC + 1; break; /* OUT (C),A */
1573 case 0x7a: ADC16(sp); break; /* ADC HL,SP */
1574 case 0x7b: ea = FETCH16(); RM16(ea, &sp); WZ = ea + 1; break; /* LD SP,(w) */
1575 case 0x7c: NEG(); break; /* NEG */
1576 case 0x7d: RETI(); break; /* RETI */
1577 case 0x7e: im = 2; break; /* im 2 */
1578 case 0xa0: LDI(); break; /* LDI */
1579 case 0xa1: CPI(); break; /* CPI */
1580 case 0xa2: INI(); break; /* INI */
1581 case 0xa3: OUTI(); break; /* OUTI */
1582 case 0xa8: LDD(); break; /* LDD */
1583 case 0xa9: CPD(); break; /* CPD */
1584 case 0xaa: IND(); break; /* IND */
1585 case 0xab: OUTD(); break; /* OUTD */
1586 case 0xb0: LDIR(); break; /* LDIR */
1587 case 0xb1: CPIR(); break; /* CPIR */
1588 case 0xb2: INIR(); break; /* INIR */
1589 case 0xb3: OTIR(); break; /* OTIR */
1590 case 0xb8: LDDR(); break; /* LDDR */
1591 case 0xb9: CPDR(); break; /* CPDR */
1592 case 0xba: INDR(); break; /* INDR */
1593 case 0xbb: OTDR(); break; /* OTDR */
1594 default: OP(code); break;
1598 void Z80_BASE::OP(uint8_t code)
1601 icount -= cc_op[code];
1604 case 0x00: break; /* NOP */
1605 case 0x01: BC = FETCH16(); break; /* LD BC,w */
1606 case 0x02: WM8(BC, A); WZ_L = (BC + 1) & 0xff; WZ_H = A; break; /* LD (BC),A */
1607 case 0x03: BC++; break; /* INC BC */
1608 case 0x04: B = INC(B); break; /* INC B */
1609 case 0x05: B = DEC(B); break; /* DEC B */
1610 case 0x06: B = FETCH8(); break; /* LD B,n */
1611 case 0x07: RLCA(); break; /* RLCA */
1612 case 0x08: EX_AF(); break; /* EX AF,AF' */
1613 case 0x09: ADD16(hl, bc); break; /* ADD HL,BC */
1614 case 0x0a: A = RM8(BC); WZ = BC+1; break; /* LD A,(BC) */
1615 case 0x0b: BC--; break; /* DEC BC */
1616 case 0x0c: C = INC(C); break; /* INC C */
1617 case 0x0d: C = DEC(C); break; /* DEC C */
1618 case 0x0e: C = FETCH8(); break; /* LD C,n */
1619 case 0x0f: RRCA(); break; /* RRCA */
1620 case 0x10: B--; JR_COND(B, 0x10); break; /* DJNZ o */
1621 case 0x11: DE = FETCH16(); break; /* LD DE,w */
1622 case 0x12: WM8(DE, A); WZ_L = (DE + 1) & 0xff; WZ_H = A; break; /* LD (DE),A */
1623 case 0x13: DE++; break; /* INC DE */
1624 case 0x14: D = INC(D); break; /* INC D */
1625 case 0x15: D = DEC(D); break; /* DEC D */
1626 case 0x16: D = FETCH8(); break; /* LD D,n */
1627 case 0x17: RLA(); break; /* RLA */
1628 case 0x18: JR(); break; /* JR o */
1629 case 0x19: ADD16(hl, de); break; /* ADD HL,DE */
1630 case 0x1a: A = RM8(DE); WZ = DE + 1; break; /* LD A,(DE) */
1631 case 0x1b: DE--; break; /* DEC DE */
1632 case 0x1c: E = INC(E); break; /* INC E */
1633 case 0x1d: E = DEC(E); break; /* DEC E */
1634 case 0x1e: E = FETCH8(); break; /* LD E,n */
1635 case 0x1f: RRA(); break; /* RRA */
1636 case 0x20: JR_COND(!(F & ZF), 0x20); break; /* JR NZ,o */
1637 case 0x21: HL = FETCH16(); break; /* LD HL,w */
1638 case 0x22: ea = FETCH16(); WM16(ea, &hl); WZ = ea + 1; break; /* LD (w),HL */
1639 case 0x23: HL++; break; /* INC HL */
1640 case 0x24: H = INC(H); break; /* INC H */
1641 case 0x25: H = DEC(H); break; /* DEC H */
1642 case 0x26: H = FETCH8(); break; /* LD H,n */
1643 case 0x27: DAA(); break; /* DAA */
1644 case 0x28: JR_COND(F & ZF, 0x28); break; /* JR Z,o */
1645 case 0x29: ADD16(hl, hl); break; /* ADD HL,HL */
1646 case 0x2a: ea = FETCH16(); RM16(ea, &hl); WZ = ea + 1; break; /* LD HL,(w) */
1647 case 0x2b: HL--; break; /* DEC HL */
1648 case 0x2c: L = INC(L); break; /* INC L */
1649 case 0x2d: L = DEC(L); break; /* DEC L */
1650 case 0x2e: L = FETCH8(); break; /* LD L,n */
1651 case 0x2f: A ^= 0xff; F = (F & (SF | ZF | PF | CF)) | HF | NF | (A & (YF | XF)); break; /* CPL */
1652 case 0x30: JR_COND(!(F & CF), 0x30); break; /* JR NC,o */
1653 case 0x31: SP = FETCH16(); break; /* LD SP,w */
1654 case 0x32: ea = FETCH16(); WM8(ea, A); WZ_L = (ea + 1) & 0xff; WZ_H = A; break; /* LD (w),A */
1655 case 0x33: SP++; break; /* INC SP */
1656 case 0x34: WM8(HL, INC(RM8(HL))); break; /* INC (HL) */
1657 case 0x35: WM8(HL, DEC(RM8(HL))); break; /* DEC (HL) */
1658 case 0x36: WM8(HL, FETCH8()); break; /* LD (HL),n */
1659 case 0x37: F = (F & (SF | ZF | YF | XF | PF)) | CF | (A & (YF | XF)); break; /* SCF */
1660 case 0x38: JR_COND(F & CF, 0x38); break; /* JR C,o */
1661 case 0x39: ADD16(hl, sp); break; /* ADD HL,SP */
1662 case 0x3a: ea = FETCH16(); A = RM8(ea); WZ = ea + 1; break; /* LD A,(w) */
1663 case 0x3b: SP--; break; /* DEC SP */
1664 case 0x3c: A = INC(A); break; /* INC A */
1665 case 0x3d: A = DEC(A); break; /* DEC A */
1666 case 0x3e: A = FETCH8(); break; /* LD A,n */
1667 case 0x3f: F = ((F & (SF | ZF | YF | XF | PF | CF)) | ((F & CF) << 4) | (A & (YF | XF))) ^ CF; break; /* CCF */
1668 case 0x40: break; /* LD B,B */
1669 case 0x41: B = C; break; /* LD B,C */
1670 case 0x42: B = D; break; /* LD B,D */
1671 case 0x43: B = E; break; /* LD B,E */
1672 case 0x44: B = H; break; /* LD B,H */
1673 case 0x45: B = L; break; /* LD B,L */
1674 case 0x46: B = RM8(HL); break; /* LD B,(HL) */
1675 case 0x47: B = A; break; /* LD B,A */
1676 case 0x48: C = B; break; /* LD C,B */
1677 case 0x49: break; /* LD C,C */
1678 case 0x4a: C = D; break; /* LD C,D */
1679 case 0x4b: C = E; break; /* LD C,E */
1680 case 0x4c: C = H; break; /* LD C,H */
1681 case 0x4d: C = L; break; /* LD C,L */
1682 case 0x4e: C = RM8(HL); break; /* LD C,(HL) */
1683 case 0x4f: C = A; break; /* LD C,A */
1684 case 0x50: D = B; break; /* LD D,B */
1685 case 0x51: D = C; break; /* LD D,C */
1686 case 0x52: break; /* LD D,D */
1687 case 0x53: D = E; break; /* LD D,E */
1688 case 0x54: D = H; break; /* LD D,H */
1689 case 0x55: D = L; break; /* LD D,L */
1690 case 0x56: D = RM8(HL); break; /* LD D,(HL) */
1691 case 0x57: D = A; break; /* LD D,A */
1692 case 0x58: E = B; break; /* LD E,B */
1693 case 0x59: E = C; break; /* LD E,C */
1694 case 0x5a: E = D; break; /* LD E,D */
1695 case 0x5b: break; /* LD E,E */
1696 case 0x5c: E = H; break; /* LD E,H */
1697 case 0x5d: E = L; break; /* LD E,L */
1698 case 0x5e: E = RM8(HL); break; /* LD E,(HL) */
1699 case 0x5f: E = A; break; /* LD E,A */
1700 case 0x60: H = B; break; /* LD H,B */
1701 case 0x61: H = C; break; /* LD H,C */
1702 case 0x62: H = D; break; /* LD H,D */
1703 case 0x63: H = E; break; /* LD H,E */
1704 case 0x64: break; /* LD H,H */
1705 case 0x65: H = L; break; /* LD H,L */
1706 case 0x66: H = RM8(HL); break; /* LD H,(HL) */
1707 case 0x67: H = A; break; /* LD H,A */
1708 case 0x68: L = B; break; /* LD L,B */
1709 case 0x69: L = C; break; /* LD L,C */
1710 case 0x6a: L = D; break; /* LD L,D */
1711 case 0x6b: L = E; break; /* LD L,E */
1712 case 0x6c: L = H; break; /* LD L,H */
1713 case 0x6d: break; /* LD L,L */
1714 case 0x6e: L = RM8(HL); break; /* LD L,(HL) */
1715 case 0x6f: L = A; break; /* LD L,A */
1716 case 0x70: WM8(HL, B); break; /* LD (HL),B */
1717 case 0x71: WM8(HL, C); break; /* LD (HL),C */
1718 case 0x72: WM8(HL, D); break; /* LD (HL),D */
1719 case 0x73: WM8(HL, E); break; /* LD (HL),E */
1720 case 0x74: WM8(HL, H); break; /* LD (HL),H */
1721 case 0x75: WM8(HL, L); break; /* LD (HL),L */
1722 case 0x76: ENTER_HALT(); break; /* halt */
1723 case 0x77: WM8(HL, A); break; /* LD (HL),A */
1724 case 0x78: A = B; break; /* LD A,B */
1725 case 0x79: A = C; break; /* LD A,C */
1726 case 0x7a: A = D; break; /* LD A,D */
1727 case 0x7b: A = E; break; /* LD A,E */
1728 case 0x7c: A = H; break; /* LD A,H */
1729 case 0x7d: A = L; break; /* LD A,L */
1730 case 0x7e: A = RM8(HL); break; /* LD A,(HL) */
1731 case 0x7f: break; /* LD A,A */
1732 case 0x80: ADD(B); break; /* ADD A,B */
1733 case 0x81: ADD(C); break; /* ADD A,C */
1734 case 0x82: ADD(D); break; /* ADD A,D */
1735 case 0x83: ADD(E); break; /* ADD A,E */
1736 case 0x84: ADD(H); break; /* ADD A,H */
1737 case 0x85: ADD(L); break; /* ADD A,L */
1738 case 0x86: ADD(RM8(HL)); break; /* ADD A,(HL) */
1739 case 0x87: ADD(A); break; /* ADD A,A */
1740 case 0x88: ADC(B); break; /* ADC A,B */
1741 case 0x89: ADC(C); break; /* ADC A,C */
1742 case 0x8a: ADC(D); break; /* ADC A,D */
1743 case 0x8b: ADC(E); break; /* ADC A,E */
1744 case 0x8c: ADC(H); break; /* ADC A,H */
1745 case 0x8d: ADC(L); break; /* ADC A,L */
1746 case 0x8e: ADC(RM8(HL)); break; /* ADC A,(HL) */
1747 case 0x8f: ADC(A); break; /* ADC A,A */
1748 case 0x90: SUB(B); break; /* SUB B */
1749 case 0x91: SUB(C); break; /* SUB C */
1750 case 0x92: SUB(D); break; /* SUB D */
1751 case 0x93: SUB(E); break; /* SUB E */
1752 case 0x94: SUB(H); break; /* SUB H */
1753 case 0x95: SUB(L); break; /* SUB L */
1754 case 0x96: SUB(RM8(HL)); break; /* SUB (HL) */
1755 case 0x97: SUB(A); break; /* SUB A */
1756 case 0x98: SBC(B); break; /* SBC A,B */
1757 case 0x99: SBC(C); break; /* SBC A,C */
1758 case 0x9a: SBC(D); break; /* SBC A,D */
1759 case 0x9b: SBC(E); break; /* SBC A,E */
1760 case 0x9c: SBC(H); break; /* SBC A,H */
1761 case 0x9d: SBC(L); break; /* SBC A,L */
1762 case 0x9e: SBC(RM8(HL)); break; /* SBC A,(HL) */
1763 case 0x9f: SBC(A); break; /* SBC A,A */
1764 case 0xa0: AND(B); break; /* AND B */
1765 case 0xa1: AND(C); break; /* AND C */
1766 case 0xa2: AND(D); break; /* AND D */
1767 case 0xa3: AND(E); break; /* AND E */
1768 case 0xa4: AND(H); break; /* AND H */
1769 case 0xa5: AND(L); break; /* AND L */
1770 case 0xa6: AND(RM8(HL)); break; /* AND (HL) */
1771 case 0xa7: AND(A); break; /* AND A */
1772 case 0xa8: XOR(B); break; /* XOR B */
1773 case 0xa9: XOR(C); break; /* XOR C */
1774 case 0xaa: XOR(D); break; /* XOR D */
1775 case 0xab: XOR(E); break; /* XOR E */
1776 case 0xac: XOR(H); break; /* XOR H */
1777 case 0xad: XOR(L); break; /* XOR L */
1778 case 0xae: XOR(RM8(HL)); break; /* XOR (HL) */
1779 case 0xaf: XOR(A); break; /* XOR A */
1780 case 0xb0: OR(B); break; /* OR B */
1781 case 0xb1: OR(C); break; /* OR C */
1782 case 0xb2: OR(D); break; /* OR D */
1783 case 0xb3: OR(E); break; /* OR E */
1784 case 0xb4: OR(H); break; /* OR H */
1785 case 0xb5: OR(L); break; /* OR L */
1786 case 0xb6: OR(RM8(HL)); break; /* OR (HL) */
1787 case 0xb7: OR(A); break; /* OR A */
1788 case 0xb8: CP(B); break; /* CP B */
1789 case 0xb9: CP(C); break; /* CP C */
1790 case 0xba: CP(D); break; /* CP D */
1791 case 0xbb: CP(E); break; /* CP E */
1792 case 0xbc: CP(H); break; /* CP H */
1793 case 0xbd: CP(L); break; /* CP L */
1794 case 0xbe: CP(RM8(HL)); break; /* CP (HL) */
1795 case 0xbf: CP(A); break; /* CP A */
1796 case 0xc0: RET_COND(!(F & ZF), 0xc0); break; /* RET NZ */
1797 case 0xc1: POP(bc); break; /* POP BC */
1798 case 0xc2: JP_COND(!(F & ZF)); break; /* JP NZ,a */
1799 case 0xc3: JP(); break; /* JP a */
1800 case 0xc4: CALL_COND(!(F & ZF), 0xc4); break; /* CALL NZ,a */
1801 case 0xc5: PUSH(bc); break; /* PUSH BC */
1802 case 0xc6: ADD(FETCH8()); break; /* ADD A,n */
1803 case 0xc7: RST(0x00); break; /* RST 0 */
1804 case 0xc8: RET_COND(F & ZF, 0xc8); break; /* RET Z */
1805 //#ifdef Z80_PSEUDO_BIOS
1807 if(has_pseudo_bios) {
1808 if(d_bios != NULL) {
1809 d_bios->bios_ret_z80(prevpc, &af, &bc, &de, &hl, &ix, &iy, &iff1);
1812 POP(pc); WZ = PCD; break; /* RET */
1814 // case 0xc9: POP(pc); WZ = PCD; break; /* RET */
1816 case 0xca: JP_COND(F & ZF); break; /* JP Z,a */
1817 case 0xcb: OP_CB(FETCHOP()); break; /* **** CB xx */
1818 case 0xcc: CALL_COND(F & ZF, 0xcc); break; /* CALL Z,a */
1819 case 0xcd: CALL(); break; /* CALL a */
1820 case 0xce: ADC(FETCH8()); break; /* ADC A,n */
1821 case 0xcf: RST(0x08); break; /* RST 1 */
1822 case 0xd0: RET_COND(!(F & CF), 0xd0); break; /* RET NC */
1823 case 0xd1: POP(de); break; /* POP DE */
1824 case 0xd2: JP_COND(!(F & CF)); break; /* JP NC,a */
1825 case 0xd3: {unsigned n = FETCH8() | (A << 8); OUT8(n, A); WZ_L = ((n & 0xff) + 1) & 0xff; WZ_H = A;} break; /* OUT (n),A */
1826 case 0xd4: CALL_COND(!(F & CF), 0xd4); break; /* CALL NC,a */
1827 case 0xd5: PUSH(de); break; /* PUSH DE */
1828 case 0xd6: SUB(FETCH8()); break; /* SUB n */
1829 case 0xd7: RST(0x10); break; /* RST 2 */
1830 case 0xd8: RET_COND(F & CF, 0xd8); break; /* RET C */
1831 case 0xd9: EXX(); break; /* EXX */
1832 case 0xda: JP_COND(F & CF); break; /* JP C,a */
1833 case 0xdb: {unsigned n = FETCH8() | (A << 8); A = IN8(n); WZ = n + 1;} break; /* IN A,(n) */
1834 case 0xdc: CALL_COND(F & CF, 0xdc); break; /* CALL C,a */
1835 case 0xdd: OP_DD(FETCHOP()); break; /* **** DD xx */
1836 case 0xde: SBC(FETCH8()); break; /* SBC A,n */
1837 case 0xdf: RST(0x18); break; /* RST 3 */
1838 case 0xe0: RET_COND(!(F & PF), 0xe0); break; /* RET PO */
1839 case 0xe1: POP(hl); break; /* POP HL */
1840 case 0xe2: JP_COND(!(F & PF)); break; /* JP PO,a */
1841 case 0xe3: EXSP(hl); break; /* EX HL,(SP) */
1842 case 0xe4: CALL_COND(!(F & PF), 0xe4); break; /* CALL PO,a */
1843 case 0xe5: PUSH(hl); break; /* PUSH HL */
1844 case 0xe6: AND(FETCH8()); break; /* AND n */
1845 case 0xe7: RST(0x20); break; /* RST 4 */
1846 case 0xe8: RET_COND(F & PF, 0xe8); break; /* RET PE */
1847 case 0xe9: PC = HL; break; /* JP (HL) */
1848 case 0xea: JP_COND(F & PF); break; /* JP PE,a */
1849 case 0xeb: EX_DE_HL(); break; /* EX DE,HL */
1850 case 0xec: CALL_COND(F & PF, 0xec); break; /* CALL PE,a */
1851 case 0xed: OP_ED(FETCHOP()); break; /* **** ED xx */
1852 case 0xee: XOR(FETCH8()); break; /* XOR n */
1853 case 0xef: RST(0x28); break; /* RST 5 */
1854 case 0xf0: RET_COND(!(F & SF), 0xf0); break; /* RET P */
1855 case 0xf1: POP(af); break; /* POP AF */
1856 case 0xf2: JP_COND(!(F & SF)); break; /* JP P,a */
1857 case 0xf3: iff1 = iff2 = 0; break; /* DI */
1858 case 0xf4: CALL_COND(!(F & SF), 0xf4); break; /* CALL P,a */
1859 case 0xf5: PUSH(af); break; /* PUSH AF */
1860 case 0xf6: OR(FETCH8()); break; /* OR n */
1861 case 0xf7: RST(0x30); break; /* RST 6 */
1862 case 0xf8: RET_COND(F & SF, 0xf8); break; /* RET M */
1863 case 0xf9: SP = HL; break; /* LD SP,HL */
1864 case 0xfa: JP_COND(F & SF); break; /* JP M,a */
1865 case 0xfb: EI(); break; /* EI */
1866 case 0xfc: CALL_COND(F & SF, 0xfc); break; /* CALL M,a */
1867 case 0xfd: OP_FD(FETCHOP()); break; /* **** FD xx */
1868 case 0xfe: CP(FETCH8()); break; /* CP n */
1869 case 0xff: RST(0x38); break; /* RST 7 */
1870 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
1871 default: __assume(0);
1878 void Z80_BASE::initialize()
1880 DEVICE::initialize();
1881 if(!flags_initialized) {
1882 uint8_t *padd = SZHVC_add;
1883 uint8_t *padc = SZHVC_add + 256 * 256;
1884 uint8_t *psub = SZHVC_sub;
1885 uint8_t *psbc = SZHVC_sub + 256 * 256;
1887 for(int oldval = 0; oldval < 256; oldval++) {
1888 for(int newval = 0; newval < 256; newval++) {
1889 /* add or adc w/o carry set */
1890 int val = newval - oldval;
1891 *padd = (newval) ? ((newval & 0x80) ? SF : 0) : ZF;
1892 *padd |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */
1893 if((newval & 0x0f) < (oldval & 0x0f)) *padd |= HF;
1894 if(newval < oldval) *padd |= CF;
1895 if((val ^ oldval ^ 0x80) & (val ^ newval) & 0x80) *padd |= VF;
1898 /* adc with carry set */
1899 val = newval - oldval - 1;
1900 *padc = (newval) ? ((newval & 0x80) ? SF : 0) : ZF;
1901 *padc |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */
1902 if((newval & 0x0f) <= (oldval & 0x0f)) *padc |= HF;
1903 if(newval <= oldval) *padc |= CF;
1904 if((val ^ oldval ^ 0x80) & (val ^ newval) & 0x80) *padc |= VF;
1907 /* cp, sub or sbc w/o carry set */
1908 val = oldval - newval;
1909 *psub = NF | ((newval) ? ((newval & 0x80) ? SF : 0) : ZF);
1910 *psub |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */
1911 if((newval & 0x0f) > (oldval & 0x0f)) *psub |= HF;
1912 if(newval > oldval) *psub |= CF;
1913 if((val ^ oldval) & (oldval ^ newval) & 0x80) *psub |= VF;
1916 /* sbc with carry set */
1917 val = oldval - newval - 1;
1918 *psbc = NF | ((newval) ? ((newval & 0x80) ? SF : 0) : ZF);
1919 *psbc |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */
1920 if((newval & 0x0f) >= (oldval & 0x0f)) *psbc |= HF;
1921 if(newval >= oldval) *psbc |= CF;
1922 if((val ^ oldval) & (oldval ^ newval) & 0x80) *psbc |= VF;
1926 for(int i = 0; i < 256; i++) {
1936 SZ[i] = i ? i & SF : ZF;
1937 SZ[i] |= (i & (YF | XF)); /* undocumented flag bits 5+3 */
1938 SZ_BIT[i] = i ? i & SF : ZF | PF;
1939 SZ_BIT[i] |= (i & (YF | XF)); /* undocumented flag bits 5+3 */
1940 SZP[i] = SZ[i] | ((p & 1) ? 0 : PF);
1941 SZHV_inc[i] = SZ[i];
1942 if(i == 0x80) SZHV_inc[i] |= VF;
1943 if((i & 0x0f) == 0x00) SZHV_inc[i] |= HF;
1944 SZHV_dec[i] = SZ[i] | NF;
1945 if(i == 0x7f) SZHV_dec[i] |= VF;
1946 if((i & 0x0f) == 0x0f) SZHV_dec[i] |= HF;
1948 flags_initialized = true;
1950 is_primary = is_primary_cpu(this);
1952 // Collecting stateus.
1953 cycles_tmp_count = 0;
1954 extra_tmp_count = 0;
1959 nsc800_int_count = 0;
1960 nsc800_rsta_count = 0;
1961 nsc800_rsta_count = 0;
1962 nsc800_rsta_count = 0;
1963 register_frame_event(this);
1967 void Z80_BASE::event_frame()
1969 if(frames_count < 0) {
1970 cycles_tmp_count = total_icount;
1971 extra_tmp_count = 0;
1976 nsc800_int_count = 0;
1977 nsc800_rsta_count = 0;
1978 nsc800_rstb_count = 0;
1979 nsc800_rstc_count = 0;
1980 } else if(frames_count >= 16) {
1981 uint64_t _icount = total_icount - cycles_tmp_count;
1982 if(config.print_statistics) {
1984 out_debug_log(_T("INFO: 16 frames done.\nINFO: CLOCKS = %ld INSNS = %d EXTRA_ICOUNT = %d \nINFO: NMI# = %d IRQ# = %d NSC800_INT# = %d RSTA# = %d RSTB# = %d RSTC# = %d"),
1985 _icount, insns_count, extra_tmp_count, nmi_count, irq_count,
1986 nsc800_int_count, nsc800_rsta_count, nsc800_rstb_count, nsc800_rstc_count);
1988 out_debug_log(_T("INFO: 16 frames done.\nINFO: CLOCKS = %ld INSNS = %d EXTRA_ICOUNT = %d \nINFO: NMI# = %d IRQ# = %d"), _icount, insns_count, extra_tmp_count, nmi_count, irq_count);
1991 cycles_tmp_count = total_icount;
1993 extra_tmp_count = 0;
1997 nsc800_int_count = 0;
1998 nsc800_rsta_count = 0;
1999 nsc800_rstb_count = 0;
2000 nsc800_rstc_count = 0;
2006 void Z80_BASE::reset()
2008 //PCD = CPU_START_ADDR;
2011 AFD = BCD = DED = HLD = 0;
2012 IXD = IYD = 0xffff; /* IX and IY are FFFF after a reset! */
2013 F = ZF; /* Zero flag is set */
2016 af2.d = bc2.d = de2.d = hl2.d = 0;
2019 im = iff1 = iff2 = icr = 0;
2021 after_ei = after_ldair = false;
2022 intr_req_bit = intr_pend_bit = 0;
2024 icount = extra_icount = busreq_icount = 0;
2027 void __FASTCALL Z80_BASE::write_signal(int id, uint32_t data, uint32_t mask)
2029 if(id == SIG_CPU_IRQ) {
2030 intr_req_bit = (intr_req_bit & ~mask) | (data & mask);
2031 // always pending (temporary)
2032 intr_pend_bit = (intr_pend_bit & ~mask) | (0xffffffff & mask);
2034 } else if(id == SIG_CPU_NMI) {
2035 intr_req_bit = (data & mask) ? (intr_req_bit | NMI_REQ_BIT) : (intr_req_bit & ~NMI_REQ_BIT);
2037 } else if(id == SIG_CPU_BUSREQ) {
2038 busreq = ((data & mask) != 0);
2039 write_signals(&outputs_busack, busreq ? 0xffffffff : 0);
2040 } else if(has_nsc800) {
2042 if(id == SIG_NSC800_INT) {
2043 intr_req_bit = (data & mask) ? (intr_req_bit | 1) : (intr_req_bit & ~1);
2045 } else if(id == SIG_NSC800_RSTA) {
2046 intr_req_bit = (data & mask) ? (intr_req_bit | 8) : (intr_req_bit & ~8);
2047 nsc800_rsta_count++;
2048 } else if(id == SIG_NSC800_RSTB) {
2049 intr_req_bit = (data & mask) ? (intr_req_bit | 4) : (intr_req_bit & ~4);
2050 nsc800_rstb_count++;
2051 } else if(id == SIG_NSC800_RSTC) {
2052 intr_req_bit = (data & mask) ? (intr_req_bit | 2) : (intr_req_bit & ~2);
2053 nsc800_rstc_count++;
2059 uint32_t __FASTCALL Z80_BASE::read_signal(int id)
2061 if(id == SIG_CPU_IRQ) {
2062 return intr_req_bit;
2068 int Z80_BASE::run(int clock)
2070 if(extra_icount > 0) {
2071 extra_tmp_count += extra_icount;
2074 // this is primary cpu
2077 //#ifdef SINGLE_MODE_DMA
2083 int passed_icount = max(1, extra_icount);
2084 // this is main cpu, icount is not used
2085 /*icount = */extra_icount = 0;
2086 return passed_icount;
2088 // run only one opcode
2089 if((extra_icount += busreq_icount) > 0) {
2091 update_extra_event(extra_icount);
2093 total_icount += extra_icount;
2095 icount = -extra_icount;
2096 extra_icount = busreq_icount = 0;
2103 int first_icount = icount;
2104 icount -= extra_icount;
2110 //#ifdef USE_DEBUGGER
2113 //#ifdef SINGLE_MODE_DMA
2119 // run cpu while given clocks
2120 while(icount > 0 && !busreq) {
2125 // if busreq is raised, spin cpu while remained clock
2126 if(icount > 0 && busreq) {
2129 return first_icount - icount;
2133 void __FASTCALL Z80_BASE::debugger_hook(void)
2137 void __FASTCALL Z80_BASE::run_one_opecode()
2140 after_ei = after_ldair = false;
2143 if(after_ldair) F &= ~PF; // reset parity flag after LD A,I or LD A,R
2145 // ei: run next opecode
2147 after_ldair = false;
2150 if(after_ldair) F &= ~PF; // reset parity flag after LD A,I or LD A,R
2152 if(d_pic != NULL) d_pic->notify_intr_ei();
2157 if(intr_req_bit & NMI_REQ_BIT) {
2164 intr_req_bit &= ~NMI_REQ_BIT;
2166 } else if(has_nsc800) {
2167 if((intr_req_bit & 1) && (icr & 1)) {
2171 if(d_pic != NULL) { // OK?
2172 PCD = WZ = d_pic->get_intr_ack() & 0xffff;
2174 PCD = WZ = (PCD & 0xff00) | 0xcd;
2176 icount -= cc_op[0xcd] + cc_ex[0xff];
2179 } else if((intr_req_bit & 8) && (icr & 8)) {
2184 icount -= cc_op[0xff] + cc_ex[0xff];
2187 } else if((intr_req_bit & 4) && (icr & 4)) {
2192 icount -= cc_op[0xff] + cc_ex[0xff];
2195 } else if((intr_req_bit & 2) && (icr & 2)) {
2200 icount -= cc_op[0xff] + cc_ex[0xff];
2204 } else { // Normal Z80
2209 uint32_t vector = 0xcd; // Default
2210 if(d_pic != NULL) vector = d_pic->get_intr_ack();
2212 // mode 0 (support NOP/JMP/CALL/RST only)
2213 switch(vector & 0xff) {
2214 case 0x00: break; // NOP
2215 case 0xc3: PCD = vector >> 8; break; // JMP
2216 case 0xcd: PUSH(pc); PCD = vector >> 8; break; // CALL
2217 case 0xc7: PUSH(pc); PCD = 0x0000; break; // RST 00H
2218 case 0xcf: PUSH(pc); PCD = 0x0008; break; // RST 08H
2219 case 0xd7: PUSH(pc); PCD = 0x0010; break; // RST 10H
2220 case 0xdf: PUSH(pc); PCD = 0x0018; break; // RST 18H
2221 case 0xe7: PUSH(pc); PCD = 0x0020; break; // RST 20H
2222 case 0xef: PUSH(pc); PCD = 0x0028; break; // RST 28H
2223 case 0xf7: PUSH(pc); PCD = 0x0030; break; // RST 30H
2224 case 0xff: PUSH(pc); PCD = 0x0038; break; // RST 38H
2226 icount -= cc_op[vector & 0xff] + cc_ex[0xff];
2227 } else if(im == 1) {
2231 icount -= cc_op[0xff] + cc_ex[0xff];
2235 RM16((vector & 0xff) | (I << 8), &pc);
2236 icount -= cc_op[0xcd] + cc_ex[0xff];
2242 intr_req_bit &= intr_pend_bit;
2248 //#ifdef SINGLE_MODE_DMA
2253 icount -= extra_icount;
2257 //#ifdef USE_DEBUGGER
2259 bool Z80_BASE::write_debug_reg(const _TCHAR *reg, uint32_t data)
2261 if(_tcsicmp(reg, _T("PC")) == 0) {
2263 } else if(_tcsicmp(reg, _T("SP")) == 0) {
2265 } else if(_tcsicmp(reg, _T("AF")) == 0) {
2267 } else if(_tcsicmp(reg, _T("BC")) == 0) {
2269 } else if(_tcsicmp(reg, _T("DE")) == 0) {
2271 } else if(_tcsicmp(reg, _T("HL")) == 0) {
2273 } else if(_tcsicmp(reg, _T("IX")) == 0) {
2275 } else if(_tcsicmp(reg, _T("IY")) == 0) {
2277 } else if(_tcsicmp(reg, _T("A")) == 0) {
2279 } else if(_tcsicmp(reg, _T("F")) == 0) {
2281 } else if(_tcsicmp(reg, _T("B")) == 0) {
2283 } else if(_tcsicmp(reg, _T("C")) == 0) {
2285 } else if(_tcsicmp(reg, _T("D")) == 0) {
2287 } else if(_tcsicmp(reg, _T("E")) == 0) {
2289 } else if(_tcsicmp(reg, _T("H")) == 0) {
2291 } else if(_tcsicmp(reg, _T("L")) == 0) {
2293 } else if(_tcsicmp(reg, _T("HX")) == 0 || _tcsicmp(reg, _T("XH")) == 0 || _tcsicmp(reg, _T("IXH")) == 0) {
2295 } else if(_tcsicmp(reg, _T("LX")) == 0 || _tcsicmp(reg, _T("XL")) == 0 || _tcsicmp(reg, _T("IXL")) == 0) {
2297 } else if(_tcsicmp(reg, _T("HY")) == 0 || _tcsicmp(reg, _T("YH")) == 0 || _tcsicmp(reg, _T("IYH")) == 0) {
2299 } else if(_tcsicmp(reg, _T("LX")) == 0 || _tcsicmp(reg, _T("YL")) == 0 || _tcsicmp(reg, _T("IYL")) == 0) {
2301 } else if(_tcsicmp(reg, _T("I")) == 0) {
2303 } else if(_tcsicmp(reg, _T("R")) == 0) {
2305 } else if(_tcsicmp(reg, _T("AF'")) == 0) {
2307 } else if(_tcsicmp(reg, _T("BC'")) == 0) {
2309 } else if(_tcsicmp(reg, _T("DE'")) == 0) {
2311 } else if(_tcsicmp(reg, _T("HL'")) == 0) {
2313 } else if(_tcsicmp(reg, _T("A'")) == 0) {
2315 } else if(_tcsicmp(reg, _T("F'")) == 0) {
2317 } else if(_tcsicmp(reg, _T("B'")) == 0) {
2319 } else if(_tcsicmp(reg, _T("C'")) == 0) {
2321 } else if(_tcsicmp(reg, _T("D'")) == 0) {
2323 } else if(_tcsicmp(reg, _T("E'")) == 0) {
2325 } else if(_tcsicmp(reg, _T("H'")) == 0) {
2327 } else if(_tcsicmp(reg, _T("L'")) == 0) {
2335 bool Z80_BASE::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
2338 F = [--------] A = 00 BC = 0000 DE = 0000 HL = 0000 IX = 0000 IY = 0000
2339 F'= [--------] A'= 00 BC'= 0000 DE'= 0000 HL'= 0000 SP = 0000 PC = 0000
2340 I = 00 R = 00 (BC)= 0000 (DE)= 0000 (HL)= 0000 (SP)= 0000 EI:IFF2=0
2341 Total CPU Clocks = 0 (0) Since Scanline = 0/0 (0/0)
2344 my_stprintf_s(buffer, buffer_len,
2345 _T("F = [%c%c%c%c%c%c%c%c] A = %02X BC = %04X DE = %04X HL = %04X IX = %04X IY = %04X\n")
2346 _T("F'= [%c%c%c%c%c%c%c%c] A'= %02X BC'= %04X DE'= %04X HL'= %04X SP = %04X PC = %04X\n")
2347 _T(" I = %02X R = %02X (BC)= %04X (DE)= %04X (HL)= %04X (SP)= %04X %cI:IFF2=%d\n")
2348 _T("Clocks = %llu (%llu) Since Scanline = %d/%d (%d/%d)"),
2350 (F & CF) ? _T('C') : _T('-'), (F & NF) ? _T('N') : _T('-'), (F & PF) ? _T('P') : _T('-'), (F & XF) ? _T('X') : _T('-'),
2351 (F & HF) ? _T('H') : _T('-'), (F & YF) ? _T('Y') : _T('-'), (F & ZF) ? _T('Z') : _T('-'), (F & SF) ? _T('S') : _T('-'),
2352 A, BC, DE, HL, IX, IY,
2353 (F2 & CF) ? _T('C') : _T('-'), (F2 & NF) ? _T('N') : _T('-'), (F2 & PF) ? _T('P') : _T('-'), (F2 & XF) ? _T('X') : _T('-'),
2354 (F2 & HF) ? _T('H') : _T('-'), (F2 & YF) ? _T('Y') : _T('-'), (F2 & ZF) ? _T('Z') : _T('-'), (F2 & SF) ? _T('S') : _T('-'),
2355 A2, BC2, DE2, HL2, SP, PC,
2357 d_mem_stored->read_data16w(BC, &wait), d_mem_stored->read_data16w(DE, &wait), d_mem_stored->read_data16w(HL, &wait), d_mem_stored->read_data16w(SP, &wait),
2358 iff1 ? _T('E') : _T('D'), iff2,
2359 total_icount, total_icount - prev_total_icount,
2360 get_passed_clock_since_vline(), get_cur_vline_clocks(), get_cur_vline(), get_lines_per_frame());
2361 prev_total_icount = total_icount;
2367 int Z80_BASE::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata )
2374 int z80_dasm_main(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol);
2375 static void dasm_cb(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol);
2376 static void dasm_dd(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol);
2377 static void dasm_ed(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol);
2378 static void dasm_fd(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol);
2379 static void dasm_ddcb(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol);
2380 static void dasm_fdcb(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol);
2382 uint8_t z80_dasm_ops[4];
2385 inline uint8_t dasm_fetchop()
2387 return z80_dasm_ops[z80_dasm_ptr++];
2390 inline uint8_t debug_fetch8()
2392 return z80_dasm_ops[z80_dasm_ptr++];
2395 inline uint16_t debug_fetch16()
2397 uint16_t val = z80_dasm_ops[z80_dasm_ptr] | (z80_dasm_ops[z80_dasm_ptr + 1] << 8);
2402 inline int8_t debug_fetch8_rel()
2404 return (int8_t)z80_dasm_ops[z80_dasm_ptr++];
2407 inline uint16_t debug_fetch8_relpc(uint32_t pc)
2409 int8_t res = (int8_t)z80_dasm_ops[z80_dasm_ptr++];
2410 return pc + z80_dasm_ptr + res;
2413 int z80_dasm_main(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol)
2415 buffer[0] = _T('\0');
2417 uint8_t code = dasm_fetchop();
2420 case 0x00: my_stprintf_s(buffer, buffer_len, _T("NOP")); break;
2421 case 0x01: my_stprintf_s(buffer, buffer_len, _T("LD BC, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2422 case 0x02: my_stprintf_s(buffer, buffer_len, _T("LD (BC), A")); break;
2423 case 0x03: my_stprintf_s(buffer, buffer_len, _T("INC BC")); break;
2424 case 0x04: my_stprintf_s(buffer, buffer_len, _T("INC B")); break;
2425 case 0x05: my_stprintf_s(buffer, buffer_len, _T("DEC B")); break;
2426 case 0x06: my_stprintf_s(buffer, buffer_len, _T("LD B, %02x"), debug_fetch8()); break;
2427 case 0x07: my_stprintf_s(buffer, buffer_len, _T("RLCA")); break;
2428 case 0x08: my_stprintf_s(buffer, buffer_len, _T("EX AF, AF'")); break;
2429 case 0x09: my_stprintf_s(buffer, buffer_len, _T("ADD HL, BC")); break;
2430 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("LD A, (BC)")); break;
2431 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("DEC BC")); break;
2432 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("INC C")); break;
2433 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("DEC C")); break;
2434 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("LD C, %02x"), debug_fetch8()); break;
2435 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("RRCA")); break;
2436 case 0x10: my_stprintf_s(buffer, buffer_len, _T("DJNZ %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch8_relpc(pc))); break;
2437 case 0x11: my_stprintf_s(buffer, buffer_len, _T("LD DE, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2438 case 0x12: my_stprintf_s(buffer, buffer_len, _T("LD (DE), A")); break;
2439 case 0x13: my_stprintf_s(buffer, buffer_len, _T("INC DE")); break;
2440 case 0x14: my_stprintf_s(buffer, buffer_len, _T("INC D")); break;
2441 case 0x15: my_stprintf_s(buffer, buffer_len, _T("DEC D")); break;
2442 case 0x16: my_stprintf_s(buffer, buffer_len, _T("LD D, %02x"), debug_fetch8()); break;
2443 case 0x17: my_stprintf_s(buffer, buffer_len, _T("RLA")); break;
2444 case 0x18: my_stprintf_s(buffer, buffer_len, _T("JR %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch8_relpc(pc))); break;
2445 case 0x19: my_stprintf_s(buffer, buffer_len, _T("ADD HL, DE")); break;
2446 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("LD A, (DE)")); break;
2447 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("DEC DE")); break;
2448 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("INC E")); break;
2449 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("DEC E")); break;
2450 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("LD E, %02x"), debug_fetch8()); break;
2451 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("RRA")); break;
2452 case 0x20: my_stprintf_s(buffer, buffer_len, _T("JR NZ, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch8_relpc(pc))); break;
2453 case 0x21: my_stprintf_s(buffer, buffer_len, _T("LD HL, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2454 case 0x22: my_stprintf_s(buffer, buffer_len, _T("LD (%s), HL"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2455 case 0x23: my_stprintf_s(buffer, buffer_len, _T("INC HL")); break;
2456 case 0x24: my_stprintf_s(buffer, buffer_len, _T("INC H")); break;
2457 case 0x25: my_stprintf_s(buffer, buffer_len, _T("DEC H")); break;
2458 case 0x26: my_stprintf_s(buffer, buffer_len, _T("LD H, %02x"), debug_fetch8()); break;
2459 case 0x27: my_stprintf_s(buffer, buffer_len, _T("DAA")); break;
2460 case 0x28: my_stprintf_s(buffer, buffer_len, _T("JR Z, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch8_relpc(pc))); break;
2461 case 0x29: my_stprintf_s(buffer, buffer_len, _T("ADD HL, HL")); break;
2462 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("LD HL, (%s)"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2463 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("DEC HL")); break;
2464 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("INC L")); break;
2465 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("DEC L")); break;
2466 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("LD L, %02x"), debug_fetch8()); break;
2467 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("CPL")); break;
2468 case 0x30: my_stprintf_s(buffer, buffer_len, _T("JR NC, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch8_relpc(pc))); break;
2469 case 0x31: my_stprintf_s(buffer, buffer_len, _T("LD SP, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2470 case 0x32: my_stprintf_s(buffer, buffer_len, _T("LD (%s), A"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2471 case 0x33: my_stprintf_s(buffer, buffer_len, _T("INC SP")); break;
2472 case 0x34: my_stprintf_s(buffer, buffer_len, _T("INC (HL)")); break;
2473 case 0x35: my_stprintf_s(buffer, buffer_len, _T("DEC (HL)")); break;
2474 case 0x36: my_stprintf_s(buffer, buffer_len, _T("LD (HL), %02x"), debug_fetch8()); break;
2475 case 0x37: my_stprintf_s(buffer, buffer_len, _T("SCF")); break;
2476 case 0x38: my_stprintf_s(buffer, buffer_len, _T("JR C, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch8_relpc(pc))); break;
2477 case 0x39: my_stprintf_s(buffer, buffer_len, _T("ADD HL, SP")); break;
2478 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("LD A, (%s)"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2479 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("DEC SP")); break;
2480 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("INC A")); break;
2481 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("DEC A")); break;
2482 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("LD A, %02x"), debug_fetch8()); break;
2483 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("CCF")); break;
2484 case 0x40: my_stprintf_s(buffer, buffer_len, _T("LD B, B")); break;
2485 case 0x41: my_stprintf_s(buffer, buffer_len, _T("LD B, C")); break;
2486 case 0x42: my_stprintf_s(buffer, buffer_len, _T("LD B, D")); break;
2487 case 0x43: my_stprintf_s(buffer, buffer_len, _T("LD B, E")); break;
2488 case 0x44: my_stprintf_s(buffer, buffer_len, _T("LD B, H")); break;
2489 case 0x45: my_stprintf_s(buffer, buffer_len, _T("LD B, L")); break;
2490 case 0x46: my_stprintf_s(buffer, buffer_len, _T("LD B, (HL)")); break;
2491 case 0x47: my_stprintf_s(buffer, buffer_len, _T("LD B, A")); break;
2492 case 0x48: my_stprintf_s(buffer, buffer_len, _T("LD C, B")); break;
2493 case 0x49: my_stprintf_s(buffer, buffer_len, _T("LD C, C")); break;
2494 case 0x4a: my_stprintf_s(buffer, buffer_len, _T("LD C, D")); break;
2495 case 0x4b: my_stprintf_s(buffer, buffer_len, _T("LD C, E")); break;
2496 case 0x4c: my_stprintf_s(buffer, buffer_len, _T("LD C, H")); break;
2497 case 0x4d: my_stprintf_s(buffer, buffer_len, _T("LD C, L")); break;
2498 case 0x4e: my_stprintf_s(buffer, buffer_len, _T("LD C, (HL)")); break;
2499 case 0x4f: my_stprintf_s(buffer, buffer_len, _T("LD C, A")); break;
2500 case 0x50: my_stprintf_s(buffer, buffer_len, _T("LD D, B")); break;
2501 case 0x51: my_stprintf_s(buffer, buffer_len, _T("LD D, C")); break;
2502 case 0x52: my_stprintf_s(buffer, buffer_len, _T("LD D, D")); break;
2503 case 0x53: my_stprintf_s(buffer, buffer_len, _T("LD D, E")); break;
2504 case 0x54: my_stprintf_s(buffer, buffer_len, _T("LD D, H")); break;
2505 case 0x55: my_stprintf_s(buffer, buffer_len, _T("LD D, L")); break;
2506 case 0x56: my_stprintf_s(buffer, buffer_len, _T("LD D, (HL)")); break;
2507 case 0x57: my_stprintf_s(buffer, buffer_len, _T("LD D, A")); break;
2508 case 0x58: my_stprintf_s(buffer, buffer_len, _T("LD E, B")); break;
2509 case 0x59: my_stprintf_s(buffer, buffer_len, _T("LD E, C")); break;
2510 case 0x5a: my_stprintf_s(buffer, buffer_len, _T("LD E, D")); break;
2511 case 0x5b: my_stprintf_s(buffer, buffer_len, _T("LD E, E")); break;
2512 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("LD E, H")); break;
2513 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("LD E, L")); break;
2514 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("LD E, (HL)")); break;
2515 case 0x5f: my_stprintf_s(buffer, buffer_len, _T("LD E, A")); break;
2516 case 0x60: my_stprintf_s(buffer, buffer_len, _T("LD H, B")); break;
2517 case 0x61: my_stprintf_s(buffer, buffer_len, _T("LD H, C")); break;
2518 case 0x62: my_stprintf_s(buffer, buffer_len, _T("LD H, D")); break;
2519 case 0x63: my_stprintf_s(buffer, buffer_len, _T("LD H, E")); break;
2520 case 0x64: my_stprintf_s(buffer, buffer_len, _T("LD H, H")); break;
2521 case 0x65: my_stprintf_s(buffer, buffer_len, _T("LD H, L")); break;
2522 case 0x66: my_stprintf_s(buffer, buffer_len, _T("LD H, (HL)")); break;
2523 case 0x67: my_stprintf_s(buffer, buffer_len, _T("LD H, A")); break;
2524 case 0x68: my_stprintf_s(buffer, buffer_len, _T("LD L, B")); break;
2525 case 0x69: my_stprintf_s(buffer, buffer_len, _T("LD L, C")); break;
2526 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("LD L, D")); break;
2527 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("LD L, E")); break;
2528 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("LD L, H")); break;
2529 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("LD L, L")); break;
2530 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("LD L, (HL)")); break;
2531 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("LD L, A")); break;
2532 case 0x70: my_stprintf_s(buffer, buffer_len, _T("LD (HL), B")); break;
2533 case 0x71: my_stprintf_s(buffer, buffer_len, _T("LD (HL), C")); break;
2534 case 0x72: my_stprintf_s(buffer, buffer_len, _T("LD (HL), D")); break;
2535 case 0x73: my_stprintf_s(buffer, buffer_len, _T("LD (HL), E")); break;
2536 case 0x74: my_stprintf_s(buffer, buffer_len, _T("LD (HL), H")); break;
2537 case 0x75: my_stprintf_s(buffer, buffer_len, _T("LD (HL), L")); break;
2538 case 0x76: my_stprintf_s(buffer, buffer_len, _T("HALT")); break;
2539 case 0x77: my_stprintf_s(buffer, buffer_len, _T("LD (HL), A")); break;
2540 case 0x78: my_stprintf_s(buffer, buffer_len, _T("LD A, B")); break;
2541 case 0x79: my_stprintf_s(buffer, buffer_len, _T("LD A, C")); break;
2542 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("LD A, D")); break;
2543 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("LD A, E")); break;
2544 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("LD A, H")); break;
2545 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("LD A, L")); break;
2546 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("LD A, (HL)")); break;
2547 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("LD A, A")); break;
2548 case 0x80: my_stprintf_s(buffer, buffer_len, _T("ADD A, B")); break;
2549 case 0x81: my_stprintf_s(buffer, buffer_len, _T("ADD A, C")); break;
2550 case 0x82: my_stprintf_s(buffer, buffer_len, _T("ADD A, D")); break;
2551 case 0x83: my_stprintf_s(buffer, buffer_len, _T("ADD A, E")); break;
2552 case 0x84: my_stprintf_s(buffer, buffer_len, _T("ADD A, H")); break;
2553 case 0x85: my_stprintf_s(buffer, buffer_len, _T("ADD A, L")); break;
2554 case 0x86: my_stprintf_s(buffer, buffer_len, _T("ADD A, (HL)")); break;
2555 case 0x87: my_stprintf_s(buffer, buffer_len, _T("ADD A, A")); break;
2556 case 0x88: my_stprintf_s(buffer, buffer_len, _T("ADC A, B")); break;
2557 case 0x89: my_stprintf_s(buffer, buffer_len, _T("ADC A, C")); break;
2558 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("ADC A, D")); break;
2559 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("ADC A, E")); break;
2560 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("ADC A, H")); break;
2561 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("ADC A, L")); break;
2562 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("ADC A, (HL)")); break;
2563 case 0x8f: my_stprintf_s(buffer, buffer_len, _T("ADC A, A")); break;
2564 case 0x90: my_stprintf_s(buffer, buffer_len, _T("SUB B")); break;
2565 case 0x91: my_stprintf_s(buffer, buffer_len, _T("SUB C")); break;
2566 case 0x92: my_stprintf_s(buffer, buffer_len, _T("SUB D")); break;
2567 case 0x93: my_stprintf_s(buffer, buffer_len, _T("SUB E")); break;
2568 case 0x94: my_stprintf_s(buffer, buffer_len, _T("SUB H")); break;
2569 case 0x95: my_stprintf_s(buffer, buffer_len, _T("SUB L")); break;
2570 case 0x96: my_stprintf_s(buffer, buffer_len, _T("SUB (HL)")); break;
2571 case 0x97: my_stprintf_s(buffer, buffer_len, _T("SUB A")); break;
2572 case 0x98: my_stprintf_s(buffer, buffer_len, _T("SBC A, B")); break;
2573 case 0x99: my_stprintf_s(buffer, buffer_len, _T("SBC A, C")); break;
2574 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("SBC A, D")); break;
2575 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("SBC A, E")); break;
2576 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("SBC A, H")); break;
2577 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("SBC A, L")); break;
2578 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("SBC A, (HL)")); break;
2579 case 0x9f: my_stprintf_s(buffer, buffer_len, _T("SBC A, A")); break;
2580 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("AND B")); break;
2581 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("AND C")); break;
2582 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("AND D")); break;
2583 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("AND E")); break;
2584 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("AND H")); break;
2585 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("AND L")); break;
2586 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("AND (HL)")); break;
2587 case 0xa7: my_stprintf_s(buffer, buffer_len, _T("AND A")); break;
2588 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("XOR B")); break;
2589 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("XOR C")); break;
2590 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("XOR D")); break;
2591 case 0xab: my_stprintf_s(buffer, buffer_len, _T("XOR E")); break;
2592 case 0xac: my_stprintf_s(buffer, buffer_len, _T("XOR H")); break;
2593 case 0xad: my_stprintf_s(buffer, buffer_len, _T("XOR L")); break;
2594 case 0xae: my_stprintf_s(buffer, buffer_len, _T("XOR (HL)")); break;
2595 case 0xaf: my_stprintf_s(buffer, buffer_len, _T("XOR A")); break;
2596 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("OR B")); break;
2597 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("OR C")); break;
2598 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("OR D")); break;
2599 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("OR E")); break;
2600 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("OR H")); break;
2601 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("OR L")); break;
2602 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("OR (HL)")); break;
2603 case 0xb7: my_stprintf_s(buffer, buffer_len, _T("OR A")); break;
2604 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("CP B")); break;
2605 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("CP C")); break;
2606 case 0xba: my_stprintf_s(buffer, buffer_len, _T("CP D")); break;
2607 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("CP E")); break;
2608 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("CP H")); break;
2609 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("CP L")); break;
2610 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("CP (HL)")); break;
2611 case 0xbf: my_stprintf_s(buffer, buffer_len, _T("CP A")); break;
2612 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("RET NZ")); break;
2613 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("POP BC")); break;
2614 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("JP NZ, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2615 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("JP %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2616 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("CALL NZ, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2617 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("PUSH BC")); break;
2618 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("ADD A, %02x"), debug_fetch8()); break;
2619 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("RST 00H")); break;
2620 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("RET Z")); break;
2621 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("RET")); break;
2622 case 0xca: my_stprintf_s(buffer, buffer_len, _T("JP Z, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2623 case 0xcb: dasm_cb(pc, buffer, buffer_len, first_symbol); break;
2624 case 0xcc: my_stprintf_s(buffer, buffer_len, _T("CALL Z, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2625 case 0xcd: my_stprintf_s(buffer, buffer_len, _T("CALL %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2626 case 0xce: my_stprintf_s(buffer, buffer_len, _T("ADC A, %02x"), debug_fetch8()); break;
2627 case 0xcf: my_stprintf_s(buffer, buffer_len, _T("RST 08H")); break;
2628 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("RET NC")); break;
2629 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("POP DE")); break;
2630 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("JP NC, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2631 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("OUT (%02x), A"), debug_fetch8()); break;
2632 case 0xd4: my_stprintf_s(buffer, buffer_len, _T("CALL NC, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2633 case 0xd5: my_stprintf_s(buffer, buffer_len, _T("PUSH DE")); break;
2634 case 0xd6: my_stprintf_s(buffer, buffer_len, _T("SUB %02x"), debug_fetch8()); break;
2635 case 0xd7: my_stprintf_s(buffer, buffer_len, _T("RST 10H")); break;
2636 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("RET C")); break;
2637 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("EXX")); break;
2638 case 0xda: my_stprintf_s(buffer, buffer_len, _T("JP C, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2639 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("IN A, (%02x)"), debug_fetch8()); break;
2640 case 0xdc: my_stprintf_s(buffer, buffer_len, _T("CALL C, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2641 case 0xdd: dasm_dd(pc, buffer, buffer_len, first_symbol); break;
2642 case 0xde: my_stprintf_s(buffer, buffer_len, _T("SBC A, %02x"), debug_fetch8()); break;
2643 case 0xdf: my_stprintf_s(buffer, buffer_len, _T("RST 18H")); break;
2644 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("RET PO")); break;
2645 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("POP HL")); break;
2646 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("JP PO, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2647 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("EX HL, (SP)")); break;
2648 case 0xe4: my_stprintf_s(buffer, buffer_len, _T("CALL PO, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2649 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("PUSH HL")); break;
2650 case 0xe6: my_stprintf_s(buffer, buffer_len, _T("AND %02x"), debug_fetch8()); break;
2651 case 0xe7: my_stprintf_s(buffer, buffer_len, _T("RST 20H")); break;
2652 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("RET PE")); break;
2653 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("JP (HL)")); break;
2654 case 0xea: my_stprintf_s(buffer, buffer_len, _T("JP PE, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2655 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("EX DE, HL")); break;
2656 case 0xec: my_stprintf_s(buffer, buffer_len, _T("CALL PE, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2657 case 0xed: dasm_ed(pc, buffer, buffer_len, first_symbol); break;
2658 case 0xee: my_stprintf_s(buffer, buffer_len, _T("XOR %02x"), debug_fetch8()); break;
2659 case 0xef: my_stprintf_s(buffer, buffer_len, _T("RST 28H")); break;
2660 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("RET P")); break;
2661 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("POP AF")); break;
2662 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("JP P, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2663 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("DI")); break;
2664 case 0xf4: my_stprintf_s(buffer, buffer_len, _T("CALL P, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2665 case 0xf5: my_stprintf_s(buffer, buffer_len, _T("PUSH AF")); break;
2666 case 0xf6: my_stprintf_s(buffer, buffer_len, _T("OR %02x"), debug_fetch8()); break;
2667 case 0xf7: my_stprintf_s(buffer, buffer_len, _T("RST 30H")); break;
2668 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("RET M")); break;
2669 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("LD SP, HL")); break;
2670 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("JP M, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2671 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("EI")); break;
2672 case 0xfc: my_stprintf_s(buffer, buffer_len, _T("CALL M, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2673 case 0xfd: dasm_fd(pc, buffer, buffer_len, first_symbol); break;
2674 case 0xfe: my_stprintf_s(buffer, buffer_len, _T("CP %02x"), debug_fetch8()); break;
2675 case 0xff: my_stprintf_s(buffer, buffer_len, _T("RST 38H")); break;
2676 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
2677 default: __assume(0);
2680 return z80_dasm_ptr;
2683 static void dasm_cb(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol)
2685 uint8_t code = dasm_fetchop();
2688 case 0x00: my_stprintf_s(buffer, buffer_len, _T("RLC B")); break;
2689 case 0x01: my_stprintf_s(buffer, buffer_len, _T("RLC C")); break;
2690 case 0x02: my_stprintf_s(buffer, buffer_len, _T("RLC D")); break;
2691 case 0x03: my_stprintf_s(buffer, buffer_len, _T("RLC E")); break;
2692 case 0x04: my_stprintf_s(buffer, buffer_len, _T("RLC H")); break;
2693 case 0x05: my_stprintf_s(buffer, buffer_len, _T("RLC L")); break;
2694 case 0x06: my_stprintf_s(buffer, buffer_len, _T("RLC (HL)")); break;
2695 case 0x07: my_stprintf_s(buffer, buffer_len, _T("RLC A")); break;
2696 case 0x08: my_stprintf_s(buffer, buffer_len, _T("RRC B")); break;
2697 case 0x09: my_stprintf_s(buffer, buffer_len, _T("RRC C")); break;
2698 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("RRC D")); break;
2699 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("RRC E")); break;
2700 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("RRC H")); break;
2701 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("RRC L")); break;
2702 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("RRC (HL)")); break;
2703 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("RRC A")); break;
2704 case 0x10: my_stprintf_s(buffer, buffer_len, _T("RL B")); break;
2705 case 0x11: my_stprintf_s(buffer, buffer_len, _T("RL C")); break;
2706 case 0x12: my_stprintf_s(buffer, buffer_len, _T("RL D")); break;
2707 case 0x13: my_stprintf_s(buffer, buffer_len, _T("RL E")); break;
2708 case 0x14: my_stprintf_s(buffer, buffer_len, _T("RL H")); break;
2709 case 0x15: my_stprintf_s(buffer, buffer_len, _T("RL L")); break;
2710 case 0x16: my_stprintf_s(buffer, buffer_len, _T("RL (HL)")); break;
2711 case 0x17: my_stprintf_s(buffer, buffer_len, _T("RL A")); break;
2712 case 0x18: my_stprintf_s(buffer, buffer_len, _T("RR B")); break;
2713 case 0x19: my_stprintf_s(buffer, buffer_len, _T("RR C")); break;
2714 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("RR D")); break;
2715 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("RR E")); break;
2716 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("RR H")); break;
2717 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("RR L")); break;
2718 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("RR (HL)")); break;
2719 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("RR A")); break;
2720 case 0x20: my_stprintf_s(buffer, buffer_len, _T("SLA B")); break;
2721 case 0x21: my_stprintf_s(buffer, buffer_len, _T("SLA C")); break;
2722 case 0x22: my_stprintf_s(buffer, buffer_len, _T("SLA D")); break;
2723 case 0x23: my_stprintf_s(buffer, buffer_len, _T("SLA E")); break;
2724 case 0x24: my_stprintf_s(buffer, buffer_len, _T("SLA H")); break;
2725 case 0x25: my_stprintf_s(buffer, buffer_len, _T("SLA L")); break;
2726 case 0x26: my_stprintf_s(buffer, buffer_len, _T("SLA (HL)")); break;
2727 case 0x27: my_stprintf_s(buffer, buffer_len, _T("SLA A")); break;
2728 case 0x28: my_stprintf_s(buffer, buffer_len, _T("SRA B")); break;
2729 case 0x29: my_stprintf_s(buffer, buffer_len, _T("SRA C")); break;
2730 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("SRA D")); break;
2731 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("SRA E")); break;
2732 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("SRA H")); break;
2733 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("SRA L")); break;
2734 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("SRA (HL)")); break;
2735 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("SRA A")); break;
2736 case 0x30: my_stprintf_s(buffer, buffer_len, _T("SLL B")); break;
2737 case 0x31: my_stprintf_s(buffer, buffer_len, _T("SLL C")); break;
2738 case 0x32: my_stprintf_s(buffer, buffer_len, _T("SLL D")); break;
2739 case 0x33: my_stprintf_s(buffer, buffer_len, _T("SLL E")); break;
2740 case 0x34: my_stprintf_s(buffer, buffer_len, _T("SLL H")); break;
2741 case 0x35: my_stprintf_s(buffer, buffer_len, _T("SLL L")); break;
2742 case 0x36: my_stprintf_s(buffer, buffer_len, _T("SLL (HL)")); break;
2743 case 0x37: my_stprintf_s(buffer, buffer_len, _T("SLL A")); break;
2744 case 0x38: my_stprintf_s(buffer, buffer_len, _T("SRL B")); break;
2745 case 0x39: my_stprintf_s(buffer, buffer_len, _T("SRL C")); break;
2746 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("SRL D")); break;
2747 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("SRL E")); break;
2748 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("SRL H")); break;
2749 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("SRL L")); break;
2750 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("SRL (HL)")); break;
2751 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("SRL A")); break;
2752 case 0x40: my_stprintf_s(buffer, buffer_len, _T("BIT 0, B")); break;
2753 case 0x41: my_stprintf_s(buffer, buffer_len, _T("BIT 0, C")); break;
2754 case 0x42: my_stprintf_s(buffer, buffer_len, _T("BIT 0, D")); break;
2755 case 0x43: my_stprintf_s(buffer, buffer_len, _T("BIT 0, E")); break;
2756 case 0x44: my_stprintf_s(buffer, buffer_len, _T("BIT 0, H")); break;
2757 case 0x45: my_stprintf_s(buffer, buffer_len, _T("BIT 0, L")); break;
2758 case 0x46: my_stprintf_s(buffer, buffer_len, _T("BIT 0, (HL)")); break;
2759 case 0x47: my_stprintf_s(buffer, buffer_len, _T("BIT 0, A")); break;
2760 case 0x48: my_stprintf_s(buffer, buffer_len, _T("BIT 1, B")); break;
2761 case 0x49: my_stprintf_s(buffer, buffer_len, _T("BIT 1, C")); break;
2762 case 0x4a: my_stprintf_s(buffer, buffer_len, _T("BIT 1, D")); break;
2763 case 0x4b: my_stprintf_s(buffer, buffer_len, _T("BIT 1, E")); break;
2764 case 0x4c: my_stprintf_s(buffer, buffer_len, _T("BIT 1, H")); break;
2765 case 0x4d: my_stprintf_s(buffer, buffer_len, _T("BIT 1, L")); break;
2766 case 0x4e: my_stprintf_s(buffer, buffer_len, _T("BIT 1, (HL)")); break;
2767 case 0x4f: my_stprintf_s(buffer, buffer_len, _T("BIT 1, A")); break;
2768 case 0x50: my_stprintf_s(buffer, buffer_len, _T("BIT 2, B")); break;
2769 case 0x51: my_stprintf_s(buffer, buffer_len, _T("BIT 2, C")); break;
2770 case 0x52: my_stprintf_s(buffer, buffer_len, _T("BIT 2, D")); break;
2771 case 0x53: my_stprintf_s(buffer, buffer_len, _T("BIT 2, E")); break;
2772 case 0x54: my_stprintf_s(buffer, buffer_len, _T("BIT 2, H")); break;
2773 case 0x55: my_stprintf_s(buffer, buffer_len, _T("BIT 2, L")); break;
2774 case 0x56: my_stprintf_s(buffer, buffer_len, _T("BIT 2, (HL)")); break;
2775 case 0x57: my_stprintf_s(buffer, buffer_len, _T("BIT 2, A")); break;
2776 case 0x58: my_stprintf_s(buffer, buffer_len, _T("BIT 3, B")); break;
2777 case 0x59: my_stprintf_s(buffer, buffer_len, _T("BIT 3, C")); break;
2778 case 0x5a: my_stprintf_s(buffer, buffer_len, _T("BIT 3, D")); break;
2779 case 0x5b: my_stprintf_s(buffer, buffer_len, _T("BIT 3, E")); break;
2780 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("BIT 3, H")); break;
2781 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("BIT 3, L")); break;
2782 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("BIT 3, (HL)")); break;
2783 case 0x5f: my_stprintf_s(buffer, buffer_len, _T("BIT 3, A")); break;
2784 case 0x60: my_stprintf_s(buffer, buffer_len, _T("BIT 4, B")); break;
2785 case 0x61: my_stprintf_s(buffer, buffer_len, _T("BIT 4, C")); break;
2786 case 0x62: my_stprintf_s(buffer, buffer_len, _T("BIT 4, D")); break;
2787 case 0x63: my_stprintf_s(buffer, buffer_len, _T("BIT 4, E")); break;
2788 case 0x64: my_stprintf_s(buffer, buffer_len, _T("BIT 4, H")); break;
2789 case 0x65: my_stprintf_s(buffer, buffer_len, _T("BIT 4, L")); break;
2790 case 0x66: my_stprintf_s(buffer, buffer_len, _T("BIT 4, (HL)")); break;
2791 case 0x67: my_stprintf_s(buffer, buffer_len, _T("BIT 4, A")); break;
2792 case 0x68: my_stprintf_s(buffer, buffer_len, _T("BIT 5, B")); break;
2793 case 0x69: my_stprintf_s(buffer, buffer_len, _T("BIT 5, C")); break;
2794 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("BIT 5, D")); break;
2795 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("BIT 5, E")); break;
2796 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("BIT 5, H")); break;
2797 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("BIT 5, L")); break;
2798 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("BIT 5, (HL)")); break;
2799 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("BIT 5, A")); break;
2800 case 0x70: my_stprintf_s(buffer, buffer_len, _T("BIT 6, B")); break;
2801 case 0x71: my_stprintf_s(buffer, buffer_len, _T("BIT 6, C")); break;
2802 case 0x72: my_stprintf_s(buffer, buffer_len, _T("BIT 6, D")); break;
2803 case 0x73: my_stprintf_s(buffer, buffer_len, _T("BIT 6, E")); break;
2804 case 0x74: my_stprintf_s(buffer, buffer_len, _T("BIT 6, H")); break;
2805 case 0x75: my_stprintf_s(buffer, buffer_len, _T("BIT 6, L")); break;
2806 case 0x76: my_stprintf_s(buffer, buffer_len, _T("BIT 6, (HL)")); break;
2807 case 0x77: my_stprintf_s(buffer, buffer_len, _T("BIT 6, A")); break;
2808 case 0x78: my_stprintf_s(buffer, buffer_len, _T("BIT 7, B")); break;
2809 case 0x79: my_stprintf_s(buffer, buffer_len, _T("BIT 7, C")); break;
2810 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("BIT 7, D")); break;
2811 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("BIT 7, E")); break;
2812 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("BIT 7, H")); break;
2813 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("BIT 7, L")); break;
2814 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("BIT 7, (HL)")); break;
2815 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("BIT 7, A")); break;
2816 case 0x80: my_stprintf_s(buffer, buffer_len, _T("RES 0, B")); break;
2817 case 0x81: my_stprintf_s(buffer, buffer_len, _T("RES 0, C")); break;
2818 case 0x82: my_stprintf_s(buffer, buffer_len, _T("RES 0, D")); break;
2819 case 0x83: my_stprintf_s(buffer, buffer_len, _T("RES 0, E")); break;
2820 case 0x84: my_stprintf_s(buffer, buffer_len, _T("RES 0, H")); break;
2821 case 0x85: my_stprintf_s(buffer, buffer_len, _T("RES 0, L")); break;
2822 case 0x86: my_stprintf_s(buffer, buffer_len, _T("RES 0, (HL)")); break;
2823 case 0x87: my_stprintf_s(buffer, buffer_len, _T("RES 0, A")); break;
2824 case 0x88: my_stprintf_s(buffer, buffer_len, _T("RES 1, B")); break;
2825 case 0x89: my_stprintf_s(buffer, buffer_len, _T("RES 1, C")); break;
2826 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("RES 1, D")); break;
2827 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("RES 1, E")); break;
2828 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("RES 1, H")); break;
2829 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("RES 1, L")); break;
2830 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("RES 1, (HL)")); break;
2831 case 0x8f: my_stprintf_s(buffer, buffer_len, _T("RES 1, A")); break;
2832 case 0x90: my_stprintf_s(buffer, buffer_len, _T("RES 2, B")); break;
2833 case 0x91: my_stprintf_s(buffer, buffer_len, _T("RES 2, C")); break;
2834 case 0x92: my_stprintf_s(buffer, buffer_len, _T("RES 2, D")); break;
2835 case 0x93: my_stprintf_s(buffer, buffer_len, _T("RES 2, E")); break;
2836 case 0x94: my_stprintf_s(buffer, buffer_len, _T("RES 2, H")); break;
2837 case 0x95: my_stprintf_s(buffer, buffer_len, _T("RES 2, L")); break;
2838 case 0x96: my_stprintf_s(buffer, buffer_len, _T("RES 2, (HL)")); break;
2839 case 0x97: my_stprintf_s(buffer, buffer_len, _T("RES 2, A")); break;
2840 case 0x98: my_stprintf_s(buffer, buffer_len, _T("RES 3, B")); break;
2841 case 0x99: my_stprintf_s(buffer, buffer_len, _T("RES 3, C")); break;
2842 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("RES 3, D")); break;
2843 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("RES 3, E")); break;
2844 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("RES 3, H")); break;
2845 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("RES 3, L")); break;
2846 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("RES 3, (HL)")); break;
2847 case 0x9f: my_stprintf_s(buffer, buffer_len, _T("RES 3, A")); break;
2848 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("RES 4, B")); break;
2849 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("RES 4, C")); break;
2850 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("RES 4, D")); break;
2851 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("RES 4, E")); break;
2852 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("RES 4, H")); break;
2853 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("RES 4, L")); break;
2854 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("RES 4, (HL)")); break;
2855 case 0xa7: my_stprintf_s(buffer, buffer_len, _T("RES 4, A")); break;
2856 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("RES 5, B")); break;
2857 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("RES 5, C")); break;
2858 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("RES 5, D")); break;
2859 case 0xab: my_stprintf_s(buffer, buffer_len, _T("RES 5, E")); break;
2860 case 0xac: my_stprintf_s(buffer, buffer_len, _T("RES 5, H")); break;
2861 case 0xad: my_stprintf_s(buffer, buffer_len, _T("RES 5, L")); break;
2862 case 0xae: my_stprintf_s(buffer, buffer_len, _T("RES 5, (HL)")); break;
2863 case 0xaf: my_stprintf_s(buffer, buffer_len, _T("RES 5, A")); break;
2864 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("RES 6, B")); break;
2865 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("RES 6, C")); break;
2866 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("RES 6, D")); break;
2867 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("RES 6, E")); break;
2868 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("RES 6, H")); break;
2869 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("RES 6, L")); break;
2870 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("RES 6, (HL)")); break;
2871 case 0xb7: my_stprintf_s(buffer, buffer_len, _T("RES 6, A")); break;
2872 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("RES 7, B")); break;
2873 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("RES 7, C")); break;
2874 case 0xba: my_stprintf_s(buffer, buffer_len, _T("RES 7, D")); break;
2875 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("RES 7, E")); break;
2876 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("RES 7, H")); break;
2877 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("RES 7, L")); break;
2878 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("RES 7, (HL)")); break;
2879 case 0xbf: my_stprintf_s(buffer, buffer_len, _T("RES 7, A")); break;
2880 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("SET 0, B")); break;
2881 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("SET 0, C")); break;
2882 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("SET 0, D")); break;
2883 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("SET 0, E")); break;
2884 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("SET 0, H")); break;
2885 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("SET 0, L")); break;
2886 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("SET 0, (HL)")); break;
2887 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("SET 0, A")); break;
2888 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("SET 1, B")); break;
2889 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("SET 1, C")); break;
2890 case 0xca: my_stprintf_s(buffer, buffer_len, _T("SET 1, D")); break;
2891 case 0xcb: my_stprintf_s(buffer, buffer_len, _T("SET 1, E")); break;
2892 case 0xcc: my_stprintf_s(buffer, buffer_len, _T("SET 1, H")); break;
2893 case 0xcd: my_stprintf_s(buffer, buffer_len, _T("SET 1, L")); break;
2894 case 0xce: my_stprintf_s(buffer, buffer_len, _T("SET 1, (HL)")); break;
2895 case 0xcf: my_stprintf_s(buffer, buffer_len, _T("SET 1, A")); break;
2896 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("SET 2, B")); break;
2897 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("SET 2, C")); break;
2898 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("SET 2, D")); break;
2899 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("SET 2, E")); break;
2900 case 0xd4: my_stprintf_s(buffer, buffer_len, _T("SET 2, H")); break;
2901 case 0xd5: my_stprintf_s(buffer, buffer_len, _T("SET 2, L")); break;
2902 case 0xd6: my_stprintf_s(buffer, buffer_len, _T("SET 2, (HL)")); break;
2903 case 0xd7: my_stprintf_s(buffer, buffer_len, _T("SET 2, A")); break;
2904 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("SET 3, B")); break;
2905 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("SET 3, C")); break;
2906 case 0xda: my_stprintf_s(buffer, buffer_len, _T("SET 3, D")); break;
2907 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("SET 3, E")); break;
2908 case 0xdc: my_stprintf_s(buffer, buffer_len, _T("SET 3, H")); break;
2909 case 0xdd: my_stprintf_s(buffer, buffer_len, _T("SET 3, L")); break;
2910 case 0xde: my_stprintf_s(buffer, buffer_len, _T("SET 3, (HL)")); break;
2911 case 0xdf: my_stprintf_s(buffer, buffer_len, _T("SET 3, A")); break;
2912 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("SET 4, B")); break;
2913 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("SET 4, C")); break;
2914 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("SET 4, D")); break;
2915 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("SET 4, E")); break;
2916 case 0xe4: my_stprintf_s(buffer, buffer_len, _T("SET 4, H")); break;
2917 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("SET 4, L")); break;
2918 case 0xe6: my_stprintf_s(buffer, buffer_len, _T("SET 4, (HL)")); break;
2919 case 0xe7: my_stprintf_s(buffer, buffer_len, _T("SET 4, A")); break;
2920 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("SET 5, B")); break;
2921 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("SET 5, C")); break;
2922 case 0xea: my_stprintf_s(buffer, buffer_len, _T("SET 5, D")); break;
2923 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("SET 5, E")); break;
2924 case 0xec: my_stprintf_s(buffer, buffer_len, _T("SET 5, H")); break;
2925 case 0xed: my_stprintf_s(buffer, buffer_len, _T("SET 5, L")); break;
2926 case 0xee: my_stprintf_s(buffer, buffer_len, _T("SET 5, (HL)")); break;
2927 case 0xef: my_stprintf_s(buffer, buffer_len, _T("SET 5, A")); break;
2928 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("SET 6, B")); break;
2929 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("SET 6, C")); break;
2930 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("SET 6, D")); break;
2931 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("SET 6, E")); break;
2932 case 0xf4: my_stprintf_s(buffer, buffer_len, _T("SET 6, H")); break;
2933 case 0xf5: my_stprintf_s(buffer, buffer_len, _T("SET 6, L")); break;
2934 case 0xf6: my_stprintf_s(buffer, buffer_len, _T("SET 6, (HL)")); break;
2935 case 0xf7: my_stprintf_s(buffer, buffer_len, _T("SET 6, A")); break;
2936 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("SET 7, B")); break;
2937 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("SET 7, C")); break;
2938 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("SET 7, D")); break;
2939 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("SET 7, E")); break;
2940 case 0xfc: my_stprintf_s(buffer, buffer_len, _T("SET 7, H")); break;
2941 case 0xfd: my_stprintf_s(buffer, buffer_len, _T("SET 7, L")); break;
2942 case 0xfe: my_stprintf_s(buffer, buffer_len, _T("SET 7, (HL)")); break;
2943 case 0xff: my_stprintf_s(buffer, buffer_len, _T("SET 7, A")); break;
2944 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
2945 default: __assume(0);
2950 static void dasm_dd(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol)
2952 uint8_t code = dasm_fetchop();
2956 case 0x09: my_stprintf_s(buffer, buffer_len, _T("ADD IX, BC")); break;
2957 case 0x19: my_stprintf_s(buffer, buffer_len, _T("ADD IX, DE")); break;
2958 case 0x21: my_stprintf_s(buffer, buffer_len, _T("LD IX, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2959 case 0x22: my_stprintf_s(buffer, buffer_len, _T("LD (%s), IX"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2960 case 0x23: my_stprintf_s(buffer, buffer_len, _T("INC IX")); break;
2961 case 0x24: my_stprintf_s(buffer, buffer_len, _T("INC HX")); break;
2962 case 0x25: my_stprintf_s(buffer, buffer_len, _T("DEC HX")); break;
2963 case 0x26: my_stprintf_s(buffer, buffer_len, _T("LD HX, %02x"), debug_fetch8()); break;
2964 case 0x29: my_stprintf_s(buffer, buffer_len, _T("ADD IX, IX")); break;
2965 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("LD IX, (%s)"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
2966 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("DEC IX")); break;
2967 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("INC LX")); break;
2968 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("DEC LX")); break;
2969 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("LD LX, %02x"), debug_fetch8()); break;
2970 case 0x34: my_stprintf_s(buffer, buffer_len, _T("INC (IX+(%d))"), debug_fetch8_rel()); break;
2971 case 0x35: my_stprintf_s(buffer, buffer_len, _T("DEC (IX+(%d))"), debug_fetch8_rel()); break;
2972 case 0x36: ofs = debug_fetch8_rel(); my_stprintf_s(buffer, buffer_len, _T("LD (IX+(%d)), %02x"), ofs, debug_fetch8()); break;
2973 case 0x39: my_stprintf_s(buffer, buffer_len, _T("ADD IX, SP")); break;
2974 case 0x44: my_stprintf_s(buffer, buffer_len, _T("LD B, HX")); break;
2975 case 0x45: my_stprintf_s(buffer, buffer_len, _T("LD B, LX")); break;
2976 case 0x46: my_stprintf_s(buffer, buffer_len, _T("LD B, (IX+(%d))"), debug_fetch8_rel()); break;
2977 case 0x4c: my_stprintf_s(buffer, buffer_len, _T("LD C, HX")); break;
2978 case 0x4d: my_stprintf_s(buffer, buffer_len, _T("LD C, LX")); break;
2979 case 0x4e: my_stprintf_s(buffer, buffer_len, _T("LD C, (IX+(%d))"), debug_fetch8_rel()); break;
2980 case 0x54: my_stprintf_s(buffer, buffer_len, _T("LD D, HX")); break;
2981 case 0x55: my_stprintf_s(buffer, buffer_len, _T("LD D, LX")); break;
2982 case 0x56: my_stprintf_s(buffer, buffer_len, _T("LD D, (IX+(%d))"), debug_fetch8_rel()); break;
2983 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("LD E, HX")); break;
2984 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("LD E, LX")); break;
2985 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("LD E, (IX+(%d))"), debug_fetch8_rel()); break;
2986 case 0x60: my_stprintf_s(buffer, buffer_len, _T("LD HX, B")); break;
2987 case 0x61: my_stprintf_s(buffer, buffer_len, _T("LD HX, C")); break;
2988 case 0x62: my_stprintf_s(buffer, buffer_len, _T("LD HX, D")); break;
2989 case 0x63: my_stprintf_s(buffer, buffer_len, _T("LD HX, E")); break;
2990 case 0x64: my_stprintf_s(buffer, buffer_len, _T("LD HX, HX")); break;
2991 case 0x65: my_stprintf_s(buffer, buffer_len, _T("LD HX, LX")); break;
2992 case 0x66: my_stprintf_s(buffer, buffer_len, _T("LD H, (IX+(%d))"), debug_fetch8_rel()); break;
2993 case 0x67: my_stprintf_s(buffer, buffer_len, _T("LD HX, A")); break;
2994 case 0x68: my_stprintf_s(buffer, buffer_len, _T("LD LX, B")); break;
2995 case 0x69: my_stprintf_s(buffer, buffer_len, _T("LD LX, C")); break;
2996 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("LD LX, D")); break;
2997 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("LD LX, E")); break;
2998 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("LD LX, HX")); break;
2999 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("LD LX, LX")); break;
3000 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("LD L, (IX+(%d))"), debug_fetch8_rel()); break;
3001 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("LD LX, A")); break;
3002 case 0x70: my_stprintf_s(buffer, buffer_len, _T("LD (IX+(%d)), B"), debug_fetch8_rel()); break;
3003 case 0x71: my_stprintf_s(buffer, buffer_len, _T("LD (IX+(%d)), C"), debug_fetch8_rel()); break;
3004 case 0x72: my_stprintf_s(buffer, buffer_len, _T("LD (IX+(%d)), D"), debug_fetch8_rel()); break;
3005 case 0x73: my_stprintf_s(buffer, buffer_len, _T("LD (IX+(%d)), E"), debug_fetch8_rel()); break;
3006 case 0x74: my_stprintf_s(buffer, buffer_len, _T("LD (IX+(%d)), H"), debug_fetch8_rel()); break;
3007 case 0x75: my_stprintf_s(buffer, buffer_len, _T("LD (IX+(%d)), L"), debug_fetch8_rel()); break;
3008 case 0x77: my_stprintf_s(buffer, buffer_len, _T("LD (IX+(%d)), A"), debug_fetch8_rel()); break;
3009 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("LD A, HX")); break;
3010 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("LD A, LX")); break;
3011 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("LD A, (IX+(%d))"), debug_fetch8_rel()); break;
3012 case 0x84: my_stprintf_s(buffer, buffer_len, _T("ADD A, HX")); break;
3013 case 0x85: my_stprintf_s(buffer, buffer_len, _T("ADD A, LX")); break;
3014 case 0x86: my_stprintf_s(buffer, buffer_len, _T("ADD A, (IX+(%d))"), debug_fetch8_rel()); break;
3015 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("ADC A, HX")); break;
3016 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("ADC A, LX")); break;
3017 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("ADC A, (IX+(%d))"), debug_fetch8_rel()); break;
3018 case 0x94: my_stprintf_s(buffer, buffer_len, _T("SUB HX")); break;
3019 case 0x95: my_stprintf_s(buffer, buffer_len, _T("SUB LX")); break;
3020 case 0x96: my_stprintf_s(buffer, buffer_len, _T("SUB (IX+(%d))"), debug_fetch8_rel()); break;
3021 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("SBC A, HX")); break;
3022 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("SBC A, LX")); break;
3023 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("SBC A, (IX+(%d))"), debug_fetch8_rel()); break;
3024 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("AND HX")); break;
3025 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("AND LX")); break;
3026 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("AND (IX+(%d))"), debug_fetch8_rel()); break;
3027 case 0xac: my_stprintf_s(buffer, buffer_len, _T("XOR HX")); break;
3028 case 0xad: my_stprintf_s(buffer, buffer_len, _T("XOR LX")); break;
3029 case 0xae: my_stprintf_s(buffer, buffer_len, _T("XOR (IX+(%d))"), debug_fetch8_rel()); break;
3030 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("OR HX")); break;
3031 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("OR LX")); break;
3032 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("OR (IX+(%d))"), debug_fetch8_rel()); break;
3033 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("CP HX")); break;
3034 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("CP LX")); break;
3035 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("CP (IX+(%d))"), debug_fetch8_rel()); break;
3036 case 0xcb: dasm_ddcb(pc, buffer, buffer_len, first_symbol); break;
3037 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("POP IX")); break;
3038 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("EX (SP), IX")); break;
3039 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("PUSH IX")); break;
3040 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("JP (IX)")); break;
3041 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("LD SP, IX")); break;
3042 default: my_stprintf_s(buffer, buffer_len, _T("DB dd")); z80_dasm_ptr--; break;
3046 void dasm_ed(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol)
3048 uint8_t code = dasm_fetchop();
3051 case 0x40: my_stprintf_s(buffer, buffer_len, _T("IN B, (C)")); break;
3052 case 0x41: my_stprintf_s(buffer, buffer_len, _T("OUT (C), B")); break;
3053 case 0x42: my_stprintf_s(buffer, buffer_len, _T("SBC HL, BC")); break;
3054 case 0x43: my_stprintf_s(buffer, buffer_len, _T("LD (%s), BC"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3055 case 0x44: my_stprintf_s(buffer, buffer_len, _T("NEG")); break;
3056 case 0x45: my_stprintf_s(buffer, buffer_len, _T("RETN")); break;
3057 case 0x46: my_stprintf_s(buffer, buffer_len, _T("IM 0")); break;
3058 case 0x47: my_stprintf_s(buffer, buffer_len, _T("LD I, A")); break;
3059 case 0x48: my_stprintf_s(buffer, buffer_len, _T("IN C, (C)")); break;
3060 case 0x49: my_stprintf_s(buffer, buffer_len, _T("OUT (C), C")); break;
3061 case 0x4a: my_stprintf_s(buffer, buffer_len, _T("ADC HL, BC")); break;
3062 case 0x4b: my_stprintf_s(buffer, buffer_len, _T("LD BC, (%s)"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3063 case 0x4c: my_stprintf_s(buffer, buffer_len, _T("NEG")); break;
3064 case 0x4d: my_stprintf_s(buffer, buffer_len, _T("RETI")); break;
3065 case 0x4e: my_stprintf_s(buffer, buffer_len, _T("IM 0")); break;
3066 case 0x4f: my_stprintf_s(buffer, buffer_len, _T("LD R, A")); break;
3067 case 0x50: my_stprintf_s(buffer, buffer_len, _T("IN D, (C)")); break;
3068 case 0x51: my_stprintf_s(buffer, buffer_len, _T("OUT (C), D")); break;
3069 case 0x52: my_stprintf_s(buffer, buffer_len, _T("SBC HL, DE")); break;
3070 case 0x53: my_stprintf_s(buffer, buffer_len, _T("LD (%s), DE"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3071 case 0x54: my_stprintf_s(buffer, buffer_len, _T("NEG")); break;
3072 case 0x55: my_stprintf_s(buffer, buffer_len, _T("RETN")); break;
3073 case 0x56: my_stprintf_s(buffer, buffer_len, _T("IM 1")); break;
3074 case 0x57: my_stprintf_s(buffer, buffer_len, _T("LD A, I")); break;
3075 case 0x58: my_stprintf_s(buffer, buffer_len, _T("IN E, (C)")); break;
3076 case 0x59: my_stprintf_s(buffer, buffer_len, _T("OUT (C), E")); break;
3077 case 0x5a: my_stprintf_s(buffer, buffer_len, _T("ADC HL, DE")); break;
3078 case 0x5b: my_stprintf_s(buffer, buffer_len, _T("LD DE, (%s)"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3079 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("NEG")); break;
3080 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("RETI")); break;
3081 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("IM 2")); break;
3082 case 0x5f: my_stprintf_s(buffer, buffer_len, _T("LD A, R")); break;
3083 case 0x60: my_stprintf_s(buffer, buffer_len, _T("IN H, (C)")); break;
3084 case 0x61: my_stprintf_s(buffer, buffer_len, _T("OUT (C), H")); break;
3085 case 0x62: my_stprintf_s(buffer, buffer_len, _T("SBC HL, HL")); break;
3086 case 0x63: my_stprintf_s(buffer, buffer_len, _T("LD (%s), HL"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3087 case 0x64: my_stprintf_s(buffer, buffer_len, _T("NEG")); break;
3088 case 0x65: my_stprintf_s(buffer, buffer_len, _T("RETN")); break;
3089 case 0x66: my_stprintf_s(buffer, buffer_len, _T("IM 0")); break;
3090 case 0x67: my_stprintf_s(buffer, buffer_len, _T("RRD (HL)")); break;
3091 case 0x68: my_stprintf_s(buffer, buffer_len, _T("IN L, (C)")); break;
3092 case 0x69: my_stprintf_s(buffer, buffer_len, _T("OUT (C), L")); break;
3093 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("ADC HL, HL")); break;
3094 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("LD HL, (%s)"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3095 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("NEG")); break;
3096 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("RETI")); break;
3097 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("IM 0")); break;
3098 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("RLD (HL)")); break;
3099 case 0x70: my_stprintf_s(buffer, buffer_len, _T("IN F, (C)")); break;
3100 case 0x71: my_stprintf_s(buffer, buffer_len, _T("OUT (C), 0")); break;
3101 case 0x72: my_stprintf_s(buffer, buffer_len, _T("SBC HL, SP")); break;
3102 case 0x73: my_stprintf_s(buffer, buffer_len, _T("LD (%s), SP"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3103 case 0x74: my_stprintf_s(buffer, buffer_len, _T("NEG")); break;
3104 case 0x75: my_stprintf_s(buffer, buffer_len, _T("RETN")); break;
3105 case 0x76: my_stprintf_s(buffer, buffer_len, _T("IM 1")); break;
3106 case 0x78: my_stprintf_s(buffer, buffer_len, _T("IN A, (C)")); break;
3107 case 0x79: my_stprintf_s(buffer, buffer_len, _T("OUT (C), A")); break;
3108 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("ADC HL, SP")); break;
3109 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("LD SP, (%s)"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3110 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("NEG")); break;
3111 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("RETI")); break;
3112 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("IM 2")); break;
3113 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("LDI")); break;
3114 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("CPI")); break;
3115 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("INI")); break;
3116 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("OUTI")); break;
3117 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("LDD")); break;
3118 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("CPD")); break;
3119 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("IND")); break;
3120 case 0xab: my_stprintf_s(buffer, buffer_len, _T("OUTD")); break;
3121 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("LDIR")); break;
3122 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("CPIR")); break;
3123 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("INIR")); break;
3124 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("OTIR")); break;
3125 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("LDDR")); break;
3126 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("CPDR")); break;
3127 case 0xba: my_stprintf_s(buffer, buffer_len, _T("INDR")); break;
3128 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("OTDR")); break;
3129 default: my_stprintf_s(buffer, buffer_len, _T("DB ed")); z80_dasm_ptr--; break;
3133 void dasm_fd(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol)
3135 uint8_t code = dasm_fetchop();
3139 case 0x09: my_stprintf_s(buffer, buffer_len, _T("ADD IY, BC")); break;
3140 case 0x19: my_stprintf_s(buffer, buffer_len, _T("ADD IY, DE")); break;
3141 case 0x21: my_stprintf_s(buffer, buffer_len, _T("LD IY, %s"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3142 case 0x22: my_stprintf_s(buffer, buffer_len, _T("LD (%s), IY"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3143 case 0x23: my_stprintf_s(buffer, buffer_len, _T("INC IY")); break;
3144 case 0x24: my_stprintf_s(buffer, buffer_len, _T("INC HY")); break;
3145 case 0x25: my_stprintf_s(buffer, buffer_len, _T("DEC HY")); break;
3146 case 0x26: my_stprintf_s(buffer, buffer_len, _T("LD HY, %02x"), debug_fetch8()); break;
3147 case 0x29: my_stprintf_s(buffer, buffer_len, _T("ADD IY, IY")); break;
3148 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("LD IY, (%s)"), get_value_or_symbol(first_symbol, _T("%04x"), debug_fetch16())); break;
3149 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("DEC IY")); break;
3150 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("INC LY")); break;
3151 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("DEC LY")); break;
3152 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("LD LY, %02x"), debug_fetch8()); break;
3153 case 0x34: my_stprintf_s(buffer, buffer_len, _T("INC (IY+(%d))"), debug_fetch8_rel()); break;
3154 case 0x35: my_stprintf_s(buffer, buffer_len, _T("DEC (IY+(%d))"), debug_fetch8_rel()); break;
3155 case 0x36: ofs = debug_fetch8_rel(); my_stprintf_s(buffer, buffer_len, _T("LD (IY+(%d)), %02x"), ofs, debug_fetch8()); break;
3156 case 0x39: my_stprintf_s(buffer, buffer_len, _T("ADD IY, SP")); break;
3157 case 0x44: my_stprintf_s(buffer, buffer_len, _T("LD B, HY")); break;
3158 case 0x45: my_stprintf_s(buffer, buffer_len, _T("LD B, LY")); break;
3159 case 0x46: my_stprintf_s(buffer, buffer_len, _T("LD B, (IY+(%d))"), debug_fetch8_rel()); break;
3160 case 0x4c: my_stprintf_s(buffer, buffer_len, _T("LD C, HY")); break;
3161 case 0x4d: my_stprintf_s(buffer, buffer_len, _T("LD C, LY")); break;
3162 case 0x4e: my_stprintf_s(buffer, buffer_len, _T("LD C, (IY+(%d))"), debug_fetch8_rel()); break;
3163 case 0x54: my_stprintf_s(buffer, buffer_len, _T("LD D, HY")); break;
3164 case 0x55: my_stprintf_s(buffer, buffer_len, _T("LD D, LY")); break;
3165 case 0x56: my_stprintf_s(buffer, buffer_len, _T("LD D, (IY+(%d))"), debug_fetch8_rel()); break;
3166 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("LD E, HY")); break;
3167 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("LD E, LY")); break;
3168 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("LD E, (IY+(%d))"), debug_fetch8_rel()); break;
3169 case 0x60: my_stprintf_s(buffer, buffer_len, _T("LD HY, B")); break;
3170 case 0x61: my_stprintf_s(buffer, buffer_len, _T("LD HY, C")); break;
3171 case 0x62: my_stprintf_s(buffer, buffer_len, _T("LD HY, D")); break;
3172 case 0x63: my_stprintf_s(buffer, buffer_len, _T("LD HY, E")); break;
3173 case 0x64: my_stprintf_s(buffer, buffer_len, _T("LD HY, HY")); break;
3174 case 0x65: my_stprintf_s(buffer, buffer_len, _T("LD HY, LY")); break;
3175 case 0x66: my_stprintf_s(buffer, buffer_len, _T("LD H, (IY+(%d))"), debug_fetch8_rel()); break;
3176 case 0x67: my_stprintf_s(buffer, buffer_len, _T("LD HY, A")); break;
3177 case 0x68: my_stprintf_s(buffer, buffer_len, _T("LD LY, B")); break;
3178 case 0x69: my_stprintf_s(buffer, buffer_len, _T("LD LY, C")); break;
3179 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("LD LY, D")); break;
3180 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("LD LY, E")); break;
3181 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("LD LY, HY")); break;
3182 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("LD LY, LY")); break;
3183 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("LD L, (IY+(%d))"), debug_fetch8_rel()); break;
3184 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("LD LY, A")); break;
3185 case 0x70: my_stprintf_s(buffer, buffer_len, _T("LD (IY+(%d)), B"), debug_fetch8_rel()); break;
3186 case 0x71: my_stprintf_s(buffer, buffer_len, _T("LD (IY+(%d)), C"), debug_fetch8_rel()); break;
3187 case 0x72: my_stprintf_s(buffer, buffer_len, _T("LD (IY+(%d)), D"), debug_fetch8_rel()); break;
3188 case 0x73: my_stprintf_s(buffer, buffer_len, _T("LD (IY+(%d)), E"), debug_fetch8_rel()); break;
3189 case 0x74: my_stprintf_s(buffer, buffer_len, _T("LD (IY+(%d)), H"), debug_fetch8_rel()); break;
3190 case 0x75: my_stprintf_s(buffer, buffer_len, _T("LD (IY+(%d)), L"), debug_fetch8_rel()); break;
3191 case 0x77: my_stprintf_s(buffer, buffer_len, _T("LD (IY+(%d)), A"), debug_fetch8_rel()); break;
3192 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("LD A, HY")); break;
3193 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("LD A, LY")); break;
3194 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("LD A, (IY+(%d))"), debug_fetch8_rel()); break;
3195 case 0x84: my_stprintf_s(buffer, buffer_len, _T("ADD A, HY")); break;
3196 case 0x85: my_stprintf_s(buffer, buffer_len, _T("ADD A, LY")); break;
3197 case 0x86: my_stprintf_s(buffer, buffer_len, _T("ADD A, (IY+(%d))"), debug_fetch8_rel()); break;
3198 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("ADC A, HY")); break;
3199 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("ADC A, LY")); break;
3200 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("ADC A, (IY+(%d))"), debug_fetch8_rel()); break;
3201 case 0x94: my_stprintf_s(buffer, buffer_len, _T("SUB HY")); break;
3202 case 0x95: my_stprintf_s(buffer, buffer_len, _T("SUB LY")); break;
3203 case 0x96: my_stprintf_s(buffer, buffer_len, _T("SUB (IY+(%d))"), debug_fetch8_rel()); break;
3204 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("SBC A, HY")); break;
3205 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("SBC A, LY")); break;
3206 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("SBC A, (IY+(%d))"), debug_fetch8_rel()); break;
3207 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("AND HY")); break;
3208 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("AND LY")); break;
3209 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("AND (IY+(%d))"), debug_fetch8_rel()); break;
3210 case 0xac: my_stprintf_s(buffer, buffer_len, _T("XOR HY")); break;
3211 case 0xad: my_stprintf_s(buffer, buffer_len, _T("XOR LY")); break;
3212 case 0xae: my_stprintf_s(buffer, buffer_len, _T("XOR (IY+(%d))"), debug_fetch8_rel()); break;
3213 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("OR HY")); break;
3214 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("OR LY")); break;
3215 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("OR (IY+(%d))"), debug_fetch8_rel()); break;
3216 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("CP HY")); break;
3217 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("CP LY")); break;
3218 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("CP (IY+(%d))"), debug_fetch8_rel()); break;
3219 case 0xcb: dasm_fdcb(pc, buffer, buffer_len, first_symbol); break;
3220 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("POP IY")); break;
3221 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("EX (SP), IY")); break;
3222 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("PUSH IY")); break;
3223 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("JP (IY)")); break;
3224 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("LD SP, IY")); break;
3225 default: my_stprintf_s(buffer, buffer_len, _T("DB fd")); z80_dasm_ptr--; break;
3229 static void dasm_ddcb(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol)
3231 int8_t ofs = debug_fetch8_rel();
3232 uint8_t code = debug_fetch8();
3235 case 0x00: my_stprintf_s(buffer, buffer_len, _T("RLC B=(IX+(%d))"), ofs); break;
3236 case 0x01: my_stprintf_s(buffer, buffer_len, _T("RLC C=(IX+(%d))"), ofs); break;
3237 case 0x02: my_stprintf_s(buffer, buffer_len, _T("RLC D=(IX+(%d))"), ofs); break;
3238 case 0x03: my_stprintf_s(buffer, buffer_len, _T("RLC E=(IX+(%d))"), ofs); break;
3239 case 0x04: my_stprintf_s(buffer, buffer_len, _T("RLC H=(IX+(%d))"), ofs); break;
3240 case 0x05: my_stprintf_s(buffer, buffer_len, _T("RLC L=(IX+(%d))"), ofs); break;
3241 case 0x06: my_stprintf_s(buffer, buffer_len, _T("RLC (IX+(%d))"), ofs); break;
3242 case 0x07: my_stprintf_s(buffer, buffer_len, _T("RLC A=(IX+(%d))"), ofs); break;
3243 case 0x08: my_stprintf_s(buffer, buffer_len, _T("RRC B=(IX+(%d))"), ofs); break;
3244 case 0x09: my_stprintf_s(buffer, buffer_len, _T("RRC C=(IX+(%d))"), ofs); break;
3245 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("RRC D=(IX+(%d))"), ofs); break;
3246 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("RRC E=(IX+(%d))"), ofs); break;
3247 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("RRC H=(IX+(%d))"), ofs); break;
3248 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("RRC L=(IX+(%d))"), ofs); break;
3249 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("RRC (IX+(%d))"), ofs); break;
3250 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("RRC A=(IX+(%d))"), ofs); break;
3251 case 0x10: my_stprintf_s(buffer, buffer_len, _T("RL B=(IX+(%d))"), ofs); break;
3252 case 0x11: my_stprintf_s(buffer, buffer_len, _T("RL C=(IX+(%d))"), ofs); break;
3253 case 0x12: my_stprintf_s(buffer, buffer_len, _T("RL D=(IX+(%d))"), ofs); break;
3254 case 0x13: my_stprintf_s(buffer, buffer_len, _T("RL E=(IX+(%d))"), ofs); break;
3255 case 0x14: my_stprintf_s(buffer, buffer_len, _T("RL H=(IX+(%d))"), ofs); break;
3256 case 0x15: my_stprintf_s(buffer, buffer_len, _T("RL L=(IX+(%d))"), ofs); break;
3257 case 0x16: my_stprintf_s(buffer, buffer_len, _T("RL (IX+(%d))"), ofs); break;
3258 case 0x17: my_stprintf_s(buffer, buffer_len, _T("RL A=(IX+(%d))"), ofs); break;
3259 case 0x18: my_stprintf_s(buffer, buffer_len, _T("RR B=(IX+(%d))"), ofs); break;
3260 case 0x19: my_stprintf_s(buffer, buffer_len, _T("RR C=(IX+(%d))"), ofs); break;
3261 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("RR D=(IX+(%d))"), ofs); break;
3262 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("RR E=(IX+(%d))"), ofs); break;
3263 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("RR H=(IX+(%d))"), ofs); break;
3264 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("RR L=(IX+(%d))"), ofs); break;
3265 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("RR (IX+(%d))"), ofs); break;
3266 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("RR A=(IX+(%d))"), ofs); break;
3267 case 0x20: my_stprintf_s(buffer, buffer_len, _T("SLA B=(IX+(%d))"), ofs); break;
3268 case 0x21: my_stprintf_s(buffer, buffer_len, _T("SLA C=(IX+(%d))"), ofs); break;
3269 case 0x22: my_stprintf_s(buffer, buffer_len, _T("SLA D=(IX+(%d))"), ofs); break;
3270 case 0x23: my_stprintf_s(buffer, buffer_len, _T("SLA E=(IX+(%d))"), ofs); break;
3271 case 0x24: my_stprintf_s(buffer, buffer_len, _T("SLA H=(IX+(%d))"), ofs); break;
3272 case 0x25: my_stprintf_s(buffer, buffer_len, _T("SLA L=(IX+(%d))"), ofs); break;
3273 case 0x26: my_stprintf_s(buffer, buffer_len, _T("SLA (IX+(%d))"), ofs); break;
3274 case 0x27: my_stprintf_s(buffer, buffer_len, _T("SLA A=(IX+(%d))"), ofs); break;
3275 case 0x28: my_stprintf_s(buffer, buffer_len, _T("SRA B=(IX+(%d))"), ofs); break;
3276 case 0x29: my_stprintf_s(buffer, buffer_len, _T("SRA C=(IX+(%d))"), ofs); break;
3277 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("SRA D=(IX+(%d))"), ofs); break;
3278 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("SRA E=(IX+(%d))"), ofs); break;
3279 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("SRA H=(IX+(%d))"), ofs); break;
3280 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("SRA L=(IX+(%d))"), ofs); break;
3281 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("SRA (IX+(%d))"), ofs); break;
3282 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("SRA A=(IX+(%d))"), ofs); break;
3283 case 0x30: my_stprintf_s(buffer, buffer_len, _T("SLL B=(IX+(%d))"), ofs); break;
3284 case 0x31: my_stprintf_s(buffer, buffer_len, _T("SLL C=(IX+(%d))"), ofs); break;
3285 case 0x32: my_stprintf_s(buffer, buffer_len, _T("SLL D=(IX+(%d))"), ofs); break;
3286 case 0x33: my_stprintf_s(buffer, buffer_len, _T("SLL E=(IX+(%d))"), ofs); break;
3287 case 0x34: my_stprintf_s(buffer, buffer_len, _T("SLL H=(IX+(%d))"), ofs); break;
3288 case 0x35: my_stprintf_s(buffer, buffer_len, _T("SLL L=(IX+(%d))"), ofs); break;
3289 case 0x36: my_stprintf_s(buffer, buffer_len, _T("SLL (IX+(%d))"), ofs); break;
3290 case 0x37: my_stprintf_s(buffer, buffer_len, _T("SLL A=(IX+(%d))"), ofs); break;
3291 case 0x38: my_stprintf_s(buffer, buffer_len, _T("SRL B=(IX+(%d))"), ofs); break;
3292 case 0x39: my_stprintf_s(buffer, buffer_len, _T("SRL C=(IX+(%d))"), ofs); break;
3293 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("SRL D=(IX+(%d))"), ofs); break;
3294 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("SRL E=(IX+(%d))"), ofs); break;
3295 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("SRL H=(IX+(%d))"), ofs); break;
3296 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("SRL L=(IX+(%d))"), ofs); break;
3297 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("SRL (IX+(%d))"), ofs); break;
3298 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("SRL A=(IX+(%d))"), ofs); break;
3299 case 0x40: my_stprintf_s(buffer, buffer_len, _T("BIT 0, B=(IX+(%d))"), ofs); break;
3300 case 0x41: my_stprintf_s(buffer, buffer_len, _T("BIT 0, C=(IX+(%d))"), ofs); break;
3301 case 0x42: my_stprintf_s(buffer, buffer_len, _T("BIT 0, D=(IX+(%d))"), ofs); break;
3302 case 0x43: my_stprintf_s(buffer, buffer_len, _T("BIT 0, E=(IX+(%d))"), ofs); break;
3303 case 0x44: my_stprintf_s(buffer, buffer_len, _T("BIT 0, H=(IX+(%d))"), ofs); break;
3304 case 0x45: my_stprintf_s(buffer, buffer_len, _T("BIT 0, L=(IX+(%d))"), ofs); break;
3305 case 0x46: my_stprintf_s(buffer, buffer_len, _T("BIT 0, (IX+(%d))"), ofs); break;
3306 case 0x47: my_stprintf_s(buffer, buffer_len, _T("BIT 0, A=(IX+(%d))"), ofs); break;
3307 case 0x48: my_stprintf_s(buffer, buffer_len, _T("BIT 1, B=(IX+(%d))"), ofs); break;
3308 case 0x49: my_stprintf_s(buffer, buffer_len, _T("BIT 1, C=(IX+(%d))"), ofs); break;
3309 case 0x4a: my_stprintf_s(buffer, buffer_len, _T("BIT 1, D=(IX+(%d))"), ofs); break;
3310 case 0x4b: my_stprintf_s(buffer, buffer_len, _T("BIT 1, E=(IX+(%d))"), ofs); break;
3311 case 0x4c: my_stprintf_s(buffer, buffer_len, _T("BIT 1, H=(IX+(%d))"), ofs); break;
3312 case 0x4d: my_stprintf_s(buffer, buffer_len, _T("BIT 1, L=(IX+(%d))"), ofs); break;
3313 case 0x4e: my_stprintf_s(buffer, buffer_len, _T("BIT 1, (IX+(%d))"), ofs); break;
3314 case 0x4f: my_stprintf_s(buffer, buffer_len, _T("BIT 1, A=(IX+(%d))"), ofs); break;
3315 case 0x50: my_stprintf_s(buffer, buffer_len, _T("BIT 2, B=(IX+(%d))"), ofs); break;
3316 case 0x51: my_stprintf_s(buffer, buffer_len, _T("BIT 2, C=(IX+(%d))"), ofs); break;
3317 case 0x52: my_stprintf_s(buffer, buffer_len, _T("BIT 2, D=(IX+(%d))"), ofs); break;
3318 case 0x53: my_stprintf_s(buffer, buffer_len, _T("BIT 2, E=(IX+(%d))"), ofs); break;
3319 case 0x54: my_stprintf_s(buffer, buffer_len, _T("BIT 2, H=(IX+(%d))"), ofs); break;
3320 case 0x55: my_stprintf_s(buffer, buffer_len, _T("BIT 2, L=(IX+(%d))"), ofs); break;
3321 case 0x56: my_stprintf_s(buffer, buffer_len, _T("BIT 2, (IX+(%d))"), ofs); break;
3322 case 0x57: my_stprintf_s(buffer, buffer_len, _T("BIT 2, A=(IX+(%d))"), ofs); break;
3323 case 0x58: my_stprintf_s(buffer, buffer_len, _T("BIT 3, B=(IX+(%d))"), ofs); break;
3324 case 0x59: my_stprintf_s(buffer, buffer_len, _T("BIT 3, C=(IX+(%d))"), ofs); break;
3325 case 0x5a: my_stprintf_s(buffer, buffer_len, _T("BIT 3, D=(IX+(%d))"), ofs); break;
3326 case 0x5b: my_stprintf_s(buffer, buffer_len, _T("BIT 3, E=(IX+(%d))"), ofs); break;
3327 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("BIT 3, H=(IX+(%d))"), ofs); break;
3328 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("BIT 3, L=(IX+(%d))"), ofs); break;
3329 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("BIT 3, (IX+(%d))"), ofs); break;
3330 case 0x5f: my_stprintf_s(buffer, buffer_len, _T("BIT 3, A=(IX+(%d))"), ofs); break;
3331 case 0x60: my_stprintf_s(buffer, buffer_len, _T("BIT 4, B=(IX+(%d))"), ofs); break;
3332 case 0x61: my_stprintf_s(buffer, buffer_len, _T("BIT 4, C=(IX+(%d))"), ofs); break;
3333 case 0x62: my_stprintf_s(buffer, buffer_len, _T("BIT 4, D=(IX+(%d))"), ofs); break;
3334 case 0x63: my_stprintf_s(buffer, buffer_len, _T("BIT 4, E=(IX+(%d))"), ofs); break;
3335 case 0x64: my_stprintf_s(buffer, buffer_len, _T("BIT 4, H=(IX+(%d))"), ofs); break;
3336 case 0x65: my_stprintf_s(buffer, buffer_len, _T("BIT 4, L=(IX+(%d))"), ofs); break;
3337 case 0x66: my_stprintf_s(buffer, buffer_len, _T("BIT 4, (IX+(%d))"), ofs); break;
3338 case 0x67: my_stprintf_s(buffer, buffer_len, _T("BIT 4, A=(IX+(%d))"), ofs); break;
3339 case 0x68: my_stprintf_s(buffer, buffer_len, _T("BIT 5, B=(IX+(%d))"), ofs); break;
3340 case 0x69: my_stprintf_s(buffer, buffer_len, _T("BIT 5, C=(IX+(%d))"), ofs); break;
3341 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("BIT 5, D=(IX+(%d))"), ofs); break;
3342 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("BIT 5, E=(IX+(%d))"), ofs); break;
3343 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("BIT 5, H=(IX+(%d))"), ofs); break;
3344 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("BIT 5, L=(IX+(%d))"), ofs); break;
3345 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("BIT 5, (IX+(%d))"), ofs); break;
3346 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("BIT 5, A=(IX+(%d))"), ofs); break;
3347 case 0x70: my_stprintf_s(buffer, buffer_len, _T("BIT 6, B=(IX+(%d))"), ofs); break;
3348 case 0x71: my_stprintf_s(buffer, buffer_len, _T("BIT 6, C=(IX+(%d))"), ofs); break;
3349 case 0x72: my_stprintf_s(buffer, buffer_len, _T("BIT 6, D=(IX+(%d))"), ofs); break;
3350 case 0x73: my_stprintf_s(buffer, buffer_len, _T("BIT 6, E=(IX+(%d))"), ofs); break;
3351 case 0x74: my_stprintf_s(buffer, buffer_len, _T("BIT 6, H=(IX+(%d))"), ofs); break;
3352 case 0x75: my_stprintf_s(buffer, buffer_len, _T("BIT 6, L=(IX+(%d))"), ofs); break;
3353 case 0x76: my_stprintf_s(buffer, buffer_len, _T("BIT 6, (IX+(%d))"), ofs); break;
3354 case 0x77: my_stprintf_s(buffer, buffer_len, _T("BIT 6, A=(IX+(%d))"), ofs); break;
3355 case 0x78: my_stprintf_s(buffer, buffer_len, _T("BIT 7, B=(IX+(%d))"), ofs); break;
3356 case 0x79: my_stprintf_s(buffer, buffer_len, _T("BIT 7, C=(IX+(%d))"), ofs); break;
3357 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("BIT 7, D=(IX+(%d))"), ofs); break;
3358 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("BIT 7, E=(IX+(%d))"), ofs); break;
3359 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("BIT 7, H=(IX+(%d))"), ofs); break;
3360 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("BIT 7, L=(IX+(%d))"), ofs); break;
3361 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("BIT 7, (IX+(%d))"), ofs); break;
3362 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("BIT 7, A=(IX+(%d))"), ofs); break;
3363 case 0x80: my_stprintf_s(buffer, buffer_len, _T("RES 0, B=(IX+(%d))"), ofs); break;
3364 case 0x81: my_stprintf_s(buffer, buffer_len, _T("RES 0, C=(IX+(%d))"), ofs); break;
3365 case 0x82: my_stprintf_s(buffer, buffer_len, _T("RES 0, D=(IX+(%d))"), ofs); break;
3366 case 0x83: my_stprintf_s(buffer, buffer_len, _T("RES 0, E=(IX+(%d))"), ofs); break;
3367 case 0x84: my_stprintf_s(buffer, buffer_len, _T("RES 0, H=(IX+(%d))"), ofs); break;
3368 case 0x85: my_stprintf_s(buffer, buffer_len, _T("RES 0, L=(IX+(%d))"), ofs); break;
3369 case 0x86: my_stprintf_s(buffer, buffer_len, _T("RES 0, (IX+(%d))"), ofs); break;
3370 case 0x87: my_stprintf_s(buffer, buffer_len, _T("RES 0, A=(IX+(%d))"), ofs); break;
3371 case 0x88: my_stprintf_s(buffer, buffer_len, _T("RES 1, B=(IX+(%d))"), ofs); break;
3372 case 0x89: my_stprintf_s(buffer, buffer_len, _T("RES 1, C=(IX+(%d))"), ofs); break;
3373 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("RES 1, D=(IX+(%d))"), ofs); break;
3374 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("RES 1, E=(IX+(%d))"), ofs); break;
3375 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("RES 1, H=(IX+(%d))"), ofs); break;
3376 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("RES 1, L=(IX+(%d))"), ofs); break;
3377 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("RES 1, (IX+(%d))"), ofs); break;
3378 case 0x8f: my_stprintf_s(buffer, buffer_len, _T("RES 1, A=(IX+(%d))"), ofs); break;
3379 case 0x90: my_stprintf_s(buffer, buffer_len, _T("RES 2, B=(IX+(%d))"), ofs); break;
3380 case 0x91: my_stprintf_s(buffer, buffer_len, _T("RES 2, C=(IX+(%d))"), ofs); break;
3381 case 0x92: my_stprintf_s(buffer, buffer_len, _T("RES 2, D=(IX+(%d))"), ofs); break;
3382 case 0x93: my_stprintf_s(buffer, buffer_len, _T("RES 2, E=(IX+(%d))"), ofs); break;
3383 case 0x94: my_stprintf_s(buffer, buffer_len, _T("RES 2, H=(IX+(%d))"), ofs); break;
3384 case 0x95: my_stprintf_s(buffer, buffer_len, _T("RES 2, L=(IX+(%d))"), ofs); break;
3385 case 0x96: my_stprintf_s(buffer, buffer_len, _T("RES 2, (IX+(%d))"), ofs); break;
3386 case 0x97: my_stprintf_s(buffer, buffer_len, _T("RES 2, A=(IX+(%d))"), ofs); break;
3387 case 0x98: my_stprintf_s(buffer, buffer_len, _T("RES 3, B=(IX+(%d))"), ofs); break;
3388 case 0x99: my_stprintf_s(buffer, buffer_len, _T("RES 3, C=(IX+(%d))"), ofs); break;
3389 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("RES 3, D=(IX+(%d))"), ofs); break;
3390 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("RES 3, E=(IX+(%d))"), ofs); break;
3391 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("RES 3, H=(IX+(%d))"), ofs); break;
3392 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("RES 3, L=(IX+(%d))"), ofs); break;
3393 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("RES 3, (IX+(%d))"), ofs); break;
3394 case 0x9f: my_stprintf_s(buffer, buffer_len, _T("RES 3, A=(IX+(%d))"), ofs); break;
3395 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("RES 4, B=(IX+(%d))"), ofs); break;
3396 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("RES 4, C=(IX+(%d))"), ofs); break;
3397 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("RES 4, D=(IX+(%d))"), ofs); break;
3398 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("RES 4, E=(IX+(%d))"), ofs); break;
3399 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("RES 4, H=(IX+(%d))"), ofs); break;
3400 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("RES 4, L=(IX+(%d))"), ofs); break;
3401 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("RES 4, (IX+(%d))"), ofs); break;
3402 case 0xa7: my_stprintf_s(buffer, buffer_len, _T("RES 4, A=(IX+(%d))"), ofs); break;
3403 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("RES 5, B=(IX+(%d))"), ofs); break;
3404 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("RES 5, C=(IX+(%d))"), ofs); break;
3405 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("RES 5, D=(IX+(%d))"), ofs); break;
3406 case 0xab: my_stprintf_s(buffer, buffer_len, _T("RES 5, E=(IX+(%d))"), ofs); break;
3407 case 0xac: my_stprintf_s(buffer, buffer_len, _T("RES 5, H=(IX+(%d))"), ofs); break;
3408 case 0xad: my_stprintf_s(buffer, buffer_len, _T("RES 5, L=(IX+(%d))"), ofs); break;
3409 case 0xae: my_stprintf_s(buffer, buffer_len, _T("RES 5, (IX+(%d))"), ofs); break;
3410 case 0xaf: my_stprintf_s(buffer, buffer_len, _T("RES 5, A=(IX+(%d))"), ofs); break;
3411 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("RES 6, B=(IX+(%d))"), ofs); break;
3412 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("RES 6, C=(IX+(%d))"), ofs); break;
3413 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("RES 6, D=(IX+(%d))"), ofs); break;
3414 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("RES 6, E=(IX+(%d))"), ofs); break;
3415 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("RES 6, H=(IX+(%d))"), ofs); break;
3416 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("RES 6, L=(IX+(%d))"), ofs); break;
3417 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("RES 6, (IX+(%d))"), ofs); break;
3418 case 0xb7: my_stprintf_s(buffer, buffer_len, _T("RES 6, A=(IX+(%d))"), ofs); break;
3419 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("RES 7, B=(IX+(%d))"), ofs); break;
3420 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("RES 7, C=(IX+(%d))"), ofs); break;
3421 case 0xba: my_stprintf_s(buffer, buffer_len, _T("RES 7, D=(IX+(%d))"), ofs); break;
3422 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("RES 7, E=(IX+(%d))"), ofs); break;
3423 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("RES 7, H=(IX+(%d))"), ofs); break;
3424 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("RES 7, L=(IX+(%d))"), ofs); break;
3425 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("RES 7, (IX+(%d))"), ofs); break;
3426 case 0xbf: my_stprintf_s(buffer, buffer_len, _T("RES 7, A=(IX+(%d))"), ofs); break;
3427 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("SET 0, B=(IX+(%d))"), ofs); break;
3428 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("SET 0, C=(IX+(%d))"), ofs); break;
3429 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("SET 0, D=(IX+(%d))"), ofs); break;
3430 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("SET 0, E=(IX+(%d))"), ofs); break;
3431 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("SET 0, H=(IX+(%d))"), ofs); break;
3432 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("SET 0, L=(IX+(%d))"), ofs); break;
3433 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("SET 0, (IX+(%d))"), ofs); break;
3434 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("SET 0, A=(IX+(%d))"), ofs); break;
3435 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("SET 1, B=(IX+(%d))"), ofs); break;
3436 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("SET 1, C=(IX+(%d))"), ofs); break;
3437 case 0xca: my_stprintf_s(buffer, buffer_len, _T("SET 1, D=(IX+(%d))"), ofs); break;
3438 case 0xcb: my_stprintf_s(buffer, buffer_len, _T("SET 1, E=(IX+(%d))"), ofs); break;
3439 case 0xcc: my_stprintf_s(buffer, buffer_len, _T("SET 1, H=(IX+(%d))"), ofs); break;
3440 case 0xcd: my_stprintf_s(buffer, buffer_len, _T("SET 1, L=(IX+(%d))"), ofs); break;
3441 case 0xce: my_stprintf_s(buffer, buffer_len, _T("SET 1, (IX+(%d))"), ofs); break;
3442 case 0xcf: my_stprintf_s(buffer, buffer_len, _T("SET 1, A=(IX+(%d))"), ofs); break;
3443 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("SET 2, B=(IX+(%d))"), ofs); break;
3444 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("SET 2, C=(IX+(%d))"), ofs); break;
3445 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("SET 2, D=(IX+(%d))"), ofs); break;
3446 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("SET 2, E=(IX+(%d))"), ofs); break;
3447 case 0xd4: my_stprintf_s(buffer, buffer_len, _T("SET 2, H=(IX+(%d))"), ofs); break;
3448 case 0xd5: my_stprintf_s(buffer, buffer_len, _T("SET 2, L=(IX+(%d))"), ofs); break;
3449 case 0xd6: my_stprintf_s(buffer, buffer_len, _T("SET 2, (IX+(%d))"), ofs); break;
3450 case 0xd7: my_stprintf_s(buffer, buffer_len, _T("SET 2, A=(IX+(%d))"), ofs); break;
3451 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("SET 3, B=(IX+(%d))"), ofs); break;
3452 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("SET 3, C=(IX+(%d))"), ofs); break;
3453 case 0xda: my_stprintf_s(buffer, buffer_len, _T("SET 3, D=(IX+(%d))"), ofs); break;
3454 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("SET 3, E=(IX+(%d))"), ofs); break;
3455 case 0xdc: my_stprintf_s(buffer, buffer_len, _T("SET 3, H=(IX+(%d))"), ofs); break;
3456 case 0xdd: my_stprintf_s(buffer, buffer_len, _T("SET 3, L=(IX+(%d))"), ofs); break;
3457 case 0xde: my_stprintf_s(buffer, buffer_len, _T("SET 3, (IX+(%d))"), ofs); break;
3458 case 0xdf: my_stprintf_s(buffer, buffer_len, _T("SET 3, A=(IX+(%d))"), ofs); break;
3459 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("SET 4, B=(IX+(%d))"), ofs); break;
3460 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("SET 4, C=(IX+(%d))"), ofs); break;
3461 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("SET 4, D=(IX+(%d))"), ofs); break;
3462 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("SET 4, E=(IX+(%d))"), ofs); break;
3463 case 0xe4: my_stprintf_s(buffer, buffer_len, _T("SET 4, H=(IX+(%d))"), ofs); break;
3464 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("SET 4, L=(IX+(%d))"), ofs); break;
3465 case 0xe6: my_stprintf_s(buffer, buffer_len, _T("SET 4, (IX+(%d))"), ofs); break;
3466 case 0xe7: my_stprintf_s(buffer, buffer_len, _T("SET 4, A=(IX+(%d))"), ofs); break;
3467 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("SET 5, B=(IX+(%d))"), ofs); break;
3468 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("SET 5, C=(IX+(%d))"), ofs); break;
3469 case 0xea: my_stprintf_s(buffer, buffer_len, _T("SET 5, D=(IX+(%d))"), ofs); break;
3470 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("SET 5, E=(IX+(%d))"), ofs); break;
3471 case 0xec: my_stprintf_s(buffer, buffer_len, _T("SET 5, H=(IX+(%d))"), ofs); break;
3472 case 0xed: my_stprintf_s(buffer, buffer_len, _T("SET 5, L=(IX+(%d))"), ofs); break;
3473 case 0xee: my_stprintf_s(buffer, buffer_len, _T("SET 5, (IX+(%d))"), ofs); break;
3474 case 0xef: my_stprintf_s(buffer, buffer_len, _T("SET 5, A=(IX+(%d))"), ofs); break;
3475 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("SET 6, B=(IX+(%d))"), ofs); break;
3476 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("SET 6, C=(IX+(%d))"), ofs); break;
3477 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("SET 6, D=(IX+(%d))"), ofs); break;
3478 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("SET 6, E=(IX+(%d))"), ofs); break;
3479 case 0xf4: my_stprintf_s(buffer, buffer_len, _T("SET 6, H=(IX+(%d))"), ofs); break;
3480 case 0xf5: my_stprintf_s(buffer, buffer_len, _T("SET 6, L=(IX+(%d))"), ofs); break;
3481 case 0xf6: my_stprintf_s(buffer, buffer_len, _T("SET 6, (IX+(%d))"), ofs); break;
3482 case 0xf7: my_stprintf_s(buffer, buffer_len, _T("SET 6, A=(IX+(%d))"), ofs); break;
3483 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("SET 7, B=(IX+(%d))"), ofs); break;
3484 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("SET 7, C=(IX+(%d))"), ofs); break;
3485 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("SET 7, D=(IX+(%d))"), ofs); break;
3486 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("SET 7, E=(IX+(%d))"), ofs); break;
3487 case 0xfc: my_stprintf_s(buffer, buffer_len, _T("SET 7, H=(IX+(%d))"), ofs); break;
3488 case 0xfd: my_stprintf_s(buffer, buffer_len, _T("SET 7, L=(IX+(%d))"), ofs); break;
3489 case 0xfe: my_stprintf_s(buffer, buffer_len, _T("SET 7, (IX+(%d))"), ofs); break;
3490 case 0xff: my_stprintf_s(buffer, buffer_len, _T("SET 7, A=(IX+(%d))"), ofs); break;
3491 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
3492 default: __assume(0);
3497 static void dasm_fdcb(uint32_t pc, _TCHAR *buffer, size_t buffer_len, symbol_t *first_symbol)
3499 int8_t ofs = debug_fetch8_rel();
3500 uint8_t code = debug_fetch8();
3503 case 0x00: my_stprintf_s(buffer, buffer_len, _T("RLC B=(IY+(%d))"), ofs); break;
3504 case 0x01: my_stprintf_s(buffer, buffer_len, _T("RLC C=(IY+(%d))"), ofs); break;
3505 case 0x02: my_stprintf_s(buffer, buffer_len, _T("RLC D=(IY+(%d))"), ofs); break;
3506 case 0x03: my_stprintf_s(buffer, buffer_len, _T("RLC E=(IY+(%d))"), ofs); break;
3507 case 0x04: my_stprintf_s(buffer, buffer_len, _T("RLC H=(IY+(%d))"), ofs); break;
3508 case 0x05: my_stprintf_s(buffer, buffer_len, _T("RLC L=(IY+(%d))"), ofs); break;
3509 case 0x06: my_stprintf_s(buffer, buffer_len, _T("RLC (IY+(%d))"), ofs); break;
3510 case 0x07: my_stprintf_s(buffer, buffer_len, _T("RLC A=(IY+(%d))"), ofs); break;
3511 case 0x08: my_stprintf_s(buffer, buffer_len, _T("RRC B=(IY+(%d))"), ofs); break;
3512 case 0x09: my_stprintf_s(buffer, buffer_len, _T("RRC C=(IY+(%d))"), ofs); break;
3513 case 0x0a: my_stprintf_s(buffer, buffer_len, _T("RRC D=(IY+(%d))"), ofs); break;
3514 case 0x0b: my_stprintf_s(buffer, buffer_len, _T("RRC E=(IY+(%d))"), ofs); break;
3515 case 0x0c: my_stprintf_s(buffer, buffer_len, _T("RRC H=(IY+(%d))"), ofs); break;
3516 case 0x0d: my_stprintf_s(buffer, buffer_len, _T("RRC L=(IY+(%d))"), ofs); break;
3517 case 0x0e: my_stprintf_s(buffer, buffer_len, _T("RRC (IY+(%d))"), ofs); break;
3518 case 0x0f: my_stprintf_s(buffer, buffer_len, _T("RRC A=(IY+(%d))"), ofs); break;
3519 case 0x10: my_stprintf_s(buffer, buffer_len, _T("RL B=(IY+(%d))"), ofs); break;
3520 case 0x11: my_stprintf_s(buffer, buffer_len, _T("RL C=(IY+(%d))"), ofs); break;
3521 case 0x12: my_stprintf_s(buffer, buffer_len, _T("RL D=(IY+(%d))"), ofs); break;
3522 case 0x13: my_stprintf_s(buffer, buffer_len, _T("RL E=(IY+(%d))"), ofs); break;
3523 case 0x14: my_stprintf_s(buffer, buffer_len, _T("RL H=(IY+(%d))"), ofs); break;
3524 case 0x15: my_stprintf_s(buffer, buffer_len, _T("RL L=(IY+(%d))"), ofs); break;
3525 case 0x16: my_stprintf_s(buffer, buffer_len, _T("RL (IY+(%d))"), ofs); break;
3526 case 0x17: my_stprintf_s(buffer, buffer_len, _T("RL A=(IY+(%d))"), ofs); break;
3527 case 0x18: my_stprintf_s(buffer, buffer_len, _T("RR B=(IY+(%d))"), ofs); break;
3528 case 0x19: my_stprintf_s(buffer, buffer_len, _T("RR C=(IY+(%d))"), ofs); break;
3529 case 0x1a: my_stprintf_s(buffer, buffer_len, _T("RR D=(IY+(%d))"), ofs); break;
3530 case 0x1b: my_stprintf_s(buffer, buffer_len, _T("RR E=(IY+(%d))"), ofs); break;
3531 case 0x1c: my_stprintf_s(buffer, buffer_len, _T("RR H=(IY+(%d))"), ofs); break;
3532 case 0x1d: my_stprintf_s(buffer, buffer_len, _T("RR L=(IY+(%d))"), ofs); break;
3533 case 0x1e: my_stprintf_s(buffer, buffer_len, _T("RR (IY+(%d))"), ofs); break;
3534 case 0x1f: my_stprintf_s(buffer, buffer_len, _T("RR A=(IY+(%d))"), ofs); break;
3535 case 0x20: my_stprintf_s(buffer, buffer_len, _T("SLA B=(IY+(%d))"), ofs); break;
3536 case 0x21: my_stprintf_s(buffer, buffer_len, _T("SLA C=(IY+(%d))"), ofs); break;
3537 case 0x22: my_stprintf_s(buffer, buffer_len, _T("SLA D=(IY+(%d))"), ofs); break;
3538 case 0x23: my_stprintf_s(buffer, buffer_len, _T("SLA E=(IY+(%d))"), ofs); break;
3539 case 0x24: my_stprintf_s(buffer, buffer_len, _T("SLA H=(IY+(%d))"), ofs); break;
3540 case 0x25: my_stprintf_s(buffer, buffer_len, _T("SLA L=(IY+(%d))"), ofs); break;
3541 case 0x26: my_stprintf_s(buffer, buffer_len, _T("SLA (IY+(%d))"), ofs); break;
3542 case 0x27: my_stprintf_s(buffer, buffer_len, _T("SLA A=(IY+(%d))"), ofs); break;
3543 case 0x28: my_stprintf_s(buffer, buffer_len, _T("SRA B=(IY+(%d))"), ofs); break;
3544 case 0x29: my_stprintf_s(buffer, buffer_len, _T("SRA C=(IY+(%d))"), ofs); break;
3545 case 0x2a: my_stprintf_s(buffer, buffer_len, _T("SRA D=(IY+(%d))"), ofs); break;
3546 case 0x2b: my_stprintf_s(buffer, buffer_len, _T("SRA E=(IY+(%d))"), ofs); break;
3547 case 0x2c: my_stprintf_s(buffer, buffer_len, _T("SRA H=(IY+(%d))"), ofs); break;
3548 case 0x2d: my_stprintf_s(buffer, buffer_len, _T("SRA L=(IY+(%d))"), ofs); break;
3549 case 0x2e: my_stprintf_s(buffer, buffer_len, _T("SRA (IY+(%d))"), ofs); break;
3550 case 0x2f: my_stprintf_s(buffer, buffer_len, _T("SRA A=(IY+(%d))"), ofs); break;
3551 case 0x30: my_stprintf_s(buffer, buffer_len, _T("SLL B=(IY+(%d))"), ofs); break;
3552 case 0x31: my_stprintf_s(buffer, buffer_len, _T("SLL C=(IY+(%d))"), ofs); break;
3553 case 0x32: my_stprintf_s(buffer, buffer_len, _T("SLL D=(IY+(%d))"), ofs); break;
3554 case 0x33: my_stprintf_s(buffer, buffer_len, _T("SLL E=(IY+(%d))"), ofs); break;
3555 case 0x34: my_stprintf_s(buffer, buffer_len, _T("SLL H=(IY+(%d))"), ofs); break;
3556 case 0x35: my_stprintf_s(buffer, buffer_len, _T("SLL L=(IY+(%d))"), ofs); break;
3557 case 0x36: my_stprintf_s(buffer, buffer_len, _T("SLL (IY+(%d))"), ofs); break;
3558 case 0x37: my_stprintf_s(buffer, buffer_len, _T("SLL A=(IY+(%d))"), ofs); break;
3559 case 0x38: my_stprintf_s(buffer, buffer_len, _T("SRL B=(IY+(%d))"), ofs); break;
3560 case 0x39: my_stprintf_s(buffer, buffer_len, _T("SRL C=(IY+(%d))"), ofs); break;
3561 case 0x3a: my_stprintf_s(buffer, buffer_len, _T("SRL D=(IY+(%d))"), ofs); break;
3562 case 0x3b: my_stprintf_s(buffer, buffer_len, _T("SRL E=(IY+(%d))"), ofs); break;
3563 case 0x3c: my_stprintf_s(buffer, buffer_len, _T("SRL H=(IY+(%d))"), ofs); break;
3564 case 0x3d: my_stprintf_s(buffer, buffer_len, _T("SRL L=(IY+(%d))"), ofs); break;
3565 case 0x3e: my_stprintf_s(buffer, buffer_len, _T("SRL (IY+(%d))"), ofs); break;
3566 case 0x3f: my_stprintf_s(buffer, buffer_len, _T("SRL A=(IY+(%d))"), ofs); break;
3567 case 0x40: my_stprintf_s(buffer, buffer_len, _T("BIT 0, B=(IY+(%d))"), ofs); break;
3568 case 0x41: my_stprintf_s(buffer, buffer_len, _T("BIT 0, C=(IY+(%d))"), ofs); break;
3569 case 0x42: my_stprintf_s(buffer, buffer_len, _T("BIT 0, D=(IY+(%d))"), ofs); break;
3570 case 0x43: my_stprintf_s(buffer, buffer_len, _T("BIT 0, E=(IY+(%d))"), ofs); break;
3571 case 0x44: my_stprintf_s(buffer, buffer_len, _T("BIT 0, H=(IY+(%d))"), ofs); break;
3572 case 0x45: my_stprintf_s(buffer, buffer_len, _T("BIT 0, L=(IY+(%d))"), ofs); break;
3573 case 0x46: my_stprintf_s(buffer, buffer_len, _T("BIT 0, (IY+(%d))"), ofs); break;
3574 case 0x47: my_stprintf_s(buffer, buffer_len, _T("BIT 0, A=(IY+(%d))"), ofs); break;
3575 case 0x48: my_stprintf_s(buffer, buffer_len, _T("BIT 1, B=(IY+(%d))"), ofs); break;
3576 case 0x49: my_stprintf_s(buffer, buffer_len, _T("BIT 1, C=(IY+(%d))"), ofs); break;
3577 case 0x4a: my_stprintf_s(buffer, buffer_len, _T("BIT 1, D=(IY+(%d))"), ofs); break;
3578 case 0x4b: my_stprintf_s(buffer, buffer_len, _T("BIT 1, E=(IY+(%d))"), ofs); break;
3579 case 0x4c: my_stprintf_s(buffer, buffer_len, _T("BIT 1, H=(IY+(%d))"), ofs); break;
3580 case 0x4d: my_stprintf_s(buffer, buffer_len, _T("BIT 1, L=(IY+(%d))"), ofs); break;
3581 case 0x4e: my_stprintf_s(buffer, buffer_len, _T("BIT 1, (IY+(%d))"), ofs); break;
3582 case 0x4f: my_stprintf_s(buffer, buffer_len, _T("BIT 1, A=(IY+(%d))"), ofs); break;
3583 case 0x50: my_stprintf_s(buffer, buffer_len, _T("BIT 2, B=(IY+(%d))"), ofs); break;
3584 case 0x51: my_stprintf_s(buffer, buffer_len, _T("BIT 2, C=(IY+(%d))"), ofs); break;
3585 case 0x52: my_stprintf_s(buffer, buffer_len, _T("BIT 2, D=(IY+(%d))"), ofs); break;
3586 case 0x53: my_stprintf_s(buffer, buffer_len, _T("BIT 2, E=(IY+(%d))"), ofs); break;
3587 case 0x54: my_stprintf_s(buffer, buffer_len, _T("BIT 2, H=(IY+(%d))"), ofs); break;
3588 case 0x55: my_stprintf_s(buffer, buffer_len, _T("BIT 2, L=(IY+(%d))"), ofs); break;
3589 case 0x56: my_stprintf_s(buffer, buffer_len, _T("BIT 2, (IY+(%d))"), ofs); break;
3590 case 0x57: my_stprintf_s(buffer, buffer_len, _T("BIT 2, A=(IY+(%d))"), ofs); break;
3591 case 0x58: my_stprintf_s(buffer, buffer_len, _T("BIT 3, B=(IY+(%d))"), ofs); break;
3592 case 0x59: my_stprintf_s(buffer, buffer_len, _T("BIT 3, C=(IY+(%d))"), ofs); break;
3593 case 0x5a: my_stprintf_s(buffer, buffer_len, _T("BIT 3, D=(IY+(%d))"), ofs); break;
3594 case 0x5b: my_stprintf_s(buffer, buffer_len, _T("BIT 3, E=(IY+(%d))"), ofs); break;
3595 case 0x5c: my_stprintf_s(buffer, buffer_len, _T("BIT 3, H=(IY+(%d))"), ofs); break;
3596 case 0x5d: my_stprintf_s(buffer, buffer_len, _T("BIT 3, L=(IY+(%d))"), ofs); break;
3597 case 0x5e: my_stprintf_s(buffer, buffer_len, _T("BIT 3, (IY+(%d))"), ofs); break;
3598 case 0x5f: my_stprintf_s(buffer, buffer_len, _T("BIT 3, A=(IY+(%d))"), ofs); break;
3599 case 0x60: my_stprintf_s(buffer, buffer_len, _T("BIT 4, B=(IY+(%d))"), ofs); break;
3600 case 0x61: my_stprintf_s(buffer, buffer_len, _T("BIT 4, C=(IY+(%d))"), ofs); break;
3601 case 0x62: my_stprintf_s(buffer, buffer_len, _T("BIT 4, D=(IY+(%d))"), ofs); break;
3602 case 0x63: my_stprintf_s(buffer, buffer_len, _T("BIT 4, E=(IY+(%d))"), ofs); break;
3603 case 0x64: my_stprintf_s(buffer, buffer_len, _T("BIT 4, H=(IY+(%d))"), ofs); break;
3604 case 0x65: my_stprintf_s(buffer, buffer_len, _T("BIT 4, L=(IY+(%d))"), ofs); break;
3605 case 0x66: my_stprintf_s(buffer, buffer_len, _T("BIT 4, (IY+(%d))"), ofs); break;
3606 case 0x67: my_stprintf_s(buffer, buffer_len, _T("BIT 4, A=(IY+(%d))"), ofs); break;
3607 case 0x68: my_stprintf_s(buffer, buffer_len, _T("BIT 5, B=(IY+(%d))"), ofs); break;
3608 case 0x69: my_stprintf_s(buffer, buffer_len, _T("BIT 5, C=(IY+(%d))"), ofs); break;
3609 case 0x6a: my_stprintf_s(buffer, buffer_len, _T("BIT 5, D=(IY+(%d))"), ofs); break;
3610 case 0x6b: my_stprintf_s(buffer, buffer_len, _T("BIT 5, E=(IY+(%d))"), ofs); break;
3611 case 0x6c: my_stprintf_s(buffer, buffer_len, _T("BIT 5, H=(IY+(%d))"), ofs); break;
3612 case 0x6d: my_stprintf_s(buffer, buffer_len, _T("BIT 5, L=(IY+(%d))"), ofs); break;
3613 case 0x6e: my_stprintf_s(buffer, buffer_len, _T("BIT 5, (IY+(%d))"), ofs); break;
3614 case 0x6f: my_stprintf_s(buffer, buffer_len, _T("BIT 5, A=(IY+(%d))"), ofs); break;
3615 case 0x70: my_stprintf_s(buffer, buffer_len, _T("BIT 6, B=(IY+(%d))"), ofs); break;
3616 case 0x71: my_stprintf_s(buffer, buffer_len, _T("BIT 6, C=(IY+(%d))"), ofs); break;
3617 case 0x72: my_stprintf_s(buffer, buffer_len, _T("BIT 6, D=(IY+(%d))"), ofs); break;
3618 case 0x73: my_stprintf_s(buffer, buffer_len, _T("BIT 6, E=(IY+(%d))"), ofs); break;
3619 case 0x74: my_stprintf_s(buffer, buffer_len, _T("BIT 6, H=(IY+(%d))"), ofs); break;
3620 case 0x75: my_stprintf_s(buffer, buffer_len, _T("BIT 6, L=(IY+(%d))"), ofs); break;
3621 case 0x76: my_stprintf_s(buffer, buffer_len, _T("BIT 6, (IY+(%d))"), ofs); break;
3622 case 0x77: my_stprintf_s(buffer, buffer_len, _T("BIT 6, A=(IY+(%d))"), ofs); break;
3623 case 0x78: my_stprintf_s(buffer, buffer_len, _T("BIT 7, B=(IY+(%d))"), ofs); break;
3624 case 0x79: my_stprintf_s(buffer, buffer_len, _T("BIT 7, C=(IY+(%d))"), ofs); break;
3625 case 0x7a: my_stprintf_s(buffer, buffer_len, _T("BIT 7, D=(IY+(%d))"), ofs); break;
3626 case 0x7b: my_stprintf_s(buffer, buffer_len, _T("BIT 7, E=(IY+(%d))"), ofs); break;
3627 case 0x7c: my_stprintf_s(buffer, buffer_len, _T("BIT 7, H=(IY+(%d))"), ofs); break;
3628 case 0x7d: my_stprintf_s(buffer, buffer_len, _T("BIT 7, L=(IY+(%d))"), ofs); break;
3629 case 0x7e: my_stprintf_s(buffer, buffer_len, _T("BIT 7, (IY+(%d))"), ofs); break;
3630 case 0x7f: my_stprintf_s(buffer, buffer_len, _T("BIT 7, A=(IY+(%d))"), ofs); break;
3631 case 0x80: my_stprintf_s(buffer, buffer_len, _T("RES 0, B=(IY+(%d))"), ofs); break;
3632 case 0x81: my_stprintf_s(buffer, buffer_len, _T("RES 0, C=(IY+(%d))"), ofs); break;
3633 case 0x82: my_stprintf_s(buffer, buffer_len, _T("RES 0, D=(IY+(%d))"), ofs); break;
3634 case 0x83: my_stprintf_s(buffer, buffer_len, _T("RES 0, E=(IY+(%d))"), ofs); break;
3635 case 0x84: my_stprintf_s(buffer, buffer_len, _T("RES 0, H=(IY+(%d))"), ofs); break;
3636 case 0x85: my_stprintf_s(buffer, buffer_len, _T("RES 0, L=(IY+(%d))"), ofs); break;
3637 case 0x86: my_stprintf_s(buffer, buffer_len, _T("RES 0, (IY+(%d))"), ofs); break;
3638 case 0x87: my_stprintf_s(buffer, buffer_len, _T("RES 0, A=(IY+(%d))"), ofs); break;
3639 case 0x88: my_stprintf_s(buffer, buffer_len, _T("RES 1, B=(IY+(%d))"), ofs); break;
3640 case 0x89: my_stprintf_s(buffer, buffer_len, _T("RES 1, C=(IY+(%d))"), ofs); break;
3641 case 0x8a: my_stprintf_s(buffer, buffer_len, _T("RES 1, D=(IY+(%d))"), ofs); break;
3642 case 0x8b: my_stprintf_s(buffer, buffer_len, _T("RES 1, E=(IY+(%d))"), ofs); break;
3643 case 0x8c: my_stprintf_s(buffer, buffer_len, _T("RES 1, H=(IY+(%d))"), ofs); break;
3644 case 0x8d: my_stprintf_s(buffer, buffer_len, _T("RES 1, L=(IY+(%d))"), ofs); break;
3645 case 0x8e: my_stprintf_s(buffer, buffer_len, _T("RES 1, (IY+(%d))"), ofs); break;
3646 case 0x8f: my_stprintf_s(buffer, buffer_len, _T("RES 1, A=(IY+(%d))"), ofs); break;
3647 case 0x90: my_stprintf_s(buffer, buffer_len, _T("RES 2, B=(IY+(%d))"), ofs); break;
3648 case 0x91: my_stprintf_s(buffer, buffer_len, _T("RES 2, C=(IY+(%d))"), ofs); break;
3649 case 0x92: my_stprintf_s(buffer, buffer_len, _T("RES 2, D=(IY+(%d))"), ofs); break;
3650 case 0x93: my_stprintf_s(buffer, buffer_len, _T("RES 2, E=(IY+(%d))"), ofs); break;
3651 case 0x94: my_stprintf_s(buffer, buffer_len, _T("RES 2, H=(IY+(%d))"), ofs); break;
3652 case 0x95: my_stprintf_s(buffer, buffer_len, _T("RES 2, L=(IY+(%d))"), ofs); break;
3653 case 0x96: my_stprintf_s(buffer, buffer_len, _T("RES 2, (IY+(%d))"), ofs); break;
3654 case 0x97: my_stprintf_s(buffer, buffer_len, _T("RES 2, A=(IY+(%d))"), ofs); break;
3655 case 0x98: my_stprintf_s(buffer, buffer_len, _T("RES 3, B=(IY+(%d))"), ofs); break;
3656 case 0x99: my_stprintf_s(buffer, buffer_len, _T("RES 3, C=(IY+(%d))"), ofs); break;
3657 case 0x9a: my_stprintf_s(buffer, buffer_len, _T("RES 3, D=(IY+(%d))"), ofs); break;
3658 case 0x9b: my_stprintf_s(buffer, buffer_len, _T("RES 3, E=(IY+(%d))"), ofs); break;
3659 case 0x9c: my_stprintf_s(buffer, buffer_len, _T("RES 3, H=(IY+(%d))"), ofs); break;
3660 case 0x9d: my_stprintf_s(buffer, buffer_len, _T("RES 3, L=(IY+(%d))"), ofs); break;
3661 case 0x9e: my_stprintf_s(buffer, buffer_len, _T("RES 3, (IY+(%d))"), ofs); break;
3662 case 0x9f: my_stprintf_s(buffer, buffer_len, _T("RES 3, A=(IY+(%d))"), ofs); break;
3663 case 0xa0: my_stprintf_s(buffer, buffer_len, _T("RES 4, B=(IY+(%d))"), ofs); break;
3664 case 0xa1: my_stprintf_s(buffer, buffer_len, _T("RES 4, C=(IY+(%d))"), ofs); break;
3665 case 0xa2: my_stprintf_s(buffer, buffer_len, _T("RES 4, D=(IY+(%d))"), ofs); break;
3666 case 0xa3: my_stprintf_s(buffer, buffer_len, _T("RES 4, E=(IY+(%d))"), ofs); break;
3667 case 0xa4: my_stprintf_s(buffer, buffer_len, _T("RES 4, H=(IY+(%d))"), ofs); break;
3668 case 0xa5: my_stprintf_s(buffer, buffer_len, _T("RES 4, L=(IY+(%d))"), ofs); break;
3669 case 0xa6: my_stprintf_s(buffer, buffer_len, _T("RES 4, (IY+(%d))"), ofs); break;
3670 case 0xa7: my_stprintf_s(buffer, buffer_len, _T("RES 4, A=(IY+(%d))"), ofs); break;
3671 case 0xa8: my_stprintf_s(buffer, buffer_len, _T("RES 5, B=(IY+(%d))"), ofs); break;
3672 case 0xa9: my_stprintf_s(buffer, buffer_len, _T("RES 5, C=(IY+(%d))"), ofs); break;
3673 case 0xaa: my_stprintf_s(buffer, buffer_len, _T("RES 5, D=(IY+(%d))"), ofs); break;
3674 case 0xab: my_stprintf_s(buffer, buffer_len, _T("RES 5, E=(IY+(%d))"), ofs); break;
3675 case 0xac: my_stprintf_s(buffer, buffer_len, _T("RES 5, H=(IY+(%d))"), ofs); break;
3676 case 0xad: my_stprintf_s(buffer, buffer_len, _T("RES 5, L=(IY+(%d))"), ofs); break;
3677 case 0xae: my_stprintf_s(buffer, buffer_len, _T("RES 5, (IY+(%d))"), ofs); break;
3678 case 0xaf: my_stprintf_s(buffer, buffer_len, _T("RES 5, A=(IY+(%d))"), ofs); break;
3679 case 0xb0: my_stprintf_s(buffer, buffer_len, _T("RES 6, B=(IY+(%d))"), ofs); break;
3680 case 0xb1: my_stprintf_s(buffer, buffer_len, _T("RES 6, C=(IY+(%d))"), ofs); break;
3681 case 0xb2: my_stprintf_s(buffer, buffer_len, _T("RES 6, D=(IY+(%d))"), ofs); break;
3682 case 0xb3: my_stprintf_s(buffer, buffer_len, _T("RES 6, E=(IY+(%d))"), ofs); break;
3683 case 0xb4: my_stprintf_s(buffer, buffer_len, _T("RES 6, H=(IY+(%d))"), ofs); break;
3684 case 0xb5: my_stprintf_s(buffer, buffer_len, _T("RES 6, L=(IY+(%d))"), ofs); break;
3685 case 0xb6: my_stprintf_s(buffer, buffer_len, _T("RES 6, (IY+(%d))"), ofs); break;
3686 case 0xb7: my_stprintf_s(buffer, buffer_len, _T("RES 6, A=(IY+(%d))"), ofs); break;
3687 case 0xb8: my_stprintf_s(buffer, buffer_len, _T("RES 7, B=(IY+(%d))"), ofs); break;
3688 case 0xb9: my_stprintf_s(buffer, buffer_len, _T("RES 7, C=(IY+(%d))"), ofs); break;
3689 case 0xba: my_stprintf_s(buffer, buffer_len, _T("RES 7, D=(IY+(%d))"), ofs); break;
3690 case 0xbb: my_stprintf_s(buffer, buffer_len, _T("RES 7, E=(IY+(%d))"), ofs); break;
3691 case 0xbc: my_stprintf_s(buffer, buffer_len, _T("RES 7, H=(IY+(%d))"), ofs); break;
3692 case 0xbd: my_stprintf_s(buffer, buffer_len, _T("RES 7, L=(IY+(%d))"), ofs); break;
3693 case 0xbe: my_stprintf_s(buffer, buffer_len, _T("RES 7, (IY+(%d))"), ofs); break;
3694 case 0xbf: my_stprintf_s(buffer, buffer_len, _T("RES 7, A=(IY+(%d))"), ofs); break;
3695 case 0xc0: my_stprintf_s(buffer, buffer_len, _T("SET 0, B=(IY+(%d))"), ofs); break;
3696 case 0xc1: my_stprintf_s(buffer, buffer_len, _T("SET 0, C=(IY+(%d))"), ofs); break;
3697 case 0xc2: my_stprintf_s(buffer, buffer_len, _T("SET 0, D=(IY+(%d))"), ofs); break;
3698 case 0xc3: my_stprintf_s(buffer, buffer_len, _T("SET 0, E=(IY+(%d))"), ofs); break;
3699 case 0xc4: my_stprintf_s(buffer, buffer_len, _T("SET 0, H=(IY+(%d))"), ofs); break;
3700 case 0xc5: my_stprintf_s(buffer, buffer_len, _T("SET 0, L=(IY+(%d))"), ofs); break;
3701 case 0xc6: my_stprintf_s(buffer, buffer_len, _T("SET 0, (IY+(%d))"), ofs); break;
3702 case 0xc7: my_stprintf_s(buffer, buffer_len, _T("SET 0, A=(IY+(%d))"), ofs); break;
3703 case 0xc8: my_stprintf_s(buffer, buffer_len, _T("SET 1, B=(IY+(%d))"), ofs); break;
3704 case 0xc9: my_stprintf_s(buffer, buffer_len, _T("SET 1, C=(IY+(%d))"), ofs); break;
3705 case 0xca: my_stprintf_s(buffer, buffer_len, _T("SET 1, D=(IY+(%d))"), ofs); break;
3706 case 0xcb: my_stprintf_s(buffer, buffer_len, _T("SET 1, E=(IY+(%d))"), ofs); break;
3707 case 0xcc: my_stprintf_s(buffer, buffer_len, _T("SET 1, H=(IY+(%d))"), ofs); break;
3708 case 0xcd: my_stprintf_s(buffer, buffer_len, _T("SET 1, L=(IY+(%d))"), ofs); break;
3709 case 0xce: my_stprintf_s(buffer, buffer_len, _T("SET 1, (IY+(%d))"), ofs); break;
3710 case 0xcf: my_stprintf_s(buffer, buffer_len, _T("SET 1, A=(IY+(%d))"), ofs); break;
3711 case 0xd0: my_stprintf_s(buffer, buffer_len, _T("SET 2, B=(IY+(%d))"), ofs); break;
3712 case 0xd1: my_stprintf_s(buffer, buffer_len, _T("SET 2, C=(IY+(%d))"), ofs); break;
3713 case 0xd2: my_stprintf_s(buffer, buffer_len, _T("SET 2, D=(IY+(%d))"), ofs); break;
3714 case 0xd3: my_stprintf_s(buffer, buffer_len, _T("SET 2, E=(IY+(%d))"), ofs); break;
3715 case 0xd4: my_stprintf_s(buffer, buffer_len, _T("SET 2, H=(IY+(%d))"), ofs); break;
3716 case 0xd5: my_stprintf_s(buffer, buffer_len, _T("SET 2, L=(IY+(%d))"), ofs); break;
3717 case 0xd6: my_stprintf_s(buffer, buffer_len, _T("SET 2, (IY+(%d))"), ofs); break;
3718 case 0xd7: my_stprintf_s(buffer, buffer_len, _T("SET 2, A=(IY+(%d))"), ofs); break;
3719 case 0xd8: my_stprintf_s(buffer, buffer_len, _T("SET 3, B=(IY+(%d))"), ofs); break;
3720 case 0xd9: my_stprintf_s(buffer, buffer_len, _T("SET 3, C=(IY+(%d))"), ofs); break;
3721 case 0xda: my_stprintf_s(buffer, buffer_len, _T("SET 3, D=(IY+(%d))"), ofs); break;
3722 case 0xdb: my_stprintf_s(buffer, buffer_len, _T("SET 3, E=(IY+(%d))"), ofs); break;
3723 case 0xdc: my_stprintf_s(buffer, buffer_len, _T("SET 3, H=(IY+(%d))"), ofs); break;
3724 case 0xdd: my_stprintf_s(buffer, buffer_len, _T("SET 3, L=(IY+(%d))"), ofs); break;
3725 case 0xde: my_stprintf_s(buffer, buffer_len, _T("SET 3, (IY+(%d))"), ofs); break;
3726 case 0xdf: my_stprintf_s(buffer, buffer_len, _T("SET 3, A=(IY+(%d))"), ofs); break;
3727 case 0xe0: my_stprintf_s(buffer, buffer_len, _T("SET 4, B=(IY+(%d))"), ofs); break;
3728 case 0xe1: my_stprintf_s(buffer, buffer_len, _T("SET 4, C=(IY+(%d))"), ofs); break;
3729 case 0xe2: my_stprintf_s(buffer, buffer_len, _T("SET 4, D=(IY+(%d))"), ofs); break;
3730 case 0xe3: my_stprintf_s(buffer, buffer_len, _T("SET 4, E=(IY+(%d))"), ofs); break;
3731 case 0xe4: my_stprintf_s(buffer, buffer_len, _T("SET 4, H=(IY+(%d))"), ofs); break;
3732 case 0xe5: my_stprintf_s(buffer, buffer_len, _T("SET 4, L=(IY+(%d))"), ofs); break;
3733 case 0xe6: my_stprintf_s(buffer, buffer_len, _T("SET 4, (IY+(%d))"), ofs); break;
3734 case 0xe7: my_stprintf_s(buffer, buffer_len, _T("SET 4, A=(IY+(%d))"), ofs); break;
3735 case 0xe8: my_stprintf_s(buffer, buffer_len, _T("SET 5, B=(IY+(%d))"), ofs); break;
3736 case 0xe9: my_stprintf_s(buffer, buffer_len, _T("SET 5, C=(IY+(%d))"), ofs); break;
3737 case 0xea: my_stprintf_s(buffer, buffer_len, _T("SET 5, D=(IY+(%d))"), ofs); break;
3738 case 0xeb: my_stprintf_s(buffer, buffer_len, _T("SET 5, E=(IY+(%d))"), ofs); break;
3739 case 0xec: my_stprintf_s(buffer, buffer_len, _T("SET 5, H=(IY+(%d))"), ofs); break;
3740 case 0xed: my_stprintf_s(buffer, buffer_len, _T("SET 5, L=(IY+(%d))"), ofs); break;
3741 case 0xee: my_stprintf_s(buffer, buffer_len, _T("SET 5, (IY+(%d))"), ofs); break;
3742 case 0xef: my_stprintf_s(buffer, buffer_len, _T("SET 5, A=(IY+(%d))"), ofs); break;
3743 case 0xf0: my_stprintf_s(buffer, buffer_len, _T("SET 6, B=(IY+(%d))"), ofs); break;
3744 case 0xf1: my_stprintf_s(buffer, buffer_len, _T("SET 6, C=(IY+(%d))"), ofs); break;
3745 case 0xf2: my_stprintf_s(buffer, buffer_len, _T("SET 6, D=(IY+(%d))"), ofs); break;
3746 case 0xf3: my_stprintf_s(buffer, buffer_len, _T("SET 6, E=(IY+(%d))"), ofs); break;
3747 case 0xf4: my_stprintf_s(buffer, buffer_len, _T("SET 6, H=(IY+(%d))"), ofs); break;
3748 case 0xf5: my_stprintf_s(buffer, buffer_len, _T("SET 6, L=(IY+(%d))"), ofs); break;
3749 case 0xf6: my_stprintf_s(buffer, buffer_len, _T("SET 6, (IY+(%d))"), ofs); break;
3750 case 0xf7: my_stprintf_s(buffer, buffer_len, _T("SET 6, A=(IY+(%d))"), ofs); break;
3751 case 0xf8: my_stprintf_s(buffer, buffer_len, _T("SET 7, B=(IY+(%d))"), ofs); break;
3752 case 0xf9: my_stprintf_s(buffer, buffer_len, _T("SET 7, C=(IY+(%d))"), ofs); break;
3753 case 0xfa: my_stprintf_s(buffer, buffer_len, _T("SET 7, D=(IY+(%d))"), ofs); break;
3754 case 0xfb: my_stprintf_s(buffer, buffer_len, _T("SET 7, E=(IY+(%d))"), ofs); break;
3755 case 0xfc: my_stprintf_s(buffer, buffer_len, _T("SET 7, H=(IY+(%d))"), ofs); break;
3756 case 0xfd: my_stprintf_s(buffer, buffer_len, _T("SET 7, L=(IY+(%d))"), ofs); break;
3757 case 0xfe: my_stprintf_s(buffer, buffer_len, _T("SET 7, (IY+(%d))"), ofs); break;
3758 case 0xff: my_stprintf_s(buffer, buffer_len, _T("SET 7, A=(IY+(%d))"), ofs); break;
3759 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
3760 default: __assume(0);
3766 #define STATE_VERSION 4
3768 bool Z80_BASE::process_state(FILEIO* state_fio, bool loading)
3770 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
3774 if(!state_fio->StateCheckInt32(this_device_id)) {
3777 state_fio->StateValue(total_icount);
3779 state_fio->StateValue(icount);
3780 state_fio->StateValue(extra_icount);
3781 state_fio->StateValue(busreq_icount);
3782 state_fio->StateValue(prevpc);
3783 state_fio->StateValue(pc.d);
3784 state_fio->StateValue(sp.d);
3785 state_fio->StateValue(af.d);
3786 state_fio->StateValue(bc.d);
3787 state_fio->StateValue(de.d);
3788 state_fio->StateValue(hl.d);
3789 state_fio->StateValue(ix.d);
3790 state_fio->StateValue(iy.d);
3791 state_fio->StateValue(wz.d);
3792 state_fio->StateValue(af2.d);
3793 state_fio->StateValue(bc2.d);
3794 state_fio->StateValue(de2.d);
3795 state_fio->StateValue(hl2.d);
3796 state_fio->StateValue(I);
3797 state_fio->StateValue(R);
3798 state_fio->StateValue(R2);
3799 state_fio->StateValue(ea);
3800 state_fio->StateValue(busreq);
3801 state_fio->StateValue(after_halt);
3802 state_fio->StateValue(im);
3803 state_fio->StateValue(iff1);
3804 state_fio->StateValue(iff2);
3805 state_fio->StateValue(icr);
3806 state_fio->StateValue(after_ei);
3807 state_fio->StateValue(after_ldair);
3808 state_fio->StateValue(intr_req_bit);
3809 state_fio->StateValue(intr_pend_bit);
3813 prev_total_icount = total_icount;
3814 // Post process for collecting statistics.
3815 cycles_tmp_count = total_icount;
3816 extra_tmp_count = 0;
3821 nsc800_int_count = 0;
3822 nsc800_rsta_count = 0;
3823 nsc800_rsta_count = 0;
3824 nsc800_rsta_count = 0;