libretro, improve 32x save/load for run-ahead

This commit is contained in:
kub 2022-01-03 23:36:44 +01:00
parent b72662e224
commit 92f7a430ca
2 changed files with 8 additions and 0 deletions

View file

@ -347,6 +347,7 @@ static int state_save(void *file)
CHECKED_WRITE(chwc->chunk, chwc->size, chwc->ptr); CHECKED_WRITE(chwc->chunk, chwc->size, chwc->ptr);
} }
CHECKED_WRITE(0, 0, NULL);
retval = 0; retval = 0;
out: out:
@ -540,6 +541,8 @@ static int state_load(void *file)
break; break;
#endif #endif
default: default:
if (len|chunk == 0)
goto readend;
if (carthw_chunks != NULL) if (carthw_chunks != NULL)
{ {
carthw_state_chunk *chwc; carthw_state_chunk *chwc;

View file

@ -872,9 +872,14 @@ int state_fseek(void *file, long offset, int whence)
size_t retro_serialize_size(void) size_t retro_serialize_size(void)
{ {
struct savestate_state state = { 0, }; struct savestate_state state = { 0, };
unsigned AHW = PicoIn.AHW;
int ret; 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); ret = PicoStateFP(&state, 1, NULL, state_skip, NULL, state_fseek);
PicoIn.AHW = AHW;
if (ret != 0) if (ret != 0)
return 0; return 0;