refactoring z80 if code for sms preparation
[picodrive.git] / cpu / cz80 / cz80.c
index bcff740..091e2a5 100644 (file)
 #include <string.h>\r
 #include "cz80.h"\r
 \r
+#if PICODRIVE_HACKS\r
+#undef EMU_M68K\r
+#include <pico/pico_int.h>\r
+#endif\r
+\r
 #ifndef ALIGN_DATA\r
+#ifdef _MSC_VER\r
+#define ALIGN_DATA\r
+#define inline\r
+#undef  CZ80_USE_JUMPTABLE\r
+#define CZ80_USE_JUMPTABLE 0\r
+#else\r
 #define ALIGN_DATA      __attribute__((aligned(4)))\r
 #endif\r
+#endif\r
 \r
 #define CF                                     0x01\r
 #define NF                                     0x02\r
@@ -203,6 +215,16 @@ void Cz80_Reset(cz80_struc *CPU)
        Cz80_Set_Reg(CPU, CZ80_PC, 0);\r
 }\r
 \r
+/* */\r
+#if PICODRIVE_HACKS\r
+static inline unsigned char picodrive_read(unsigned short a)\r
+{\r
+       unsigned long v = z80_read_map[a >> Z80_MEM_SHIFT];\r
+       if (v & 0x80000000)\r
+               return ((z80_read_f *)(v << 1))(a);\r
+       return *(unsigned char *)((v << 1) + a);\r
+}\r
+#endif\r
 \r
 /*--------------------------------------------------------\r
        CPU\8eÀ\8ds\r
@@ -223,6 +245,7 @@ INT32 Cz80_Exec(cz80_struc *CPU, INT32 cycles)
        UINT32 res;\r
        UINT32 val;\r
        int afterEI = 0;\r
+       union16 *data;\r
 \r
        PC = CPU->PC;\r
 #if CZ80_ENCRYPTED_ROM\r
@@ -236,7 +259,8 @@ INT32 Cz80_Exec(cz80_struc *CPU, INT32 cycles)
 Cz80_Exec:\r
                if (CPU->ICount > 0)\r
                {\r
-                       union16 *data = pzHL;\r
+Cz80_Exec_nocheck:\r
+                       data = pzHL;\r
                        Opcode = READ_OP();\r
 #if CZ80_EMULATE_R_EXACTLY\r
                        zR++;\r
@@ -248,7 +272,12 @@ Cz80_Exec:
                {\r
                        afterEI = 0;\r
 Cz80_Check_Interrupt:\r
-                       CHECK_INT\r
+                       if (CPU->IRQState != CLEAR_LINE)\r
+                       {\r
+                               CHECK_INT\r
+                               CPU->ICount -= CPU->ExtraCycles;\r
+                               CPU->ExtraCycles = 0;\r
+                       }\r
                        goto Cz80_Exec;\r
                }\r
        }\r