ビットマップモード4

mode5です。ポイントは画面のサイズが小さく160*128で、32768色。パレットは使わず、mode3のように2バイトを色データとしています。フレームバッファは2となっています。画面サイズが小さいため、画像は画面左上に表示されます。右側や下側などの表示されない領域は真っ黒のままで見栄えが悪いです。

サイズ160*128
フレームバッファ2
色/パレット32768色
伸縮回転可能

mode5の画像を表示

#include "lib/gba.h"
#include "res.h"

//---------------------------------------------------------------------------
void WaitForVsync(void)
{
	while(*(vu16*)0x4000006 >= 160) {};
	while(*(vu16*)0x4000006 <  160) {};
}
//---------------------------------------------------------------------------
void Mode5SetFrame(u8* img, u32 f)
{
	u8* fr;

	if(f == 1)
	{
		fr = (u8*)0x6000000;
	}
	else
	{
		fr = (u8*)0x600A000;
	}

	u32 x, y;

	for(y=0; y<160; y++)
	{
		for(x=0; x<240; x++)
		{
			fr[y*240+x] = img[y*240+x];
		}
	}
}
//---------------------------------------------------------------------------
int main(void)
{
	// モード設定。フレーム2を指定
	SetMode(MODE_5 | BG2_ENABLE | BACKBUFFER);

	// 画像の読み込み
	Mode5SetFrame((u8*)&frame1Bitmap, 1);
	Mode5SetFrame((u8*)&frame2Bitmap, 2);


	for(;;)
	{
	    WaitForVsync();
	}
}

動作画面

まとめ

今までのまとめです。mode4, mode5はチップ容量が高価でカードリッジ容量8MBまでなど、製造コストにハードルのあった時代だと思います。今プログラムするならば個人的にはmode3でいいんじゃないかなあと。フレームバッファはVRAMに用意しなくてもEWRAMにできますし、DMA使えば一瞬で転送できますし。なお2020年代では衛星写真(たとえば7000x7000ピクセル、4波長、1画素8bit)は1枚あたり約1GBです。ちょっと桁おかしいのではないかと思いそうですけれど、時代の流れとしてはこのようになっています。話を戻しますがGBAでは最大32MBまで使えます。気にせず一番解像度の高いモードを選択しましょう。

モードmode3mode4mode5
サイズ240*160240*160160*128
フレームバッファ122
色/パレット32768色256色/1パレット32768色
伸縮回転可能可能可能

履歴


トップ   一覧 検索 最終更新   ヘルプ   最終更新のRSS