drc: support ms ABI
[picodrive.git] / cpu / cz80 / cz80.h
index a5da31d..f3f79b3 100644 (file)
 #ifndef CZ80_H\r
 #define CZ80_H\r
 \r
+// uintptr_t\r
+#include <stdlib.h>\r
+#ifndef _MSC_VER\r
+#include <stdint.h>\r
+#endif\r
+\r
 #ifdef __cplusplus\r
 extern "C" {\r
 #endif\r
@@ -24,7 +30,7 @@ extern "C" {
 #endif\r
 \r
 #ifndef INT8\r
-#define INT8   char\r
+#define INT8   signed char\r
 #endif\r
 \r
 #ifndef UINT16\r
@@ -32,7 +38,7 @@ extern "C" {
 #endif\r
 \r
 #ifndef INT16\r
-#define INT16  short\r
+#define INT16  signed short\r
 #endif\r
 \r
 #ifndef UINT32\r
@@ -40,7 +46,11 @@ extern "C" {
 #endif\r
 \r
 #ifndef INT32\r
-#define INT32  int\r
+#define INT32  signed int\r
+#endif\r
+\r
+#ifndef FPTR\r
+#define FPTR   uintptr_t\r
 #endif\r
 \r
 /*************************************/\r
@@ -52,6 +62,7 @@ extern "C" {
 #define CZ80_FETCH_SFT                 (16 - CZ80_FETCH_BITS)\r
 #define CZ80_FETCH_BANK                        (1 << CZ80_FETCH_BITS)\r
 \r
+#define PICODRIVE_HACKS                1\r
 #define CZ80_LITTLE_ENDIAN             1\r
 #define CZ80_USE_JUMPTABLE             1\r
 #define CZ80_BIG_FLAGS_ARRAY   1\r
@@ -60,7 +71,7 @@ extern "C" {
 //#else\r
 #define CZ80_ENCRYPTED_ROM             0\r
 //#endif\r
-#define CZ80_EMULATE_R_EXACTLY 0\r
+#define CZ80_EMULATE_R_EXACTLY 1\r
 \r
 #define zR8(A)         (*CPU->pzR8[A])\r
 #define zR16(A)                (CPU->pzR16[A]->W)\r
@@ -221,7 +232,7 @@ typedef struct cz80_t
        union16 IX;\r
        union16 IY;\r
        union16 SP;\r
-       UINT32 PC;\r
+       UINT32 unusedPC;        /* left for binary compat */\r
 \r
        union16 BC2;\r
        union16 DE2;\r
@@ -241,11 +252,12 @@ typedef struct cz80_t
        INT32 ICount;\r
        INT32 ExtraCycles;\r
 \r
-       UINT32 BasePC;\r
-       UINT32 Fetch[CZ80_FETCH_BANK];\r
+       FPTR BasePC;\r
+       FPTR PC;\r
+       FPTR Fetch[CZ80_FETCH_BANK];\r
 #if CZ80_ENCRYPTED_ROM\r
-       INT32 OPBase;\r
-       INT32 OPFetch[CZ80_FETCH_BANK];\r
+       FPTR OPBase;\r
+       FPTR OPFetch[CZ80_FETCH_BANK];\r
 #endif\r
 \r
        UINT8 *pzR8[8];\r
@@ -283,7 +295,7 @@ void Cz80_Set_IRQ(cz80_struc *CPU, INT32 line, INT32 state);
 UINT32  Cz80_Get_Reg(cz80_struc *CPU, INT32 regnum);\r
 void Cz80_Set_Reg(cz80_struc *CPU, INT32 regnum, UINT32 value);\r
 \r
-void Cz80_Set_Fetch(cz80_struc *CPU, UINT32 low_adr, UINT32 high_adr, UINT32 fetch_adr);\r
+void Cz80_Set_Fetch(cz80_struc *CPU, UINT32 low_adr, UINT32 high_adr, FPTR fetch_adr);\r
 #if CZ80_ENCRYPTED_ROM\r
 void Cz80_Set_Encrypt_Range(cz80_struc *CPU, UINT32 low_adr, UINT32 high_adr, UINT32 decrypted_rom);\r
 #endif\r