basic psp snd + cz80
[picodrive.git] / cpu / cz80 / cz80_opXY.c
diff --git a/cpu/cz80/cz80_opXY.c b/cpu/cz80/cz80_opXY.c
new file mode 100644 (file)
index 0000000..b02e401
--- /dev/null
@@ -0,0 +1,786 @@
+/******************************************************************************\r
+ *\r
+ * CZ80 XY opcode include source file\r
+ * CZ80 emulator version 0.9\r
+ * Copyright 2004-2005 Stéphane Dallongeville\r
+ *\r
+ * (Modified by NJ)\r
+ *\r
+ *****************************************************************************/\r
+\r
+#if CZ80_USE_JUMPTABLE\r
+       goto *JumpTableXY[Opcode];\r
+#else\r
+switch (Opcode)\r
+{\r
+#endif\r
+\r
+/*-----------------------------------------\r
+ NOP\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x00): // NOP\r
+\r
+/*-----------------------------------------\r
+ LD r8 (same register)\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x40): // LD   B,B\r
+       OPXY(0x49): // LD   C,C\r
+       OPXY(0x52): // LD   D,D\r
+       OPXY(0x5b): // LD   E,E\r
+       OPXY(0x64): // LD   H,H\r
+       OPXY(0x6d): // LD   L,L\r
+       OPXY(0x7f): // LD   A,A\r
+               RET(4)\r
+\r
+/*-----------------------------------------\r
+ LD r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x41): // LD   B,C\r
+       OPXY(0x42): // LD   B,D\r
+       OPXY(0x43): // LD   B,E\r
+       OPXY(0x47): // LD   B,A\r
+\r
+       OPXY(0x48): // LD   C,B\r
+       OPXY(0x4a): // LD   C,D\r
+       OPXY(0x4b): // LD   C,E\r
+       OPXY(0x4f): // LD   C,A\r
+\r
+       OPXY(0x50): // LD   D,B\r
+       OPXY(0x51): // LD   D,C\r
+       OPXY(0x53): // LD   D,E\r
+       OPXY(0x57): // LD   D,A\r
+\r
+       OPXY(0x58): // LD   E,B\r
+       OPXY(0x59): // LD   E,C\r
+       OPXY(0x5a): // LD   E,D\r
+       OPXY(0x5f): // LD   E,A\r
+\r
+       OPXY(0x78): // LD   A,B\r
+       OPXY(0x79): // LD   A,C\r
+       OPXY(0x7a): // LD   A,D\r
+       OPXY(0x7b): // LD   A,E\r
+               goto OP_LD_R_R;\r
+\r
+       OPXY(0x44): // LD   B,HX\r
+       OPXY(0x4c): // LD   C,HX\r
+       OPXY(0x54): // LD   D,HX\r
+       OPXY(0x5c): // LD   E,HX\r
+       OPXY(0x7c): // LD   A,HX\r
+               zR8((Opcode >> 3) & 7) = data->B.H;\r
+               RET(5)\r
+\r
+       OPXY(0x45): // LD   B,LX\r
+       OPXY(0x4d): // LD   C,LX\r
+       OPXY(0x55): // LD   D,LX\r
+       OPXY(0x5d): // LD   E,LX\r
+       OPXY(0x7d): // LD   A,LX\r
+               zR8((Opcode >> 3) & 7) = data->B.L;\r
+               RET(5)\r
+\r
+       OPXY(0x60): // LD   HX,B\r
+       OPXY(0x61): // LD   HX,C\r
+       OPXY(0x62): // LD   HX,D\r
+       OPXY(0x63): // LD   HX,E\r
+       OPXY(0x67): // LD   HX,A\r
+               data->B.H = zR8(Opcode & 7);\r
+               RET(5)\r
+\r
+       OPXY(0x68): // LD   LX,B\r
+       OPXY(0x69): // LD   LX,C\r
+       OPXY(0x6a): // LD   LX,D\r
+       OPXY(0x6b): // LD   LX,E\r
+       OPXY(0x6f): // LD   LX,A\r
+               data->B.L = zR8(Opcode & 7);\r
+               RET(5)\r
+\r
+       OPXY(0x65): // LD   HX,LX\r
+               data->B.H = data->B.L;\r
+               RET(5)\r
+\r
+       OPXY(0x6c): // LD   LX,HX\r
+               data->B.L = data->B.H;\r
+               RET(5)\r
+\r
+       OPXY(0x06): // LD   B,#imm\r
+       OPXY(0x0e): // LD   C,#imm\r
+       OPXY(0x16): // LD   D,#imm\r
+       OPXY(0x1e): // LD   E,#imm\r
+       OPXY(0x3e): // LD   A,#imm\r
+               goto OP_LD_R_imm;\r
+\r
+       OPXY(0x26): // LD   HX,#imm\r
+               data->B.H = READ_ARG();\r
+               RET(5)\r
+\r
+       OPXY(0x2e): // LD   LX,#imm\r
+               data->B.L = READ_ARG();\r
+               RET(5)\r
+\r
+       OPXY(0x0a): // LD   A,(BC)\r
+               goto OP_LOAD_A_mBC;\r
+\r
+       OPXY(0x1a): // LD   A,(DE)\r
+               goto OP_LOAD_A_mDE;\r
+\r
+       OPXY(0x3a): // LD   A,(nn)\r
+               goto OP_LOAD_A_mNN;\r
+\r
+       OPXY(0x02): // LD   (BC),A\r
+               goto OP_LOAD_mBC_A;\r
+\r
+       OPXY(0x12): // LD   (DE),A\r
+               goto OP_LOAD_mDE_A;\r
+\r
+       OPXY(0x32): // LD   (nn),A\r
+               goto OP_LOAD_mNN_A;\r
+\r
+       OPXY(0x46): // LD   B,(IX+o)\r
+       OPXY(0x4e): // LD   C,(IX+o)\r
+       OPXY(0x56): // LD   D,(IX+o)\r
+       OPXY(0x5e): // LD   E,(IX+o)\r
+       OPXY(0x66): // LD   H,(IX+o)\r
+       OPXY(0x6e): // LD   L,(IX+o)\r
+       OPXY(0x7e): // LD   A,(IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               zR8((Opcode >> 3) & 7) = READ_MEM8(adr);\r
+               RET(15)\r
+\r
+       OPXY(0x70): // LD   (IX+o),B\r
+       OPXY(0x71): // LD   (IX+o),C\r
+       OPXY(0x72): // LD   (IX+o),D\r
+       OPXY(0x73): // LD   (IX+o),E\r
+       OPXY(0x74): // LD   (IX+o),H\r
+       OPXY(0x75): // LD   (IX+o),L\r
+       OPXY(0x77): // LD   (IX+o),A\r
+               adr = data->W + (INT8)READ_ARG();\r
+               WRITE_MEM8(adr, zR8(Opcode & 7));\r
+               RET(15)\r
+\r
+       OPXY(0x36): // LD   (IX+o),#imm\r
+               adr = data->W + (INT8)READ_ARG();\r
+               WRITE_MEM8(adr, READ_ARG());\r
+               RET(15)\r
+\r
+/*-----------------------------------------\r
+ LD r16\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x01): // LD   BC,nn\r
+       OPXY(0x11): // LD   DE,nn\r
+               goto OP_LOAD_RR_imm16;\r
+\r
+       OPXY(0x21): // LD   IX,nn\r
+               data->W = READ_ARG16();\r
+               RET(10)\r
+\r
+       OPXY(0x31): // LD   SP,nn\r
+               goto OP_LOAD_SP_imm16;\r
+\r
+       OPXY(0x2a): // LD   IX,(w)\r
+               goto OP_LD_xx_mNN;\r
+\r
+       OPXY(0x22): // LD   (w),IX\r
+               goto OP_LD_mNN_xx;\r
+\r
+       OPXY(0xf9): // LD   SP,IX\r
+               goto OP_LD_SP_xx;\r
+\r
+/*-----------------------------------------\r
+ POP\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xc1): // POP  BC\r
+       OPXY(0xd1): // POP  DE\r
+       OPXY(0xf1): // POP  AF\r
+               goto OP_POP_RR;\r
+\r
+       OPXY(0xe1): // POP  IX\r
+               goto OP_POP;\r
+\r
+/*-----------------------------------------\r
+ PUSH\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xc5): // PUSH BC\r
+       OPXY(0xd5): // PUSH DE\r
+       OPXY(0xf5): // PUSH AF\r
+               goto OP_PUSH_RR;\r
+\r
+       OPXY(0xe5): // PUSH IX\r
+               goto OP_PUSH;\r
+\r
+/*-----------------------------------------\r
+ EX\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x08): // EX   AF,AF'\r
+               goto OP_EX_AF_AF2;\r
+\r
+       OPXY(0xeb): // EX   DE,HL\r
+               goto OP_EX_DE_HL;\r
+\r
+       OPXY(0xd9): // EXX\r
+               goto OP_EXX;\r
+\r
+       OPXY(0xe3): // EX   (SP),IX\r
+               goto OP_EX_xx_mSP;\r
+\r
+/*-----------------------------------------\r
+ INC r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x04): // INC  B\r
+       OPXY(0x0c): // INC  C\r
+       OPXY(0x14): // INC  D\r
+       OPXY(0x1c): // INC  E\r
+       OPXY(0x3c): // INC  A\r
+               goto OP_INC_R;\r
+\r
+       OPXY(0x24): // INC  HX\r
+               data->B.H++;\r
+               zF = (zF & CF) | SZHV_inc[data->B.H];\r
+               RET(5)\r
+\r
+       OPXY(0x2c): // INC  LX\r
+               data->B.L++;\r
+               zF = (zF & CF) | SZHV_inc[data->B.L];\r
+               RET(5)\r
+\r
+       OPXY(0x34): // INC  (IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               USE_CYCLES(8)\r
+               goto OP_INC_m;\r
+\r
+/*-----------------------------------------\r
+ DEC r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x05): // DEC  B\r
+       OPXY(0x0d): // DEC  C\r
+       OPXY(0x15): // DEC  D\r
+       OPXY(0x1d): // DEC  E\r
+       OPXY(0x3d): // DEC  A\r
+               goto OP_DEC_R;\r
+\r
+       OPXY(0x25): // DEC  HX\r
+               data->B.H--;\r
+               zF = (zF & CF) | SZHV_dec[data->B.H];\r
+               RET(5)\r
+\r
+       OPXY(0x2d): // DEC  LX\r
+               data->B.L--;\r
+               zF = (zF & CF) | SZHV_dec[data->B.L];\r
+               RET(5)\r
+\r
+       OPXY(0x35): // DEC  (IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               USE_CYCLES(8)\r
+               goto OP_DEC_m;\r
+\r
+/*-----------------------------------------\r
+ ADD r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x80): // ADD  A,B\r
+       OPXY(0x81): // ADD  A,C\r
+       OPXY(0x82): // ADD  A,D\r
+       OPXY(0x83): // ADD  A,E\r
+       OPXY(0x87): // ADD  A,A\r
+               goto OP_ADD_R;\r
+\r
+       OPXY(0xc6): // ADD  A,n\r
+               goto OP_ADD_imm;\r
+\r
+       OPXY(0x84): // ADD  A,HX\r
+               val = data->B.H;\r
+               USE_CYCLES(1)\r
+               goto OP_ADD;\r
+\r
+       OPXY(0x85): // ADD  A,LX\r
+               val = data->B.L;\r
+               USE_CYCLES(1)\r
+               goto OP_ADD;\r
+\r
+       OPXY(0x86): // ADD  A,(IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               val = READ_MEM8(adr);\r
+               USE_CYCLES(11)\r
+               goto OP_ADD;\r
+\r
+/*-----------------------------------------\r
+ ADC r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x88): // ADC  A,B\r
+       OPXY(0x89): // ADC  A,C\r
+       OPXY(0x8a): // ADC  A,D\r
+       OPXY(0x8b): // ADC  A,E\r
+       OPXY(0x8f): // ADC  A,A\r
+               goto OP_ADC_R;\r
+\r
+       OPXY(0xce): // ADC  A,n\r
+               goto OP_ADC_imm;\r
+\r
+       OPXY(0x8c): // ADC  A,HX\r
+               val = data->B.H;\r
+               USE_CYCLES(1)\r
+               goto OP_ADC;\r
+\r
+       OPXY(0x8d): // ADC  A,LX\r
+               val = data->B.L;\r
+               USE_CYCLES(1)\r
+               goto OP_ADC;\r
+\r
+       OPXY(0x8e): // ADC  A,(IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               val = READ_MEM8(adr);\r
+               USE_CYCLES(11)\r
+               goto OP_ADC;\r
+\r
+/*-----------------------------------------\r
+ SUB r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x90): // SUB  B\r
+       OPXY(0x91): // SUB  C\r
+       OPXY(0x92): // SUB  D\r
+       OPXY(0x93): // SUB  E\r
+       OPXY(0x97): // SUB  A\r
+               goto OP_SUB_R;\r
+\r
+       OPXY(0xd6): // SUB  A,n\r
+               goto OP_SUB_imm;\r
+\r
+       OPXY(0x94): // SUB  HX\r
+               val = data->B.H;\r
+               USE_CYCLES(1)\r
+               goto OP_SUB;\r
+\r
+       OPXY(0x95): // SUB  LX\r
+               val = data->B.L;\r
+               USE_CYCLES(1)\r
+               goto OP_SUB;\r
+\r
+       OPXY(0x96): // SUB  (IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               val = READ_MEM8(adr);\r
+               USE_CYCLES(11)\r
+               goto OP_SUB;\r
+\r
+/*-----------------------------------------\r
+ SBC r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x98): // SBC  A,B\r
+       OPXY(0x99): // SBC  A,C\r
+       OPXY(0x9a): // SBC  A,D\r
+       OPXY(0x9b): // SBC  A,E\r
+       OPXY(0x9f): // SBC  A,A\r
+               goto OP_SBC_R;\r
+\r
+       OPXY(0xde): // SBC  A,n\r
+               goto OP_SBC_imm;\r
+\r
+       OPXY(0x9c): // SBC  A,HX\r
+               val = data->B.H;\r
+               USE_CYCLES(1)\r
+               goto OP_SBC;\r
+\r
+       OPXY(0x9d): // SBC  A,LX\r
+               val = data->B.L;\r
+               USE_CYCLES(1)\r
+               goto OP_SBC;\r
+\r
+       OPXY(0x9e): // SBC  A,(IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               val = READ_MEM8(adr);\r
+               USE_CYCLES(11)\r
+               goto OP_SBC;\r
+\r
+/*-----------------------------------------\r
+ CP r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xb8): // CP   B\r
+       OPXY(0xb9): // CP   C\r
+       OPXY(0xba): // CP   D\r
+       OPXY(0xbb): // CP   E\r
+       OPXY(0xbf): // CP   A\r
+               goto OP_CP_R;\r
+\r
+       OPXY(0xfe): // CP   n\r
+               goto OP_CP_imm;\r
+\r
+       OPXY(0xbc): // CP   HX\r
+               val = data->B.H;\r
+               USE_CYCLES(1)\r
+               goto OP_CP;\r
+\r
+       OPXY(0xbd): // CP   LX\r
+               val = data->B.L;\r
+               USE_CYCLES(1)\r
+               goto OP_CP;\r
+\r
+       OPXY(0xbe): // CP   (IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               val = READ_MEM8(adr);\r
+               USE_CYCLES(11)\r
+               goto OP_CP;\r
+\r
+/*-----------------------------------------\r
+ AND r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xa0): // AND  B\r
+       OPXY(0xa1): // AND  C\r
+       OPXY(0xa2): // AND  D\r
+       OPXY(0xa3): // AND  E\r
+       OPXY(0xa7): // AND  A\r
+               goto OP_AND_R;\r
+\r
+       OPXY(0xe6): // AND  A,n\r
+               goto OP_AND_imm;\r
+\r
+       OPXY(0xa4): // AND  HX\r
+               val = data->B.H;\r
+               USE_CYCLES(1)\r
+               goto OP_AND;\r
+\r
+       OPXY(0xa5): // AND  LX\r
+               val = data->B.L;\r
+               USE_CYCLES(1)\r
+               goto OP_AND;\r
+\r
+       OPXY(0xa6): // AND  (IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               val = READ_MEM8(adr);\r
+               USE_CYCLES(11)\r
+               goto OP_AND;\r
+\r
+/*-----------------------------------------\r
+ XOR r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xa8): // XOR  B\r
+       OPXY(0xa9): // XOR  C\r
+       OPXY(0xaa): // XOR  D\r
+       OPXY(0xab): // XOR  E\r
+       OPXY(0xaf): // XOR  A\r
+               goto OP_XOR_R;\r
+\r
+       OPXY(0xee): // XOR  A,n\r
+               goto OP_XOR_imm;\r
+\r
+       OPXY(0xac): // XOR  HX\r
+               val = data->B.H;\r
+               USE_CYCLES(1)\r
+               goto OP_XOR;\r
+\r
+       OPXY(0xad): // XOR  LX\r
+               val = data->B.L;\r
+               USE_CYCLES(1)\r
+               goto OP_XOR;\r
+\r
+       OPXY(0xae): // XOR  (IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               val = READ_MEM8(adr);\r
+               USE_CYCLES(11)\r
+               goto OP_XOR;\r
+\r
+/*-----------------------------------------\r
+ OR r8\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xb0): // OR   B\r
+       OPXY(0xb1): // OR   C\r
+       OPXY(0xb2): // OR   D\r
+       OPXY(0xb3): // OR   E\r
+       OPXY(0xb7): // OR   A\r
+               goto OP_OR_R;\r
+\r
+       OPXY(0xf6): // OR   A,n\r
+               goto OP_OR_imm;\r
+\r
+       OPXY(0xb4): // OR   HX\r
+               val = data->B.H;\r
+               USE_CYCLES(1)\r
+               goto OP_OR;\r
+\r
+       OPXY(0xb5): // OR   LX\r
+               val = data->B.L;\r
+               USE_CYCLES(1)\r
+               goto OP_OR;\r
+\r
+       OPXY(0xb6): // OR   (IX+o)\r
+               adr = data->W + (INT8)READ_ARG();\r
+               val = READ_MEM8(adr);\r
+               USE_CYCLES(11)\r
+               goto OP_OR;\r
+\r
+/*-----------------------------------------\r
+ MISC ARITHMETIC & CPU CONTROL\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x27): // DAA\r
+               goto OP_DAA;\r
+\r
+       OPXY(0x2f): // CPL\r
+               goto OP_CPL;\r
+\r
+       OPXY(0x37): // SCF\r
+               goto OP_SCF;\r
+\r
+       OPXY(0x3f): // CCF\r
+               goto OP_CCF;\r
+\r
+       OPXY(0x76): // HALT\r
+               goto OP_HALT;\r
+\r
+       OPXY(0xf3): // DI\r
+               goto OP_DI;\r
+\r
+       OPXY(0xfb): // EI\r
+               goto OP_EI;\r
+\r
+/*-----------------------------------------\r
+ INC r16\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x03): // INC  BC\r
+               goto OP_INC_BC;\r
+\r
+       OPXY(0x13): // INC  DE\r
+               goto OP_INC_DE;\r
+\r
+       OPXY(0x23): // INC  IX\r
+               goto OP_INC_xx;\r
+\r
+       OPXY(0x33): // INC  SP\r
+               goto OP_INC_SP;\r
+\r
+/*-----------------------------------------\r
+ DEC r16\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x0b): // DEC  BC\r
+               goto OP_DEC_BC;\r
+\r
+       OPXY(0x1b): // DEC  DE\r
+               goto OP_DEC_DE;\r
+\r
+       OPXY(0x2b): // DEC  IX\r
+               goto OP_DEC_xx;\r
+\r
+       OPXY(0x3b): // DEC  SP\r
+               goto OP_DEC_SP;\r
+\r
+/*-----------------------------------------\r
+ ADD r16\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x09): // ADD  IX,BC\r
+               goto OP_ADD16_xx_BC;\r
+\r
+       OPXY(0x19): // ADD  IX,DE\r
+               goto OP_ADD16_xx_DE;\r
+\r
+       OPXY(0x29): // ADD  IX,IX\r
+               goto OP_ADD16_xx_xx;\r
+\r
+       OPXY(0x39): // ADD  IX,SP\r
+               goto OP_ADD16_xx_SP;\r
+\r
+/*-----------------------------------------\r
+ ROTATE\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x07): // RLCA\r
+               goto OP_RLCA;\r
+\r
+       OPXY(0x0f): // RRCA\r
+               goto OP_RRCA;\r
+\r
+       OPXY(0x17): // RLA\r
+               goto OP_RLA;\r
+\r
+       OPXY(0x1f): // RRA\r
+               goto OP_RRA;\r
+\r
+/*-----------------------------------------\r
+ JP\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xc3): // JP   nn\r
+               goto OP_JP;\r
+\r
+       OPXY(0xe9): // JP   (IX)\r
+               goto OP_JP_xx;\r
+\r
+       OPXY(0xc2): // JP   NZ,nn\r
+               goto OP_JP_NZ;\r
+\r
+       OPXY(0xca): // JP   Z,nn\r
+               goto OP_JP_Z;\r
+\r
+       OPXY(0xd2): // JP   NC,nn\r
+               goto OP_JP_NC;\r
+\r
+       OPXY(0xda): // JP   C,nn\r
+               goto OP_JP_C;\r
+\r
+       OPXY(0xe2): // JP   PO,nn\r
+               goto OP_JP_PO;\r
+\r
+       OPXY(0xea): // JP   PE,nn\r
+               goto OP_JP_PE;\r
+\r
+       OPXY(0xf2): // JP   P,nn\r
+               goto OP_JP_P;\r
+\r
+       OPXY(0xfa): // JP   M,nn\r
+               goto OP_JP_M;\r
+\r
+/*-----------------------------------------\r
+ JR\r
+-----------------------------------------*/\r
+\r
+       OPXY(0x10): // DJNZ n\r
+               goto OP_DJNZ;\r
+\r
+       OPXY(0x18): // JR   n\r
+               goto OP_JR;\r
+\r
+       OPXY(0x20): // JR   NZ,n\r
+               goto OP_JR_NZ;\r
+\r
+       OPXY(0x28): // JR   Z,n\r
+               goto OP_JR_Z;\r
+\r
+       OPXY(0x30): // JR   NC,n\r
+               goto OP_JR_NC;\r
+\r
+       OPXY(0x38): // JR   C,n\r
+               goto OP_JR_C;\r
+\r
+/*-----------------------------------------\r
+ CALL\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xcd): // CALL nn\r
+               goto OP_CALL;\r
+\r
+       OPXY(0xc4): // CALL NZ,nn\r
+               goto OP_CALL_NZ;\r
+\r
+       OPXY(0xcc): // CALL Z,nn\r
+               goto OP_CALL_Z;\r
+\r
+       OPXY(0xd4): // CALL NC,nn\r
+               goto OP_CALL_NC;\r
+\r
+       OPXY(0xdc): // CALL C,nn\r
+               goto OP_CALL_C;\r
+\r
+       OPXY(0xe4): // CALL PO,nn\r
+               goto OP_CALL_PO;\r
+\r
+       OPXY(0xec): // CALL PE,nn\r
+               goto OP_CALL_PE;\r
+\r
+       OPXY(0xf4): // CALL P,nn\r
+               goto OP_CALL_P;\r
+\r
+       OPXY(0xfc): // CALL M,nn\r
+               goto OP_CALL_M;\r
+\r
+/*-----------------------------------------\r
+ RET\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xc9): // RET\r
+               goto OP_RET;\r
+\r
+       OPXY(0xc0): // RET  NZ\r
+               goto OP_RET_NZ;\r
+\r
+       OPXY(0xc8): // RET  Z\r
+               goto OP_RET_Z;\r
+\r
+       OPXY(0xd0): // RET  NC\r
+               goto OP_RET_NC;\r
+\r
+       OPXY(0xd8): // RET  C\r
+               goto OP_RET_C;\r
+\r
+       OPXY(0xe0): // RET  PO\r
+               goto OP_RET_PO;\r
+\r
+       OPXY(0xe8): // RET  PE\r
+               goto OP_RET_PE;\r
+\r
+       OPXY(0xf0): // RET  P\r
+               goto OP_RET_P;\r
+\r
+       OPXY(0xf8): // RET  M\r
+               goto OP_RET_M;\r
+\r
+/*-----------------------------------------\r
+ RST\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xc7): // RST  0\r
+       OPXY(0xcf): // RST  1\r
+       OPXY(0xd7): // RST  2\r
+       OPXY(0xdf): // RST  3\r
+       OPXY(0xe7): // RST  4\r
+       OPXY(0xef): // RST  5\r
+       OPXY(0xf7): // RST  6\r
+       OPXY(0xff): // RST  7\r
+               goto OP_RST;\r
+\r
+/*-----------------------------------------\r
+ OUT\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xd3): // OUT  (n),A\r
+               goto OP_OUT_mN_A;\r
+\r
+/*-----------------------------------------\r
+ IN\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xdb): // IN   A,(n)\r
+               goto OP_IN_A_mN;\r
+\r
+/*-----------------------------------------\r
+ PREFIX\r
+-----------------------------------------*/\r
+\r
+       OPXY(0xcb): // XYCB prefix (BIT & SHIFT INSTRUCTIONS)\r
+       {\r
+               UINT8 src;\r
+               UINT8 res;\r
+\r
+               adr = data->W + (INT8)READ_ARG();\r
+               Opcode = READ_ARG();\r
+#if CZ80_EMULATE_R_EXACTLY\r
+               zR++;\r
+#endif\r
+               #include "cz80_opXYCB.c"\r
+       }\r
+\r
+       OPXY(0xed): // ED prefix\r
+               goto ED_PREFIX;\r
+\r
+       OPXY(0xdd): // DD prefix (IX)\r
+               goto DD_PREFIX;\r
+\r
+       OPXY(0xfd): // FD prefix (IY)\r
+               goto FD_PREFIX;\r
+\r
+#if !CZ80_USE_JUMPTABLE\r
+}\r
+#endif\r