mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
a44fb12575
A savestate is whole-machine state. One taken on disc 2 and restored while disc 1 is mounted resumes a guest that still believes it is reading disc 2, and the slot list gives no hint: every disc of a set shares one entry_pc, and entry_pc is the key the slot filenames already use. So the same slot number meant a different machine on every disc, silently. Savestates were already isolated per BIOS, as a directory. The disc joins that as a FILENAME token inside it: <saves>/<bios>/state_<entry>_disc<N>_slot<NN>.pst The BIOS stays a directory because a state is invalid across BIOS images whatever disc it came from. The disc only has to not collide within one, and a token does that without another level to browse, back up and migrate. An empty token leaves the historical name byte-for-byte, so single-disc titles keep every existing state -- the scope is set only when the roster has more than one disc. States saved before this predate the naming and are not listed. They are left alone rather than migrated: nothing in a .pst says which disc it was taken on, so placing them would be a guess, and guessing wrong reintroduces exactly the mix-up this prevents. Startup names them and the directory so they can be renamed deliberately. Verified: slot 1 saved on disc 2 and on disc 3 produced disc2/disc3 files side by side with no collision; booting disc 1 and loading slot 1 rejected with "missing state_800110C0_disc1_slot01.pst" rather than restoring another disc's machine; the pre-existing untagged slot 0 was untouched throughout. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0194TYJAqgyG9a9PJe9uUcgQ