Finish migrating to new mem handling. Make carthw db external.
[picodrive.git] / pico / pico_int.h
index 8c72bba..cb12bc1 100644 (file)
@@ -255,18 +255,19 @@ struct PicoMisc
   char dirtyPal;               // 06 Is the palette dirty (1 - change @ this frame, 2 - some time before)\r
   unsigned char hardware;      // 07 Hardware value for country\r
   unsigned char pal;           // 08 1=PAL 0=NTSC\r
-  unsigned char sram_status;   // 09 SRAM status. See SRS_* below\r
+  unsigned char sram_reg;      // 09 SRAM reg. See SRR_* below\r
   unsigned short z80_bank68k;  // 0a\r
   unsigned short z80_lastaddr; // this is for Z80 faking\r
-  unsigned char  z80_fakeval;\r
+  unsigned char  pad0;\r
   unsigned char  z80_reset;    // z80 reset held\r
   unsigned char  padDelay[2];  // 10 gamepad phase time outs, so we count a delay\r
   unsigned short eeprom_addr;  // EEPROM address register\r
-  unsigned char  eeprom_cycle; // EEPROM SRAM cycle number\r
+  unsigned char  eeprom_cycle; // EEPROM cycle number\r
   unsigned char  eeprom_slave; // EEPROM slave word for X24C02 and better SRAMs\r
-  unsigned char prot_bytes[2]; // simple protection faking\r
+  unsigned char  eeprom_status;\r
+  unsigned char  pad1;\r
   unsigned short dma_xfers;    // 18\r
-  unsigned char pad[2];\r
+  unsigned char  eeprom_wb[2]; // EEPROM latch/write buffer\r
   unsigned int  frame_count;   // 1c for movies and idle det\r
 };\r
 \r
@@ -293,24 +294,26 @@ struct Pico
 };\r
 \r
 // sram\r
-#define SRS_MAPPED   (1 << 0)\r
-#define SRS_READONLY (1 << 1)\r
-#define SRS_EEPROM   (1 << 2)\r
-#define SRS_DETECTED (1 << 4)\r
+#define SRR_MAPPED   (1 << 0)\r
+#define SRR_READONLY (1 << 1)\r
+\r
+#define SRF_ENABLED  (1 << 0)\r
+#define SRF_EEPROM   (1 << 1)\r
 \r
 struct PicoSRAM\r
 {\r
   unsigned char *data;         // actual data\r
   unsigned int start;          // start address in 68k address space\r
   unsigned int end;\r
-  unsigned char unused1;       // 0c: unused\r
+  unsigned char flags;         // 0c: SRF_*\r
   unsigned char unused2;\r
   unsigned char changed;\r
-  unsigned char eeprom_type;    // eeprom type: 0: 7bit (24C01), 2: device with 2 addr words (X24C02+), 3: dev with 3 addr words\r
-  unsigned char eeprom_abits;  // eeprom access must be odd addr for: bit0 ~ cl, bit1 ~ out\r
+  unsigned char eeprom_type;    // eeprom type: 0: 7bit (24C01), 2: 2 addr words (X24C02+), 3: 3 addr words\r
+  unsigned char unused3;\r
   unsigned char eeprom_bit_cl; // bit number for cl\r
   unsigned char eeprom_bit_in;  // bit number for in\r
   unsigned char eeprom_bit_out; // bit number for out\r
+  unsigned int size;\r
 };\r
 \r
 // MCD\r
@@ -414,6 +417,7 @@ extern areaseek *areaSeek;
 extern areaclose *areaClose;\r
 \r
 // cart.c\r
+extern void (*PicoCartMemSetup)(void);\r
 extern void (*PicoCartUnloadHook)(void);\r
 \r
 // debug.c\r
@@ -441,10 +445,6 @@ void PicoDrawSetColorFormatMode4(int which);
 PICO_INTERNAL void PicoInitPc(unsigned int pc);\r
 PICO_INTERNAL unsigned int PicoCheckPc(unsigned int pc);\r
 PICO_INTERNAL void PicoMemSetup(void);\r
-PICO_INTERNAL void PicoMemResetHooks(void);\r
-extern unsigned int (*PicoRead16Hook)(unsigned int a, int realsize);\r
-extern void (*PicoWrite8Hook) (unsigned int a,unsigned int d,int realsize);\r
-extern void (*PicoWrite16Hook)(unsigned int a,unsigned int d,int realsize);\r
 unsigned int PicoRead8_io(unsigned int a);\r
 unsigned int PicoRead16_io(unsigned int a);\r
 void PicoWrite8_io(unsigned int a, unsigned int d);\r
@@ -537,14 +537,16 @@ PICO_INTERNAL_ASM unsigned int PicoVideoRead8(unsigned int a);
 extern int (*PicoDmaHook)(unsigned int source, int len, unsigned short **srcp, unsigned short **limitp);\r
 \r
 // misc.c\r
-PICO_INTERNAL void EEPROM_write(unsigned int d);\r
-PICO_INTERNAL void EEPROM_upd_pending(unsigned int a, unsigned int d);\r
-PICO_INTERNAL_ASM unsigned int EEPROM_read(void);\r
 PICO_INTERNAL_ASM void memcpy16(unsigned short *dest, unsigned short *src, int count);\r
 PICO_INTERNAL_ASM void memcpy16bswap(unsigned short *dest, void *src, int count);\r
 PICO_INTERNAL_ASM void memcpy32(int *dest, int *src, int count); // 32bit word count\r
 PICO_INTERNAL_ASM void memset32(int *dest, int c, int count);\r
 \r
+// eeprom.c\r
+void EEPROM_write8(unsigned int a, unsigned int d);\r
+void EEPROM_write16(unsigned int d);\r
+unsigned int EEPROM_read(void);\r
+\r
 // z80 functionality wrappers\r
 PICO_INTERNAL void z80_init(void);\r
 PICO_INTERNAL void z80_pack(unsigned char *data);\r
@@ -574,6 +576,12 @@ void PicoMemSetupMS(void);
 void PicoFrameMS(void);\r
 void PicoFrameDrawOnlyMS(void);\r
 \r
+/* avoid dependency on newer glibc */\r
+static __inline int isspace_(int c)\r
+{\r
+       return (0x09 <= c && c <= 0x0d) || c == ' ';\r
+}\r
+\r
 // emulation event logging\r
 #ifndef EL_LOGMASK\r
 #define EL_LOGMASK 0\r