Force-enable coprocessor delayed-sync while creating a save-state. #330
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When making a save state, all the system components are "fast forwarded" to a safe state that can be serialised. If delayedSync (called "Coprocessor Fast Sync" in the UI) is enabled, this works perfectly. If it is disabled, the accurate coprocessor synching interferes with the save-state creation, leading to the game crashing or (worse) the emulator freezing.
Star Fox is a good test case - repeatedly saving state and loading it will very quickly cause the game to run super-slowly, hang, or crash.
Ideally, somebody should dig into exactly what coprocessor syncing is doing that breaks the assumptions of the state-saving code, but given how complex the whole thing is, and given that it doesn't affect hardware emulation accuracy (real hardware can't save states at all), it's easiest to just force- enable delayedSync while a save-state is in progress.
Fix from the jgemu bsnes fork:
https://gitlab.com/jgemu/bsnes/-/commit/8b4d1b8ae5b360bbb31aad260da0a160b5a5a758