Skip to content
PS5PCEM
WorkingFirmware and HLE

Savedata

A mounted save slot becomes a writable /savedata0. The title uses the ordinary file API, and the next launch finds the same files under the product code the title publishes.

Repository notes through October 10, 2026

Where a save lives

The game install is read-only, can sit on removable media, and is replaced wholesale when it is patched. A save has to outlive all three. PS5PCEM stores slots at savedata/<titleId>/<slot>/ under the emulator home, keyed by the product code the title reports. Two dumps of the same game share saves. Two different games do not.

The slot name comes from the guest and is sanitized before it becomes a directory. Separators, the drive colon and parent-directory links become underscores. Dropping those characters would let two different names collapse onto one directory. A name that cannot be a directory at all falls back to a fixed name, because losing the save is worse than placing it somewhere predictable.

Mounting and existence checks

A mount resolves the slot and points /savedata0 at it. Creating a missing slot happens only when the title asked for one. A probe for a save the title never wrote gets a missing result, which is what the title expects. Everything shipped with the title stays read-only. The save mount is the writable place.

Existence is answered from the metadata path, not by opening the file. A mount that only succeeded at open time made every existence check fail, and Jets 'n' Guns 2 rewrote its profile on every launch because of that. Listing the slots a title has written is answered too. The mount also reports whether it opened an existing save or created a new one. The block-shaped save API uses a separate per-title blob under sce_sdmemory, loaded when the title reserves it and written when the title asks for a sync.

Incomplete slots

Startup discovery hides interrupted slots that contain only firmware metadata or empty staging files. Cat Quest III had a reproduced path.txt-only settings slot. The title then failed on a missing Data.dat and waited forever after its startup frame. The search now skips that incomplete slot and continues.

The launcher groups every local slot by title ID on the Saves page, including saves written by a different library tile. A development build under zig-out resolves the emulator home to the repository root. A packaged build uses its own directory. Command-line and launcher starts of the same package therefore share one save root.

What is implemented

  • Writable /savedata0 mounts keyed by title ID, with sanitized slot names.
  • Existence checks, slot listing, and a report of whether the mount created the save.
  • A per-title sce_sdmemory blob for the block-shaped save API.
  • Hiding of interrupted slots that contain no real save payload.

What is still missing

  • Saves are host directories. The console's save-data dialog and cloud sync are not presented.
  • A slot the title did not ask to create is reported missing.
  • Trophy, activity and other account-backed records are outside this mount.

Related mechanisms

What these pages are

The text follows the architecture notes and the October 2026 reports in the PS5PCEM repository. A focused test passing is not a new frame rate and not a new playthrough.

All technologies