libretro, improve 32x save/load for run-ahead
authorkub <derkub@gmail.com>
Mon, 3 Jan 2022 22:36:44 +0000 (23:36 +0100)
committerkub <derkub@gmail.com>
Mon, 3 Jan 2022 22:36:58 +0000 (23:36 +0100)
pico/state.c
platform/libretro/libretro.c

index 307e5d6..f1a67fe 100644 (file)
@@ -347,6 +347,7 @@ static int state_save(void *file)
       CHECKED_WRITE(chwc->chunk, chwc->size, chwc->ptr);\r
   }\r
 \r
+  CHECKED_WRITE(0, 0, NULL);\r
   retval = 0;\r
 \r
 out:\r
@@ -540,6 +541,8 @@ static int state_load(void *file)
         break;\r
 #endif\r
       default:\r
+        if (len|chunk == 0)\r
+           goto readend;\r
         if (carthw_chunks != NULL)\r
         {\r
           carthw_state_chunk *chwc;\r
index 0af186b..8aadedf 100644 (file)
@@ -872,9 +872,14 @@ int state_fseek(void *file, long offset, int whence)
 size_t retro_serialize_size(void)
 {
    struct savestate_state state = { 0, };
+   unsigned AHW = PicoIn.AHW;
    int ret;
 
+   /* we need the max possible size here, so include 32X for MD and MCD */
+   if (!(AHW & (PAHW_SMS|PAHW_PICO|PAHW_SVP)))
+      PicoIn.AHW |= PAHW_32X;
    ret = PicoStateFP(&state, 1, NULL, state_skip, NULL, state_fseek);
+   PicoIn.AHW = AHW;
    if (ret != 0)
       return 0;