それとなく思い出しました。
bgInit 関数を使うことでコントロールレジスタの設定が不要になったり、
VRAM のアドレスを自前で持つような記述が緩和されたり。
v1.4.7 以前との差異はその辺りでしょうか。
あとモードセットを実行するとデフォルトで BG をアクティブにしてくれるところとか。
変態的な VRAM の仕様は技術資料を読んでちゃんと理解しておくことをお勧めします。
でないとサンプルコード以上のことや、ちょっと変わったことをやろうとしたときに必ず躓きます。
前時代ゲーム機的な、 BG とスプライトによる描画をあえてやらずとも
フレームバッファモードでガリガリ描画更新を行うスタイルも
個人的にはありだと思うのですが。
BG Tile Map draw sample
Boot NDS v0.01
main.c
/*--------------------------------------------------------------------------------- BG Tile Map draw sample Boot NDS v0.01 Version 1.00 Oct 28, 2009 By.REGEKATSU ---------------------------------------------------------------------------------*/ #include <nds.h> #include "logo.h" //--------------------------------------------------------------------------------- int main(void) { //--------------------------------------------------------------------------------- int bg3; //initVideoMode videoSetMode(MODE_0_2D); //initVRAMBank vramSetBankA(VRAM_A_MAIN_BG); //initBG bg3 = bgInit(3, BgType_Text4bpp, BgSize_T_256x256, 0, 1); //initBGTiles swiCopy(logoTiles, bgGetGfxPtr(bg3), logoTilesLen / 2); //initBGMap swiCopy(logoMap, bgGetMapPtr(bg3), logoMapLen / 2); //initBGPalette swiCopy(logoPal, BG_PALETTE, logoPalLen / 2); //infinityLoop while(1) { swiWaitForVBlank(); } }
logo.grit
-gt -gB4 -fts -gu16 -mu16
プロジェクト一式は下記 URL からダウンロード可能です。
ttp://page.freett.com/ntr/example/tilemap.zip