mmm spot

好きで語ろうインターネッツ

レトロフリークを使ったバックアップロム作成について

こんばんは、amumaです。

昨年暮れ、私は運よくレトロフリークを購入することができました。

ampeanuts.hatenablog.com

様々な機能が付いており他の互換機とも一線を画す存在であるレトロフリークですが、特に「セーブデータの取り扱われ方」について少し気になったので検証とそのまとめの記事です。

 

※この記事ではゲームの開発者及び販売元の意図しない操作が行われています。この記事はそうした行為の教唆を目的としたものではありません。またこの記事に書かれている行為を行って何らかの影響、不利益が出ても、管理人は一切の責任を負うことはできません。予めご理解を頂いた上で閲覧ください。

 

 

始めに~セーブデータ書き出しの仕様について

まず前提知識として、レトロフリークでのセーブデータの扱い方について説明しておきます。

上に「レトロフリークは一線を画す存在だ」と書きましたが、その大きな理由はこの互換機が極めてエミュレータ的であると考えているからです。

 

f:id:amuma5:20180225041003j:plain

 

写真はレトロフリーク本体(右)とカートリッジアダプタ(左)です。ゲーム機のイメージからして左側が本体のように思う方が多いとは思いますが、機械の制御やゲームの演算処理を行っているのはあくまでも右側の小さい本体の中だけです。

アダプタの方はカートリッジ端子が付いているだけなので、ゲームソフトを吸い出してしまえば本体だけをテレビにつないで遊ぶことができます。

 

この本体にはAndroidをベースとしたOSが予めインストールされています。その上にインストールされているエミュレータでゲームは起動しています。(レトロフリークのシステム部分の話はあまり詳しくないので、何か疑問点があれば詳しい人に聞いてください。調べてる人はたくさんいます。)

基本的なシステムや考え方は従来からPCなどに存在していたエミュレータと変わりません。吸いだしたソフトの拡張子も「.nes」「.gba」とそのままのものが使われています。販売後から問題になっている、レトロフリークで吸い出したイメージデータの大量の違法アップロードはこれが原因です。*1

 

このように極めてエミュレータライクなレトロフリークでは、ゲームソフトを指して遊んでいてもデータのリアルタイムな同期は行われていません。

 

まずソフトを本体に挿すと、自動的にロムイメージの読み出しが始まります*2。それが終えると自動的に、セーブデータのみ吸出しが行われます。ここでロムイメージも吸い出しておけばソフトをアダプタに挿していなくても遊べるようになります。

 

ここで注意したいのは、この時点でセーブデータが吸い出されているという点です*3。仮にセーブデータを吸い出さなかったり本体メモリの中のsavデータを削除してロムイメージを起動した場合、セーブデータはない状態で始まります。

すなわち、「レトロフリークではセーブデータの参照はソフトからでなく本体(SDカード内)の".sav"データを参照している」という訳です。

サイバーガジェットが謳い文句にしている「電池交換をしなくてもセーブができる」はこういうことです。セーブデータの更新はあくまでsavデータを更新します。これならカートリッジの中にある、何十年も前のボタン電池SRAMを気にする必要はありません。

 

逆に言えば実機で遊ぶのが中心という場合には少し不便です。例えばポケモンを遊んでいた場合、レトロフリークでプレイしていつも通りゲーム内で「レポート」を書いて終了しても、カートリッジ内のセーブデータは更新されていません。実機に差し替えて起動してもレトロフリークでプレイする前の状態が保持されています。

その場合、レトロフリークの中から「本体からソフトへのセーブデータ書き出し」を行います。挿入されているカートリッジに本体内のsavデータを書き込みます。成功すれば、レトロフリークでセーブをしたところから実機でも遊ぶことができます。(当然ながらクイックセーブのデータは引き継がれません。)

 

セーブデータ書き出しの応用と検証

レトロフリークで遊ぶだけなら便利だけど、「実機でもレトロフリークでも遊びたい」という場合には意外と不便な「セーブデータ書き出し」

しかしこの機能、色々と応用することが可能です。

 

まず考えたのはソフトのバックアップでした。savデータとしてSDカードに吸い出すことが可能であれば予め重要なデータ、例えば育成済みのポケモンが眠っているデータなどをフラッシュメモリの寿命に備えてバックアップすることが可能です。

しかしこのケースにおいて、データのバックアップが取れてもロム自体がダメになっていることを考えると、新しい別のロムにバックアップしたデータを書きだすことができる必要があります。そこでその点に関して、セーブデータ書き出しを使って検証してみました。

 

使用したロムはポケモンのエメラルド。夢幻のチケット親データをバックアップすることが目的なので。

 

準備

・同タイトルソフト数本(ここではエメラルド。管理人は6本所持)

・非改造レトロフリーク(多分改造済みでも可能)

*レトロフリークの設定は

 *リージョン設定:自動

 *ゲーム終了時の状態から自動再開:オフ

 *接続されたカートリッジを自動起動:オフ

 *カートリッジ内セーブデータの自動読み込み:オフ

 *定期的にセーブデータをバックアップ:オフ

 *データ保存先:microSD

検証1_メモリ型番別

適当にエメラルドを二本用意。仮に一つをA、もう片方をBとします。ただしエメラルドBはあらかじめ実機からセーブデータを削除しておきました。

 

エメラルドAをレトロフリークに挿してロムイメージ(おそらく必要ないが一応)、セーブデータを手動で吸出す。

エメラルドBを挿してロムイメージの書き出しを行う。

 

結果:失敗

「正常に行われなかった」というポップアップ。Bはデータ消えたまま。

 

検証2_同一型番のメモリ

本来なら同じタイトルの時点で成功するはずだったのに検証1で失敗した理由はセーブデータの保存に使っているRAMメモリの型番が違うことにあると考えました。

 

先程と同じようにエメラルドを二本用意。片方をA、片方をBとします。ただしこのとき、AとB両方の基盤上で使われているメモリの型番が同じものを使用します。型番はMX"B064157G MX29L010TC-15A1 1H4773"

型番が被ってるのはこれしかありませんでした。MXってたしかIntel(MX社というメーカーらしいです?)

f:id:amuma5:20180225040959j:plain

エメラルドAをレトロフリークに挿してセーブデータを吸い出す。

エメラルドBを挿してロムイメージの書き出し。

 

結果:成功

f:id:amuma5:20180225041529j:plain

下画面に部屋映りこんでるのでモザイク。あとで気づいたけど左下に指写りこんでた...インスタ映え...

通常通り、書き込みが完了しました。原因はメモリの型番でした。

 

まとめ

ソフトの分解など少し高度な話(難しくはない)が必要ですが予想通り応用してバックアップソフトを作成することができました。今回はメモリの型番の問題上、目的の夢幻のチケット親ロムのバックアップはできませんでしたが、いずれできたらと思っています。今回はあくまで実験の為、B側のTNイツオのデータは削除しました。

 

またお気づきの方もいると思いますが、あえて書いておきます。

今回私はバックアップ目的でこの行為を行いましたが、やっていることはゲームソフトのクローン作製です。

親となるデータさえ手に入ってしまえば、いくらでも同じロム、データを複製することが可能です。可能性として宜しくない使い方をすることはいくらでもできると思います。

しかしゲームの楽しみ、特にポケモンなど他人との交流に楽しさがあるコンテンツにおいては、互いに気持ちよくプレイできる心掛けが第一に必要だと思っています。

レトロフリークの使用の是非はここでは判断しかねます。コードフリーク機能は言語道断ではあると思いますが、クロックアップなど実機などでも【一応】再現可能な機能があり、内部データを改ざんしている訳ではないという以上、オフ会などにおけるレトロフリーク問題は極めて難しい問題です。このような点については、あくまでもオフ会主催者の規約を守ることを第一にしてください。

 

GBAソフトの吸出しなどは、レトロフリークを使わない手段を取ろうとすると普通の人では技術的に手が出しにくい、高価であるというのが現状だと私は考えています。不安定なフラッシュメモリの制限から、少しでも多くの人が活路を見い出せればと今回の記事を公開しました。

問題があればすぐに取り下げます。

 

私はゲームが好きな人間の一人です。今回の記事が良い意味で見てもらえることを切に願います。

 

以上です。見て頂きありがとうございました。次もよろしくお願いします。

 

*1:ただしそのまま吸い出したロムイメージは暗号化されており、PCのエミュレータや他人のレトロフリークでは作動しないような設計になっています。複合化は基本的にできないようになっています。

*2:デフォルトでは自動吸出しはされないようになっています

*3:設定からセーブデータの自動吸出しをオフにすることは可能