#author("2023-05-27T00:23:37+09:00","","")
#author("2023-05-27T00:24:28+09:00","","")
* はじめに [#r26acabd]

*** 2014年からGBAを振り返る [#d5987615]

#ref(1.png,nolink)

初代ゲームボーイアドバンスの発売日は2001年3月21日。気がついたら13年も経っていました。初めて遊んだゲームは?と人に質問すると、昔みたいなドット的な2Dゲームを言う方が極端に少なくなり、3Dが当たり前になってしまいました。これはもうジェネレーションギャップを感じてしまうのは避けられないようです。3Dに限らず技術的なレベルは毎年高度化していて上は天井知らずですが、ここではその高度化する前の、まだまだ泥臭さの残る部分について取り上げていこうと思います。こんなこともできないのかと、逆にビックリすることは間違いないです。そこには見通しの良い世界が広がっていてとても自由です。ハードウェアの低レベルなアクセス方法や制限を通して何かを作っている実感を得られれば幸いです。~

まずGBAにはOSがありませんし、printfもできません。コミュニティもないので質問もできないのが現状です。C言語の入門書を1冊読み、さあゲームを作ってみようというにはかなり難易度は高いと思います。何でも良いですから2番目に挑戦された方がいいのではないかと思っています。特にraspberry pi、arduinoは電子工作ブームで盛り上がっていて今が旬です。[[maker faire:https://makezine.jp/event/mft2014/]]というお祭り(発表会)も毎年開催しているのでオススメします。

** 開発環境 [#uf42ae0e]
現状はdevkitProを使うか、自分でbinutilsをダウンロードしてインストールするしかないようです。さらに画像をGBAへ変換する為のツールgritは必須で、実行ファイルはwindowsしか用意されていません。自力でコンパイルするか、ツールを自作する能力が求められます。一番楽なのはwindowsです。インストーラーが全て整えてくれて超ラクです。macやlinuxの方は開発環境を用意するのも一苦労されると思います。このチュートリアルでは以下の環境で行います。

- windows 10 pro
- devkitPro(devkitProUpdater)
- VisualBoyAdvance-1.8.0-beta3
- 秀丸エディタ [[Link:https://hide.maruo.co.jp/software/hidemaru.html]]
- Bz Editer [[Link:https://gitlab.com/devill.tamachan/binaryeditorbz/]]
- GraphicsGale [[Link:https://graphicsgale.com/]]
- Padie [[Link:http://www.vector.co.jp/soft/dl/win95/art/se063024.html]]

** 変数について [#ad7683c7]
devkitProのtypedef宣言にしたがって次のように使ってください。GBAのCPUはARM7TDMIでレジスタは32bitです。ループ用の変数はu32か、s32を使います。

 // gba_types.h
 typedef	unsigned char		u8;	/**< Unsigned 8 bit value		*/
 typedef	unsigned short int	u16;	/**< Unsigned 16 bit value		*/
 typedef	unsigned int		u32;	/**< Unsigned 32 bit value		*/
 typedef	signed char		s8;	/**< Signed 8 bit value			*/
 typedef	signed short int	s16;	/**< Signed 16 bit value		*/
 typedef	signed int		s32;	/**< Signed 32 bit value		*/
 typedef	volatile u8		vu8;	/**< volatile Unsigned 8 bit value	*/
 typedef	volatile u16		vu16;	/**< volatile Unigned 16 bit value	*/
 typedef	volatile u32		vu32;	/**< volatile Unsigned 32 bit value	*/
 typedef	volatile s8		vs8;	/**< volatile Signed 8 bit value	*/
 typedef	volatile s16		vs16;	/**< volatile Signed 8 bit value	*/
 typedef	volatile s32		vs32;	/**< volatile Signed 8 bit value	*/

** サンプルコードについて [#s725f475]
[[BSD/オールマン・スタイル:http://ja.wikipedia.org/wiki/%E5%AD%97%E4%B8%8B%E3%81%92%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB]]を使っていますが特に深い理由はありません。僕の尊敬するプログラマーの方がこのスタイルを採用していたのでマネしているだけです。カッコいい映画俳優さんがいたら服やら帽子やらを真似したくなるようなものでしょうか。あと一般的なコーディング規約をことごとくへし折っています。マネしないでください。

** 謝辞 [#w2577cdf]
元々「GBAプログラミング研究所」ht9さんのチュートリアルをベースにしていて、そこから自分も含めて様々な方からのエッセンスをパクって成り立っています。

- 「情報システム設計演習」金沢大学さんの図解
- 「WILDZONE」さんのソースコード
- 「The Audio Advance」さんの説明及びソースコード
- 「The Audio Advance」さんのソースコード

を流用させて頂いています。
を流用させて頂きました。

** 履歴 [#e54fa3b7]
- 2023/04/20
- 2014/12/20

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS