おたくのテクノ

ピアノ男(notピアノ弾き)のブログ

Macでメガドライブソフト開発環境構築(2022版)

最近キッズコンピュータ・ピコ用ソフトの開発を試みている。
ピコはメガドライブアーキテクチャを転用しているので、メガドライブの開発環境がそのまま転用できる。
というわけで、メガドライブの開発環境をコンパイラからエミュレータまでMac上に一通り構築したのでメモしておく。Windowsでも同じものが使えると思う(というかWindowsのほうがすんなり出来ると思う)。

環境

MacOS 10.15.7(Catalina), Intel

SGDK(開発キット)

github.com

これがないと始まらない。MegadriveのROMをビルドするためのキット。linuxmacでは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未確認)までコマンド一発でやってくれる。

marketplace.visualstudio.com

使い方などはこちら

zerasul.github.io

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(エミュ)

gendev.spritesmind.net

最もデバッグに向いてるエミュレータはこれだと思われる。ROMやスプライトなどのダンプとかレジスタの状態見るとか色々できる。Windows用しかないので、MacならWineskin Serverなどを使ってwineで実行するのが良い。

pc.watch.impress.co.jp

この記事を参考にしてgens kmodの.appファイルを作成した。すべての機能を確認したわけではないが、特に問題なく動いている。

Flashkit-MD(ROMライタ)

everdrive.me

KRIKzzさんによるFlashkit Programmer MDを使えば、メガドライブ用カートリッジへのROMの書き込み及び吸い出しができる。
(KRIKzzさんはウクライナの方で、今は別の場所に避難しているとのこと。ウクライナならびにウクライナの方々に一刻も早く平和な日々が戻ることを願います。)

github.com

回路もROM読み書きソフトもオープンソース。敢えてリンク貼らないけど、アリエクでもROMライタやカートリッジが購入できる。
肝心のROM読み書きソフトがWindows用のみなので、wineで動かそうとしたのだが、どうにもROMライタを認識してくれなかったので純正ソフトの使用は断念。

github.com

Go言語で移植してるバージョンを発見。でもこちらは何故か自分の環境ではうまく動作しなかった。そこで、python移植版を書いた。とりあえずROMのread/writeはできるようになった。RAMのread/writeなども移植終わったらどっかうpしときます。
言うまでもないが、吸い出したROMの配布、違法にアップロードされたROMの利用、コピーガードが施されたカートリッジからの吸い出しは著作権法違反となるので注意!

Aseprite(ドット絵作成)

www.aseprite.org

これも好きなのを使えばいいのだが、個人的にはAsepriteが使いやすかった。19.99USDで購入可能だが、オープンソースなので自分でビルドすることも可能。

github.com

ビルド方法は基本的にINSTALL.mdに従えばOK。自分の場合、ninja asepriteする段階で、blake2.hがないというエラーを吐かれた。homebrewで入れてたlibb2が邪魔だったらしく、一時的にlibb2をアンインストールしたらビルドできた。
メガドライブ用の画像を作る時は、color modeはIndexedにすること。Index-0の色が透過色になる。パレットの色数が多すぎるとコンパイル時にエラー吐かれるので注意。

gendev.spritesmind.net 使える色が512色決まってて、使えない色はSGDK側で勝手に近い使える色に調整してくれるそうだが、最初から使える色を使いたいなら、上のようにパレットを公開してくれてる人がいるので、そこから使うのがよさそう。

ghidra(リヴァエンツール)

ghidra-sre.org

NSAの無償リバースエンジニアリングツール。バイナリファイルの逆アセンブルとかができる。学習目的で使うのが良いだろう。

web.archive.org

上記はmegadriveのROMの逆アセンブルの方法などが書いてある。JDK18だとスクリプトが動いてくれなかったのでJDK11を入れた。

参考になる文献

68000.web.fc2.comモリーマップとかVDPレジスタの詳細とかそういう低レイヤの話が書いてある。日本語

www.ohsat.com

SGDKでゲームを作るチュートリアルがいくつかある。色々チュートリアルあるけどたぶんこれが一番充実してるし新しい。

nendo16.jimdofree.com

日本語だとここもある

その他

  • 色んなチュートリアルでVDP_setPaletteが使われてるけど、もうdeprecatedで、というかvdp_pal.hももう無くて補完効かないので、PAL_setPaletteに置き換えたほうがよさそう

  • あとは音周りのツールだと思うが、これについてはまだ手を付けられてない。試したら書く。

次回はピコ用ソフトの開発について書く予定