1 /********************************************************************************/
3 /* CZ80 XY opcode include source file */
4 /* C Z80 emulator version 0.91 */
5 /* Copyright 2004-2005 Stephane Dallongeville */
7 /********************************************************************************/
10 goto *JumpTableXY[Opcode];
55 OPXY(0x44): // LD B,HX
56 OPXY(0x4c): // LD C,HX
57 OPXY(0x54): // LD D,HX
58 OPXY(0x5c): // LD E,HX
59 OPXY(0x7c): // LD A,HX
60 zR8((Opcode >> 3) & 7) = data->B.H;
63 OPXY(0x45): // LD B,LX
64 OPXY(0x4d): // LD C,LX
65 OPXY(0x55): // LD D,LX
66 OPXY(0x5d): // LD E,LX
67 OPXY(0x7d): // LD A,LX
68 zR8((Opcode >> 3) & 7) = data->B.L;
71 OPXY(0x60): // LD HX,B
72 OPXY(0x61): // LD HX,C
73 OPXY(0x62): // LD HX,D
74 OPXY(0x63): // LD HX,E
75 OPXY(0x67): // LD HX,A
76 data->B.H = zR8(Opcode & 7);
79 OPXY(0x68): // LD LX,B
80 OPXY(0x69): // LD LX,C
81 OPXY(0x6a): // LD LX,D
82 OPXY(0x6b): // LD LX,E
83 OPXY(0x6f): // LD LX,A
84 data->B.L = zR8(Opcode & 7);
87 OPXY(0x65): // LD HX,LX
88 data->B.H = data->B.L;
91 OPXY(0x6c): // LD LX,HX
92 data->B.L = data->B.H;
95 OPXY(0x06): // LD B,#imm
96 OPXY(0x0e): // LD C,#imm
97 OPXY(0x16): // LD D,#imm
98 OPXY(0x1e): // LD E,#imm
99 OPXY(0x3e): // LD A,#imm
102 OPXY(0x26): // LD HX,#imm
103 data->B.H = FETCH_BYTE;
106 OPXY(0x2e): // LD LX,#imm
107 data->B.L = FETCH_BYTE;
110 OPXY(0x0a): // LD A,(BC)
113 OPXY(0x1a): // LD A,(DE)
116 OPXY(0x3a): // LD A,(nn)
119 OPXY(0x02): // LD (BC),A
122 OPXY(0x12): // LD (DE),A
125 OPXY(0x32): // LD (nn),A
131 OPXY(0x46): // LD B,(IX+o)
132 OPXY(0x56): // LD D,(IX+o)
133 OPXY(0x5e): // LD E,(IX+o)
134 OPXY(0x66): // LD H,(IX+o)
135 OPXY(0x6e): // LD L,(IX+o)
136 OPXY(0x4e): // LD C,(IX+o)
137 OPXY(0x7e): // LD A,(IX+o)
139 adr = data->W + FETCH_BYTE_S;
140 READ_BYTE(adr, zR8((Opcode >> 3) & 7))
144 OPXY(0x70): // LD (IX+o),B
145 OPXY(0x71): // LD (IX+o),C
146 OPXY(0x72): // LD (IX+o),D
147 OPXY(0x73): // LD (IX+o),E
148 OPXY(0x74): // LD (IX+o),H
149 OPXY(0x75): // LD (IX+o),L
150 OPXY(0x77): // LD (IX+o),A
152 adr = data->W + FETCH_BYTE_S;
153 WRITE_BYTE(adr, zR8(Opcode & 7))
157 OPXY(0x36): // LD (IX+o),#imm
159 adr = data->W + FETCH_BYTE_S;
160 WRITE_BYTE(adr, FETCH_BYTE)
167 OPXY(0x01): // LD BC,nn
168 OPXY(0x11): // LD DE,nn
169 goto OP_LOAD_RR_imm16;
171 OPXY(0x21): // LD IX,nn
175 OPXY(0x31): // LD SP,nn
176 goto OP_LOAD_SP_imm16;
178 OPXY(0x2a): // LD IX,(w)
181 OPXY(0x22): // LD (w),IX
184 OPXY(0xf9): // LD SP,IX
190 OPXY(0xf1): // POP AF
193 OPXY(0xc1): // POP BC
194 OPXY(0xd1): // POP DE
197 OPXY(0xe1): // POP IX
200 OPXY(0xf5): // PUSH AF
203 OPXY(0xc5): // PUSH BC
204 OPXY(0xd5): // PUSH DE
207 OPXY(0xe5): // PUSH IX
213 OPXY(0x08): // EX AF,AF'
216 OPXY(0xeb): // EX DE,HL
222 OPXY(0xe3): // EX (SP),IX
236 OPXY(0x24): // INC HX
238 zF = (zF & CZ80_CF) | SZXYHV_inc[data->B.H];
241 OPXY(0x2c): // INC LX
243 zF = (zF & CZ80_CF) | SZXYHV_inc[data->B.L];
246 OPXY(0x34): // INC (IX+o)
258 OPXY(0x25): // DEC HX
260 zF = (zF & CZ80_CF) | SZXYHV_dec[data->B.H];
263 OPXY(0x2d): // DEC LX
265 zF = (zF & CZ80_CF) | SZXYHV_dec[data->B.L];
268 OPXY(0x35): // DEC (IX+o)
274 OPXY(0x80): // ADD A,B
275 OPXY(0x81): // ADD A,C
276 OPXY(0x82): // ADD A,D
277 OPXY(0x83): // ADD A,E
278 OPXY(0x87): // ADD A,A
281 OPXY(0x84): // ADD A,HX
284 OPXY(0x85): // ADD A,LX
287 OPXY(0xc6): // ADD A,n
290 OPXY(0x86): // ADD A,(IX+o)
295 OPXY(0x88): // ADC A,B
296 OPXY(0x89): // ADC A,C
297 OPXY(0x8a): // ADC A,D
298 OPXY(0x8b): // ADC A,E
299 OPXY(0x8f): // ADC A,A
302 OPXY(0xce): // ADC A,n
305 OPXY(0x8c): // ADC A,HX
308 OPXY(0x8d): // ADC A,LX
311 OPXY(0x8e): // ADC A,(IX+o)
323 OPXY(0x94): // SUB HX
326 OPXY(0x95): // SUB LX
329 OPXY(0xd6): // SUB A,n
332 OPXY(0x96): // SUB (IX+o)
337 OPXY(0x98): // SBC A,B
338 OPXY(0x99): // SBC A,C
339 OPXY(0x9a): // SBC A,D
340 OPXY(0x9b): // SBC A,E
341 OPXY(0x9f): // SBC A,A
344 OPXY(0x9c): // SBC A,HX
347 OPXY(0x9d): // SBC A,LX
350 OPXY(0xde): // SBC A,n
353 OPXY(0x9e): // SBC A,(IX+o)
374 OPXY(0xbe): // CP (IX+o)
388 OPXY(0xa4): // AND HX
391 OPXY(0xa5): // AND LX
394 OPXY(0xe6): // AND A,n
397 OPXY(0xa6): // AND (IX+o)
402 READ_BYTE(data->W + FETCH_BYTE_S, val)
405 zF = SZXYP[zA] | CZ80_HF;
420 OPXY(0xac): // XOR HX
423 OPXY(0xad): // XOR LX
426 OPXY(0xee): // XOR A,n
429 OPXY(0xae): // XOR (IX+o)
434 READ_BYTE(data->W + FETCH_BYTE_S, val)
458 OPXY(0xf6): // OR A,n
461 OPXY(0xb6): // OR (IX+o)
466 READ_BYTE(data->W + FETCH_BYTE_S, val)
474 // MISC ARITHMETIC & CPU CONTROL
498 // 16 BITS ARITHMETIC
500 OPXY(0x03): // INC BC
503 OPXY(0x13): // INC DE
506 OPXY(0x23): // INC IX
509 OPXY(0x33): // INC SP
512 OPXY(0x0b): // DEC BC
515 OPXY(0x1b): // DEC DE
518 OPXY(0x2b): // DEC IX
521 OPXY(0x3b): // DEC SP
526 OPXY(0x09): // ADD IX,BC
529 OPXY(0x19): // ADD IX,DE
532 OPXY(0x29): // ADD IX,IX
535 OPXY(0x39): // ADD IX,SP
559 OPXY(0xe9): // JP (IX)
563 OPXY(0xd2): // JP NC,nn
566 OPXY(0xda): // JP C,nn
569 OPXY(0xe2): // JP PO,nn
572 OPXY(0xea): // JP PE,nn
575 OPXY(0xf2): // JP P,nn
578 OPXY(0xfa): // JP M,nn
581 OPXY(0xca): // JP Z,nn
584 OPXY(0xc2): // JP NZ,nn
592 OPXY(0x38): // JR C,n
595 OPXY(0x30): // JR NC,n
598 OPXY(0x28): // JR Z,n
601 OPXY(0x20): // JR NZ,n
605 OPXY(0x10): // DJNZ n
611 OPXY(0xcd): // CALL nn
615 OPXY(0xd4): // CALL NC,nn
618 OPXY(0xdc): // CALL C,nn
621 OPXY(0xe4): // CALL PO,nn
624 OPXY(0xec): // CALL PE,nn
627 OPXY(0xf4): // CALL P,nn
630 OPXY(0xfc): // CALL M,nn
633 OPXY(0xcc): // CALL Z,nn
636 OPXY(0xc4): // CALL NZ,nn
644 OPXY(0xd0): // RET NC
650 OPXY(0xe0): // RET PO
653 OPXY(0xe8): // RET PE
662 OPXY(0xc0): // RET NZ
682 OPXY(0xd3): // OUT (n),A
685 OPXY(0xdb): // IN A,(n)
691 OPXY(0xcb): // XYCB PREFIXE
697 adr = data->W + FETCH_BYTE_S;
699 #include "cz80_opxycb.inc"
702 OPXY(0xed): // ED PREFIXE
705 OPXY(0xdd): // DD PREFIXE (IX)
708 OPXY(0xfd): // FD PREFIXE (IY)
711 #if CZ80_USE_JUMPTABLE