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に用意しなくても別領域で十分ですし、DMA使えば一瞬で転送できますし。なお2020年代では衛星写真(たとえば7000x7000ピクセル、4波長、1画素8bit)は1枚あたり約1GBです。ちょっと桁おかしいのではないかと思いそうですけれど、時代の流れとしてはこのようになっています。話を戻しますがGBAでは最大32MBまで使えます。気にせず一番解像度の高いmode3を選択しましょう。
モード | mode3 | mode4 | mode5 |
サイズ | 240*160 | 240*160 | 160*128 |
フレームバッファ | 1 | 2 | 2 |
色/パレット | 32768色 | 256色/1パレット | 32768色 |
伸縮回転 | 可能 | 可能 | 可能 |