Neo CD SD Loaderを使ってネオジオCDのBIOSをダンプする
皆さんはNeo CD SD Loader(NeoGeo CD SD Loader)をご存じでしょうか?Furrtek氏が開発したネオジオCD用のディスクローダーで、CDドライブの代わりにSDカードからネオジオCDのイメージを読み込むことができます。SDには大量にCDイメージを入れておくことが出来ますし、読み込みもかなり早くなります(バスの制限か、PCなどのエミュレータほどではありませんが)。
既にFurrtek氏による開発および販売は終了していますが、ハード・ソフトを含めた全ての情報は上記Githubに公開(GPL-3.0)されているため、他のSHOPなどで販売されています。AliExpressなどでも売られていますが、公式ページからリンクされているSHOPの方が安心かもしれません。
実装の方法は上記公式ページで詳しく説明されていますが、日本語だとtsuruo3氏のブログで画像入りで説明されていて参考になりました。(公開時期的に情報は少し古いですが)
tsuruo3のblog
さて、Neo CD SD Loaderですが公式ページには、厳密にはODE(光学ドライブエミュレーター)ではない、と書かれています。実際には、ドライブへのAPIを担当するBIOSごと乗っ取ってSDカード読み込みなどの追加機能を実装しているようです。
ざっと動作を解説してみると、
- ネオジオCD実機のBIOSを読み取り、
- 追加機能をパッチとして当てた上で、
- Neo CD SD Loader上のCPLDに書き込み、
- CPLDとファーム用ESP32マイコンが協調してBIOSとドライブの代替動作をする
といった感じのようです。(私の理解なので、間違いがあったら教えてください・・・)
ということで、ソース公開されているNeo CD SD LoaderにBIOS吸い出しのメニューをつけてみました。
そう! 1の手順でBIOSを吸い出しているんですよ!
ただ、パッチが当たる前のBIOSは保存されず、パッチ後で上書きされたものだけSDカードに保存されます。機能としては吸い出し機能を持っているのに、それを残すようなことはされていない訳ですね。
ということで、ソース公開されているNeo CD SD LoaderにBIOS吸い出しのメニューをつけてみました。
変更後のソースはFurrtek氏のgithubリポジトリの方に、プルリクエストを出してみているのですが、おそらく承認はされない気がします。
なぜかというと、リポジトリのReadmeに「新しいプロジェクトに取り組みたいので、全ての関連ファイルを公開した。サポートはしない(意訳)」とありますので、プルリク含めたメンテナンスはされない気がします。
ですので、プルリク中の改造済みファーム(v0.12としました)について下記にリンクを付けておきます。
変更後のファーム(v0.12)
変更後のファーム(v0.12)
上記のファームを公式ファームと同じ手順でアップデートして、Cボタンのオプションメニューから「Rip BIOS to ROMDUMP.BIN」を選択すれば、SDカード内の「ROMDUMP.BIN」としてBIOSが抽出されます。吸い出しできます。
アップデート手順については、公式ページのSupport→Firmware→Firmware download→How to update the firmwareを参照してください。
前回、ネオジオCDのBIOSを音声に変調して吸い出すツールを出しましたが、ハードの組み込みを除けば今回の手順の方が楽です。ハードの組み込みをどこかに頼めるならば、素人がもっとも簡単にネオジオCDのBIOS吸い出しを出来る方法だと思います。
Neo CD SD Loaderの開発環境(不完全)
おまけとして開発環境の情報をメモとして残しておきます。
開発環境ですが、githubの方に書かれている通り下記の環境です。
開発環境ですが、githubの方に書かれている通り下記の環境です。
MCU firmware built with STM32CubeIDE, BIOS patches built with the macro assembler AS, CPLD bitstream built with Quartus 12.
https://github.com/furrtek/NeoCDSDLoaderのReadme.mdより引用
ESP32のファームはSTM32CubeIDE、BIOSへのパッチはthe macro assembler AS、CPLDはQuartus 12とのことです。
ビルド方法などは、プロジェクトファイルやbatファイルなどを追っていけばある程度分かるのですが、開発環境のバージョン調査が大変だったので、今後開発したい人に向けて下記にメモを残します。
1.STM32CubeIDE
STM32用統合開発環境です。下記で公開されています。ちなみに、DLにはユーザー登録が必要です。(所属企業まで聞かれるのでかなり面倒)
DLするバージョンは、1.6.1でNeo CD SD Loaderの公式最新版v0.11と同じバイナリがビルドできました。なお、Neo CD SD Loaderのソースに含まれるビルドの生成物に書かれているバージョンを参考に、IDEとコンパイルを担当するgnu-tools-for-stm32プラグインのバージョンを比較すると下記のようになります。
Neo CD SD Loader公式 :stm32cubeide_1.0.0 , gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924
STM32CubeIDEv1.6.1環境:stm32cubeide_1.6.1 , gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924
gnu-tools-for-stm32プラグインのバージョンは一致しますがIDEのバージョンは当然異なるので、上手く動かない場合はIDEの方のバージョンも合わせた方が良いでしょう。
※STM32CubeIDEのv1.0.0をDLするとgnu-tools-for-stm32のバージョンが異なるので、プラグインだけ変更する必要がありそうです
2.the macro assembler AS
多数のマイクロプロセッサに対応したアセンブラで、下記にて公開されているツールです。
http://john.ccac.rwth-aachen.de:8000/as/
DLページには最新版へのリンクしかありませんが、DLリンクの1つ上の階層のアドレスを打ち込むと過去のバージョンをDLすることが出来ます。
バージョンは、最新版ではNGで、aswcurr-142-bld137以前のバージョンでしかビルドが成功しません。
aswcurr-142-bld137で、Neo CD SD Loaderの公式最新版v0.11と同じバイナリがビルドできました。
3.Quartus 12(不完全)
おそらく"Quartus II v12.x"のことを指しているものと思います。
こちらのバージョンは(公開当時の企業Alteraを買収した)Intel公式での公開が終了していたため、ちゃんと調べていません。
しょうがないので、Neo CD SD Loaderの公式最新版v0.11で公開されているファーム内のバイナリを使ってビルドしました。
4.WADについて(備考)
ファームは上記1~3までの環境で作成したバイナリをWAD形式の1ファイルにパッキングして使用します。WADはDOOMで使用されている形式だそうです。詳細はDocs/doc.odtに書かれています。
なお、Tools内のmakeupdate.exe/.batを実行することでWADファイルは自動的に作成されます。
というか、makeupdate内でパッキングする際にバイナリの不要部分をなくしたり、bit配列を変更したりしているので、このツールの使用が必須です。
(3.のバイナリ流用も変換をオフにするなり、あらかじめ逆変換をしておくなり工夫する必要があります)
コメント