mode5です。ポイントは画面のサイズが小さく160*128で、32768色。パレットは使わず、mode3のように2バイトを色データとしています。フレームバッファは2となっています。画面サイズが小さいため、画像は画面左上に表示されます。右側や下側などの表示されない領域は真っ黒のままで見栄えが悪いです。
| サイズ | 160*128 |
| フレームバッファ | 2 |
| 色/パレット | 32768色 |
| 伸縮回転 | 可能 |
#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まで使えます。気にせず一番解像度の高いモードを選択しましょう。
| モード | mode3 | mode4 | mode5 |
| サイズ | 240*160 | 240*160 | 160*128 |
| フレームバッファ | 1 | 2 | 2 |
| 色/パレット | 32768色 | 256色/1パレット | 32768色 |
| 伸縮回転 | 可能 | 可能 | 可能 |