#author("2023-05-25T18:19:57+09:00","","") #author("2023-05-26T19:10:11+09:00","","") * ビットマップモード4 [#udb7a212] mode5です。画面のサイズが小さく160*128と32768色表示。パレットは使わず、mode3のように2バイトを色データとして使います。画面が小さいのはフレームバッファを2つもっているからです。あまり使われることはないのでサンプルコードを軽くのせるだけにします。 | サイズ | 160*128 | | フレームバッファ | 2 | | 色/パレット | 32768色 | | 伸縮回転 | 可能 | ** mode5の画像を表示 [#cfc8eca7] #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(); } } ***動作画面 [#i3920c44] #ref(1.png,nolink) #ref(2.png,nolink) ** まとめ [#ca04b78e] 今までのまとめです。mode4, mode5はチップ容量が高価でカードリッジ容量が8MBまでなど、製造コストにハードルのあった時代で使われていたモードだと思います。現在プログラミングをするならば、個人的にmode3でいいんじゃないかなあと。フレームバッファはVRAMに用意しなくても別領域で十分ですし、DMA使えば一瞬で転送できますし。なお2020年代では衛星写真(たとえば7000x7000ピクセル、4波長、1画素8bit)は1枚あたり約1GBです。ちょっと桁おかしいのではないかと思いそうですけれど、時代の流れとしてはこのようになっています。話を戻しますがGBAでは最大32MBまで使えます。気にせず一番解像度の高いmode3を選択しましょう。 今までのまとめです。mode4, mode5はチップ容量が高価で、製造コストにハードルのあった時代で使われていたモードだと思います。現在プログラミングをするならば、個人的に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色 | | 伸縮回転 | 可能 | 可能 | 可能 | ** 履歴 [#ja129eaa] - 2023/04/22 - 2014/12/21