📓 memotty

muOS + PCSX ReARMed で PS1 のセーブデータ移行にハマった話(ドラクエ7・2枚組)

RG35XX H を muOS に載せ替えた際、以前タブレットの ePSXe で遊んでいたドラクエ7のセーブデータを移行しようとしたら、想像以上に長い戦いになった。

結果としては無事に復旧できたのだが、途中で何度も「正しいはずの手順で読み込めない」という状況に陥った。原因は一つではなく、複数の落とし穴が重なっていた。同じ構成でハマる人がいそうなので記録しておく。

環境 #

  • 本体: Anbernic RG35XX H
  • OS: muOS(SDカード1枚構成)
  • コア: PCSX ReARMed
  • 対象: ドラゴンクエストVII(PS1・2枚組)
  • 移行元: タブレットの ePSXe(メモリーカードは NAS にバックアップ済み)

前提知識: PS1 の 2枚組ソフトは .m3u で起動する #

まずこれが大前提。ディスクごとの ROM を個別に起動すると、RetroArch は 起動したファイル名を基準にメモリーカードを作る。つまり disc1 と disc2 でセーブが別々のファイルに分かれてしまう。

これを避けるため、.m3u プレイリストを作ってそちらを起動する。

ROMS/psx/Dragon Quest 7/
├── dq7.m3u
├── dq7-disk1.cue
├── dq7-disk1.bin
├── dq7-disk2.cue
└── dq7-disk2.bin

dq7.m3u の中身は相対パスを 1 行ずつ書くだけ。

dq7-disk1.cue
dq7-disk2.cue

これで両ディスクが dq7.srm という 1 つのメモリーカードを共有する。ディスクの切り替えは、プレイ中に MENU → Quick Menu → Disc Control から行う。実機でディスクを差し替えるのと同じ感覚。

起動は必ず .m3u から。 ディスク単体を開くと参照先が変わり、後述するトラブルの温床になる。

muOS のセーブデータ配置 #

SDカード1枚構成の場合、以下のようになっている。

種類パス
メモリーカードMUOS/save/file/<コア名>/
セーブステートMUOS/save/state/<コア名>/

PCSX ReARMed なら MUOS/save/file/PCSX-ReARMed/ の下に .srm が入る。

2枚挿し構成なら /mnt/sdcard/ 側になる。今回はOSと同じ位置にセーブもROMも配置しているので関係なし。

ハマりポイント #

1. save/statesave/file は別物 #

最初、MUOS/save/state/ にファイルがあるのを見て「移行できている」と思い込んでいた。これはセーブステートであって、ゲーム内のメモリーカードセーブではない。

ゲーム内のロード画面から読むデータは MUOS/save/file/.srm の方。ここを取り違えると延々とすれ違う。

2. .m3u で起動するとファイル名基準が変わる #

.m3u を導入すると、参照されるメモリーカードは dq7.srm(m3u と同名)になる。それ以前に dq7-disk1.srm として存在していたセーブは読まれなくなる。

移行や構成変更をしたときは、.srm の名前も起動するコンテンツに合わせてリネームする必要がある。

3. ゲーム起動中にファイルを差し替えても意味がない #

これが一番の時間泥棒だった。

エミュレーターはメモリ上にメモリーカードの内容を保持していて、終了時にファイルへ書き戻す。なので起動中に PC からファイルを差し替えても、終了した瞬間に上書きされて消える。

作業は必ず muOS の電源を落とし、SDカードを抜いた状態で行う。

自分は最初にこれをやってしまい、正常なファイルを空のカードで上書きしていた。

4. セーブステートの自動ロードが全てを台無しにする #

Auto Save StateLoad State Automatically が有効だと、終了時に自動でステートが作られ、次回起動時に問答無用でそこから再開される。

セーブステートにはメモリーカードの内容も丸ごと含まれる。 つまり「空のカードだった時点の状態」が毎回蘇るので、.srm をどれだけ正しく配置しても症状が変わらない。

厄介なのは、ステートファイルを削除しても設定が有効なままだと、次の起動→終了でまた再生成される点。設定を切ってから削除という順序でないと永久にループする。

5. 「Override active」で設定が保存できない #

設定を切って Save Current Configuration しようとしたら Not saving. Override active. と怒られた。

コア別・ゲーム別のオーバーライド設定が有効になっていて、そちらが優先されている状態。この場合は Quick Menu → Overrides から Save Core Overrides などで、オーバーライド側に保存する必要がある。

6. MemcardRex が .srm を開いてくれない #

セーブの中身を確認するのに MemcardRex は必須級のツールだが、ファイルダイアログのフィルタが .mcr .mcd .gme などに限定されていて .srm が候補に出てこない。「All supported」を選んでも .srm は含まれない。

PS1 のメモリーカードはどれも生の 128KB(131,072バイト)イメージなので、拡張子を .mcd に変えたコピーを作れば普通に開ける。ePSXe の .mcr も同様。

7. PlayStation のロゴの有無は判断材料にならない #

「ステートがロードされているかどうか」を判別するのに、起動時に PS のロゴが出るかどうかで切り分けようとした。これは誤りだった。

PS のロゴは BIOS が表示するもの。実 BIOS を置いていない(HLE BIOS で動いている)場合は、そもそもロゴが出ずにメーカーロゴから始まる。正常起動でもロゴは出ない。

8. コピー元が空だった #

最終的な原因はこれだった。

NAS からコピーして dq7.srm にリネームしたつもりのファイルが、MemcardRex で開いたら空だった。おそらくコピー操作の途中で失敗していたか、別のファイルを掴んでいた。

配置したあと、SDカード上の .srm を MemcardRex で開いて中身を確認する。 これをやっていれば、もっと早く原因に辿り着けた。

切り分けの決め手 #

途中で完全に袋小路に入ったが、以下の手順で一気に前進した。

  1. ゲーム内で新規に冒険の書を作ってセーブする
  2. 終了して MUOS/save/file/PCSX-ReARMed/ を確認する
  3. どのファイルの更新日時が変わったかを見る

これで「エミュレーターが実際にどのファイルを読み書きしているか」が事実として分かる。設定画面を追いかけるより早い。

自分の場合、このときカード2(pcsx-card2.mcd)だけが更新されていて、dq7.srm が生成されていないことが判明した。

エクスプローラーの更新日時は最強のデバッガという学び。128KB 固定なのでファイルサイズは判断材料にならないが、タイムスタンプは嘘をつかない。

最終的な手順 #

  1. muOS の電源を完全に落とし、SDカードを PC に挿す
  2. MUOS/save/file/PCSX-ReARMed/ をフォルダごと PC にバックアップ
  3. 移行元のメモリーカード(epsxe000.mcr など)を PC にコピー
  4. コピーを dq7.srm(= m3u と同名)にリネーム
  5. MemcardRex で開き、目的のセーブが入っていることを確認
  6. SDカードの既存 dq7.srm を退避し、4のファイルを配置
  7. SDカードを戻して起動、dq7.m3u から起動して確認

教訓 #

  • 作業は必ず電源を落とした状態で。 起動中の差し替えは無意味どころか破壊的
  • 置いたファイルの中身は毎回確認する。 「正しいファイルを置いたはず」が一番危ない
  • 更新日時で切り分ける。 推測を重ねるより事実を1つ取りに行く方が速い
  • セーブステートは設定を切ってから消す。 削除だけでは再生成される
  • バックアップは正義。 今回 NAS にメモリーカードのバックアップがなければ、20時間のプレイデータは完全に失われていた

復旧後は、ゲーム内で一度セーブし直して現行環境で .srm を書き直し、そのファイルを改めて NAS にバックアップしておいた。

ディスク単体を誤って起動しないよう、ROM 本体は . 始まりのサブフォルダに隠しておくと muOS の一覧に出なくなるので、事故防止になる。

Dragon Quest 7/
├── dq7.m3u
└── .disc/
    ├── dq7-disk1.cue
    ├── dq7-disk1.bin
    ├── dq7-disk2.cue
    └── dq7-disk2.bin

この場合、dq7.m3u の中身は .disc/dq7-disk1.cue のように相対パスを書き換える。