contains the basic defnitions for controlling the video hardware. More...
#include <nds/ndstypes.h>
#include <nds/arm9/sassert.h>
Defines | |
#define | ARGB16(a, r, g, b) ( ((a) << 15) | (r)|((g)<<5)|((b)<<10)) |
Macro to convert 5 bit r g b components plus 1 bit alpha into a single 16 bit ARGB triplet. | |
#define | BG_GFX ((u16*)0x6000000) |
background graphics memory | |
#define | BG_GFX_SUB ((u16*)0x6200000) |
background graphics memory (sub engine) | |
#define | BG_PALETTE ((u16*)0x05000000) |
background palette memory | |
#define | BG_PALETTE_SUB ((u16*)0x05000400) |
background palette memory (sub engine) | |
#define | OAM ((u16*)0x07000000) |
pointer to Object Attribute Memory | |
#define | OAM_SUB ((u16*)0x07000400) |
pointer to Object Attribute Memory (Sub engine) | |
#define | RGB15(r, g, b) ((r)|((g)<<5)|((b)<<10)) |
Macro to convert 5 bit r g b components into a single 15 bit RGB triplet. | |
#define | SCREEN_HEIGHT 192 |
Screen height in pixels. | |
#define | SCREEN_WIDTH 256 |
Screen width in pixels. | |
#define | SPRITE_GFX ((u16*)0x6400000) |
sprite graphics memory | |
#define | SPRITE_GFX_SUB ((u16*)0x6600000) |
sprite graphics memory (sub engine) | |
#define | SPRITE_PALETTE ((u16*)0x05000200) |
sprite palette memory | |
#define | SPRITE_PALETTE_SUB ((u16*)0x05000600) |
sprite palette memory (sub engine) | |
#define | VRAM_A ((u16*)0x6800000) |
pointer to vram bank A mapped as LCD | |
#define | VRAM_B ((u16*)0x6820000) |
pointer to vram bank B mapped as LCD | |
#define | VRAM_C ((u16*)0x6840000) |
pointer to vram bank C mapped as LCD | |
#define | VRAM_D ((u16*)0x6860000) |
pointer to vram bank D mapped as LCD | |
#define | VRAM_E ((u16*)0x6880000) |
pointer to vram bank E mapped as LCD | |
#define | VRAM_E_EXT_PALETTE ((_ext_palette *)VRAM_E) |
Used for accessing vram E as an extended palette. | |
#define | VRAM_F ((u16*)0x6890000) |
pointer to vram bank F mapped as LCD | |
#define | VRAM_F_EXT_PALETTE ((_ext_palette *)VRAM_F) |
Used for accessing vram F as an extended palette. | |
#define | VRAM_F_EXT_SPR_PALETTE ((_palette *)VRAM_F) |
Used for accessing vram F as an extended sprite palette. | |
#define | VRAM_G ((u16*)0x6894000) |
pointer to vram bank G mapped as LCD | |
#define | VRAM_G_EXT_PALETTE ((_ext_palette *)VRAM_G) |
Used for accessing vram G as an extended palette. | |
#define | VRAM_G_EXT_SPR_PALETTE ((_palette *)VRAM_G) |
Used for accessing vram G as an extended sprite palette. | |
#define | VRAM_H ((u16*)0x6898000) |
pointer to vram bank H mapped as LCD | |
#define | VRAM_H_EXT_PALETTE ((_ext_palette *)VRAM_H) |
Used for accessing vram H as an extended palette. | |
#define | VRAM_I ((u16*)0x68A0000) |
pointer to vram bank I mapped as LCD | |
#define | VRAM_I_EXT_SPR_PALETTE ((_palette *)VRAM_I) |
Used for accessing vram I as an extended sprite palette. | |
Typedefs | |
typedef _palette | _ext_palette [16] |
An array of 16 256-color palettes. | |
typedef u16 | _palette [256] |
an array of 256 15-bit RGB values | |
Enumerations | |
enum | VideoMode { MODE_0_2D = 0x10000, MODE_1_2D = 0x10001, MODE_2_2D = 0x10002, MODE_3_2D = 0x10003, MODE_4_2D = 0x10004, MODE_5_2D = 0x10005, MODE_6_2D = 0x10006, MODE_0_3D = (0x10000 | (1 << 8) | (1<<3) ), MODE_1_3D = (0x10001 | (1 << 8) | (1<<3) ), MODE_2_3D = (0x10002 | (1 << 8) | (1<<3) ), MODE_3_3D = (0x10003 | (1 << 8) | (1<<3) ), MODE_4_3D = (0x10004 | (1 << 8) | (1<<3) ), MODE_5_3D = (0x10005 | (1 << 8) | (1<<3) ), MODE_6_3D = (0x10006 | (1 << 8) | (1<<3) ), MODE_FIFO = (3<<16), MODE_FB0 = (0x00020000), MODE_FB1 = (0x00060000), MODE_FB2 = (0x000A0000), MODE_FB3 = (0x000E0000) } |
The allowed video modes of the 2D processors | |
enum | VRAM_A_TYPE { VRAM_A_LCD = 0, VRAM_A_MAIN_BG = 1, VRAM_A_MAIN_BG_0x06000000 = 1 | (( 0 )<<3), VRAM_A_MAIN_BG_0x06020000 = 1 | (( 1 )<<3), VRAM_A_MAIN_BG_0x06040000 = 1 | (( 2 )<<3), VRAM_A_MAIN_BG_0x06060000 = 1 | (( 3 )<<3), VRAM_A_MAIN_SPRITE = 2, VRAM_A_MAIN_SPRITE_0x06400000 = 2 | (( 0 )<<3), VRAM_A_MAIN_SPRITE_0x06420000 = 2 | (( 1 )<<3), VRAM_A_TEXTURE = 3, VRAM_A_TEXTURE_SLOT0 = 3 | (( 0 )<<3), VRAM_A_TEXTURE_SLOT1 = 3 | (( 1 )<<3), VRAM_A_TEXTURE_SLOT2 = 3 | (( 2 )<<3), VRAM_A_TEXTURE_SLOT3 = 3 | (( 3 )<<3) } |
Allowed VRAM bank A modes. More... | |
enum | VRAM_B_TYPE { VRAM_B_LCD = 0, VRAM_B_MAIN_BG = 1 | (( 1 )<<3), VRAM_B_MAIN_BG_0x06000000 = 1 | (( 0 )<<3), VRAM_B_MAIN_BG_0x06020000 = 1 | (( 1 )<<3), VRAM_B_MAIN_BG_0x06040000 = 1 | (( 2 )<<3), VRAM_B_MAIN_BG_0x06060000 = 1 | (( 3 )<<3), VRAM_B_MAIN_SPRITE = 2, VRAM_B_MAIN_SPRITE_0x06400000 = 2 | (( 0 )<<3), VRAM_B_MAIN_SPRITE_0x06420000 = 2 | (( 1 )<<3), VRAM_B_TEXTURE = 3 | (( 1 )<<3), VRAM_B_TEXTURE_SLOT0 = 3 | (( 0 )<<3), VRAM_B_TEXTURE_SLOT1 = 3 | (( 1 )<<3), VRAM_B_TEXTURE_SLOT2 = 3 | (( 2 )<<3), VRAM_B_TEXTURE_SLOT3 = 3 | (( 3 )<<3) } |
Allowed VRAM bank B modes. More... | |
enum | VRAM_C_TYPE { VRAM_C_LCD = 0, VRAM_C_MAIN_BG = 1 | (( 2 )<<3), VRAM_C_MAIN_BG_0x06000000 = 1 | (( 0 )<<3), VRAM_C_MAIN_BG_0x06020000 = 1 | (( 1 )<<3), VRAM_C_MAIN_BG_0x06040000 = 1 | (( 2 )<<3), VRAM_C_MAIN_BG_0x06060000 = 1 | (( 3 )<<3), VRAM_C_ARM7 = 2, VRAM_C_ARM7_0x06000000 = 2 | (( 0 )<<3), VRAM_C_ARM7_0x06020000 = 2 | (( 1 )<<3), VRAM_C_SUB_BG = 4, VRAM_C_SUB_BG_0x06200000 = 4 | (( 0 )<<3), VRAM_C_TEXTURE = 3 | (( 2 )<<3), VRAM_C_TEXTURE_SLOT0 = 3 | (( 0 )<<3), VRAM_C_TEXTURE_SLOT1 = 3 | (( 1 )<<3), VRAM_C_TEXTURE_SLOT2 = 3 | (( 2 )<<3), VRAM_C_TEXTURE_SLOT3 = 3 | (( 3 )<<3) } |
Allowed VRAM bank C modes. More... | |
enum | VRAM_D_TYPE { VRAM_D_LCD = 0, VRAM_D_MAIN_BG = 1 | (( 3 )<<3), VRAM_D_MAIN_BG_0x06000000 = 1 | (( 0 )<<3), VRAM_D_MAIN_BG_0x06020000 = 1 | (( 1 )<<3), VRAM_D_MAIN_BG_0x06040000 = 1 | (( 2 )<<3), VRAM_D_MAIN_BG_0x06060000 = 1 | (( 3 )<<3), VRAM_D_ARM7 = 2 | (( 1 )<<3), VRAM_D_ARM7_0x06000000 = 2 | (( 0 )<<3), VRAM_D_ARM7_0x06020000 = 2 | (( 1 )<<3), VRAM_D_SUB_SPRITE = 4, VRAM_D_TEXTURE = 3 | (( 3 )<<3), VRAM_D_TEXTURE_SLOT0 = 3 | (( 0 )<<3), VRAM_D_TEXTURE_SLOT1 = 3 | (( 1 )<<3), VRAM_D_TEXTURE_SLOT2 = 3 | (( 2 )<<3), VRAM_D_TEXTURE_SLOT3 = 3 | (( 3 )<<3) } |
Allowed VRAM bank D modes. More... | |
enum | VRAM_E_TYPE { VRAM_E_LCD = 0, VRAM_E_MAIN_BG = 1, VRAM_E_MAIN_SPRITE = 2, VRAM_E_TEX_PALETTE = 3, VRAM_E_BG_EXT_PALETTE = 4 } |
Allowed VRAM bank E modes. More... | |
enum | VRAM_F_TYPE { VRAM_F_LCD = 0, VRAM_F_MAIN_BG = 1, VRAM_F_MAIN_BG_0x06000000 = 1 | (( 0 )<<3), VRAM_F_MAIN_BG_0x06004000 = 1 | (( 1 )<<3), VRAM_F_MAIN_BG_0x06010000 = 1 | (( 2 )<<3), VRAM_F_MAIN_BG_0x06014000 = 1 | (( 3 )<<3), VRAM_F_MAIN_SPRITE = 2, VRAM_F_MAIN_SPRITE_0x06400000 = 2 | (( 0 )<<3), VRAM_F_MAIN_SPRITE_0x06404000 = 2 | (( 1 )<<3), VRAM_F_MAIN_SPRITE_0x06410000 = 2 | (( 2 )<<3), VRAM_F_MAIN_SPRITE_0x06414000 = 2 | (( 3 )<<3), VRAM_F_TEX_PALETTE = 3, VRAM_F_TEX_PALETTE_SLOT0 = 3 | (( 0 )<<3), VRAM_F_TEX_PALETTE_SLOT1 = 3 | (( 1 )<<3), VRAM_F_TEX_PALETTE_SLOT4 = 3 | (( 2 )<<3), VRAM_F_TEX_PALETTE_SLOT5 = 3 | (( 3 )<<3), VRAM_F_BG_EXT_PALETTE = 4, VRAM_F_BG_EXT_PALETTE_SLOT01 = 4 | (( 0 )<<3), VRAM_F_BG_EXT_PALETTE_SLOT23 = 4 | (( 1 )<<3), VRAM_F_SPRITE_EXT_PALETTE = 5 } |
Allowed VRAM bank F modes. More... | |
enum | VRAM_G_TYPE { VRAM_G_LCD = 0, VRAM_G_MAIN_BG = 1, VRAM_G_MAIN_BG_0x06000000 = 1 | (( 0 )<<3), VRAM_G_MAIN_BG_0x06004000 = 1 | (( 1 )<<3), VRAM_G_MAIN_BG_0x06010000 = 1 | (( 2 )<<3), VRAM_G_MAIN_BG_0x06014000 = 1 | (( 3 )<<3), VRAM_G_MAIN_SPRITE = 2, VRAM_G_MAIN_SPRITE_0x06400000 = 2 | (( 0 )<<3), VRAM_G_MAIN_SPRITE_0x06404000 = 2 | (( 1 )<<3), VRAM_G_MAIN_SPRITE_0x06410000 = 2 | (( 2 )<<3), VRAM_G_MAIN_SPRITE_0x06414000 = 2 | (( 3 )<<3), VRAM_G_TEX_PALETTE = 3, VRAM_G_TEX_PALETTE_SLOT0 = 3 | (( 0 )<<3), VRAM_G_TEX_PALETTE_SLOT1 = 3 | (( 1 )<<3), VRAM_G_TEX_PALETTE_SLOT4 = 3 | (( 2 )<<3), VRAM_G_TEX_PALETTE_SLOT5 = 3 | (( 3 )<<3), VRAM_G_BG_EXT_PALETTE = 4, VRAM_G_BG_EXT_PALETTE_SLOT01 = 4 | (( 0 )<<3), VRAM_G_BG_EXT_PALETTE_SLOT23 = 4 | (( 1 )<<3), VRAM_G_SPRITE_EXT_PALETTE = 5 } |
Allowed VRAM bank G modes. More... | |
enum | VRAM_H_TYPE { VRAM_H_LCD = 0, VRAM_H_SUB_BG = 1, VRAM_H_SUB_BG_EXT_PALETTE = 2 } |
Allowed VRAM bank H modes. More... | |
enum | VRAM_I_TYPE { VRAM_I_LCD = 0, VRAM_I_SUB_BG_0x06208000 = 1, VRAM_I_SUB_SPRITE = 2, VRAM_I_SUB_SPRITE_EXT_PALETTE = 3 } |
Allowed VRAM bank I modes. More... | |
Functions | |
static void | setBackdropColor (const u16 color) |
sets the backdrop color of the main engine. | |
static void | setBackdropColorSub (const u16 color) |
sets the backdrop color of the sub engine. | |
void | setBrightness (int screen, int level) |
sets the screens brightness. | |
static bool | video3DEnabled () |
determine if 3D is enabled | |
static void | videoBgDisable (int number) |
disables the specified background on the main engine | |
static void | videoBgDisableSub (int number) |
disables the specified background on the sub engine | |
static void | videoBgEnable (int number) |
enables the specified background on the main engine | |
static void | videoBgEnableSub (int number) |
enables the specified background on the sub engine | |
static int | videoGetMode () |
return the main 2D engine video mode | |
static int | videoGetModeSub () |
return the main 2D engine video mode | |
static void | videoSetMode (u32 mode) |
the main 2D engine video mode | |
static void | videoSetModeSub (u32 mode) |
the sub 2D engine video mode | |
u32 | vramDefault () |
Set VRAM banks to basic default. | |
void | vramRestoreMainBanks (u32 vramTemp) |
Restore the main 4 bank modes. | |
static void | vramSetBankA (VRAM_A_TYPE a) |
Set bank A to the indicated mapping. | |
static void | vramSetBankB (VRAM_B_TYPE b) |
Set bank B to the indicated mapping. | |
static void | vramSetBankC (VRAM_C_TYPE c) |
Set bank C to the indicated mapping. | |
static void | vramSetBankD (VRAM_D_TYPE d) |
Set bank D to the indicated mapping. | |
static void | vramSetBankE (VRAM_E_TYPE e) |
Set bank E to the indicated mapping. | |
static void | vramSetBankF (VRAM_F_TYPE f) |
Set bank F to the indicated mapping. | |
static void | vramSetBankG (VRAM_G_TYPE g) |
Set bank G to the indicated mapping. | |
static void | vramSetBankH (VRAM_H_TYPE h) |
Set bank H to the indicated mapping. | |
static void | vramSetBankI (VRAM_I_TYPE i) |
Set bank I to the indicated mapping. | |
u32 | vramSetMainBanks (VRAM_A_TYPE a, VRAM_B_TYPE b, VRAM_C_TYPE c, VRAM_D_TYPE d) |
Set the main 4 bank modes. |
contains the basic defnitions for controlling the video hardware.
Video.h contains the basic defnitions for controlling the video hardware.
The Nintendo DS has nine banks of video memory which may be put to a variety of uses. They can hold the graphics for your sprites, the textures for your 3D space ships, the tiles for your 2D platformer, or a direct map of pixels to render to the screen. Figuring out how to effectively utilize this flexible but limited amount of memory will be one the most challenging endeavors you will face early homebrew development.
The nine banks can be utilized as enumerated by the VRAM types. Banks are labled A-I. In order to utilize 2D or 3D texture graphics, memory must be mapped for these purposes.
For instance: If you initialize a 2D background on the main engine you will be expected to define both an offset for its map data and an offset for its tile graphics (bitmapped backgrounds differ slightly). These offsets are referenced from the start of 2D background graphics memory. On the main display 2D background graphics begin at 0x6000000.
Without mapping a VRAM bank to this location data written to your background tile and map offsets will be lost.
VRAM banks can be mapped to specific addresses for specific purposes. In our case, any of the 4 main banks amd several of the smaller ones can be mapped to the main 2D background engine.(A B C and D banks are refered to as ìmainî because they are 128KB and flexible in usage)
vramSetBankA(VRAM_A_MAIN_BG);
The above would map the 128KB of VRAM_A to 0x6000000 for use as main background graphics and maps (you can offset the mapping as well and the available offsets are defined in the VRAM_A_TYPE enumberation)
enum VideoMode |
The allowed video modes of the 2D processors
Main 2D engine ______________________________ |Mode | BG0 | BG1 | BG2 |BG3 | T = Text | 0 | T | T | T | T | R = Rotation | 1 | T | T | T | R | E = Extended Rotation | 2 | T | T | R | R | L = Large Bitmap background | 3 | T | T | T | E | | 4 | T | T | R | E | | 5 | T | T | E | E | | 6 | | L | | | -----------------------------
Sub 2D engine ______________________________ |Mode | BG0 | BG1 | BG2 |BG3 | | 0 | T | T | T | T | | 1 | T | T | T | R | | 2 | T | T | R | R | | 3 | T | T | T | E | | 4 | T | T | R | E | | 5 | T | T | E | E | -----------------------------
enum VRAM_A_TYPE |
Allowed VRAM bank A modes.
enum VRAM_B_TYPE |
Allowed VRAM bank B modes.
enum VRAM_C_TYPE |
Allowed VRAM bank C modes.
enum VRAM_D_TYPE |
Allowed VRAM bank D modes.
enum VRAM_E_TYPE |
Allowed VRAM bank E modes.
enum VRAM_F_TYPE |
Allowed VRAM bank F modes.
enum VRAM_G_TYPE |
Allowed VRAM bank G modes.
enum VRAM_H_TYPE |
enum VRAM_I_TYPE |
static void setBackdropColor | ( | const u16 | color | ) | [inline, static] |
sets the backdrop color of the main engine.
the backdrop color is displayed when all pixels at a given location are transparent (no sprite or background is visible there).
color | the color that the backdrop of the main engine should display. |
static void setBackdropColorSub | ( | const u16 | color | ) | [inline, static] |
sets the backdrop color of the sub engine.
the backdrop color is displayed when all pixels at a given location are transparent (no sprite or background is visible there).
color | the color that the backdrop of the sub engine should display. |
void setBrightness | ( | int | screen, | |
int | level | |||
) |
sets the screens brightness.
screen | 1 = main screen, 2 = subscreen, 3 = both | |
level | -16 = black, 0 = full brightness, 16 = white |
static bool video3DEnabled | ( | ) | [inline, static] |
determine if 3D is enabled
static void videoBgDisable | ( | int | number | ) | [inline, static] |
disables the specified background on the main engine
number | the background number (0-3) |
static void videoBgDisableSub | ( | int | number | ) | [inline, static] |
disables the specified background on the sub engine
number | the background number (0-3) |
static void videoBgEnable | ( | int | number | ) | [inline, static] |
enables the specified background on the main engine
number | the background number (0-3) |
static void videoBgEnableSub | ( | int | number | ) | [inline, static] |
enables the specified background on the sub engine
number | the background number (0-3) |
static int videoGetMode | ( | ) | [inline, static] |
return the main 2D engine video mode
static int videoGetModeSub | ( | ) | [inline, static] |
return the main 2D engine video mode
static void videoSetMode | ( | u32 | mode | ) | [inline, static] |
the main 2D engine video mode
mode | the video mode to set |
static void videoSetModeSub | ( | u32 | mode | ) | [inline, static] |
the sub 2D engine video mode
mode | the video mode to set |
u32 vramDefault | ( | ) |
Set VRAM banks to basic default.
void vramRestoreMainBanks | ( | u32 | vramTemp | ) |
Restore the main 4 bank modes.
vramTemp | restores the main 4 banks to the value encoded in vramTemp (returned from vramSetMainBanks) |
static void vramSetBankA | ( | VRAM_A_TYPE | a | ) | [inline, static] |
Set bank A to the indicated mapping.
a | the mapping of the bank |
static void vramSetBankB | ( | VRAM_B_TYPE | b | ) | [inline, static] |
Set bank B to the indicated mapping.
b | the mapping of the bank |
static void vramSetBankC | ( | VRAM_C_TYPE | c | ) | [inline, static] |
Set bank C to the indicated mapping.
c | the mapping of the bank |
static void vramSetBankD | ( | VRAM_D_TYPE | d | ) | [inline, static] |
Set bank D to the indicated mapping.
d | the mapping of the bank |
static void vramSetBankE | ( | VRAM_E_TYPE | e | ) | [inline, static] |
Set bank E to the indicated mapping.
e | the mapping of the bank |
static void vramSetBankF | ( | VRAM_F_TYPE | f | ) | [inline, static] |
Set bank F to the indicated mapping.
f | the mapping of the bank |
static void vramSetBankG | ( | VRAM_G_TYPE | g | ) | [inline, static] |
Set bank G to the indicated mapping.
g | the mapping of the bank |
static void vramSetBankH | ( | VRAM_H_TYPE | h | ) | [inline, static] |
Set bank H to the indicated mapping.
h | the mapping of the bank |
static void vramSetBankI | ( | VRAM_I_TYPE | i | ) | [inline, static] |
Set bank I to the indicated mapping.
i | the mapping of the bank |
u32 vramSetMainBanks | ( | VRAM_A_TYPE | a, | |
VRAM_B_TYPE | b, | |||
VRAM_C_TYPE | c, | |||
VRAM_D_TYPE | d | |||
) |
Set the main 4 bank modes.
a | mapping mode of VRAM_A | |
b | mapping mode of VRAM_B | |
c | mapping mode of VRAM_C | |
d | mapping mode of VRAM_D |