fb53c072ff231f3a3815b9a427b818d503c4c752
[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(4)\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(4)\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(4)\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(4)\r
98 \r
99         OPXY(0x65): // LD   HX,LX\r
100                 data->B.H = data->B.L;\r
101                 RET(4)\r
102 \r
103         OPXY(0x6c): // LD   LX,HX\r
104                 data->B.L = data->B.H;\r
105                 RET(4)\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(4)\r
117 \r
118         OPXY(0x2e): // LD   LX,#imm\r
119                 data->B.L = READ_ARG();\r
120                 RET(4)\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                 goto OP_POP_RR;\r
198         OPXY(0xf1): // POP  AF\r
199                 goto OP_POP_AF;\r
200 \r
201         OPXY(0xe1): // POP  IX\r
202                 goto OP_POP;\r
203 \r
204 /*-----------------------------------------\r
205  PUSH\r
206 -----------------------------------------*/\r
207 \r
208         OPXY(0xc5): // PUSH BC\r
209         OPXY(0xd5): // PUSH DE\r
210                 goto OP_PUSH_RR;\r
211         OPXY(0xf5): // PUSH AF\r
212                 goto OP_PUSH_AF;\r
213 \r
214         OPXY(0xe5): // PUSH IX\r
215                 goto OP_PUSH;\r
216 \r
217 /*-----------------------------------------\r
218  EX\r
219 -----------------------------------------*/\r
220 \r
221         OPXY(0x08): // EX   AF,AF'\r
222                 goto OP_EX_AF_AF2;\r
223 \r
224         OPXY(0xeb): // EX   DE,HL\r
225                 goto OP_EX_DE_HL;\r
226 \r
227         OPXY(0xd9): // EXX\r
228                 goto OP_EXX;\r
229 \r
230         OPXY(0xe3): // EX   (SP),IX\r
231                 goto OP_EX_xx_mSP;\r
232 \r
233 /*-----------------------------------------\r
234  INC r8\r
235 -----------------------------------------*/\r
236 \r
237         OPXY(0x04): // INC  B\r
238         OPXY(0x0c): // INC  C\r
239         OPXY(0x14): // INC  D\r
240         OPXY(0x1c): // INC  E\r
241         OPXY(0x3c): // INC  A\r
242                 goto OP_INC_R;\r
243 \r
244         OPXY(0x24): // INC  HX\r
245                 data->B.H++;\r
246                 zF = (zF & CF) | SZHV_inc[data->B.H];\r
247                 RET(4)\r
248 \r
249         OPXY(0x2c): // INC  LX\r
250                 data->B.L++;\r
251                 zF = (zF & CF) | SZHV_inc[data->B.L];\r
252                 RET(4)\r
253 \r
254         OPXY(0x34): // INC  (IX+o)\r
255                 adr = data->W + (INT8)READ_ARG();\r
256                 USE_CYCLES(8)\r
257                 goto OP_INC_m;\r
258 \r
259 /*-----------------------------------------\r
260  DEC r8\r
261 -----------------------------------------*/\r
262 \r
263         OPXY(0x05): // DEC  B\r
264         OPXY(0x0d): // DEC  C\r
265         OPXY(0x15): // DEC  D\r
266         OPXY(0x1d): // DEC  E\r
267         OPXY(0x3d): // DEC  A\r
268                 goto OP_DEC_R;\r
269 \r
270         OPXY(0x25): // DEC  HX\r
271                 data->B.H--;\r
272                 zF = (zF & CF) | SZHV_dec[data->B.H];\r
273                 RET(4)\r
274 \r
275         OPXY(0x2d): // DEC  LX\r
276                 data->B.L--;\r
277                 zF = (zF & CF) | SZHV_dec[data->B.L];\r
278                 RET(4)\r
279 \r
280         OPXY(0x35): // DEC  (IX+o)\r
281                 adr = data->W + (INT8)READ_ARG();\r
282                 USE_CYCLES(8)\r
283                 goto OP_DEC_m;\r
284 \r
285 /*-----------------------------------------\r
286  ADD r8\r
287 -----------------------------------------*/\r
288 \r
289         OPXY(0x80): // ADD  A,B\r
290         OPXY(0x81): // ADD  A,C\r
291         OPXY(0x82): // ADD  A,D\r
292         OPXY(0x83): // ADD  A,E\r
293         OPXY(0x87): // ADD  A,A\r
294                 goto OP_ADD_R;\r
295 \r
296         OPXY(0xc6): // ADD  A,n\r
297                 goto OP_ADD_imm;\r
298 \r
299         OPXY(0x84): // ADD  A,HX\r
300                 val = data->B.H;\r
301                 goto OP_ADD;\r
302 \r
303         OPXY(0x85): // ADD  A,LX\r
304                 val = data->B.L;\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                 goto OP_ADC;\r
330 \r
331         OPXY(0x8d): // ADC  A,LX\r
332                 val = data->B.L;\r
333                 goto OP_ADC;\r
334 \r
335         OPXY(0x8e): // ADC  A,(IX+o)\r
336                 adr = data->W + (INT8)READ_ARG();\r
337                 val = READ_MEM8(adr);\r
338                 USE_CYCLES(11)\r
339                 goto OP_ADC;\r
340 \r
341 /*-----------------------------------------\r
342  SUB r8\r
343 -----------------------------------------*/\r
344 \r
345         OPXY(0x90): // SUB  B\r
346         OPXY(0x91): // SUB  C\r
347         OPXY(0x92): // SUB  D\r
348         OPXY(0x93): // SUB  E\r
349         OPXY(0x97): // SUB  A\r
350                 goto OP_SUB_R;\r
351 \r
352         OPXY(0xd6): // SUB  A,n\r
353                 goto OP_SUB_imm;\r
354 \r
355         OPXY(0x94): // SUB  HX\r
356                 val = data->B.H;\r
357                 goto OP_SUB;\r
358 \r
359         OPXY(0x95): // SUB  LX\r
360                 val = data->B.L;\r
361                 goto OP_SUB;\r
362 \r
363         OPXY(0x96): // SUB  (IX+o)\r
364                 adr = data->W + (INT8)READ_ARG();\r
365                 val = READ_MEM8(adr);\r
366                 USE_CYCLES(11)\r
367                 goto OP_SUB;\r
368 \r
369 /*-----------------------------------------\r
370  SBC r8\r
371 -----------------------------------------*/\r
372 \r
373         OPXY(0x98): // SBC  A,B\r
374         OPXY(0x99): // SBC  A,C\r
375         OPXY(0x9a): // SBC  A,D\r
376         OPXY(0x9b): // SBC  A,E\r
377         OPXY(0x9f): // SBC  A,A\r
378                 goto OP_SBC_R;\r
379 \r
380         OPXY(0xde): // SBC  A,n\r
381                 goto OP_SBC_imm;\r
382 \r
383         OPXY(0x9c): // SBC  A,HX\r
384                 val = data->B.H;\r
385                 goto OP_SBC;\r
386 \r
387         OPXY(0x9d): // SBC  A,LX\r
388                 val = data->B.L;\r
389                 goto OP_SBC;\r
390 \r
391         OPXY(0x9e): // SBC  A,(IX+o)\r
392                 adr = data->W + (INT8)READ_ARG();\r
393                 val = READ_MEM8(adr);\r
394                 USE_CYCLES(11)\r
395                 goto OP_SBC;\r
396 \r
397 /*-----------------------------------------\r
398  CP r8\r
399 -----------------------------------------*/\r
400 \r
401         OPXY(0xb8): // CP   B\r
402         OPXY(0xb9): // CP   C\r
403         OPXY(0xba): // CP   D\r
404         OPXY(0xbb): // CP   E\r
405         OPXY(0xbf): // CP   A\r
406                 goto OP_CP_R;\r
407 \r
408         OPXY(0xfe): // CP   n\r
409                 goto OP_CP_imm;\r
410 \r
411         OPXY(0xbc): // CP   HX\r
412                 val = data->B.H;\r
413                 goto OP_CP;\r
414 \r
415         OPXY(0xbd): // CP   LX\r
416                 val = data->B.L;\r
417                 goto OP_CP;\r
418 \r
419         OPXY(0xbe): // CP   (IX+o)\r
420                 adr = data->W + (INT8)READ_ARG();\r
421                 val = READ_MEM8(adr);\r
422                 USE_CYCLES(11)\r
423                 goto OP_CP;\r
424 \r
425 /*-----------------------------------------\r
426  AND r8\r
427 -----------------------------------------*/\r
428 \r
429         OPXY(0xa0): // AND  B\r
430         OPXY(0xa1): // AND  C\r
431         OPXY(0xa2): // AND  D\r
432         OPXY(0xa3): // AND  E\r
433         OPXY(0xa7): // AND  A\r
434                 goto OP_AND_R;\r
435 \r
436         OPXY(0xe6): // AND  A,n\r
437                 goto OP_AND_imm;\r
438 \r
439         OPXY(0xa4): // AND  HX\r
440                 val = data->B.H;\r
441                 goto OP_AND;\r
442 \r
443         OPXY(0xa5): // AND  LX\r
444                 val = data->B.L;\r
445                 goto OP_AND;\r
446 \r
447         OPXY(0xa6): // AND  (IX+o)\r
448                 adr = data->W + (INT8)READ_ARG();\r
449                 val = READ_MEM8(adr);\r
450                 USE_CYCLES(11)\r
451                 goto OP_AND;\r
452 \r
453 /*-----------------------------------------\r
454  XOR r8\r
455 -----------------------------------------*/\r
456 \r
457         OPXY(0xa8): // XOR  B\r
458         OPXY(0xa9): // XOR  C\r
459         OPXY(0xaa): // XOR  D\r
460         OPXY(0xab): // XOR  E\r
461         OPXY(0xaf): // XOR  A\r
462                 goto OP_XOR_R;\r
463 \r
464         OPXY(0xee): // XOR  A,n\r
465                 goto OP_XOR_imm;\r
466 \r
467         OPXY(0xac): // XOR  HX\r
468                 val = data->B.H;\r
469                 goto OP_XOR;\r
470 \r
471         OPXY(0xad): // XOR  LX\r
472                 val = data->B.L;\r
473                 goto OP_XOR;\r
474 \r
475         OPXY(0xae): // XOR  (IX+o)\r
476                 adr = data->W + (INT8)READ_ARG();\r
477                 val = READ_MEM8(adr);\r
478                 USE_CYCLES(11)\r
479                 goto OP_XOR;\r
480 \r
481 /*-----------------------------------------\r
482  OR r8\r
483 -----------------------------------------*/\r
484 \r
485         OPXY(0xb0): // OR   B\r
486         OPXY(0xb1): // OR   C\r
487         OPXY(0xb2): // OR   D\r
488         OPXY(0xb3): // OR   E\r
489         OPXY(0xb7): // OR   A\r
490                 goto OP_OR_R;\r
491 \r
492         OPXY(0xf6): // OR   A,n\r
493                 goto OP_OR_imm;\r
494 \r
495         OPXY(0xb4): // OR   HX\r
496                 val = data->B.H;\r
497                 goto OP_OR;\r
498 \r
499         OPXY(0xb5): // OR   LX\r
500                 val = data->B.L;\r
501                 goto OP_OR;\r
502 \r
503         OPXY(0xb6): // OR   (IX+o)\r
504                 adr = data->W + (INT8)READ_ARG();\r
505                 val = READ_MEM8(adr);\r
506                 USE_CYCLES(11)\r
507                 goto OP_OR;\r
508 \r
509 /*-----------------------------------------\r
510  MISC ARITHMETIC & CPU CONTROL\r
511 -----------------------------------------*/\r
512 \r
513         OPXY(0x27): // DAA\r
514                 goto OP_DAA;\r
515 \r
516         OPXY(0x2f): // CPL\r
517                 goto OP_CPL;\r
518 \r
519         OPXY(0x37): // SCF\r
520                 goto OP_SCF;\r
521 \r
522         OPXY(0x3f): // CCF\r
523                 goto OP_CCF;\r
524 \r
525         OPXY(0x76): // HALT\r
526                 goto OP_HALT;\r
527 \r
528         OPXY(0xf3): // DI\r
529                 goto OP_DI;\r
530 \r
531         OPXY(0xfb): // EI\r
532                 goto OP_EI;\r
533 \r
534 /*-----------------------------------------\r
535  INC r16\r
536 -----------------------------------------*/\r
537 \r
538         OPXY(0x03): // INC  BC\r
539                 goto OP_INC_BC;\r
540 \r
541         OPXY(0x13): // INC  DE\r
542                 goto OP_INC_DE;\r
543 \r
544         OPXY(0x23): // INC  IX\r
545                 goto OP_INC_xx;\r
546 \r
547         OPXY(0x33): // INC  SP\r
548                 goto OP_INC_SP;\r
549 \r
550 /*-----------------------------------------\r
551  DEC r16\r
552 -----------------------------------------*/\r
553 \r
554         OPXY(0x0b): // DEC  BC\r
555                 goto OP_DEC_BC;\r
556 \r
557         OPXY(0x1b): // DEC  DE\r
558                 goto OP_DEC_DE;\r
559 \r
560         OPXY(0x2b): // DEC  IX\r
561                 goto OP_DEC_xx;\r
562 \r
563         OPXY(0x3b): // DEC  SP\r
564                 goto OP_DEC_SP;\r
565 \r
566 /*-----------------------------------------\r
567  ADD r16\r
568 -----------------------------------------*/\r
569 \r
570         OPXY(0x09): // ADD  IX,BC\r
571                 goto OP_ADD16_xx_BC;\r
572 \r
573         OPXY(0x19): // ADD  IX,DE\r
574                 goto OP_ADD16_xx_DE;\r
575 \r
576         OPXY(0x29): // ADD  IX,IX\r
577                 goto OP_ADD16_xx_xx;\r
578 \r
579         OPXY(0x39): // ADD  IX,SP\r
580                 goto OP_ADD16_xx_SP;\r
581 \r
582 /*-----------------------------------------\r
583  ROTATE\r
584 -----------------------------------------*/\r
585 \r
586         OPXY(0x07): // RLCA\r
587                 goto OP_RLCA;\r
588 \r
589         OPXY(0x0f): // RRCA\r
590                 goto OP_RRCA;\r
591 \r
592         OPXY(0x17): // RLA\r
593                 goto OP_RLA;\r
594 \r
595         OPXY(0x1f): // RRA\r
596                 goto OP_RRA;\r
597 \r
598 /*-----------------------------------------\r
599  JP\r
600 -----------------------------------------*/\r
601 \r
602         OPXY(0xc3): // JP   nn\r
603                 goto OP_JP;\r
604 \r
605         OPXY(0xe9): // JP   (IX)\r
606                 goto OP_JP_xx;\r
607 \r
608         OPXY(0xc2): // JP   NZ,nn\r
609                 goto OP_JP_NZ;\r
610 \r
611         OPXY(0xca): // JP   Z,nn\r
612                 goto OP_JP_Z;\r
613 \r
614         OPXY(0xd2): // JP   NC,nn\r
615                 goto OP_JP_NC;\r
616 \r
617         OPXY(0xda): // JP   C,nn\r
618                 goto OP_JP_C;\r
619 \r
620         OPXY(0xe2): // JP   PO,nn\r
621                 goto OP_JP_PO;\r
622 \r
623         OPXY(0xea): // JP   PE,nn\r
624                 goto OP_JP_PE;\r
625 \r
626         OPXY(0xf2): // JP   P,nn\r
627                 goto OP_JP_P;\r
628 \r
629         OPXY(0xfa): // JP   M,nn\r
630                 goto OP_JP_M;\r
631 \r
632 /*-----------------------------------------\r
633  JR\r
634 -----------------------------------------*/\r
635 \r
636         OPXY(0x10): // DJNZ n\r
637                 goto OP_DJNZ;\r
638 \r
639         OPXY(0x18): // JR   n\r
640                 goto OP_JR;\r
641 \r
642         OPXY(0x20): // JR   NZ,n\r
643                 goto OP_JR_NZ;\r
644 \r
645         OPXY(0x28): // JR   Z,n\r
646                 goto OP_JR_Z;\r
647 \r
648         OPXY(0x30): // JR   NC,n\r
649                 goto OP_JR_NC;\r
650 \r
651         OPXY(0x38): // JR   C,n\r
652                 goto OP_JR_C;\r
653 \r
654 /*-----------------------------------------\r
655  CALL\r
656 -----------------------------------------*/\r
657 \r
658         OPXY(0xcd): // CALL nn\r
659                 goto OP_CALL;\r
660 \r
661         OPXY(0xc4): // CALL NZ,nn\r
662                 goto OP_CALL_NZ;\r
663 \r
664         OPXY(0xcc): // CALL Z,nn\r
665                 goto OP_CALL_Z;\r
666 \r
667         OPXY(0xd4): // CALL NC,nn\r
668                 goto OP_CALL_NC;\r
669 \r
670         OPXY(0xdc): // CALL C,nn\r
671                 goto OP_CALL_C;\r
672 \r
673         OPXY(0xe4): // CALL PO,nn\r
674                 goto OP_CALL_PO;\r
675 \r
676         OPXY(0xec): // CALL PE,nn\r
677                 goto OP_CALL_PE;\r
678 \r
679         OPXY(0xf4): // CALL P,nn\r
680                 goto OP_CALL_P;\r
681 \r
682         OPXY(0xfc): // CALL M,nn\r
683                 goto OP_CALL_M;\r
684 \r
685 /*-----------------------------------------\r
686  RET\r
687 -----------------------------------------*/\r
688 \r
689         OPXY(0xc9): // RET\r
690                 goto OP_RET;\r
691 \r
692         OPXY(0xc0): // RET  NZ\r
693                 goto OP_RET_NZ;\r
694 \r
695         OPXY(0xc8): // RET  Z\r
696                 goto OP_RET_Z;\r
697 \r
698         OPXY(0xd0): // RET  NC\r
699                 goto OP_RET_NC;\r
700 \r
701         OPXY(0xd8): // RET  C\r
702                 goto OP_RET_C;\r
703 \r
704         OPXY(0xe0): // RET  PO\r
705                 goto OP_RET_PO;\r
706 \r
707         OPXY(0xe8): // RET  PE\r
708                 goto OP_RET_PE;\r
709 \r
710         OPXY(0xf0): // RET  P\r
711                 goto OP_RET_P;\r
712 \r
713         OPXY(0xf8): // RET  M\r
714                 goto OP_RET_M;\r
715 \r
716 /*-----------------------------------------\r
717  RST\r
718 -----------------------------------------*/\r
719 \r
720         OPXY(0xc7): // RST  0\r
721         OPXY(0xcf): // RST  1\r
722         OPXY(0xd7): // RST  2\r
723         OPXY(0xdf): // RST  3\r
724         OPXY(0xe7): // RST  4\r
725         OPXY(0xef): // RST  5\r
726         OPXY(0xf7): // RST  6\r
727         OPXY(0xff): // RST  7\r
728                 goto OP_RST;\r
729 \r
730 /*-----------------------------------------\r
731  OUT\r
732 -----------------------------------------*/\r
733 \r
734         OPXY(0xd3): // OUT  (n),A\r
735                 goto OP_OUT_mN_A;\r
736 \r
737 /*-----------------------------------------\r
738  IN\r
739 -----------------------------------------*/\r
740 \r
741         OPXY(0xdb): // IN   A,(n)\r
742                 goto OP_IN_A_mN;\r
743 \r
744 /*-----------------------------------------\r
745  PREFIX\r
746 -----------------------------------------*/\r
747 \r
748         OPXY(0xcb): // XYCB prefix (BIT & SHIFT INSTRUCTIONS)\r
749         {\r
750                 UINT8 src;\r
751                 UINT8 res;\r
752 \r
753                 adr = data->W + (INT8)READ_ARG();\r
754                 Opcode = READ_ARG();\r
755 #if CZ80_EMULATE_R_EXACTLY\r
756                 zR++;\r
757 #endif\r
758                 #include "cz80_opXYCB.c"\r
759         }\r
760 \r
761         OPXY(0xed): // ED prefix\r
762                 goto ED_PREFIX;\r
763 \r
764         OPXY(0xdd): // DD prefix (IX)\r
765                 goto DD_PREFIX;\r
766 \r
767         OPXY(0xfd): // FD prefix (IY)\r
768                 goto FD_PREFIX;\r
769 \r
770 #if !CZ80_USE_JUMPTABLE\r
771 }\r
772 #endif\r