主専攻実験を手元でやるためにGBA開発環境を構築する

春の主専攻実験がGBA用のプログラムを開発するというもので、開発のためにわざわざ機室に行くのが面倒なのと開発時間を十分に取りたかったため、クロスコンパイルや実機への転送を手元でもできるように環境構築をするお話。

いつものごとくWindows用だけど、プログラムのビルドにはWSLを使っていたり、エミュレータも他プラットフォーム用のビルドがあったりするので、頑張れば他のプラットフォームでもできそう。

2019-04-27追記
本記事は主専攻実験履修者向けです。GBAへのプログラムの転送には実験で配布される機器が必要であり、また本記事も実験の手順書を一読していることを前提に記述しています。

プログラムをGBAに転送できるようにする

まだビルド環境すらできていない状態だけど、転送できるようにするのはいつやっても問題ないので最初に書いておきます。

基本エミュレータ使うし実機での動作確認は機室でいいやって人と、非Windowsユーザーは飛ばしてください。*1

実験で用いることになっている転送プログラムのoptusbは*nix向けで、また古いためそのままWindowsで動かすのは苦労しそう…ということで、Windows向けoptusb移植を作りました。

(問題があれば消します。)

github.com

導入方法はREADMEに書いたので、その通りにやってください。

また、後々便利なようにoptusbx.exeをPATHの通った場所に置いておくことをおすすめします。optusbx.exeを移動するときは、付属のDLLファイルも一緒に移してください。

GBA用のプログラムをビルドできるようにする

正直転送さえできれば(もっと言うとできなくてもエミュレータさえあれば)、プログラムのビルドは機室のマシンにリモート接続してできるから既に完全リモートにはできるんだけど、やっぱりビルドも手元でやりたいよね。

というわけでGBA用にビルドできるようGCC雑に導入します。*2

2020-10-21追記
私は最終的にはここに記載した内容とは異なる方法でツールチェインを導入しました(ビルドツールにはARM社が提供するバイナリを用い、CMakeでプロジェクトを管理しています)。
それらを含む私の最終的な成果物は以下のリポジトリにあります。github.com

GBAとかの開発環境の構築に使えるdevkitProなる開発ツール群インストーラ的なのもあるらしいけど、今回はGBAのROMファイルとかまで作る必要はない(マルチブート用のプログラムファイルだけ作成できれば良い)ので、簡単に行いましょう。

以降はWSLを使用するので、導入していない場合は導入してください。LinuxディストリビューションUbuntuとして説明しますが、概ね他のディストリビューションでも変わらないと思います、多分。

はじめにgcc-arm-none-eabiをインストールします。1GB強ほどのディスク容量を消費するみたいなので注意。

$ sudo apt update
$ sudo apt install gcc-arm-none-eabi
$

以上です。これで必要なツールは一式揃いました。

が、インストール直後の状態だとARM用のgccなどのコマンド名がarm-none-eabi-gccとなって冗長なのと、なにより手順書のものと異なってしまうため、手順書で使われているプログラム名(gcc-armなど)で使用できるようにaliasを貼ります。*3

# - install arm-none-eabi-gcc in advance
# - For WSL: set PATH (of Windows) for the directory of optusbx.exe

# use arm-none-eabi-* via *-arm
for command in `ls /usr/bin/arm-none-eabi-* | xargs -n 1 basename | sed s/^arm-none-eabi-//`; do
alias ${command}-arm=arm-none-eabi-${command}
done

# for WSL: use optusbx.exe via optusb / optusbx
alias optusbx=optusbx.exe
alias optusb=optusbx

これをシェルスクリプトなり.bashrcなりに書いて実行すればgcc-armでコンパイルできるようになるはず。

ついでにoptusbx.exeもoptusbの名前で使えるようにしているので、optusbx.exeがPATHの通った場所にあればWSLではoptusbで呼び出すことができます。

こんなところでだいたい機室と似たような開発環境になると思います。

エミュレータを導入する

正直実機に転送する手間もエミュレータで起動する手間も変わらない気はするけど、パソコン1つで完結したほうがいろいろと楽な気もするので動作確認用にエミュレータも導入しておきます。

エミュレータにはなんとなく良さげなVisual Boy Advance - Mを用います。
他のでも良いとは思うけど、確認はしていません。

github.com

導入方法は上記サイトを参照してください。
Windowsの場合はReleasesからバイナリを落とせば良いです。
(zipの中にぽつんとある実行ファイルがエミュレータ本体の模様。インストーラは付属しないっぽい。)

実行は基本的にエミュレータの画面にプログラムファイルを投げるだけだけど、拡張子を.binから.mbに変更しないと起動できないので注意。*4

最後に

良いGBAライフを。

ちなみに古い32ビットWindows環境が用意できれば貸し出された機器でROMの吸い出しとかもできそうです。ぜひとも試したいですね。

*1:少しコードを加えてビルドすれば他プラットフォームでも動くと思うので、やりたい人はやってください。できればPRもください。

*2:本来とは異なり大分適当な方法を採っているので、上手くいかないとか予期しないことが起こる可能性もあります。自己責任で。

*3:aliasの代わりに適当にシンボリックリンクを貼っても良いと思います。お好みで。

*4:マルチブート用プログラムの判別を拡張子が.mbかどうかで行っている模様。