ビットマップモード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();
	}
}

動作画面

1.png
2.png

まとめ

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

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

履歴


添付ファイル: file2.png 26件 [詳細] file1.png 24件 [詳細]

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-05-26 (金) 19:10:11