BGモードによっては、タイルやマップの使い方を指定するため、BG制御レジスタを設定します。
背景はBG0~BG3の4枚があり、それぞれに対応するBG制御レジスタがあります。
0x0400_0008 - BG0CNT - BG0制御レジスタ (R/W) (BGモード 0,1 のみ)
0x0400_000a - BG1CNT - BG1制御レジスタ (R/W) (BGモード 0,1 のみ)
0x0400_000c - BG2CNT - BG2制御レジスタ (R/W) (BGモード 0,1,2 のみ)
0x0400_000e - BG3CNT - BG3制御レジスタ (R/W) (BGモード 0,2 のみ)
Bit 0-1 BG優先度(0~3, 0=最高)
優先度が同じBGが複数ある場合はBG0 -> BG3の順に優先(つまりBG0が最優先)
Bit 2-3 タイルデータ(16KB単位)を置くブロック
0: 0x0600_0000
1: 0x0600_4000
2: 0x0600_8000
3: 0x0600_C000
Bit 4-5 未使用(0b00)
Bit 6 モザイク (0=無効, 1=有効)
Bit 7 カラーモード
0: 16/16(16色のパレットが16個)
1: 256/1(256色のパレットが1個)
Bit 8-12 マップデータ(2KB単位)を置くブロック (0-31)
n: 0x0600_0000 + (0x800)*n
Bit 13 画面オーバーフロー時の挙動 (BG2,3のみ)
0: Transparent
1: Wraparound
Bit 14-15 画面サイズ
通常時:
0: 256×256 px
1: 512x256 px
2: 256x512 px
3: 512x512 px
伸縮回転モード時:
0: 128x128 px
1: 256x256 px
2: 512x512 px
3: 1024x1024 px
タイルモードでは、VRAMをタイルデータ(16KB単位)とマップデータ(2KB単位)で共有しますので、各データサイズを計算して、アドレスがが互いに重ならないように注意する必要があります。
たとえばタイルブロック番号2、マップ番号16のようにしてはいけません。