windows Pico stuff wip
[picodrive.git] / cpu / cz80 / cz80_opXY.c
1 /******************************************************************************\r
2  *\r
3  * CZ80 XY opcode include source file\r
4  * CZ80 emulator version 0.9\r
5  * Copyright 2004-2005 Stéphane Dallongeville\r
6  *\r
7  * (Modified by NJ)\r
8  *\r
9  *****************************************************************************/\r
10 \r
11 #if CZ80_USE_JUMPTABLE\r
12         goto *JumpTableXY[Opcode];\r
13 #else\r
14 switch (Opcode)\r
15 {\r
16 #endif\r
17 \r
18 /*-----------------------------------------\r
19  NOP\r
20 -----------------------------------------*/\r
21 \r
22         OPXY(0x00): // NOP\r
23 \r
24 /*-----------------------------------------\r
25  LD r8 (same register)\r
26 -----------------------------------------*/\r
27 \r
28         OPXY(0x40): // LD   B,B\r
29         OPXY(0x49): // LD   C,C\r
30         OPXY(0x52): // LD   D,D\r
31         OPXY(0x5b): // LD   E,E\r
32         OPXY(0x64): // LD   H,H\r
33         OPXY(0x6d): // LD   L,L\r
34         OPXY(0x7f): // LD   A,A\r
35                 RET(4)\r
36 \r
37 /*-----------------------------------------\r
38  LD r8\r
39 -----------------------------------------*/\r
40 \r
41         OPXY(0x41): // LD   B,C\r
42         OPXY(0x42): // LD   B,D\r
43         OPXY(0x43): // LD   B,E\r
44         OPXY(0x47): // LD   B,A\r
45 \r
46         OPXY(0x48): // LD   C,B\r
47         OPXY(0x4a): // LD   C,D\r
48         OPXY(0x4b): // LD   C,E\r
49         OPXY(0x4f): // LD   C,A\r
50 \r
51         OPXY(0x50): // LD   D,B\r
52         OPXY(0x51): // LD   D,C\r
53         OPXY(0x53): // LD   D,E\r
54         OPXY(0x57): // LD   D,A\r
55 \r
56         OPXY(0x58): // LD   E,B\r
57         OPXY(0x59): // LD   E,C\r
58         OPXY(0x5a): // LD   E,D\r
59         OPXY(0x5f): // LD   E,A\r
60 \r
61         OPXY(0x78): // LD   A,B\r
62         OPXY(0x79): // LD   A,C\r
63         OPXY(0x7a): // LD   A,D\r
64         OPXY(0x7b): // LD   A,E\r
65                 goto OP_LD_R_R;\r
66 \r
67         OPXY(0x44): // LD   B,HX\r
68         OPXY(0x4c): // LD   C,HX\r
69         OPXY(0x54): // LD   D,HX\r
70         OPXY(0x5c): // LD   E,HX\r
71         OPXY(0x7c): // LD   A,HX\r
72                 zR8((Opcode >> 3) & 7) = data->B.H;\r
73                 RET(5)\r
74 \r
75         OPXY(0x45): // LD   B,LX\r
76         OPXY(0x4d): // LD   C,LX\r
77         OPXY(0x55): // LD   D,LX\r
78         OPXY(0x5d): // LD   E,LX\r
79         OPXY(0x7d): // LD   A,LX\r
80                 zR8((Opcode >> 3) & 7) = data->B.L;\r
81                 RET(5)\r
82 \r
83         OPXY(0x60): // LD   HX,B\r
84         OPXY(0x61): // LD   HX,C\r
85         OPXY(0x62): // LD   HX,D\r
86         OPXY(0x63): // LD   HX,E\r
87         OPXY(0x67): // LD   HX,A\r
88                 data->B.H = zR8(Opcode & 7);\r
89                 RET(5)\r
90 \r
91         OPXY(0x68): // LD   LX,B\r
92         OPXY(0x69): // LD   LX,C\r
93         OPXY(0x6a): // LD   LX,D\r
94         OPXY(0x6b): // LD   LX,E\r
95         OPXY(0x6f): // LD   LX,A\r
96                 data->B.L = zR8(Opcode & 7);\r
97                 RET(5)\r
98 \r
99         OPXY(0x65): // LD   HX,LX\r
100                 data->B.H = data->B.L;\r
101                 RET(5)\r
102 \r
103         OPXY(0x6c): // LD   LX,HX\r
104                 data->B.L = data->B.H;\r
105                 RET(5)\r
106 \r
107         OPXY(0x06): // LD   B,#imm\r
108         OPXY(0x0e): // LD   C,#imm\r
109         OPXY(0x16): // LD   D,#imm\r
110         OPXY(0x1e): // LD   E,#imm\r
111         OPXY(0x3e): // LD   A,#imm\r
112                 goto OP_LD_R_imm;\r
113 \r
114         OPXY(0x26): // LD   HX,#imm\r
115                 data->B.H = READ_ARG();\r
116                 RET(5)\r
117 \r
118         OPXY(0x2e): // LD   LX,#imm\r
119                 data->B.L = READ_ARG();\r
120                 RET(5)\r
121 \r
122         OPXY(0x0a): // LD   A,(BC)\r
123                 goto OP_LOAD_A_mBC;\r
124 \r
125         OPXY(0x1a): // LD   A,(DE)\r
126                 goto OP_LOAD_A_mDE;\r
127 \r
128         OPXY(0x3a): // LD   A,(nn)\r
129                 goto OP_LOAD_A_mNN;\r
130 \r
131         OPXY(0x02): // LD   (BC),A\r
132                 goto OP_LOAD_mBC_A;\r
133 \r
134         OPXY(0x12): // LD   (DE),A\r
135                 goto OP_LOAD_mDE_A;\r
136 \r
137         OPXY(0x32): // LD   (nn),A\r
138                 goto OP_LOAD_mNN_A;\r
139 \r
140         OPXY(0x46): // LD   B,(IX+o)\r
141         OPXY(0x4e): // LD   C,(IX+o)\r
142         OPXY(0x56): // LD   D,(IX+o)\r
143         OPXY(0x5e): // LD   E,(IX+o)\r
144         OPXY(0x66): // LD   H,(IX+o)\r
145         OPXY(0x6e): // LD   L,(IX+o)\r
146         OPXY(0x7e): // LD   A,(IX+o)\r
147                 adr = data->W + (INT8)READ_ARG();\r
148                 zR8((Opcode >> 3) & 7) = READ_MEM8(adr);\r
149                 RET(15)\r
150 \r
151         OPXY(0x70): // LD   (IX+o),B\r
152         OPXY(0x71): // LD   (IX+o),C\r
153         OPXY(0x72): // LD   (IX+o),D\r
154         OPXY(0x73): // LD   (IX+o),E\r
155         OPXY(0x74): // LD   (IX+o),H\r
156         OPXY(0x75): // LD   (IX+o),L\r
157         OPXY(0x77): // LD   (IX+o),A\r
158                 adr = data->W + (INT8)READ_ARG();\r
159                 WRITE_MEM8(adr, zR8(Opcode & 7));\r
160                 RET(15)\r
161 \r
162         OPXY(0x36): // LD   (IX+o),#imm\r
163                 adr = data->W + (INT8)READ_ARG();\r
164                 WRITE_MEM8(adr, READ_ARG());\r
165                 RET(15)\r
166 \r
167 /*-----------------------------------------\r
168  LD r16\r
169 -----------------------------------------*/\r
170 \r
171         OPXY(0x01): // LD   BC,nn\r
172         OPXY(0x11): // LD   DE,nn\r
173                 goto OP_LOAD_RR_imm16;\r
174 \r
175         OPXY(0x21): // LD   IX,nn\r
176                 data->W = READ_ARG16();\r
177                 RET(10)\r
178 \r
179         OPXY(0x31): // LD   SP,nn\r
180                 goto OP_LOAD_SP_imm16;\r
181 \r
182         OPXY(0x2a): // LD   IX,(w)\r
183                 goto OP_LD_xx_mNN;\r
184 \r
185         OPXY(0x22): // LD   (w),IX\r
186                 goto OP_LD_mNN_xx;\r
187 \r
188         OPXY(0xf9): // LD   SP,IX\r
189                 goto OP_LD_SP_xx;\r
190 \r
191 /*-----------------------------------------\r
192  POP\r
193 -----------------------------------------*/\r
194 \r
195         OPXY(0xc1): // POP  BC\r
196         OPXY(0xd1): // POP  DE\r
197         OPXY(0xf1): // POP  AF\r
198                 goto OP_POP_RR;\r
199 \r
200         OPXY(0xe1): // POP  IX\r
201                 goto OP_POP;\r
202 \r
203 /*-----------------------------------------\r
204  PUSH\r
205 -----------------------------------------*/\r
206 \r
207         OPXY(0xc5): // PUSH BC\r
208         OPXY(0xd5): // PUSH DE\r
209         OPXY(0xf5): // PUSH AF\r
210                 goto OP_PUSH_RR;\r
211 \r
212         OPXY(0xe5): // PUSH IX\r
213                 goto OP_PUSH;\r
214 \r
215 /*-----------------------------------------\r
216  EX\r
217 -----------------------------------------*/\r
218 \r
219         OPXY(0x08): // EX   AF,AF'\r
220                 goto OP_EX_AF_AF2;\r
221 \r
222         OPXY(0xeb): // EX   DE,HL\r
223                 goto OP_EX_DE_HL;\r
224 \r
225         OPXY(0xd9): // EXX\r
226                 goto OP_EXX;\r
227 \r
228         OPXY(0xe3): // EX   (SP),IX\r
229                 goto OP_EX_xx_mSP;\r
230 \r
231 /*-----------------------------------------\r
232  INC r8\r
233 -----------------------------------------*/\r
234 \r
235         OPXY(0x04): // INC  B\r
236         OPXY(0x0c): // INC  C\r
237         OPXY(0x14): // INC  D\r
238         OPXY(0x1c): // INC  E\r
239         OPXY(0x3c): // INC  A\r
240                 goto OP_INC_R;\r
241 \r
242         OPXY(0x24): // INC  HX\r
243                 data->B.H++;\r
244                 zF = (zF & CF) | SZHV_inc[data->B.H];\r
245                 RET(5)\r
246 \r
247         OPXY(0x2c): // INC  LX\r
248                 data->B.L++;\r
249                 zF = (zF & CF) | SZHV_inc[data->B.L];\r
250                 RET(5)\r
251 \r
252         OPXY(0x34): // INC  (IX+o)\r
253                 adr = data->W + (INT8)READ_ARG();\r
254                 USE_CYCLES(8)\r
255                 goto OP_INC_m;\r
256 \r
257 /*-----------------------------------------\r
258  DEC r8\r
259 -----------------------------------------*/\r
260 \r
261         OPXY(0x05): // DEC  B\r
262         OPXY(0x0d): // DEC  C\r
263         OPXY(0x15): // DEC  D\r
264         OPXY(0x1d): // DEC  E\r
265         OPXY(0x3d): // DEC  A\r
266                 goto OP_DEC_R;\r
267 \r
268         OPXY(0x25): // DEC  HX\r
269                 data->B.H--;\r
270                 zF = (zF & CF) | SZHV_dec[data->B.H];\r
271                 RET(5)\r
272 \r
273         OPXY(0x2d): // DEC  LX\r
274                 data->B.L--;\r
275                 zF = (zF & CF) | SZHV_dec[data->B.L];\r
276                 RET(5)\r
277 \r
278         OPXY(0x35): // DEC  (IX+o)\r
279                 adr = data->W + (INT8)READ_ARG();\r
280                 USE_CYCLES(8)\r
281                 goto OP_DEC_m;\r
282 \r
283 /*-----------------------------------------\r
284  ADD r8\r
285 -----------------------------------------*/\r
286 \r
287         OPXY(0x80): // ADD  A,B\r
288         OPXY(0x81): // ADD  A,C\r
289         OPXY(0x82): // ADD  A,D\r
290         OPXY(0x83): // ADD  A,E\r
291         OPXY(0x87): // ADD  A,A\r
292                 goto OP_ADD_R;\r
293 \r
294         OPXY(0xc6): // ADD  A,n\r
295                 goto OP_ADD_imm;\r
296 \r
297         OPXY(0x84): // ADD  A,HX\r
298                 val = data->B.H;\r
299                 USE_CYCLES(1)\r
300                 goto OP_ADD;\r
301 \r
302         OPXY(0x85): // ADD  A,LX\r
303                 val = data->B.L;\r
304                 USE_CYCLES(1)\r
305                 goto OP_ADD;\r
306 \r
307         OPXY(0x86): // ADD  A,(IX+o)\r
308                 adr = data->W + (INT8)READ_ARG();\r
309                 val = READ_MEM8(adr);\r
310                 USE_CYCLES(11)\r
311                 goto OP_ADD;\r
312 \r
313 /*-----------------------------------------\r
314  ADC r8\r
315 -----------------------------------------*/\r
316 \r
317         OPXY(0x88): // ADC  A,B\r
318         OPXY(0x89): // ADC  A,C\r
319         OPXY(0x8a): // ADC  A,D\r
320         OPXY(0x8b): // ADC  A,E\r
321         OPXY(0x8f): // ADC  A,A\r
322                 goto OP_ADC_R;\r
323 \r
324         OPXY(0xce): // ADC  A,n\r
325                 goto OP_ADC_imm;\r
326 \r
327         OPXY(0x8c): // ADC  A,HX\r
328                 val = data->B.H;\r
329                 USE_CYCLES(1)\r
330                 goto OP_ADC;\r
331 \r
332         OPXY(0x8d): // ADC  A,LX\r
333                 val = data->B.L;\r
334                 USE_CYCLES(1)\r
335                 goto OP_ADC;\r
336 \r
337         OPXY(0x8e): // ADC  A,(IX+o)\r
338                 adr = data->W + (INT8)READ_ARG();\r
339                 val = READ_MEM8(adr);\r
340                 USE_CYCLES(11)\r
341                 goto OP_ADC;\r
342 \r
343 /*-----------------------------------------\r
344  SUB r8\r
345 -----------------------------------------*/\r
346 \r
347         OPXY(0x90): // SUB  B\r
348         OPXY(0x91): // SUB  C\r
349         OPXY(0x92): // SUB  D\r
350         OPXY(0x93): // SUB  E\r
351         OPXY(0x97): // SUB  A\r
352                 goto OP_SUB_R;\r
353 \r
354         OPXY(0xd6): // SUB  A,n\r
355                 goto OP_SUB_imm;\r
356 \r
357         OPXY(0x94): // SUB  HX\r
358                 val = data->B.H;\r
359                 USE_CYCLES(1)\r
360                 goto OP_SUB;\r
361 \r
362         OPXY(0x95): // SUB  LX\r
363                 val = data->B.L;\r
364                 USE_CYCLES(1)\r
365                 goto OP_SUB;\r
366 \r
367         OPXY(0x96): // SUB  (IX+o)\r
368                 adr = data->W + (INT8)READ_ARG();\r
369                 val = READ_MEM8(adr);\r
370                 USE_CYCLES(11)\r
371                 goto OP_SUB;\r
372 \r
373 /*-----------------------------------------\r
374  SBC r8\r
375 -----------------------------------------*/\r
376 \r
377         OPXY(0x98): // SBC  A,B\r
378         OPXY(0x99): // SBC  A,C\r
379         OPXY(0x9a): // SBC  A,D\r
380         OPXY(0x9b): // SBC  A,E\r
381         OPXY(0x9f): // SBC  A,A\r
382                 goto OP_SBC_R;\r
383 \r
384         OPXY(0xde): // SBC  A,n\r
385                 goto OP_SBC_imm;\r
386 \r
387         OPXY(0x9c): // SBC  A,HX\r
388                 val = data->B.H;\r
389                 USE_CYCLES(1)\r
390                 goto OP_SBC;\r
391 \r
392         OPXY(0x9d): // SBC  A,LX\r
393                 val = data->B.L;\r
394                 USE_CYCLES(1)\r
395                 goto OP_SBC;\r
396 \r
397         OPXY(0x9e): // SBC  A,(IX+o)\r
398                 adr = data->W + (INT8)READ_ARG();\r
399                 val = READ_MEM8(adr);\r
400                 USE_CYCLES(11)\r
401                 goto OP_SBC;\r
402 \r
403 /*-----------------------------------------\r
404  CP r8\r
405 -----------------------------------------*/\r
406 \r
407         OPXY(0xb8): // CP   B\r
408         OPXY(0xb9): // CP   C\r
409         OPXY(0xba): // CP   D\r
410         OPXY(0xbb): // CP   E\r
411         OPXY(0xbf): // CP   A\r
412                 goto OP_CP_R;\r
413 \r
414         OPXY(0xfe): // CP   n\r
415                 goto OP_CP_imm;\r
416 \r
417         OPXY(0xbc): // CP   HX\r
418                 val = data->B.H;\r
419                 USE_CYCLES(1)\r
420                 goto OP_CP;\r
421 \r
422         OPXY(0xbd): // CP   LX\r
423                 val = data->B.L;\r
424                 USE_CYCLES(1)\r
425                 goto OP_CP;\r
426 \r
427         OPXY(0xbe): // CP   (IX+o)\r
428                 adr = data->W + (INT8)READ_ARG();\r
429                 val = READ_MEM8(adr);\r
430                 USE_CYCLES(11)\r
431                 goto OP_CP;\r
432 \r
433 /*-----------------------------------------\r
434  AND r8\r
435 -----------------------------------------*/\r
436 \r
437         OPXY(0xa0): // AND  B\r
438         OPXY(0xa1): // AND  C\r
439         OPXY(0xa2): // AND  D\r
440         OPXY(0xa3): // AND  E\r
441         OPXY(0xa7): // AND  A\r
442                 goto OP_AND_R;\r
443 \r
444         OPXY(0xe6): // AND  A,n\r
445                 goto OP_AND_imm;\r
446 \r
447         OPXY(0xa4): // AND  HX\r
448                 val = data->B.H;\r
449                 USE_CYCLES(1)\r
450                 goto OP_AND;\r
451 \r
452         OPXY(0xa5): // AND  LX\r
453                 val = data->B.L;\r
454                 USE_CYCLES(1)\r
455                 goto OP_AND;\r
456 \r
457         OPXY(0xa6): // AND  (IX+o)\r
458                 adr = data->W + (INT8)READ_ARG();\r
459                 val = READ_MEM8(adr);\r
460                 USE_CYCLES(11)\r
461                 goto OP_AND;\r
462 \r
463 /*-----------------------------------------\r
464  XOR r8\r
465 -----------------------------------------*/\r
466 \r
467         OPXY(0xa8): // XOR  B\r
468         OPXY(0xa9): // XOR  C\r
469         OPXY(0xaa): // XOR  D\r
470         OPXY(0xab): // XOR  E\r
471         OPXY(0xaf): // XOR  A\r
472                 goto OP_XOR_R;\r
473 \r
474         OPXY(0xee): // XOR  A,n\r
475                 goto OP_XOR_imm;\r
476 \r
477         OPXY(0xac): // XOR  HX\r
478                 val = data->B.H;\r
479                 USE_CYCLES(1)\r
480                 goto OP_XOR;\r
481 \r
482         OPXY(0xad): // XOR  LX\r
483                 val = data->B.L;\r
484                 USE_CYCLES(1)\r
485                 goto OP_XOR;\r
486 \r
487         OPXY(0xae): // XOR  (IX+o)\r
488                 adr = data->W + (INT8)READ_ARG();\r
489                 val = READ_MEM8(adr);\r
490                 USE_CYCLES(11)\r
491                 goto OP_XOR;\r
492 \r
493 /*-----------------------------------------\r
494  OR r8\r
495 -----------------------------------------*/\r
496 \r
497         OPXY(0xb0): // OR   B\r
498         OPXY(0xb1): // OR   C\r
499         OPXY(0xb2): // OR   D\r
500         OPXY(0xb3): // OR   E\r
501         OPXY(0xb7): // OR   A\r
502                 goto OP_OR_R;\r
503 \r
504         OPXY(0xf6): // OR   A,n\r
505                 goto OP_OR_imm;\r
506 \r
507         OPXY(0xb4): // OR   HX\r
508                 val = data->B.H;\r
509                 USE_CYCLES(1)\r
510                 goto OP_OR;\r
511 \r
512         OPXY(0xb5): // OR   LX\r
513                 val = data->B.L;\r
514                 USE_CYCLES(1)\r
515                 goto OP_OR;\r
516 \r
517         OPXY(0xb6): // OR   (IX+o)\r
518                 adr = data->W + (INT8)READ_ARG();\r
519                 val = READ_MEM8(adr);\r
520                 USE_CYCLES(11)\r
521                 goto OP_OR;\r
522 \r
523 /*-----------------------------------------\r
524  MISC ARITHMETIC & CPU CONTROL\r
525 -----------------------------------------*/\r
526 \r
527         OPXY(0x27): // DAA\r
528                 goto OP_DAA;\r
529 \r
530         OPXY(0x2f): // CPL\r
531                 goto OP_CPL;\r
532 \r
533         OPXY(0x37): // SCF\r
534                 goto OP_SCF;\r
535 \r
536         OPXY(0x3f): // CCF\r
537                 goto OP_CCF;\r
538 \r
539         OPXY(0x76): // HALT\r
540                 goto OP_HALT;\r
541 \r
542         OPXY(0xf3): // DI\r
543                 goto OP_DI;\r
544 \r
545         OPXY(0xfb): // EI\r
546                 goto OP_EI;\r
547 \r
548 /*-----------------------------------------\r
549  INC r16\r
550 -----------------------------------------*/\r
551 \r
552         OPXY(0x03): // INC  BC\r
553                 goto OP_INC_BC;\r
554 \r
555         OPXY(0x13): // INC  DE\r
556                 goto OP_INC_DE;\r
557 \r
558         OPXY(0x23): // INC  IX\r
559                 goto OP_INC_xx;\r
560 \r
561         OPXY(0x33): // INC  SP\r
562                 goto OP_INC_SP;\r
563 \r
564 /*-----------------------------------------\r
565  DEC r16\r
566 -----------------------------------------*/\r
567 \r
568         OPXY(0x0b): // DEC  BC\r
569                 goto OP_DEC_BC;\r
570 \r
571         OPXY(0x1b): // DEC  DE\r
572                 goto OP_DEC_DE;\r
573 \r
574         OPXY(0x2b): // DEC  IX\r
575                 goto OP_DEC_xx;\r
576 \r
577         OPXY(0x3b): // DEC  SP\r
578                 goto OP_DEC_SP;\r
579 \r
580 /*-----------------------------------------\r
581  ADD r16\r
582 -----------------------------------------*/\r
583 \r
584         OPXY(0x09): // ADD  IX,BC\r
585                 goto OP_ADD16_xx_BC;\r
586 \r
587         OPXY(0x19): // ADD  IX,DE\r
588                 goto OP_ADD16_xx_DE;\r
589 \r
590         OPXY(0x29): // ADD  IX,IX\r
591                 goto OP_ADD16_xx_xx;\r
592 \r
593         OPXY(0x39): // ADD  IX,SP\r
594                 goto OP_ADD16_xx_SP;\r
595 \r
596 /*-----------------------------------------\r
597  ROTATE\r
598 -----------------------------------------*/\r
599 \r
600         OPXY(0x07): // RLCA\r
601                 goto OP_RLCA;\r
602 \r
603         OPXY(0x0f): // RRCA\r
604                 goto OP_RRCA;\r
605 \r
606         OPXY(0x17): // RLA\r
607                 goto OP_RLA;\r
608 \r
609         OPXY(0x1f): // RRA\r
610                 goto OP_RRA;\r
611 \r
612 /*-----------------------------------------\r
613  JP\r
614 -----------------------------------------*/\r
615 \r
616         OPXY(0xc3): // JP   nn\r
617                 goto OP_JP;\r
618 \r
619         OPXY(0xe9): // JP   (IX)\r
620                 goto OP_JP_xx;\r
621 \r
622         OPXY(0xc2): // JP   NZ,nn\r
623                 goto OP_JP_NZ;\r
624 \r
625         OPXY(0xca): // JP   Z,nn\r
626                 goto OP_JP_Z;\r
627 \r
628         OPXY(0xd2): // JP   NC,nn\r
629                 goto OP_JP_NC;\r
630 \r
631         OPXY(0xda): // JP   C,nn\r
632                 goto OP_JP_C;\r
633 \r
634         OPXY(0xe2): // JP   PO,nn\r
635                 goto OP_JP_PO;\r
636 \r
637         OPXY(0xea): // JP   PE,nn\r
638                 goto OP_JP_PE;\r
639 \r
640         OPXY(0xf2): // JP   P,nn\r
641                 goto OP_JP_P;\r
642 \r
643         OPXY(0xfa): // JP   M,nn\r
644                 goto OP_JP_M;\r
645 \r
646 /*-----------------------------------------\r
647  JR\r
648 -----------------------------------------*/\r
649 \r
650         OPXY(0x10): // DJNZ n\r
651                 goto OP_DJNZ;\r
652 \r
653         OPXY(0x18): // JR   n\r
654                 goto OP_JR;\r
655 \r
656         OPXY(0x20): // JR   NZ,n\r
657                 goto OP_JR_NZ;\r
658 \r
659         OPXY(0x28): // JR   Z,n\r
660                 goto OP_JR_Z;\r
661 \r
662         OPXY(0x30): // JR   NC,n\r
663                 goto OP_JR_NC;\r
664 \r
665         OPXY(0x38): // JR   C,n\r
666                 goto OP_JR_C;\r
667 \r
668 /*-----------------------------------------\r
669  CALL\r
670 -----------------------------------------*/\r
671 \r
672         OPXY(0xcd): // CALL nn\r
673                 goto OP_CALL;\r
674 \r
675         OPXY(0xc4): // CALL NZ,nn\r
676                 goto OP_CALL_NZ;\r
677 \r
678         OPXY(0xcc): // CALL Z,nn\r
679                 goto OP_CALL_Z;\r
680 \r
681         OPXY(0xd4): // CALL NC,nn\r
682                 goto OP_CALL_NC;\r
683 \r
684         OPXY(0xdc): // CALL C,nn\r
685                 goto OP_CALL_C;\r
686 \r
687         OPXY(0xe4): // CALL PO,nn\r
688                 goto OP_CALL_PO;\r
689 \r
690         OPXY(0xec): // CALL PE,nn\r
691                 goto OP_CALL_PE;\r
692 \r
693         OPXY(0xf4): // CALL P,nn\r
694                 goto OP_CALL_P;\r
695 \r
696         OPXY(0xfc): // CALL M,nn\r
697                 goto OP_CALL_M;\r
698 \r
699 /*-----------------------------------------\r
700  RET\r
701 -----------------------------------------*/\r
702 \r
703         OPXY(0xc9): // RET\r
704                 goto OP_RET;\r
705 \r
706         OPXY(0xc0): // RET  NZ\r
707                 goto OP_RET_NZ;\r
708 \r
709         OPXY(0xc8): // RET  Z\r
710                 goto OP_RET_Z;\r
711 \r
712         OPXY(0xd0): // RET  NC\r
713                 goto OP_RET_NC;\r
714 \r
715         OPXY(0xd8): // RET  C\r
716                 goto OP_RET_C;\r
717 \r
718         OPXY(0xe0): // RET  PO\r
719                 goto OP_RET_PO;\r
720 \r
721         OPXY(0xe8): // RET  PE\r
722                 goto OP_RET_PE;\r
723 \r
724         OPXY(0xf0): // RET  P\r
725                 goto OP_RET_P;\r
726 \r
727         OPXY(0xf8): // RET  M\r
728                 goto OP_RET_M;\r
729 \r
730 /*-----------------------------------------\r
731  RST\r
732 -----------------------------------------*/\r
733 \r
734         OPXY(0xc7): // RST  0\r
735         OPXY(0xcf): // RST  1\r
736         OPXY(0xd7): // RST  2\r
737         OPXY(0xdf): // RST  3\r
738         OPXY(0xe7): // RST  4\r
739         OPXY(0xef): // RST  5\r
740         OPXY(0xf7): // RST  6\r
741         OPXY(0xff): // RST  7\r
742                 goto OP_RST;\r
743 \r
744 /*-----------------------------------------\r
745  OUT\r
746 -----------------------------------------*/\r
747 \r
748         OPXY(0xd3): // OUT  (n),A\r
749                 goto OP_OUT_mN_A;\r
750 \r
751 /*-----------------------------------------\r
752  IN\r
753 -----------------------------------------*/\r
754 \r
755         OPXY(0xdb): // IN   A,(n)\r
756                 goto OP_IN_A_mN;\r
757 \r
758 /*-----------------------------------------\r
759  PREFIX\r
760 -----------------------------------------*/\r
761 \r
762         OPXY(0xcb): // XYCB prefix (BIT & SHIFT INSTRUCTIONS)\r
763         {\r
764                 UINT8 src;\r
765                 UINT8 res;\r
766 \r
767                 adr = data->W + (INT8)READ_ARG();\r
768                 Opcode = READ_ARG();\r
769 #if CZ80_EMULATE_R_EXACTLY\r
770                 zR++;\r
771 #endif\r
772                 #include "cz80_opXYCB.c"\r
773         }\r
774 \r
775         OPXY(0xed): // ED prefix\r
776                 goto ED_PREFIX;\r
777 \r
778         OPXY(0xdd): // DD prefix (IX)\r
779                 goto DD_PREFIX;\r
780 \r
781         OPXY(0xfd): // FD prefix (IY)\r
782                 goto FD_PREFIX;\r
783 \r
784 #if !CZ80_USE_JUMPTABLE\r
785 }\r
786 #endif\r