ゲームボーイを作るその4。やっぱりビルドの環境があった方が良い気がしたので、そのあたりを整備していく。
ビルド環境(wla-dx)の整備
blargg-gb-testsに付属しているreadme.txt
によるとwla-dx
でビルドされているみたい。最初に何も考えずに適当にググって、RGBDSをビルドして試してた。。
ということで、wla-dx
を導入してblargg-gb-testsのコードのビルドを試してみる。
RGBDSのインストール
wla-dx
はGitHub上で開発が行われており、リポジトリの説明に従えばそれほど苦も無く、インストールすることができそう。
ということで、まずはリポジトリをクローン。この記事を書いている時点での、最新のtagはv10.0
なので、これを使用していく。
$ git clone https://github.com/vhelin/wla-dx $ cd wla-dx $ git checkout -b v10.0 refs/tags/v10.0
ビルドはcmake
で行う。なお、GitHubのインストール手順にはsphinx-build
が必要との記載があるが、適当にUbuntu 20.04LTSのapt
で入るもの(python3-sphinx
)を使ったら、エラーが出たのでsphinx-build
が入っていない状態でビルドを行った。(多分推奨バージョンのsphinx入れれば解決するはずだけど、sphinxならドキュメント関係やし要らんやろの精神で深追いしていない。)
$ mkdir build $ cd build $ cmake .. -DCMAKE_INSTALL_PREFIX=<インストール先> $ cmake --build . --config Release $ cmake -P cmake_install.cmake
後は必要に応じてパスを通して、インストールは完了。
blargg-gb-testsのビルド
お試しということで、前回使っていた01-special.s
のビルドを試してみる。blargg-gb-testsのcpu_instrsを展開したディレクトリに移動して、次のコマンドを実行する。readme.txt
中ではオブジェクトファイルを作るコマンドがwla
になっているが、v10.0
でビルドしたコマンドには見当たらなかったので、ゲームボーイ向け(っぽい)アセンブラのwla-gb
を使った。またreadme.txt
の説明ではwla-gb
に渡す引数の順番が違っているのにも注意。
$ cd cpu_instrs/source $ wla-gb -o test.o 01-special.s $ wlalink linkfile 01-special.gb
ちなみにlinkfile
中でリンク時に読み込むオブジェクトファイル名がtest.o
で固定されているので、wla-gb
の出力ファイル名はtest.o
にしておくのが無難。
これでビルドは完了して、エミュレータで読み込めるバイナリデータが生成できた。 できたのだが、zipファイルに同梱されているデータとdiffを取ると、バイナリが一致しない。。。
なんかどうも、実行時にエミュレータの画面に出力される文字列に違いがあるので、そのあたりのデータとその出力に伴う、ジャンプアドレスとかのずれなのかな?と推測。
下の画像が、それぞれのバイナリを実行してみたエミュレータの画面で、左が同梱されていたバイナリ、右が自前でビルドしたもの。同梱版の方は、最初にテスト名である01-special
が出力されている。
ひとまずビルド環境は整ったので、引き続きblargg-gb-testsの解析を行いつつ、簡単な命令の実装にも着手しようと思う。