core gfx, fix sprite problem in savestate load screen

This commit is contained in:
kub 2022-02-08 22:05:00 +00:00
parent f8395445e3
commit 4496577e40
3 changed files with 11 additions and 6 deletions

View file

@ -905,7 +905,7 @@ int PicoVideoFIFOWrite(int count, int byte_p, unsigned sr_mask, unsigned sr_flag
void PicoVideoInit(void); void PicoVideoInit(void);
void PicoVideoSave(void); void PicoVideoSave(void);
void PicoVideoLoad(void); void PicoVideoLoad(void);
void PicoVideoCacheSAT(void); void PicoVideoCacheSAT(int load);
// misc.c // misc.c
PICO_INTERNAL_ASM void memcpy16bswap(unsigned short *dest, void *src, int count); PICO_INTERNAL_ASM void memcpy16bswap(unsigned short *dest, void *src, int count);

View file

@ -602,7 +602,7 @@ static int state_load_gfx(void *file)
char buff[8]; char buff[8];
if (PicoIn.AHW & PAHW_32X) if (PicoIn.AHW & PAHW_32X)
to_find += 2; to_find += 3;
g_read_offs = 0; g_read_offs = 0;
CHECKED_READ(8, buff); CHECKED_READ(8, buff);
@ -629,16 +629,19 @@ static int state_load_gfx(void *file)
case CHUNK_DRAM: case CHUNK_DRAM:
if (Pico32xMem != NULL) if (Pico32xMem != NULL)
CHECKED_READ_BUFF(Pico32xMem->dram); CHECKED_READ_BUFF(Pico32xMem->dram);
found++;
break; break;
case CHUNK_32XPAL: case CHUNK_32XPAL:
if (Pico32xMem != NULL) if (Pico32xMem != NULL)
CHECKED_READ_BUFF(Pico32xMem->pal); CHECKED_READ_BUFF(Pico32xMem->pal);
found++;
Pico32x.dirty_pal = 1; Pico32x.dirty_pal = 1;
break; break;
case CHUNK_32XSYS: case CHUNK_32XSYS:
CHECKED_READ_BUFF(Pico32x); CHECKED_READ_BUFF(Pico32x);
found++;
break; break;
#endif #endif
default: default:
@ -712,7 +715,8 @@ int PicoStateLoadGfx(const char *fname)
} }
areaClose(afile); areaClose(afile);
PicoVideoCacheSAT(); PicoVideoCacheSAT(1);
Pico.est.rendstatus = -1;
return 0; return 0;
} }
@ -771,6 +775,7 @@ void PicoTmpStateRestore(void *data)
memcpy(VdpSATCache, t->satcache, sizeof(VdpSATCache)); memcpy(VdpSATCache, t->satcache, sizeof(VdpSATCache));
memcpy(&Pico.video, &t->video, sizeof(Pico.video)); memcpy(&Pico.video, &t->video, sizeof(Pico.video));
Pico.m.dirtyPal = 1; Pico.m.dirtyPal = 1;
PicoVideoCacheSAT(0);
#ifndef NO_32X #ifndef NO_32X
if (PicoIn.AHW & PAHW_32X) { if (PicoIn.AHW & PAHW_32X) {

View file

@ -1104,7 +1104,7 @@ unsigned char PicoVideoRead8HV_L(int is_from_z80)
return d; return d;
} }
void PicoVideoCacheSAT(void) void PicoVideoCacheSAT(int load)
{ {
struct PicoVideo *pv = &Pico.video; struct PicoVideo *pv = &Pico.video;
int l; int l;
@ -1115,7 +1115,7 @@ void PicoVideoCacheSAT(void)
SATaddr &= ~0x200, SATmask &= ~0x200; // H40, zero lowest SAT bit SATaddr &= ~0x200, SATmask &= ~0x200; // H40, zero lowest SAT bit
// rebuild SAT cache XXX wrong since cache and memory can differ // rebuild SAT cache XXX wrong since cache and memory can differ
for (l = 0; l < 80; l++) { for (l = 0; load && l < 80; l++) {
((u16 *)VdpSATCache)[l*2 ] = PicoMem.vram[(SATaddr>>1) + l*4 ]; ((u16 *)VdpSATCache)[l*2 ] = PicoMem.vram[(SATaddr>>1) + l*4 ];
((u16 *)VdpSATCache)[l*2 + 1] = PicoMem.vram[(SATaddr>>1) + l*4 + 1]; ((u16 *)VdpSATCache)[l*2 + 1] = PicoMem.vram[(SATaddr>>1) + l*4 + 1];
} }
@ -1170,6 +1170,6 @@ void PicoVideoLoad(void)
} }
if (vf->fifo_ql) if (vf->fifo_ql)
pv->status |= SR_DMA; pv->status |= SR_DMA;
PicoVideoCacheSAT(); PicoVideoCacheSAT(1);
} }
// vim:shiftwidth=2:ts=2:expandtab // vim:shiftwidth=2:ts=2:expandtab