core gfx, fix sprite problem in savestate load screen
authorkub <derkub@gmail.com>
Tue, 8 Feb 2022 22:05:00 +0000 (22:05 +0000)
committerkub <derkub@gmail.com>
Tue, 8 Feb 2022 22:05:00 +0000 (22:05 +0000)
pico/pico_int.h
pico/state.c
pico/videoport.c

index 49180fb..550cb5b 100644 (file)
@@ -905,7 +905,7 @@ int PicoVideoFIFOWrite(int count, int byte_p, unsigned sr_mask, unsigned sr_flag
 void PicoVideoInit(void);\r
 void PicoVideoSave(void);\r
 void PicoVideoLoad(void);\r
-void PicoVideoCacheSAT(void);\r
+void PicoVideoCacheSAT(int load);\r
 \r
 // misc.c\r
 PICO_INTERNAL_ASM void memcpy16bswap(unsigned short *dest, void *src, int count);\r
index 123b1ac..cd6d4de 100644 (file)
@@ -602,7 +602,7 @@ static int state_load_gfx(void *file)
   char buff[8];\r
 \r
   if (PicoIn.AHW & PAHW_32X)\r
-    to_find += 2;\r
+    to_find += 3;\r
 \r
   g_read_offs = 0;\r
   CHECKED_READ(8, buff);\r
@@ -629,16 +629,19 @@ static int state_load_gfx(void *file)
       case CHUNK_DRAM:\r
         if (Pico32xMem != NULL)\r
           CHECKED_READ_BUFF(Pico32xMem->dram);\r
+        found++;\r
         break;\r
 \r
       case CHUNK_32XPAL:\r
         if (Pico32xMem != NULL)\r
           CHECKED_READ_BUFF(Pico32xMem->pal);\r
+        found++;\r
         Pico32x.dirty_pal = 1;\r
         break;\r
 \r
       case CHUNK_32XSYS:\r
         CHECKED_READ_BUFF(Pico32x);\r
+        found++;\r
         break;\r
 #endif\r
       default:\r
@@ -712,7 +715,8 @@ int PicoStateLoadGfx(const char *fname)
   }\r
   areaClose(afile);\r
 \r
-  PicoVideoCacheSAT();\r
+  PicoVideoCacheSAT(1);\r
+  Pico.est.rendstatus = -1;\r
   return 0;\r
 }\r
 \r
@@ -771,6 +775,7 @@ void PicoTmpStateRestore(void *data)
   memcpy(VdpSATCache, t->satcache, sizeof(VdpSATCache));\r
   memcpy(&Pico.video, &t->video, sizeof(Pico.video));\r
   Pico.m.dirtyPal = 1;\r
+  PicoVideoCacheSAT(0);\r
 \r
 #ifndef NO_32X\r
   if (PicoIn.AHW & PAHW_32X) {\r
index 7f6ca9a..4f9cbf1 100644 (file)
@@ -1104,7 +1104,7 @@ unsigned char PicoVideoRead8HV_L(int is_from_z80)
   return d;\r
 }\r
 \r
-void PicoVideoCacheSAT(void)\r
+void PicoVideoCacheSAT(int load)\r
 {\r
   struct PicoVideo *pv = &Pico.video;\r
   int l;\r
@@ -1115,7 +1115,7 @@ void PicoVideoCacheSAT(void)
     SATaddr &= ~0x200, SATmask &= ~0x200; // H40, zero lowest SAT bit\r
 \r
   // rebuild SAT cache XXX wrong since cache and memory can differ\r
-  for (l = 0; l < 80; l++) {\r
+  for (l = 0; load && l < 80; l++) {\r
     ((u16 *)VdpSATCache)[l*2    ] = PicoMem.vram[(SATaddr>>1) + l*4    ];\r
     ((u16 *)VdpSATCache)[l*2 + 1] = PicoMem.vram[(SATaddr>>1) + l*4 + 1];\r
   }\r
@@ -1170,6 +1170,6 @@ void PicoVideoLoad(void)
   }\r
   if (vf->fifo_ql)\r
     pv->status |= SR_DMA;\r
-  PicoVideoCacheSAT();\r
+  PicoVideoCacheSAT(1);\r
 }\r
 // vim:shiftwidth=2:ts=2:expandtab\r