コナミアンティークス MSXコレクションからROMイメージを取り出す方法メモ
ゲームのCDを開くと
ゲーム名.BIN というファイルがありますが、これはlzssかlz77系列で圧縮されたファイルのようです。
(この圧縮アルゴリズムは1970年代から利用され続けており、見た目の特徴があります。)
検索してみた感じ、特に解凍ツールなどは無く、自作でもしようかと思ったのですが、
自分の技能だと(ハッシュ構造体サイズ等、それぞれ独自に実装してあるだろう箇所を推測して)解凍ツールを作ることが(めんどくさくて)出来ず、別の力業に頼る方法で試してみます。
Playstation版向けの「力業で取り出す方法」は解説がありましたが、セガサターン版は見つからなかったので、メモしておきます。
使用するもの
BIOS不要のセガサターンエミュレータ『SSF』と
『cep』というツールを使います。
SSFのメニューバーにあるAboutを押すと出てくるこれ。
この「cep」ってなんだろうと思ったら、
SSF実行時にメモリ参照&書き換え出来るツールらしい。
https://pcgamer-12.com/archives/2425
こちらのサイトを参考にcepをダウンロードし、
同梱されているAPPLIST.TXTを開き、
---------- SegaSaturn
SSF Preview Ver R15 | SSF.EXE | 02078360 | $00100000
SSF Preview Ver R15 | SSF.EXE | 06098360 | $00100000
を追加して保存します。
こんな感じ
ここまで下準備。
(追記)
SSFの設定を変更したり何度か起動したりしてると、
cep用のアドレスが変わることがあります。
Editタブが全部00で埋まったまま変化しないとか
出力ファイルが全部00であるとか、
おかしいと思ったら、
SFFのメニューバーからAbout(A)→cepを選択。
cep用アドレスを確認してcepの設定を修正してみてください。
例)06098360 → 06C28360 に変わっていた。
SSFを実行して実行中のサターンのメモリからROMを取り出す
① SSFを起動して「コナミアンティークス MSXコレクション ウルトラパック」を動かします。
②cepを起動して「Process」タブで
「SSF Preview Ver R15 | SSF.EXE | 06098360 | $00100000」を選びます。
(アドレスの上位が「06*****」のほう)
ここまでが準備。以下、繰り返し。
③★ SSFで動いてるコナミアンティークスで、ROMを吸い出したいMSXゲームを起動させます。
④★ cepの「Search」タブで、「Searchボタン」→「Clearボタン」
(※初回は「Seachボタン」が使えないので最初に「Clearボタン」を押してから、「Searchボタン」→「Clearボタン」の順に押す)
(※サーチをすることでメモリの内容がcep側で取得できたので
一旦検索絞り込み結果を消して、メモリ全体を扱う。)
⑤★ cepの「Edit」タブで、「Saveボタン」を押し、メモリの内容をファイル名を付けて保存します。
⑥★ 保存したメモリデータファイルをバイナリエディタで開きます。
「SSF Preview Ver R15」の場合、アドレス00A0000からがROMイメージです。
(MSXのゲームのロムは基本的に文字「AB」から始まります。)
あとは、ここからゲームに合わせたサイズのROMデータを切り出して、ROMファイルとして名前をつけて保存すれば、取り出し完了です。
例えば
①$00000~$9FFFFを削除。
②ロムサイズより後ろを削除。
③残るのはロムイメージ部分になるのでこれを保存。
ROMサイズはアドレスにすると
16kBtye : $4000
1MBit = 128KByte : $20000
になります。
取り出して動かしてみた結果リストがこちら
コナミアンティークス MSXコレクション ウルトラパック
ROM吸出し結果
・動いたものは〇
・問題があったり動かないものは×■ vol.1(ページ1)
〇 コナミのボクシング : BOXING.ROM (32KB)
〇 コナミのピンポン : PINGPONG.ROM (16KB)
〇 ハイパースポーツ2 : HSPORTS2.ROM (16KB)
〇 モピレンジャー : MPRANGER.ROM (16KB)
〇 けっきょく南極大冒険 : ANTADV.ROM (16KB)
〇 イー・アル・カンフー : KUNGFU.ROM (16KB)
〇 ロードファイター : ROAD.ROM (16KB)
〇 スカイジャガー : JAGUAR.ROM (16KB)
〇 グラディウス : GRADIUS.ROM (128KB(1MBit))
〇 ゴーファーの野望 : GOFER.ROM (256KB(2MBit))■ vol.2(ページ2)
〇 コナミのゴルフ : GOLF.ROM (16KB)
〇 コナミのビリヤード : BILLIARD.ROM (8KB)
〇 ハイパースポーツ3 : HSPORTS3.ROM (32KB)
× わんぱくアスレチック : ATHLETIC.ROM (16KB)
× マジカルツリー : TREE.ROM (16KB)
〇 イーガー皇帝の逆襲 : KUNGFU2.ROM (32KB)
〇 魔城伝説 : KNIGHT.ROM (32KB)
× スーパーコブラ : COBRA.ROM (16KB)
× ツインビー : TWINBEE.ROM (32KB)
〇 グラディウス2 : GRADIUS.ROM (128KB(1MBit))■ vol.3(ページ3)
× コナミのテニス : TENNIS.ROM (16KB)
〇 コナミのサッカー : SOCCER.ROM (32KB)
× コナミラリー : HRALLY.ROM (16KB)
× ぽんぽこパン : BAKERY.ROM (16KB)
× ピポルス : PIPPOLS.ROM (16KB)
× 王家の谷 : KVALLEY.ROM (16KB)
〇 夢大陸アドベンチャー : PENGUIN.ROM (128KB(1MBit))
× タイムパイロット : TPILOT.ROM (16KB)
× パロディウス : PARODIUS.ROM (128KB(1MBit))
× 沙羅曼蛇 : SALAMAND.ROM (128KB(1MBit))
(※ 2020/04/03 ツインビーもゲームプレイできないのでバツにしました)
ROM吸い出しても動かないものは、
vol.3(ページ3)が特に多いですね。
動かない物について実カートリッジを持っているものと比較検証したところ、
「アンティークス版エミュレータ向けに特殊機能を呼ぶコード」
が、実機だと動かない様子。
(例えば描画の一部を乗っ取って外部から操作しているとか、ROMイメージ以外のコードが必要だとか。)
該当箇所を逆アセンブルしてみると、
VDPアクセスコードが一部消されているために表示されなかったり進行停止したり。
(ゲームのCDROMには、???.BINの他に、
書き換えVRAMデータ????.CHTというファイルが一緒に入ってますね。)
ちなみに、パロディウスは手持ちロムとほとんど別物で、
純粋にアドレスと値が一致する箇所がほとんどありませんでした。
バージョン違いがあるのかもしれませんね。
→ ダンプ取り出しに失敗してただけでした。違いは一部。(画面初期化や描画の一部)
表示変更はそのままに動かない処理だけ元に戻すパッチとか作れたらいいのかな?
何故ROM吸出しを試したのかといえば、エミュレート精度が悪く、
音も動作も微妙なので、ちゃんとしたエミュレートで動作させたい為。
グラディウスのようにウェイト入れない系のゲームでは、酷いことになるので重要。
特に、MSX版グラディウスは遊ぶ手段が少ないですし。
(個人的にはMSX版グラディウス2よりもMSX版1グラディウスのほうが好きかも。)
ROMイメージを取り出せれば、
MSXエミュレータ+C-BIOS(ライセンスフリー)で快適に遊べます。
尚、吸出しを行う事や吸い出したROMイメージの取り扱いは自己責任で。