戻る 03. 簡単な描画 次へ


モード3を使うとしてもどうやって使うの?と言った事が今回のポイントです。

ここからはC言語初心者はパニックになるかもしれないです。
GBAの機能を使う場合はほとんどアドレスを直接参照して
値を入れていくことになります。
これは開発環境がフリーなものである為,ライブラリが整っていないからだと思います。
逆に考えればそれだけ解析する楽しみがあると思いましょう(笑)
メモリマップを見ながら作っていくのも楽しいもんです。(^^)

メモリマップを載せているときりが無いので
そういった解説は他のサイトにお任せします。

さて本題に戻ります。
画面モードの変更はアドレス0x4000000です。
ここの下位3ビットがモードフラグです。
モード3にするのは3を与えます
*(unsigned short *)0x4000000=3 | 0x0400;
と書きましょう。
16進数の400は2進数では10000000000となります。
この1になっている部分(フラグが立っている部分)をメモリマップで見てみると
BG2の表示フラグとなっています。
モード3ではBG2に描画を行いますのでBG2を表示する為にこうなっています。

さて次は点を描きましょう。
点を描くのもVRAMの開始アドレスを調べて描きます。
VRAMの開始アドレスは0x06000000です。
たとえばx=100 y=50の場所に点を描くには
*(unsigned short *)(0x06000000 + (100 + 50 * 240) * 2)=色;

となります。

それでは実際にソースを作ってみましょう。

int main(void){
	int x, y;
	char r, g, b;

	*(unsigned short *)0x4000000=3 | 0x0400;

	x=100;
	y=50;

	b=31;
	g=31;
	r=31;

	*(unsigned short *)(0x06000000 + (x + y * 240) * 2)=(b << 10) | (g << 5) | r;

	while(1){
	}
}

コンパイルして動作確認してみましょう。
F.A.Linkerの使い方はここでは説明しません。個人で調べてください。
毎回転送するのも手間がかかるので動作確認はエミュレーターを活用すると便利です。

スクリーンショット