2007-07-13 (金)
Nintendo DS開発2日目.簡単なお絵かきソフトを作る.
*NDS::ファイルアクセス
昨日のプログラムをデバッグ.なんか,データ自体は読めてるっぽい.ただ画面に反映されない.試しに,別のメモリに読み込んでからVRAMにコピーしたら普通に表示された.
……ありがち.
*NDS::画面モード
DSの画面モードの仕組みが分かってきた.
- videoSetModeでモードを指定
- vramSetBankA~IでVRAMを実メモリにマップ
- BGx_CRでどのバックグラウンドにどのVRAMを使うかや重ねる順番を指定
という風な動作をしているっぽい.
videoSetModeで設定できるモードは,0~6とフレームバッファモードがある.フレームバッファはそのままなのでOK.
あとは,各モードにある,バックグラウンドというものが難関.各モードにある4つのバックグラウンドは要するにレイヤーだった.自由に重ね合わせたりできる.
ただ,BGx_CRで指定するVRAMが重ならないように自分で設定しないといけない.拡張回転バックグラウンドで使うBG_GFXもずれるので,自分でずらすか,BG_BMP_RAM(base)で得られるアドレスを使わないといけない.BG_BMP_RAM(base)の定義は(((base)*0x4000) + 0x06000000)みたいになってるので,そのままポインタにキャストすればOK.
ダブルバッファリングとかはBGx_CRでVRAMのアドレスを入れ替えればいいのかな?サンプルはたくさんあるから,あとで確認しよう.
MAINは拡張回転BG+テキスト,SUBは拡張回転BGという設定ならこんな感じ.
videoSetMode(MODE_5_2D | DISPLAY_BG2_ACTIVE|DISPLAY_BG0_ACTIVE); vramSetBankA(VRAM_A_MAIN_BG); vramSetBankB(VRAM_B_MAIN_BG_0x06020000); videoSetModeSub(MODE_5_2D | DISPLAY_BG2_ACTIVE); vramSetBankC(VRAM_C_SUB_BG); BG0_CR = BG_MAP_BASE(0) |BG_TILE_BASE(1)| BG_PRIORITY(1); BG2_CR = BG_BMP16_256x256 |BG_BMP_BASE(2) | BG_PRIORITY(2); SUB_BG2_CR = BG_BMP16_256x256 | BG_PRIORITY(1); BG_PALETTE[0] = 0x0000; BG_PALETTE[255] = RGB15(31,31,31); consoleInitDefault((u16*)SCREEN_BASE_BLOCK(0), (u16*)CHAR_BASE_BLOCK(1), 16);