メガCDのゲーム(シミュレーションやロールプレイングゲーム)を遊ぶ際、セーブデータは内蔵バックアップRAMに保存できますが、
容量が8KBしかなく、本格的に遊ぶことを考えると外付けの「バックアップRAMカートリッジ」を利用する必要が出てきます。
1Mビットと十分な容量がある反面、電池切れや操作ミス等でデータを消失させてしまう危険もあり、
PCにデータの保存と書き戻しができたらいいなと思っていました。
前回、Sega CD Transferに対応したこともあり、
何とか機能拡張できないかなと考えていたところ、なんと独力でSega CD Transferを改造した方を発見しました。
○バックアップRAMカートリッジを使ってメガCDのBIOSを吸い出し(scrap_aさん)
しかもバックアップRAMカートリッジを利用することでハードウェアの自作や改造なしでメガCDのBIOS読出しを行うという、
新たな手法?まで確立されています。これは色々話を聞かねば!と言うことで早速scrap_aさんとメッセージのやり取りをさせて頂きました。
(その節は、ありがとうございました。)
その際に得られた貴重なノウハウを元にSega CD TransferにバックアップRAMカートリッジを読み書きする機能を追加してみました。
例によってArduinoを利用した読書きになりますが、ダンプ(読出し)に関してはSega CD Transfer互換動作なので既存のdump.exeを利用することが可能です。
カートリッジへの書き込みも互換動作にしたかったのですが、transfer.exeは64KBまでしか書き込めない仕様と判り、
現時点では残念ながら利用はあきらめざるを得ませんでした。とは言え、実機のセーブデータをPCに保存できるだけでもエミュレーターで利用したりと結構なメリットはあるかと思います。
scrap_aさんと同様、Sega CD Transferのページにある資料とソースコードを参考に開発しました。
ビルド環境についてはscrap_aさんの記事にも記載がありますが、Charles Doty氏が作成したsega-asmと言うツールのようです。WEBで探したところ、Githubに実行ファイル一式が保存されているのを
見つけ利用させて頂きました。
DOS用のツールなのでDOSBox環境で実行ができます。
DOSBoxは派生したものが多数存在しますが、
中でも東芝DOS/V、J-3100環境に標準で対応したDOSVAXJ3が日本語環境を容易に構築できるのでお勧めです。(J-3100使っていた人は感動モノです)
作成中は、ビルドしたバイナリをエミュレーターでデバッグしたり、実機で全然動かなかったり(トホホ・・)と試行錯誤で何とか完成にこぎ着けました。
助言をいただいたscrap_aさんはじめ、バックアップRAMカートリッジのアクセス方法をご教示いただいた5chのテラドライブスレの方、素晴らしいツールを公開していただいている方々、皆さんありがとうございます。
今回開発した実行バイナリは下記となります。
○Sega Loader追加ファイル(zip)
Sega Loader追加ファイル
○ファイル説明
RAM_DUMP.BIN --- ダンプ(読出し)処理。本家のdump.exeに対応します。
RAM_WRTE.BIN --- ライター(書き込み)処理。後述のArduinoスケッチが必要です。
RAMWTEST.BIN --- 書き込みテスト処理。デバッグ用。
RamRead.asm --- ソースコード(RAM_DUMP.BIN用)
RamWrite.asm --- ソースコード(RAM_WRTE.BIN用)
RamWTest.asm --- ソースコード(RAMWTEST.BIN用)
RamComm.asm --- ソースコード(共通処理)
as.bat --- ビルド用バッチファイル。DOSBox上で実行できます。
基本的にはscrap_aさんのやり方を参考にSEGA Loader用CD-Rの作成を行います。
(1)comcable11ConvJ.isoの作成
まずここからからcomcable11.zipをダウンロードする。
⇒解凍するとcomcable11.isoが得られます。
次にこちらからConvSCD 1.10.zipをダウンロードする。
⇒解凍するとconvscd110.exeが得られます。
上記2つのファイルを同じフォルダに入れてconvscd110.exeを実行。
⇒ファイル名を聞いてくるので comcable11.isoを入力して[Enter]を押す。
リージョン選択メッセージが表示されるので「3」を入力。
⇒comcable11ConvJ.iso が出力される
実行時の画面とコマンド入力(赤枠)例です。
(2)「RAM_DUMP.BIN」「RAM_WRTE.BIN」をダウンロードする。
まず、Sega Loader追加ファイル(自作)をダウンロードして解凍します。
⇒「RAM_DUMP.BIN」と「RAM_WRTE.BIN」が出てきます。
(3)「RAM_DUMP.BIN」「RAM_WRTE.BIN」をcomcable11ConvJ.isoに追加する。
WinISO標準版6を利用しました。起動後「ファイルを開く」にて「comcable11ConvJ.iso」を指定。
後は「RAM_DUMP.BIN」と「RAM_WRTE.BIN」をドラッグ&ドロップで追加して「保存」を実行するだけです。
(4)ISOファイルをCD-Rに書き込む
ImgBurn v2.5.8.0を利用しました。起動後の画面で「write image file to disc」を選び「comcable11ConvJ.iso」を指定すれば後はデフォルト設定のままでOKでした。
これでCD-Rは完成です。
○基本方針
(1)Pro MicroとホストPCとの通信はUSB Serial(UART)経由でXMODEMを利用。
(2)Pin10にS/Wを設けてダンパー動作/書き込み動作の切り替えを行う。
(3)ダンパー動作は、既存のSega CD Transfer互換動作とする。
(4)ライター(書き込み)動作はなるべくシンプルに。
可能な限り、本家の操作に似せるよう心がけました。
○配線図
ダンパー/ライターの配線図です。
Pin10とGND間に動作切替スイッチを設けた以外は以前の回路のままです。
○部品一覧
(1)Arduino Pro Micro互換モジュール
(2)ブレッドボード
(3)D-SUB 9P(メス)ソケット
(4)静音タクトスイッチ(6個入)
(5)1回路2接点スライドスイッチ(10個入)
後は線材少々と、ハンダこてやニッパ等の道具類です。
こんな感じで切り替えスイッチを追加しています。Pin10-GND間がショート(スイッチON)するとWriterになり、オープン(OFF)だとダンパーになります。
切り替えスイッチを変更した後は、下の画像のようにリセットを押してデバイスを再起動する必要があります。
○利用スケッチ(ダンパー/ライター共通版)
Tera TermのXMODEM通信機能でバイナリファイルを直接転送できます。
スケッチファイルのダウンロードやコピーなどの利用はこちらからどうぞ)
○スケッチの書き込み/動作確認
Arduino IDEで「ファイル」→「新規ファイル」で新規スケッチを開いて、上記のスケッチを全て貼り付けます。
マイコンが認識していることを確認したら、「マイコンボードに書き込む」をクリックしてコンパイル・書き込みを実行します。
バックアップRAMカートリッジの読出し方法と書き込み方法を説明します。
基本的に読出しは、Sega Loader側で起動するバイナリがRAM_DUMP.BINに変わる以外は、BIOSや他のカートリッジの読出しと同じ操作なのでDump.exeを使っている人を含め難しいことはない認識です。
Pro Micro版におけるTeraTermの設定や使い方については前回のXMODEM版の記事に詳細を記載してますので見て頂けるようお願いします。
(1)まず、メガCDにバックアップRAMカートリッジを装着し、今回作成したSega Loader(改)のCD-Rを入れて実行します。
(2)自作のダンパーをメガCDの2Pポートに接続。USB経由でホストPCと接続します。この時、スイッチが「DUMPER」側になっている事を確認します。
(3)ホストPC側でTera Termを起動して、通信設定をします。
通信速度は115200BPS。Portはダンパーを接続すると新たに追加されるポートを指定します。
「Serial port..」の設定が完了するとTera Termコンソールにメッセージが表示されます。(Dumper表示)
本家のdump.exeを使う場合はホストPC側でdump.exeを起動します。
(4)メガCD側からSega Loaderで「RAM_DUMP.BIN」を選択してSTARTボタンを押下すると、バックアップRAMのダンプが開始します。
ホストPC側でファイル保存が終了すると完了メッセージを表示して処理を終了します。
(5)ホストPC側のコンソールにダンプサイズとXMODEM受信を促すメッセージ
「Please start receiving XMODEM protocol」が表示されるので「File」⇒「Transfer」⇒「XMODEM」⇒「Recieve..」を選択。ファイル名(※)を入力して「保存」をクリックします。
(※ファイル拡張子名を「*.crm」にするとKEGA Fusionで利用できて便利です)
(6)ダンプが終了すると「Dump data send finished.」が表示され、次回の受信待ちに遷移します。
(1)メガCDにバックアップRAMカートリッジを装着し、今回作成したSega Loader(改)のCD-Rを入れて実行します。
Sega Loaderの画面まで表示したら、上下ボタンでRAM_WRTE.BINにカーソルを当てておきます。(STARTはまだ押さない)
(2)自作のダンパーをメガCDの2Pポートに接続。USB経由でホストPCと接続します。この時、スイッチが「WRITER」側になっている事を確認します。
(3)ホストPC側でTera Termを起動して、通信設定をします。
通信速度は115200BPS。Portはダンパーを接続すると新たに追加されるポートを指定します。
「Serial port..」の設定が完了するとTera Termコンソールにメッセージが表示されます。(Writer表示)
(4)ホストPC側のコンソールにXMODEM送信を促すメッセージ「Please start send file with XMODEM protocol」が表示されているので「File」⇒「Transfer」⇒「XMODEM」⇒「Send..」を選択。
書き込みたいファイルを選択して「開く」をクリックします。
するとファイル送信状態で待機になります。
(5)メガCD側からSega Loaderで「RAM_WRTE.BIN」を選択してSTARTボタンを押下すると、バックアップRAMへの書き込みが開始します。
ホストPC側のファイル送信が終了すると完了メッセージを表示して処理を終了します。
(6)ホストPC側のXMODEM送信が実行され、送信完了メッセージが表示されたら書き込み終了です。
バックアップRAMカートリッジのダンプと書き戻しができるようになり、さっそく「アークス I-Ⅱ-Ⅲ」で実機のデータをエミュレータで読み込んで比較してみました。
○実機(アークス I-Ⅱ-Ⅲ)
それぞれ「option」画面、ロード画面、ゲーム中の宿屋・・
○KEGA Fusion 3.64(アークス I-Ⅱ-Ⅲ)
同じく「option」画面、ロード画面、ゲーム中の宿屋です。
実機は2Mビットに拡張したカートリッジなので「option」画面の空き容量が違いますが、
その他はばっちり一致しています。(ファイルサイズが一致しないので内蔵RAM経由で1Mカセットに移してからダンプしました)
他にも「夢見館」「天下布武」等も比較してみましたが、特に大きな問題もなく実機とエミュレーター間でデータのやり取りが可能でした。
これで、出先ではエミュレーターで息抜きがてら遊んで、家では実機にプレイを引き継いだりできるようになり
個人的に非常に満足度が高い結果になっています。
でもほんと苦労したなぁ・・
CD-Rもたくさん無駄にしましたし・・
次はPCエンジンミニでしょうか・・ (買ってから部屋に積んだままですが)