index
開発環境の構築 (Linux)

以下の開発環境は、既にインストールされていますので、内容を読むだけで結構です。また、解らないところがあれば、とりあえず読み飛ばしても結構です。

*注意書き

開発したソフトウエアを製品化するつもりなら、ハードウエアメーカ認定のソフトウエア開発環境を購入するのが正道かもしれません。しかし、ゲームに限らず、一般ユーザの開発したソフトウエアのほうがメーカ製より優れたものが多いのも事実です。ここでは、無料で公開されているLinux用開発環境の構築手順をまとめておきます。但し、こうした開発ツールには、使い方によっては違法となるものも含まれています。著作権侵害には特に注意してください。

*コンパイラ

ARMプロセッサ用にGNU Cコンパイラやリンカーをコンパイルします。ゲーム開発用ライブラリなどは付いていませんので、自力で必要な関数やマクロを開発してください。

参考URI説明
GNU binutilsGNU 開発ユーティリティ(など)
GNU gccGNU Cコンパイラのミラーサイト

1.make

上のURIより、最新安定板の binutils と gcc コアをダウンロードして、下記の例のようなコマンドを実行します。(> はユーザプロンプト、# はrootプロンプト、** は、バージョンを表す)

binutils のインストール
> tar zxvf binutils-**.tar.gz
> cd binutils-**
> mkdir build_arm
> cd build_arm
> ../configure --prefix=/usr/local/gnu --program-suffix=-arm --target=arm-gba-elf
> make
> su
# make install

ARM用 gcc のインストール
> tar zxvf gcc-core-**.tar.gz
> cd gcc-**
> mkdir build_arm
> cd build_arm
> ../configure --prefix=/usr/local/gnu --program-suffix=-arm --target=arm-gba-elf --disable-shared --disable-threads --disable-nls
> make
> su
# make install
# cd /usr/local/gnu/bin
# ln -s arm-gba-elf-gcc gcc-arm

2.コマンドサーチパスの追加

bash を使用している場合は、~/.bashrc または ~/.bash_profile に下記の行を追加します。

export PATH=/usr/local/gnu/bin:$PATH

tcsh を使用している場合は、、~/.tcshrc または ~/.cshrc に下記の行を追加します。

set path=( /usr/local/gnu/bin $path )

3.動作確認

コマンドラインで、gcc-arm -v を実行して、/usr/local/gnu 配下から gcc が起動したらOKです。

4.スタートアッププログラムとリンカースクリプトの作成

crt (c runtime startup) ファイルは、実行開始アドレス以外の場所に配置された main 関数のポインタに branch するための細工です。crtint.S は、割り込み処理を行う関数を登録してあります。割り込み処理を行うときに使用してください。

crt file

下記の内容で、crt.S と crtint.S というファイルを作成します。

crt.S
.text
	b		main

gcc-arm -c crt.S を実行して crt.o を作成します。

crtint.S
#define INT_VECTOR	0x03007FFC

.extern int_handler

.text
	ldr	r0, =int_handler
	ldr	r1, =INT_VECTOR
	str	r0, [ r1 ]

	b1		main
loop:
	b		loop

gcc-arm -c crtint.S を実行して crtint.o を作成します。

下記の内容で、リンカースクリプト gcc.ls を作成します。リンカーは、オブジェクトファイルの内容にメモリアドレスを割り当て、ELF(Executable and Linking Format)形式の実行ファイルを出力します。このスクリプトを実行すると、ROMカートリッジの先頭アドレスである 0x08000000 にプログラムが配置されます。このスクリプトを変更して、GBA の外部RAMの先頭アドレス 0x02000000 にプログラムを配置すれば、GBA 内部のメモリ上から直接実行させることもできます。詳細は、クイックスタートのページを見てください。

OUTPUT_ARCH(arm)

SECTIONS {
    .text    0x08000000 : { *(.text) }
    .data              : { *(.data) }
    .rodata            : { *(.rodata*) }
    .bss               : { *(.bss) }
}

以上で、実行ファイルを出力するためのツール群が揃いました。GBAは、ELF形式のファイルを直接実行できませんので、最後に、objcopy コマンドを使って、GBAに必要のないELFヘッダー情報等を削除します。

assembly process

*グラフィクス開発支援ツール

C言語の図形描画関数で複雑なCGを作成したり、高速描画するには無理があります。そこで、ゲーム機には専用の高性能グラフィクス・ハードウエアが用意されています。高度なCGは、このグラフィクス・ハードウエアを直接制御することにより実現されます。GBAのグラフィクスは、8x8ドットのキャラクタにより画面を構成するタイルモードと最大240x160ドットのビットマップモードがあります。タイルモードでは、仮想画面の使用も可能です。GBA グラフィクス開発用のツールとして、GBA プログラミング研究所の bmp2rgb と bmp2rgb2 というBMP形式からGBA形式に変換するツールと WideMapEditor というマップを作成するツールを利用させてもらいます。但し、これらのツールは、Windows 用です。

参考URI説明
GBA プログラミング研究所各種 GBA 開発ツールを公開
gbadev各種 GBA 開発ツールやドキュメントを公開

*エミュレータ

エミュレータ(ゲーム開発者はエミュと呼んでいる)は、ハードウエアをソフトウエアでリアルタイムに模倣します。開発したプログラムの動作やメモリ内容ををPC上で確認できるので、デバッグに必要なツールですが、ネットに流通している違法コピーソフトを実行できるため、ゲームメーカでは流通を認めていません。ゲーム機のエミュレータを違法とするか否かは、微妙な線のようです。本実習では、VisualBoy Advance というものを使わせてもらいます。このエミュレータは、GB, GBC, GBA のプログラムが全て動くそうです。この手のサイトは、よくアドレスを変えたりするので、検索して探したほうが良いかもしれません。

参考URI説明
VisualBoy AdvanceVisualBoy Advance 公式サイト
エミュレータ情報局各種エミュレータの解説とリンク集
OcianBlue エミュの部屋各種エミュレータの解説とリンク集

1.インストール

上記 URI より VisualBoyAdvance をダウンロードし、/usr/local/bin/ に VisualBoyAdvance と VisualBoyAdvance.cfg をコピー。VisualBoyAdvance に適当なエイリアスを作成してください。(例:bash を使用している場合:~/.bashrc に、 alias vba='VisualBoyAdvance' を追加, tcsh の場合: ~/.tcshrc または ~/.cshrc に、alias vba 'VisualBoyAdvance' を追加)

*書き込みツール

PCやWS上で開発したプログラムを、ゲーム機のメモリに転送して実行させたり、書換え可能カートリッジ(ブランクカートリッジ)に書き込むデバイスおよびソフトウエアです。このツールも市販のROMカートリッジのソフトをコピーするために使用できるため、大っぴらには流通していないグレイマーケット品ですが、ネット販売等を通じて入手可能です。ここでは、ブートケーブル USB という書込みツールを使用します。

参考URI説明
オプティマイズブートケーブルの開発・販売元
GAMES'ARKフィラッシュアドバンス(書き込み用カートリッジ)の取扱業者


お問い合わせはこちらまで: kitagawa@is.t.kanazawa-u.ac.jp

(c) Kanazawa Univ., 2004