#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