One Note Jam

ゲームボーイアドバンス用プログラム開発雑感 (2) (2005-11-05)

RAM: 288KBytes・ROM: (最大)32MBytes

ゲームボーイアドバンス(以下GBA)での開発をやってみて、最も厳しいと感じたことの一つは「RAMが少ない」という点です。CPU内部に32KBytes・CPU外部に256KBytesで、合わせて288KBytesというRAMの量は、最近のリッチな環境に慣れた者にとってはかなり手狭に感じます。

代わりに、ROM領域はかなり広大です。市販のGBAゲームでは、ROMカートリッジの容量が8MBytesとか16MBytesといったものもあります(最大で32MBytesまで)。また、GBAではROM領域に配置されたプログラムを直接(= RAM領域に展開せずに)実行できますし、CPUからROM領域のデータを直接アクセスすることもできます。なので、RAM領域は純粋に「読み書き可能なメモリ領域」として使うことになるので、容量が少なくてもさほど問題にはならないわけです(多いに越したことはないのですが)。

余談ですが、このあたりはDoJaなんかの携帯電話向けJavaアプリ開発などと比較すると見事に対称的です。携帯アプリでは「ROM容量(≒jarパッケージの容量)」は厳しく制限されていて、代わりに「RAM容量(≒ヒープとして確保できる領域)」は(端末にもよりますが)比較的多めに取れるようになっています。

RAM: 32KBytes・ROM: 256KBytes

ところが、ブートケーブルを使用して実機動作を行う環境の場合、話が変わってきます。以前の記事(2005-10-23)で触れましたが、「ブートケーブル」とは自作プログラムを実機へ送信して起動するためのハードウェアです。これを使用して「送信」したプログラムがどこに格納されるかというと、当然のごとくGBA内のRAM領域しかありません。具体的には「CPU外部RAM(256KBytes)」に格納されます。

すなわち、ブートケーブル環境で動かせるプログラムは最大でも256KBytesで、さらにRAMとして使用できる領域は内部RAMの32Kbytesということになります。これはさすがに狭い……。

実際のところ、私が作っているようなミニゲーム程度のものであれば、このスペックでもなんとかなります。とはいえ、「狭い」ことからくる心理的影響はなかなか大きく、開発中は何かと節約しがちなコーディングとなってしまいます。

こういった事情を知ると、市販GBAゲームで「1カートリッジプレイ」用のプログラムを作成するのは非常に大変であろうことが推測できます。市販GBAゲームの1カートリッジプレイでは、基本的には「通常版」のゲームをそのまま(あるいは「制限版」を)プレイできるようにする必要があります。256KBytes内にグラフィックやサウンドを収めることの厳しさもさることながら、使えるRAMが32KBytesに制限されるというのはさらに厳しいのではないかと思われます。仕事で開発している人は大変だな……。

posted at 2005-11-05 | Permalink

© 2004-2008 ENDO