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.bindq7.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/state と save/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 State と Load 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 で開いて中身を確認する。 これをやっていれば、もっと早く原因に辿り着けた。
切り分けの決め手 #
途中で完全に袋小路に入ったが、以下の手順で一気に前進した。
- ゲーム内で新規に冒険の書を作ってセーブする
- 終了して
MUOS/save/file/PCSX-ReARMed/を確認する - どのファイルの更新日時が変わったかを見る
これで「エミュレーターが実際にどのファイルを読み書きしているか」が事実として分かる。設定画面を追いかけるより早い。
自分の場合、このときカード2(pcsx-card2.mcd)だけが更新されていて、dq7.srm が生成されていないことが判明した。
エクスプローラーの更新日時は最強のデバッガという学び。128KB 固定なのでファイルサイズは判断材料にならないが、タイムスタンプは嘘をつかない。
最終的な手順 #
- muOS の電源を完全に落とし、SDカードを PC に挿す
MUOS/save/file/PCSX-ReARMed/をフォルダごと PC にバックアップ- 移行元のメモリーカード(
epsxe000.mcrなど)を PC にコピー - コピーを
dq7.srm(= m3u と同名)にリネーム - MemcardRex で開き、目的のセーブが入っていることを確認
- SDカードの既存
dq7.srmを退避し、4のファイルを配置 - 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 のように相対パスを書き換える。