Per-game dedicated save ram with Satiator and Rings

Update: Second Build attempts to address some hangs that were hit by discord testers

I've been annoyed by juggling saves around because of games such as SimCity 2000 and The Tower using up 2/3s of my sram in one save so I submitted a PR to retrohead's custom Satiator-Rings that gives each game (delineated by the gameid number issued by SEGA) its own 32KB of save ram.

There is more detail in the PR itself but the basic operating procedure is:
  • Extract gameid from the IP.BIN residing in the ISO/BIN game image
    • Rings already extracted region metadata from the IP.BIN for its patching purposes, so I piggybacked off of that
  • Backup and clear the current SRAM state to a folder on SD card
  • Create a subfolder for the specific gameid
    • If one already exists, copy over BUP files from that folder into the SRAM
  • Create a tiny dummy save entry (52bytes but i suspect it could be 0 bytes and still work) called SAVRINGS
    • The COMMENT field of the SAVRINGS save has the gameid of the currently selected game
  • Run the game and wait for user to restart console and go back into Rings
  • At boot of Rings, look for the SAVRINGS save file in SRAM and if found copy (erasing previous contents) the saves over to the right gameid folder
  • Restore the backed up SRAM image from before so that the system can be used as normal by other menus or CDs
Per-game subfolders can be found on the SD card in the /satiator-saves/ folder. Over time expect to see a lot of gameid folders:

Warning: as the SRAM is only 32KB, if you add more than 32KB of BUPs into any of these folders, Rings will stop after copying the first 32KB worth of files. As i haven't touched much of the Rings UI, this build does not have a graceful GUI error.

I iterated on this idea a few times before landing on the marker save idea but there may be even more graceful ideas (possibly with a helper cartridge or in-game patching similar to Swiss on GameCube) that completely eliminate the reboot step.

I would really appreciate those with Satiators to help test out this functionality on their game library to make sure we can find any issues with it if Rings or others want to use this code or architecture. I tried to keep the code generic enough that it could be ported to MODE or other ODEs that let you write back to the storage medium.

I have published a private pre-release build here on github. (Updated to second build) Instructions on how to use it are available in the PR submission.

Make sure to enable the per-game save option in the options menu!

Special thanks goes to @retrohead and @slinga for their Rings and Save-Game-Copier projects that I have used heavily to build this convenience feature for myself.
Last edited: