ハードウェアの気になるあれこれ

技術的に興味のあることを調べて書いてくブログ。主にハードウェアがネタ。

ゲームボーイを作る(4) - ビルド環境(wla-dx)の整備

スポンサーリンク

ゲームボーイを作るその4。やっぱりビルドの環境があった方が良い気がしたので、そのあたりを整備していく。

ビルド環境(wla-dx)の整備

blargg-gb-testsに付属しているreadme.txtによるとwla-dxでビルドされているみたい。最初に何も考えずに適当にググって、RGBDSをビルドして試してた。。 ということで、wla-dxを導入してblargg-gb-testsのコードのビルドを試してみる。

RGBDSのインストール

wla-dxGitHub上で開発が行われており、リポジトリの説明に従えばそれほど苦も無く、インストールすることができそう。

ということで、まずはリポジトリをクローン。この記事を書いている時点での、最新の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が出力されている。

f:id:diningyo-kpuku-jougeki:20210715232155j:plain
それぞれバイナリ実行時のエミュレータの画面

ひとまずビルド環境は整ったので、引き続きblargg-gb-testsの解析を行いつつ、簡単な命令の実装にも着手しようと思う。