32x: a hack for dealing with pwm inaccuracy
[picodrive.git] / pico / state.c
index 27c58a7..761b64c 100644 (file)
@@ -1,9 +1,10 @@
-// (c) Copyright 2004 Dave, All rights reserved.\r
-// (c) Copyright 2006-2010 notaz, All rights reserved.\r
-// Free for non-commercial use.\r
-\r
-// For commercial use, separate licencing terms must be obtained.\r
-\r
+/*\r
+ * PicoDrive\r
+ * (C) notaz, 2010\r
+ *\r
+ * This work is licensed under the terms of MAME license.\r
+ * See COPYING file in the top-level directory.\r
+ */\r
 \r
 #include "pico_int.h"\r
 #include <zlib/zlib.h>\r
@@ -173,6 +174,7 @@ typedef enum {
   CHUNK_SDRAM,\r
   CHUNK_DRAM,\r
   CHUNK_32XPAL,\r
+  CHUNK_32X_EVT,\r
   //\r
   CHUNK_DEFAULT_COUNT,\r
   CHUNK_CARTHW_ = CHUNK_CARTHW,  // defined in PicoInt\r
@@ -221,6 +223,7 @@ static const char * const chunk_names[] = {
   "SDRAM",\r
   "DRAM",\r
   "PAL",\r
+  "events",\r
 };\r
 \r
 static int write_chunk(chunk_name_e name, int len, void *data, void *file)\r
@@ -308,6 +311,7 @@ static int state_save(void *file)
       wram_2M_to_1M(Pico_mcd->word_ram2M);\r
   }\r
 \r
+#ifndef NO_32X\r
   if (PicoAHW & PAHW_32X)\r
   {\r
     unsigned char cpubuff[SH2_STATE_SIZE];\r
@@ -331,7 +335,12 @@ static int state_save(void *file)
     CHECKED_WRITE_BUFF(CHUNK_SDRAM,     Pico32xMem->sdram);\r
     CHECKED_WRITE_BUFF(CHUNK_DRAM,      Pico32xMem->dram);\r
     CHECKED_WRITE_BUFF(CHUNK_32XPAL,    Pico32xMem->pal);\r
+\r
+    memset(buff, 0, 0x40);\r
+    memcpy(buff, event_times, sizeof(event_times));\r
+    CHECKED_WRITE(CHUNK_32X_EVT, 0x40, buff);\r
   }\r
+#endif\r
 \r
   if (carthw_chunks != NULL)\r
   {\r
@@ -379,6 +388,7 @@ static int state_load(void *file)
   unsigned char buff_m68k[0x60], buff_s68k[0x60];\r
   unsigned char buff_z80[Z80_STATE_SIZE];\r
   unsigned char buff_sh2[SH2_STATE_SIZE];\r
+  unsigned char buff[0x40];\r
   unsigned char chunk;\r
   void *ym2612_regs;\r
   char header[8];\r
@@ -451,6 +461,7 @@ static int state_load(void *file)
       case CHUNK_MISC_CD:  CHECKED_READ_BUFF(Pico_mcd->m); break;\r
 \r
       // 32x stuff\r
+#ifndef NO_32X\r
       case CHUNK_MSH2:\r
         CHECKED_READ_BUFF(buff_sh2);\r
         sh2_unpack(&sh2s[0], buff_sh2);\r
@@ -473,6 +484,11 @@ static int state_load(void *file)
       case CHUNK_DRAM:        CHECKED_READ_BUFF(Pico32xMem->dram); break;\r
       case CHUNK_32XPAL:      CHECKED_READ_BUFF(Pico32xMem->pal); break;\r
 \r
+      case CHUNK_32X_EVT:\r
+        CHECKED_READ_BUFF(buff);\r
+        memcpy(event_times, buff, sizeof(event_times));\r
+        break;\r
+#endif\r
       default:\r
         if (carthw_chunks != NULL)\r
         {\r
@@ -546,6 +562,7 @@ static int state_load_gfx(void *file)
       case CHUNK_VSRAM: CHECKED_READ_BUFF(Pico.vsram); found++; break;\r
       case CHUNK_VIDEO: CHECKED_READ_BUFF(Pico.video); found++; break;\r
 \r
+#ifndef NO_32X\r
       case CHUNK_DRAM:\r
         if (Pico32xMem != NULL)\r
           CHECKED_READ_BUFF(Pico32xMem->dram);\r
@@ -560,7 +577,7 @@ static int state_load_gfx(void *file)
       case CHUNK_32XSYS:\r
         CHECKED_READ_BUFF(Pico32x);\r
         break;\r
-\r
+#endif\r
       default:\r
         areaSeek(file, len, SEEK_CUR);\r
         break;\r
@@ -652,11 +669,13 @@ void *PicoTmpStateSave(void)
   memcpy(t->vsram, Pico.vsram, sizeof(Pico.vsram));\r
   memcpy(&t->video, &Pico.video, sizeof(Pico.video));\r
 \r
+#ifndef NO_32X\r
   if (PicoAHW & PAHW_32X) {\r
     memcpy(&t->t32x.p32x, &Pico32x, sizeof(Pico32x));\r
     memcpy(t->t32x.dram, Pico32xMem->dram, sizeof(Pico32xMem->dram));\r
     memcpy(t->t32x.pal, Pico32xMem->pal, sizeof(Pico32xMem->pal));\r
   }\r
+#endif\r
 \r
   return t;\r
 }\r
@@ -673,12 +692,14 @@ void PicoTmpStateRestore(void *data)
   memcpy(&Pico.video, &t->video, sizeof(Pico.video));\r
   Pico.m.dirtyPal = 1;\r
 \r
+#ifndef NO_32X\r
   if (PicoAHW & PAHW_32X) {\r
     memcpy(&Pico32x, &t->t32x.p32x, sizeof(Pico32x));\r
     memcpy(Pico32xMem->dram, t->t32x.dram, sizeof(Pico32xMem->dram));\r
     memcpy(Pico32xMem->pal, t->t32x.pal, sizeof(Pico32xMem->pal));\r
     Pico32x.dirty_pal = 1;\r
   }\r
+#endif\r
 }\r
 \r
-// vim:shiftwidth=2:expandtab\r
+// vim:shiftwidth=2:ts=2:expandtab\r