ゲームボーイアドバンス開発メモ その1

大学の主専攻実験の1つでゲームボーイアドバンス(以下GBA)上で動作するプログラムの作成を行うことになったため、以下の環境で開発環境を構築した際の(雑な)備忘録です。

2017年にもなって自分からGBA開発する人がどれだけいるかわからないですが、来年の後輩とか興味を持った人の参考程度になるといいです。

devkitProのインストール

GBA用のプログラムのコンパイルにはARM7に対応したコンパイラが必要なので、コンパイラ一式とモジュールやツール類がセットになったdevkitProをインストールします。

ここのdevkitARMupdate.plをダウンロードし、

> perl ~/Downloads/devkitARMupdate.pl

でインストール後、パスを通しておきます。fish(すごいシェル)では以下のように。

# devkitPro (for GBA development)
set -x DEVKITPRO $HOME/.devkitPro
set -x DEVKITARM $DEVKITPRO/devkitARM
set -x fish_user_paths $DEVKITARM/bin $fish_user_paths

以上でdevkitProのインストールは完了です。これで環境構築のほとんどの作業は終わったと思っていいです。

動作確認用エミュレータのインストール

Mac用のGBAエミュレータはいくつかあるみたいですが、比較的最近も更新が行われておりOpenEmuにもコアが内蔵されているmGBAをインストールしました。
デバッグ用のメモリビューアやタイルビューアなども一通り入っておりこれで十分かと思います。
一時期メジャーだったVBA(Visual Boy Advance)のMac移植版のMac Boy Advanceは自分の環境ではなぜかROMの読み込み時に必ずクラッシュしたので確認してません。

実機で動かすためのブートケーブルとソフトウェアの準備

大学の実験ではGBA SPとLinuxから目覚めるぼくらのゲームボーイ!と付属のUSBブートケーブルが貸与され実機で確認できるようになっているので、実機への転送用ソフトウェアもインストールします。
この書籍の著者である西田氏のホームページでoptusbという転送用プログラムが用意されています。

まずoptusbに必要なlibusbをインストールしますが、バージョンが古いために当時のバージョンと互換性のあるlibusb-compatをbrewからインストールします。

> brew install libusb-compat

次に、ここ からダウンロードしてきたソースコードMakefileを以下のよう書き換えます。

optusb: optusb.c usb.h libusb.a
    gcc -I `brew --prefix libusb-compat`/include/usb.h -L `brew --prefix libusb-compat`/lib -lusb -Wall -o optusb optusb.c

clean:
    rm -rf optusb *.o

これをmakeすればoptusbのビルドの完了です。
ここら辺はほとんど大学のOBであるshiftky氏のGistを参考にしました(Makefileはそのままです)。この場を借りて感謝します。問題があれば消します。

サンプルをビルドしてみる

devkitProを通常通りにインストールすると~/.devkitPro以下にサンプルプログラムがたくさん入ってるexamples/gba/があると思うので、この中からtemplate/を適当なディレクトリにコピーしてきます。

> cp -r ~/.devkitPro/examples/gba/template ~/Documents/GBA/
> cd ~/Documents/GBA/template

そのままmakeするとtemplate.gbaというファイルができているはずです。

> make
template.c
arm-none-eabi-gcc -MMD -MP -MF /Users/yaplus/Documents/GBA/template/build/template.d -g -Wall -O3 -mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer -ffast-math -mthumb -mthumb-interwork -iquote /Users/yaplus/Documents/GBA/template/include -I/Users/yaplus/.devkitPro/libgba/include -I/Users/yaplus/Documents/GBA/template/build -c /Users/yaplus/Documents/GBA/template/source/template.c -o template.o 
linking cartridge
built ... template.gba
ROM fixed!
> ls
Makefile        source          template.gba    template.sav
build           template.elf    template.pnproj

.gbaファイルがROMファイル(バイナリ)なので先ほどインストールしたエミュレータで動作確認してみてください。

とは言うものの

devkitPro付属のサンプルプログラムはビルドできたものの、これだけではソースコードすら読んでいないし、実際ソースファイルであるtemplate.cではdevkitPro付属であろう未知のライブラリを使っているので、何が何だから全然わからんです。
せっかく組み込みシステムで開発をするのにハードウェアへの理解もないままプログラミングするのは向上心がないので、次のエントリあたりで実際のプログラムについてのメモ書きをしようと思います。