最近キッズコンピュータ・ピコ用ソフトの開発を試みている。
ピコはメガドライブのアーキテクチャを転用しているので、メガドライブの開発環境がそのまま転用できる。
というわけで、メガドライブの開発環境をコンパイラからエミュレータまでMac上に一通り構築したのでメモしておく。Windowsでも同じものが使えると思う(というかWindowsのほうがすんなり出来ると思う)。
環境
MacOS 10.15.7(Catalina), Intel
SGDK(開発キット)
これがないと始まらない。MegadriveのROMをビルドするためのキット。linuxやmacではwineでSGDKのプロジェクトをビルドしなければならないのだが、今はDockerfileが同梱されているから、dockerを使って楽にビルドまで漕ぎ着くことが出来る。 dockerをhomebrewなりなんなりでインストールしたら、あとはリポジトリのreadmeに書いてあるとおり、 git cloneしてきたフォルダ内で
docker build -t sgdk .
する。これでSGDKのプロジェクトをビルドするためのイメージが作られる。コンパイルする時はプロジェクトのフォルダ内で
docker run --rm -v "$PWD":/src sgdk
を実行する。または、次の節で紹介するVSCodeの拡張機能を使うことで、より手軽にコンパイルができる。
VSCode(エディタ)
もちろん使いたいエディタを使えばいいのだが、個人的にはVSCodeとその拡張機能「Genesis Code」を使うのが便利なように思う。プロジェクトの作成、コンパイル、エミュでの実行(mac未確認)までコマンド一発でやってくれる。
使い方などはこちら
dockerでコンパイルできるよう環境構築したなら、上記ページにもあるようにGenesis Codeの設定のToolchain Typeをdockerに設定しておく。
プロジェクトの作成は、Cmd+Shift+Pでgenesisと入力し、Create Project。コンパイルはCompile Project。
あとたぶんこれだけだと補完が効かないので、ctrl+Shift+P -> C/C++: Edit Configurations (JSON)でc_cpp_properties.jsonを作成し、ファイル内のincludePathに
"includePath": [ "${default}", "~/SGDK/inc" ],
みたいな感じでSGDKのincフォルダへのパスを追加しておく。これは他にもう少しいい方法あるかも?
Gens KMod(エミュ)
最もデバッグに向いてるエミュレータはこれだと思われる。ROMやスプライトなどのダンプとかレジスタの状態見るとか色々できる。Windows用しかないので、MacならWineskin Serverなどを使ってwineで実行するのが良い。
この記事を参考にしてgens kmodの.appファイルを作成した。すべての機能を確認したわけではないが、特に問題なく動いている。
Flashkit-MD(ROMライタ)
KRIKzzさんによるFlashkit Programmer MDを使えば、メガドライブ用カートリッジへのROMの書き込み及び吸い出しができる。
(KRIKzzさんはウクライナの方で、今は別の場所に避難しているとのこと。ウクライナならびにウクライナの方々に一刻も早く平和な日々が戻ることを願います。)
回路もROM読み書きソフトもオープンソース。敢えてリンク貼らないけど、アリエクでもROMライタやカートリッジが購入できる。
肝心のROM読み書きソフトがWindows用のみなので、wineで動かそうとしたのだが、どうにもROMライタを認識してくれなかったので純正ソフトの使用は断念。
Go言語で移植してるバージョンを発見。でもこちらは何故か自分の環境ではうまく動作しなかった。そこで、python移植版を書いた。とりあえずROMのread/writeはできるようになった。RAMのread/writeなども移植終わったらどっかうpしときます。
言うまでもないが、吸い出したROMの配布、違法にアップロードされたROMの利用、コピーガードが施されたカートリッジからの吸い出しは著作権法違反となるので注意!
Aseprite(ドット絵作成)
これも好きなのを使えばいいのだが、個人的にはAsepriteが使いやすかった。19.99USDで購入可能だが、オープンソースなので自分でビルドすることも可能。
ビルド方法は基本的にINSTALL.mdに従えばOK。自分の場合、ninja aseprite
する段階で、blake2.hがないというエラーを吐かれた。homebrewで入れてたlibb2が邪魔だったらしく、一時的にlibb2をアンインストールしたらビルドできた。
メガドライブ用の画像を作る時は、color modeはIndexedにすること。Index-0の色が透過色になる。パレットの色数が多すぎるとコンパイル時にエラー吐かれるので注意。
gendev.spritesmind.net 使える色が512色決まってて、使えない色はSGDK側で勝手に近い使える色に調整してくれるそうだが、最初から使える色を使いたいなら、上のようにパレットを公開してくれてる人がいるので、そこから使うのがよさそう。
ghidra(リヴァエンツール)
NSAの無償リバースエンジニアリングツール。バイナリファイルの逆アセンブルとかができる。学習目的で使うのが良いだろう。
上記はmegadriveのROMの逆アセンブルの方法などが書いてある。JDK18だとスクリプトが動いてくれなかったのでJDK11を入れた。
参考になる文献
68000.web.fc2.com メモリーマップとかVDPレジスタの詳細とかそういう低レイヤの話が書いてある。日本語
SGDKでゲームを作るチュートリアルがいくつかある。色々チュートリアルあるけどたぶんこれが一番充実してるし新しい。
日本語だとここもある
その他
色んなチュートリアルでVDP_setPaletteが使われてるけど、もうdeprecatedで、というかvdp_pal.hももう無くて補完効かないので、PAL_setPaletteに置き換えたほうがよさそう
あとは音周りのツールだと思うが、これについてはまだ手を付けられてない。試したら書く。
次回はピコ用ソフトの開発について書く予定