本文へスキップ
PS5PCEM
動作ファームウェアと HLE

セーブデータ

マウントしたセーブスロットは書き込み可能な /savedata0 になります。タイトルは通常のファイル API を使い、次回の起動では、タイトルが公開しているプロダクトコードのもとで同じファイルを見つけます。

2026年10月10日 までのリポジトリノート

セーブの保存場所

ゲームのインストールは読み取り専用で、リムーバブルメディア上にあることもあり、パッチを当てると丸ごと置き換わります。セーブはそのすべてより長く残る必要があります。PS5PCEM は、タイトルが報告するプロダクトコードをキーにして、エミュレーターのホームの savedata/<titleId>/<slot>/ にスロットを保存します。同じゲームの 2 つのダンプはセーブを共有し、異なる 2 つのゲームは共有しません。

スロット名はゲストから来るもので、ディレクトリにする前に無害化します。区切り文字、ドライブのコロン、親ディレクトリへのリンクはアンダースコアになります。これらの文字を単に削ると、異なる 2 つの名前がひとつのディレクトリに重なってしまう可能性があります。そもそもディレクトリにできない名前は固定の名前にフォールバックします。セーブを失うことは、予測できる場所に置くことより悪いからです。

マウントと存在チェック

マウントはスロットを解決し、/savedata0 をそこに向けます。存在しないスロットを作成するのは、タイトルがそれを求めた場合だけです。タイトルが一度も書いていないセーブを調べると「存在しない」という結果が返り、タイトルが期待しているのもそれです。タイトルに同梱されたものはすべて読み取り専用のままで、書き込める場所はセーブのマウントです。

存在の問いには、ファイルを開くのではなくメタデータの経路から答えます。開くときにしか成功しないマウントでは存在チェックがすべて失敗し、Jets 'n' Guns 2 はそのせいで起動のたびにプロファイルを書き直していました。タイトルが書き込んだスロットの一覧にも答えます。マウントは、既存のセーブを開いたのか新たに作成したのかも報告します。ブロック形式のセーブ API は、sce_sdmemory の下にあるタイトルごとの別のデータブロックを使い、タイトルが予約したときに読み込み、同期を求めたときに書き込みます。

不完全なスロット

起動時の探索では、ファームウェアのメタデータか空のステージングファイルしか含まない中断されたスロットを隠します。Cat Quest III では、path.txt だけを含む設定のスロットが再現されました。タイトルはその後 Data.dat が見つからずに失敗し、起動時のフレームの後でずっと待ち続けていました。現在の探索はその不完全なスロットを飛ばして先に進みます。

ランチャーの「セーブデータ」ページは、別のライブラリタイルが書いたセーブも含め、ローカルのスロットをすべてタイトル ID ごとにまとめます。zig-out にある開発ビルドは、エミュレーターのホームをリポジトリのルートに解決します。パッケージ版のビルドは自分のディレクトリを使います。そのため、同じパッケージをコマンドラインから起動してもランチャーから起動しても、ひとつのセーブのルートを共有します。

実装済みのこと

  • タイトル ID をキーにした書き込み可能な /savedata0 のマウントと、無害化したスロット名。
  • 存在チェック、スロットの一覧、マウントがセーブを作成したかどうかの報告。
  • ブロック形式のセーブ API 用の、タイトルごとの sce_sdmemory のデータブロック。
  • 本物のセーブデータを含まない中断されたスロットの非表示。

まだ足りないこと

  • セーブはホストのディレクトリです。本体のセーブデータのダイアログとクラウド同期は表示しません。
  • タイトルが作成を求めなかったスロットは、存在しないと報告されます。
  • トロフィー、アクティビティ、そのほかのアカウントに紐づく記録は、このマウントの範囲外です。

関連するしくみ

これらのページについて

本文は PS5PCEM リポジトリのアーキテクチャノートと 2026 年 10 月のレポートに基づいています。個別のテストに合格したことは、新しいフレームレートや新しいクリアを意味しません。

すべての技術