Repository URL to install this package:
|
Version:
3.0.0 ▾
|
{$ifndef ARM9}
{$error Video is only available on the ARM9}
{$endif ARM9}
{$ifdef NDS_INTERFACE}
var
mosaicShadow: cuint16; cvar; external;
mosaicShadowSub: cuint16; cvar; external;
const
BG_PALETTE : pcuint16 = pointer($05000000);
BG_PALETTE_SUB : pcuint16 = pointer($05000400);
SPRITE_PALETTE : pcuint16 = pointer($05000200);
SPRITE_PALETTE_SUB : pcuint16 = pointer($05000600);
BG_GFX : pcuint16 = pointer($06000000);
BG_GFX_SUB : pcuint16 = pointer($06200000);
SPRITE_GFX : pcuint16 = pointer($06400000);
SPRITE_GFX_SUB : pcuint16 = pointer($06600000);
VRAM_0 : pcuint16 = pointer($06000000);
VRAM : pcuint16 = pointer($06800000);
VRAM_A : pcuint16 = pointer($06800000);
VRAM_B : pcuint16 = pointer($06820000);
VRAM_C : pcuint16 = pointer($06840000);
VRAM_D : pcuint16 = pointer($06860000);
VRAM_E : pcuint16 = pointer($06880000);
VRAM_F : pcuint16 = pointer($06890000);
VRAM_G : pcuint16 = pointer($06894000);
VRAM_H : pcuint16 = pointer($06898000);
VRAM_I : pcuint16 = pointer($068A0000);
OAM : pcuint16 = pointer($07000000);
OAM_SUB : pcuint16 = pointer($07000400);
function RGB15(r, g, b: cint): cuint16; inline;
function RGB5(r, g, b: cint): cuint16; inline;
function RGB8(r, g, b: cint): cuint8; inline;
function ARGB16(a, r, g, b: cint): cuint16; inline;
const
SCREEN_HEIGHT = 192;
SCREEN_WIDTH = 256;
// Vram Control
VRAM_CR : pcuint32 = pointer($04000240);
VRAM_A_CR : pcuint8 = pointer($04000240);
VRAM_B_CR : pcuint8 = pointer($04000241);
VRAM_C_CR : pcuint8 = pointer($04000242);
VRAM_D_CR : pcuint8 = pointer($04000243);
VRAM_EFG_CR : pcuint8 = pointer($04000244);
VRAM_E_CR : pcuint8 = pointer($04000244);
VRAM_F_CR : pcuint8 = pointer($04000245);
VRAM_G_CR : pcuint8 = pointer($04000246);
WRAM_CR : pcuint8 = pointer($04000247);
VRAM_H_CR : pcuint8 = pointer($04000248);
VRAM_I_CR : pcuint8 = pointer($04000249);
VRAM_ENABLE = (1 shl 7);
function VRAM_OFFSET(n: cint): cint; inline;
type
VRAM_A_TYPE = cint;
const
VRAM_A_LCD : VRAM_A_TYPE = 0;
VRAM_A_MAIN_BG : VRAM_A_TYPE = 1;
VRAM_A_MAIN_BG_0x06000000 : VRAM_A_TYPE = 1 or (0 shl 3);
VRAM_A_MAIN_BG_0x06020000 : VRAM_A_TYPE = 1 or (1 shl 3);
VRAM_A_MAIN_BG_0x06040000 : VRAM_A_TYPE = 1 or (2 shl 3);
VRAM_A_MAIN_BG_0x06060000 : VRAM_A_TYPE = 1 or (3 shl 3);
VRAM_A_MAIN_SPRITE : VRAM_A_TYPE = 2;
VRAM_A_MAIN_SPRITE_0x06400000 : VRAM_A_TYPE = 2;
VRAM_A_MAIN_SPRITE_0x06420000 : VRAM_A_TYPE = 2 or (1 shl 3);
VRAM_A_TEXTURE : VRAM_A_TYPE = 3;
VRAM_A_TEXTURE_SLOT0 : VRAM_A_TYPE = 3 or (0 shl 3);
VRAM_A_TEXTURE_SLOT1 : VRAM_A_TYPE = 3 or (1 shl 3);
VRAM_A_TEXTURE_SLOT2 : VRAM_A_TYPE = 3 or (2 shl 3);
VRAM_A_TEXTURE_SLOT3 : VRAM_A_TYPE = 3 or (3 shl 3);
type
VRAM_B_TYPE = cint;
const
VRAM_B_LCD : VRAM_B_TYPE = 0;
VRAM_B_MAIN_BG : VRAM_B_TYPE = 1 or (1 shl 3);
VRAM_B_MAIN_BG_0x06000000 : VRAM_B_TYPE = 1 or (0 shl 3);
VRAM_B_MAIN_BG_0x06020000 : VRAM_B_TYPE = 1 or (1 shl 3);
VRAM_B_MAIN_BG_0x06040000 : VRAM_B_TYPE = 1 or (2 shl 3);
VRAM_B_MAIN_BG_0x06060000 : VRAM_B_TYPE = 1 or (3 shl 3);
VRAM_B_MAIN_SPRITE : VRAM_B_TYPE = 2 or (1 shl 3);
VRAM_B_MAIN_SPRITE_0x06400000 : VRAM_B_TYPE = 2;
VRAM_B_MAIN_SPRITE_0x06420000 : VRAM_B_TYPE = 2 or (1 shl 3);
VRAM_B_TEXTURE : VRAM_B_TYPE = 3 or (1 shl 3);
VRAM_B_TEXTURE_SLOT0 : VRAM_B_TYPE = 3 or (0 shl 3);
VRAM_B_TEXTURE_SLOT1 : VRAM_B_TYPE = 3 or (1 shl 3);
VRAM_B_TEXTURE_SLOT2 : VRAM_B_TYPE = 3 or (2 shl 3);
VRAM_B_TEXTURE_SLOT3 : VRAM_B_TYPE = 3 or (3 shl 3);
type
VRAM_C_TYPE = cint;
const
VRAM_C_LCD : VRAM_C_TYPE = 0;
VRAM_C_MAIN_BG : VRAM_C_TYPE = 1 or (2 shl 3);
VRAM_C_MAIN_BG_0x06000000 : VRAM_C_TYPE = 1 or (0 shl 3);
VRAM_C_MAIN_BG_0x06020000 : VRAM_C_TYPE = 1 or (1 shl 3);
VRAM_C_MAIN_BG_0x06040000 : VRAM_C_TYPE = 1 or (2 shl 3);
VRAM_C_MAIN_BG_0x06060000 : VRAM_C_TYPE = 1 or (3 shl 3);
VRAM_C_ARM7 : VRAM_C_TYPE = 2;
VRAM_C_ARM7_0x06000000 : VRAM_C_TYPE = 2;
VRAM_C_ARM7_0x06020000 : VRAM_C_TYPE = 2 or (1 shl 3);
VRAM_C_SUB_BG : VRAM_C_TYPE = 4;
VRAM_C_SUB_BG_0x06200000 : VRAM_C_TYPE = 4 or (0 shl 3);
VRAM_C_TEXTURE : VRAM_C_TYPE = 3 or (2 shl 3);
VRAM_C_TEXTURE_SLOT0 : VRAM_C_TYPE = 3 or (0 shl 3);
VRAM_C_TEXTURE_SLOT1 : VRAM_C_TYPE = 3 or (1 shl 3);
VRAM_C_TEXTURE_SLOT2 : VRAM_C_TYPE = 3 or (2 shl 3);
VRAM_C_TEXTURE_SLOT3 : VRAM_C_TYPE = 3 or (3 shl 3);
type
VRAM_D_TYPE = cint;
const
VRAM_D_LCD : VRAM_D_TYPE = 0;
VRAM_D_MAIN_BG : VRAM_D_TYPE = 1 or (3 shl 3);
VRAM_D_MAIN_BG_0x06000000 : VRAM_D_TYPE = 1 or (0 shl 3);
VRAM_D_MAIN_BG_0x06020000 : VRAM_D_TYPE = 1 or (1 shl 3);
VRAM_D_MAIN_BG_0x06040000 : VRAM_D_TYPE = 1 or (2 shl 3);
VRAM_D_MAIN_BG_0x06060000 : VRAM_D_TYPE = 1 or (3 shl 3);
VRAM_D_ARM7 : VRAM_D_TYPE = 2 or (1 shl 3);
VRAM_D_ARM7_0x06000000 : VRAM_D_TYPE = 2;
VRAM_D_ARM7_0x06020000 : VRAM_D_TYPE = 2 or (1 shl 3);
VRAM_D_SUB_SPRITE : VRAM_D_TYPE = 4;
VRAM_D_TEXTURE : VRAM_D_TYPE = 3 or (3 shl 3);
VRAM_D_TEXTURE_SLOT0 : VRAM_D_TYPE = 3 or (0 shl 3);
VRAM_D_TEXTURE_SLOT1 : VRAM_D_TYPE = 3 or (1 shl 3);
VRAM_D_TEXTURE_SLOT2 : VRAM_D_TYPE = 3 or (2 shl 3);
VRAM_D_TEXTURE_SLOT3 : VRAM_D_TYPE = 3 or (3 shl 3);
type
VRAM_E_TYPE = cint;
const
VRAM_E_LCD : VRAM_E_TYPE = 0;
VRAM_E_MAIN_BG : VRAM_E_TYPE = 1;
VRAM_E_MAIN_SPRITE : VRAM_E_TYPE = 2;
VRAM_E_TEX_PALETTE : VRAM_E_TYPE = 3;
VRAM_E_BG_EXT_PALETTE : VRAM_E_TYPE = 4;
type
VRAM_F_TYPE = cint;
const
VRAM_F_LCD : VRAM_F_TYPE = 0;
VRAM_F_MAIN_BG : VRAM_F_TYPE = 1;
VRAM_F_MAIN_BG_0x06000000 : VRAM_F_TYPE = 1;
VRAM_F_MAIN_BG_0x06004000 : VRAM_F_TYPE = 1 or (1 shl 3);
VRAM_F_MAIN_BG_0x06010000 : VRAM_F_TYPE = 1 or (2 shl 3);
VRAM_F_MAIN_BG_0x06014000 : VRAM_F_TYPE = 1 or (3 shl 3);
VRAM_F_MAIN_SPRITE : VRAM_F_TYPE = 2;
VRAM_F_MAIN_SPRITE_0x06400000 : VRAM_F_TYPE = 2;
VRAM_F_MAIN_SPRITE_0x06404000 : VRAM_F_TYPE = 2 or (1 shl 3);
VRAM_F_MAIN_SPRITE_0x06410000 : VRAM_F_TYPE = 2 or (2 shl 3);
VRAM_F_MAIN_SPRITE_0x06414000 : VRAM_F_TYPE = 2 or (3 shl 3);
VRAM_F_TEX_PALETTE : VRAM_F_TYPE = 3;
VRAM_F_TEX_PALETTE_SLOT0 : VRAM_F_TYPE = 3;
VRAM_F_TEX_PALETTE_SLOT1 : VRAM_F_TYPE = 3 or (1 shl 3);
VRAM_F_TEX_PALETTE_SLOT4 : VRAM_F_TYPE = 3 or (2 shl 3);
VRAM_F_TEX_PALETTE_SLOT5 : VRAM_F_TYPE = 3 or (3 shl 3);
VRAM_F_BG_EXT_PALETTE : VRAM_F_TYPE = 4;
VRAM_F_BG_EXT_PALETTE_SLOT01 : VRAM_F_TYPE = 4 or (0 shl 3);
VRAM_F_BG_EXT_PALETTE_SLOT23 : VRAM_F_TYPE = 4 or (1 shl 3);
VRAM_F_SPRITE_EXT_PALETTE : VRAM_F_TYPE = 5;
type
VRAM_G_TYPE = cint;
const
VRAM_G_LCD : VRAM_G_TYPE = 0;
VRAM_G_MAIN_BG : VRAM_G_TYPE = 1;
VRAM_G_MAIN_BG_0x06000000 : VRAM_G_TYPE = 1;
VRAM_G_MAIN_BG_0x06004000 : VRAM_G_TYPE = 1 or (1 shl 3);
VRAM_G_MAIN_BG_0x06010000 : VRAM_G_TYPE = 1 or (2 shl 3);
VRAM_G_MAIN_BG_0x06014000 : VRAM_G_TYPE = 1 or (3 shl 3);
VRAM_G_MAIN_SPRITE : VRAM_G_TYPE = 2;
VRAM_G_MAIN_SPRITE_0x06400000 : VRAM_G_TYPE = 2;
VRAM_G_MAIN_SPRITE_0x06404000 : VRAM_G_TYPE = 2 or (1 shl 3);
VRAM_G_MAIN_SPRITE_0x06410000 : VRAM_G_TYPE = 2 or (2 shl 3);
VRAM_G_MAIN_SPRITE_0x06414000 : VRAM_G_TYPE = 2 or (3 shl 3);
VRAM_G_TEX_PALETTE : VRAM_G_TYPE = 3;
VRAM_G_TEX_PALETTE_SLOT0 : VRAM_G_TYPE = 3;
VRAM_G_TEX_PALETTE_SLOT1 : VRAM_G_TYPE = 3 or (1 shl 3);
VRAM_G_TEX_PALETTE_SLOT4 : VRAM_G_TYPE = 3 or (2 shl 3);
VRAM_G_TEX_PALETTE_SLOT5 : VRAM_G_TYPE = 3 or (3 shl 3);
VRAM_G_BG_EXT_PALETTE : VRAM_G_TYPE = 4;
VRAM_G_BG_EXT_PALETTE_SLOT01 : VRAM_G_TYPE = 4 or (0 shl 3);
VRAM_G_BG_EXT_PALETTE_SLOT23 : VRAM_G_TYPE = 4 or (1 shl 3);
VRAM_G_SPRITE_EXT_PALETTE : VRAM_G_TYPE = 5;
type
VRAM_H_TYPE = cint;
const
VRAM_H_LCD : VRAM_H_TYPE = 0;
VRAM_H_SUB_BG : VRAM_H_TYPE = 1;
VRAM_H_SUB_BG_EXT_PALETTE : VRAM_H_TYPE = 2;
type
VRAM_I_TYPE = cint;
const
VRAM_I_LCD : VRAM_I_TYPE = 0;
VRAM_I_SUB_BG_0x06208000 : VRAM_I_TYPE = 1;
VRAM_I_SUB_SPRITE : VRAM_I_TYPE = 2;
VRAM_I_SUB_SPRITE_EXT_PALETTE : VRAM_I_TYPE = 3;
type
_palette = array [0..255] of cuint16;
_ext_palette = array [0..15] of _palette;
P_palette = ^_palette;
P_ext_palette = ^_ext_palette;
var
VRAM_E_EXT_PALETTE : P_ext_palette absolute VRAM_E;
VRAM_F_EXT_PALETTE : P_ext_palette absolute VRAM_F;
VRAM_G_EXT_PALETTE : P_ext_palette absolute VRAM_G;
VRAM_H_EXT_PALETTE : P_ext_palette absolute VRAM_H;
function vramSetPrimaryBanks(a: VRAM_A_TYPE; b: VRAM_B_TYPE; c: VRAM_C_TYPE; d: VRAM_D_TYPE): cuint32; cdecl; external;
function vramSetMainBanks(a: VRAM_A_TYPE; b: VRAM_B_TYPE; c: VRAM_C_TYPE; d: VRAM_D_TYPE): cuint32; cdecl; external; deprecated;
function vramDefault(): cuint32; cdecl; external;
procedure vramRestorePrimaryBanks(vramTemp: cuint32); cdecl; external;
procedure vramRestoreMainBanks(vramTemp: cuint32); cdecl; external; deprecated;
procedure vramRestoreBanks_EFG(vramTemp: cuint32); cdecl; external;
procedure vramSetBankA(a: VRAM_A_TYPE); inline;
procedure vramSetBankB(b: VRAM_B_TYPE); inline;
procedure vramSetBankC(c: VRAM_C_TYPE); inline;
procedure vramSetBankD(d: VRAM_D_TYPE); inline;
procedure vramSetBankE(e: VRAM_E_TYPE); inline;
procedure vramSetBankF(f: VRAM_F_TYPE); inline;
procedure vramSetBankG(g: VRAM_G_TYPE); inline;
procedure vramSetBankH(h: VRAM_H_TYPE); inline;
procedure vramSetBankI(i: VRAM_I_TYPE); inline;
const
REG_DISPCNT : pcuint32 = pointer($04000000);
REG_DISPCNT_SUB : pcuint32 = pointer($04001000);
ENABLE_3D = (1 shl 3);
DISPLAY_ENABLE_SHIFT = 8;
DISPLAY_BG0_ACTIVE = (1 shl 8);
DISPLAY_BG1_ACTIVE = (1 shl 9);
DISPLAY_BG2_ACTIVE = (1 shl 10);
DISPLAY_BG3_ACTIVE = (1 shl 11);
DISPLAY_SPR_ACTIVE = (1 shl 12);
DISPLAY_WIN0_ON = (1 shl 13);
DISPLAY_WIN1_ON = (1 shl 14);
DISPLAY_SPR_WIN_ON = (1 shl 15);
type
VideoMode = integer;
const
MODE_0_2D: VideoMode = $10000;
MODE_1_2D: VideoMode = $10001;
MODE_2_2D: VideoMode = $10002;
MODE_3_2D: VideoMode = $10003;
MODE_4_2D: VideoMode = $10004;
MODE_5_2D: VideoMode = $10005;
MODE_6_2D: VideoMode = $10006;
MODE_0_3D: VideoMode = ($10000 or DISPLAY_BG0_ACTIVE or ENABLE_3D);
MODE_1_3D: VideoMode = ($10001 or DISPLAY_BG0_ACTIVE or ENABLE_3D);
MODE_2_3D: VideoMode = ($10002 or DISPLAY_BG0_ACTIVE or ENABLE_3D);
MODE_3_3D: VideoMode = ($10003 or DISPLAY_BG0_ACTIVE or ENABLE_3D);
MODE_4_3D: VideoMode = ($10004 or DISPLAY_BG0_ACTIVE or ENABLE_3D);
MODE_5_3D: VideoMode = ($10005 or DISPLAY_BG0_ACTIVE or ENABLE_3D);
MODE_6_3D: VideoMode = ($10006 or DISPLAY_BG0_ACTIVE or ENABLE_3D);
MODE_FIFO: VideoMode = (3 shl 16);
MODE_FB0 : VideoMode = ($00020000);
MODE_FB1 : VideoMode = ($00060000);
MODE_FB2 : VideoMode = ($000A0000);
MODE_FB3 : VideoMode = ($000E0000);
DISPLAY_SPR_HBLANK = (1 shl 23);
DISPLAY_SPR_1D_LAYOUT = (1 shl 4);
DISPLAY_SPR_1D = (1 shl 4);
DISPLAY_SPR_2D = (0 shl 4);
DISPLAY_SPR_1D_BMP = (4 shl 4);
DISPLAY_SPR_2D_BMP_128 = (0 shl 4);
DISPLAY_SPR_2D_BMP_256 = (2 shl 4);
DISPLAY_SPR_1D_SIZE_32 = (0 shl 20);
DISPLAY_SPR_1D_SIZE_64 = (1 shl 20);
DISPLAY_SPR_1D_SIZE_128 = (2 shl 20);
DISPLAY_SPR_1D_SIZE_256 = (3 shl 20);
DISPLAY_SPR_1D_BMP_SIZE_128 = (0 shl 22);
DISPLAY_SPR_1D_BMP_SIZE_256 = (1 shl 22);
DISPLAY_SPRITE_ATTR_MASK = ((7 shl 4) or (7 shl 20) or (1 shl 31));
DISPLAY_SPR_EXT_PALETTE = (1 shl 31);
DISPLAY_BG_EXT_PALETTE = (1 shl 30);
DISPLAY_SCREEN_OFF = (1 shl 7);
function DISPLAY_CHAR_BASE(n: cuint32): cuint32; inline;
function DISPLAY_SCREEN_BASE(n: cuint32): cuint32; inline;
procedure videoSetMode(mode: cuint32); inline;
procedure videoSetModeSub(mode: cuint32); inline;
function videoGetMode(): cint; inline;
function videoGetModeSub(): cint; inline;
function video3DEnabled(): cbool; inline;
procedure videoBgEnable(number: cint); inline;
procedure videoBgEnableSub(number: cint); inline;
procedure videoBgDisable(number: cint); inline;
procedure videoBgDisableSub(number: cint); inline;
procedure setBrightness(screen, level: cint); cdecl; external;
procedure setBackdropColor(const color: cuint16); inline;
procedure setBackdropColorSub(const color: cuint16); inline;
const
REG_MASTER_BRIGHT : pcuint16 = pointer($0400006C);
REG_MASTER_BRIGHT_SUB : pcuint16 = pointer($0400106C);
// Window 0
WIN0_X0 : pcuint8 = pointer($04000041);
WIN0_X1 : pcuint8 = pointer($04000040);
WIN0_Y0 : pcuint8 = pointer($04000045);
WIN0_Y1 : pcuint8 = pointer($04000044);
// Window 1
WIN1_X0 : pcuint8 = pointer($04000043);
WIN1_X1 : pcuint8 = pointer($04000042);
WIN1_Y0 : pcuint8 = pointer($04000047);
WIN1_Y1 : pcuint8 = pointer($04000046);
WIN_IN : pcuint16 = pointer($04000048);
WIN_OUT : pcuint16 = pointer($0400004A);
// Window 0
SUB_WIN0_X0 : pcuint8 = pointer($04001041);
SUB_WIN0_X1 : pcuint8 = pointer($04001040);
SUB_WIN0_Y0 : pcuint8 = pointer($04001045);
SUB_WIN0_Y1 : pcuint8 = pointer($04001044);
// Window 1
SUB_WIN1_X0 : pcuint8 = pointer($04001043);
SUB_WIN1_X1 : pcuint8 = pointer($04001042);
SUB_WIN1_Y0 : pcuint8 = pointer($04001047);
SUB_WIN1_Y1 : pcuint8 = pointer($04001046);
SUB_WIN_IN : pcuint16 = pointer($04001048);
SUB_WIN_OUT : pcuint16 = pointer($0400104A);
REG_MOSAIC : pcuint16 = pointer($0400004C);
REG_MOSAIC_SUB : pcuint16 = pointer($0400104C);
REG_BLDCNT : pcuint16 = pointer($04000050);
REG_BLDY : pcuint16 = pointer($04000054);
REG_BLDALPHA : pcuint16 = pointer($04000052);
REG_BLDCNT_SUB : pcuint16 = pointer($04001050);
REG_BLDALPHA_SUB : pcuint16 = pointer($04001052);
REG_BLDY_SUB : pcuint16 = pointer($04001054);
BLEND_NONE = (0 shl 6);
BLEND_ALPHA = (1 shl 6);
BLEND_FADE_WHITE = (2 shl 6);
BLEND_FADE_BLACK = (3 shl 6);
BLEND_SRC_BG0 = (1 shl 0);
BLEND_SRC_BG1 = (1 shl 1);
BLEND_SRC_BG2 = (1 shl 2);
BLEND_SRC_BG3 = (1 shl 3);
BLEND_SRC_SPRITE = (1 shl 4);
BLEND_SRC_BACKDROP = (1 shl 5);
BLEND_DST_BG0 = (1 shl 8);
BLEND_DST_BG1 = (1 shl 9);
BLEND_DST_BG2 = (1 shl 10);
BLEND_DST_BG3 = (1 shl 11);
BLEND_DST_SPRITE = (1 shl 12);
BLEND_DST_BACKDROP = (1 shl 13);
REG_DISPCAPCNT: pcuint32 = pointer($04000064);
REG_DISP_MMEM_FIFO: pcuint32 = pointer($04000068);
DCAP_ENABLE = (1 shl 31);
function DCAP_MODE(n: cint): cint; inline;
function DCAP_SRC_ADDR(n: cint): cint; inline;
function DCAP_SRC(n: cint): cint; inline;
function DCAP_SRC_A(n: cint): cint;
function DCAP_SRC_B(n: cint): cint;
function DCAP_SIZE(n: cint): cint; inline;
function DCAP_OFFSET(n: cint): cint; inline;
function DCAP_BANK(n: cint): cint; inline;
function DCAP_B(n: cint): cint; inline;
function DCAP_A(n: cint): cint; inline;
const
DCAP_MODE_A = 0;
DCAP_MODE_B = 1;
DCAP_MODE_BLEND = 2;
DCAP_SRC_A_COMPOSITED = 0;
DCAP_SRC_A_3DONLY = 1;
DCAP_SRC_B_VRAM = 0;
DCAP_SRC_B_DISPFIFO = 1;
DCAP_SIZE_128x128 = 0;
DCAP_SIZE_256x64 = 1;
DCAP_SIZE_256x128 = 2;
DCAP_SIZE_256x192 = 3;
DCAP_BANK_VRAM_A = 0;
DCAP_BANK_VRAM_B = 1;
DCAP_BANK_VRAM_C = 2;
DCAP_BANK_VRAM_D = 3;
const
GFX_CONTROL : pcuint16 = pointer($04000060);
GFX_FIFO : pcuint32 = pointer($04000400);
GFX_STATUS : pcuint32 = pointer($04000600);
GFX_COLOR : pcuint32 = pointer($04000480);
GFX_VERTEX10 : pcuint32 = pointer($04000490);
GFX_VERTEX_XY : pcuint32 = pointer($04000494);
GFX_VERTEX_XZ : pcuint32 = pointer($04000498);
GFX_VERTEX_YZ : pcuint32 = pointer($0400049C);
GFX_VERTEX_DIFF : pcuint32 = pointer($040004A0);
GFX_VERTEX16 : pcuint32 = pointer($0400048C);
GFX_TEX_COORD : pcuint32 = pointer($04000488);
GFX_TEX_FORMAT : pcuint32 = pointer($040004A8);
GFX_PAL_FORMAT : pcuint32 = pointer($040004AC);
GFX_CLEAR_COLOR : pcuint32 = pointer($04000350);
GFX_CLEAR_DEPTH : pcuint16 = pointer($04000354);
GFX_LIGHT_VECTOR : pcuint32 = pointer($040004C8);
GFX_LIGHT_COLOR : pcuint32 = pointer($040004CC);
GFX_NORMAL : pcuint32 = pointer($04000484);
GFX_DIFFUSE_AMBIENT : pcuint32 = pointer($040004C0);
GFX_SPECULAR_EMISSION : pcuint32 = pointer($040004C4);
GFX_SHININESS : pcuint32 = pointer($040004D0);
GFX_POLY_FORMAT : pcuint32 = pointer($040004A4);
GFX_ALPHA_TEST : pcuint16 = pointer($04000340);
GFX_BEGIN : pcuint32 = pointer($04000500);
GFX_END : pcuint32 = pointer($04000504);
GFX_FLUSH : pcuint32 = pointer($04000540);
GFX_VIEWPORT : pcuint32 = pointer($04000580);
GFX_TOON_TABLE : pcuint16 = pointer($04000380);
GFX_EDGE_TABLE : pcuint16 = pointer($04000330);
GFX_FOG_COLOR : pcuint32 = pointer($04000358);
GFX_FOG_OFFSET : pcuint32 = pointer($0400035C);
GFX_FOG_TABLE : pcuint8 = pointer($04000360);
GFX_BOX_TEST : pcint32 = pointer($040005C0);
GFX_POS_TEST : pcint32 = pointer($040005C4);
GFX_POS_RESULT : pcint32 = pointer($04000620);
GFX_VEC_TEST : pcuint32 = pointer($040005C8);
GFX_VEC_RESULT : pcint16 = pointer($04000630);
function GFX_BUSY: boolean; inline;
const
GFX_VERTEX_RAM_USAGE : pcuint16 = pointer($04000606);
GFX_POLYGON_RAM_USAGE : pcuint16 = pointer($04000604);
GFX_CUTOFF_DEPTH : pcuint16 = pointer($04000610);
// Matrix processor control
MATRIX_CONTROL : pcuint32 = pointer($04000440);
MATRIX_PUSH : pcuint32 = pointer($04000444);
MATRIX_POP : pcuint32 = pointer($04000448);
MATRIX_SCALE : pcint32 = pointer($0400046C);
MATRIX_TRANSLATE : pcint32 = pointer($04000470);
MATRIX_RESTORE : pcuint32 = pointer($04000450);
MATRIX_STORE : pcuint32 = pointer($0400044C);
MATRIX_IDENTITY : pcuint32 = pointer($04000454);
MATRIX_LOAD4x4 : pcint32 = pointer($04000458);
MATRIX_LOAD4x3 : pcint32 = pointer($0400045C);
MATRIX_MULT4x4 : pcint32 = pointer($04000460);
MATRIX_MULT4x3 : pcint32 = pointer($04000464);
MATRIX_MULT3x3 : pcint32 = pointer($04000468);
//matrix operation results
MATRIX_READ_CLIP : pcint32 = pointer($04000640);
MATRIX_READ_VECTOR : pcint32 = pointer($04000680);
POINT_RESULT : pcint32 = pointer($04000620);
VECTOR_RESULT : pcuint16 = pointer($04000630);
{$endif NDS_INTERFACE}
{$ifdef NDS_IMPLEMENTATION}
function RGB15(r, g, b: cint): cuint16; inline;
begin
RGB15 := ((r) or ((g) shl 5) or ((b) shl 10));
end;
function RGB5(r, g, b: cint): cuint16; inline;
begin
RGB5 := ((r) or ((g) shl 5) or ((b) shl 10));
end;
function RGB8(r, g, b: cint): cuint8; inline;
begin
RGB8 := (((r) shr 3) or (((g) shr 3) shl 5) or (((b) shr 3) shl 10));
end;
function ARGB16(a, r, g, b: cint): cuint16; inline;
begin
ARGB16 := ((a shl 15) or r or (g shl 5) or (b shl 10));
end;
function VRAM_OFFSET(n: cint): cint; inline;
begin
VRAM_OFFSET := ((n) shl 3);
end;
function videoGetMode(): cint; inline;
begin
result := (REG_DISPCNT^ and $30007);
end;
function videoGetModeSub(): cint; inline;
begin
result := (REG_DISPCNT_SUB^ and $30007);
end;
function video3DEnabled(): cbool; inline;
begin
result := (REG_DISPCNT^ and ENABLE_3D) <> 0;
end;
procedure videoBgEnable(number: cint); inline;
begin
REG_DISPCNT^ := REG_DISPCNT^ or (1 shl (DISPLAY_ENABLE_SHIFT + number));
end;
procedure videoBgEnableSub(number: cint); inline;
begin
REG_DISPCNT_SUB^ := REG_DISPCNT_SUB^ or (1 shl (DISPLAY_ENABLE_SHIFT + number));
end;
procedure videoBgDisable(number: cint); inline;
begin
REG_DISPCNT^ := REG_DISPCNT^ and not (1 shl (DISPLAY_ENABLE_SHIFT + number));
end;
procedure videoBgDisableSub(number: cint); inline;
begin
REG_DISPCNT_SUB^ := REG_DISPCNT_SUB^ and not (1 shl (DISPLAY_ENABLE_SHIFT + number));
end;
function DISPLAY_CHAR_BASE(n: cuint32): cuint32; inline;
begin
DISPLAY_CHAR_BASE := ((n) and 7) shl 24;
end;
function DISPLAY_SCREEN_BASE(n: cuint32): cuint32; inline;
begin
DISPLAY_SCREEN_BASE := ((n) and 7) shl 27;
end;
procedure videoSetMode(mode: cuint32); inline;
begin
REG_DISPCNT^ := mode;
end;
procedure videoSetModeSub(mode: cuint32); inline;
begin
REG_DISPCNT_SUB^ := mode;
end;
function DCAP_MODE(n: cint): cint; inline;
begin
DCAP_MODE := (((n) and 3) shl 29);
end;
function DCAP_SRC_ADDR(n: cint): cint; inline;
begin
DCAP_SRC_ADDR := (((n) and 3) shl 26);
end;
function DCAP_SRC(n: cint): cint; inline;
begin
DCAP_SRC := (((n) and 3) shl 24);
end;
function DCAP_SRC_A(n: cint): cint;
begin
DCAP_SRC_A := (((n) and 1) shl 24);
end;
function DCAP_SRC_B(n: cint): cint;
begin
DCAP_SRC_B := (((n) and 1) shl 25);
end;
function DCAP_SIZE(n: cint): cint; inline;
begin
DCAP_SIZE := (((n) and 3) shl 20);
end;
function DCAP_OFFSET(n: cint): cint; inline;
begin
DCAP_OFFSET := (((n) and 3) shl 18);
end;
function DCAP_BANK(n: cint): cint; inline;
begin
DCAP_BANK := (((n) and 3) shl 16);
end;
function DCAP_B(n: cint): cint; inline;
begin
DCAP_B := (((n) and $1F) shl 8);
end;
function DCAP_A(n: cint): cint; inline;
begin
DCAP_A := (((n) and $1F) shl 0);
end;
function GFX_BUSY: boolean; inline;
begin
GFX_BUSY := GFX_STATUS^ and (1 shl 27) <> 0;
end;
procedure vramSetBankA(a: VRAM_A_TYPE); inline;
begin
VRAM_A_CR^ := VRAM_ENABLE or a;
end;
procedure vramSetBankB(b: VRAM_B_TYPE); inline;
begin
VRAM_B_CR^ := VRAM_ENABLE or b;
end;
procedure vramSetBankC(c: VRAM_C_TYPE); inline;
begin
VRAM_C_CR^ := VRAM_ENABLE or c;
end;
procedure vramSetBankD(d: VRAM_D_TYPE); inline;
begin
VRAM_D_CR^ := VRAM_ENABLE or d;
end;
procedure vramSetBankE(e: VRAM_E_TYPE); inline;
begin
VRAM_E_CR^ := VRAM_ENABLE or e;
end;
procedure vramSetBankF(f: VRAM_F_TYPE); inline;
begin
VRAM_F_CR^ := VRAM_ENABLE or f;
end;
procedure vramSetBankG(g: VRAM_G_TYPE); inline;
begin
VRAM_G_CR^ := VRAM_ENABLE or g;
end;
procedure vramSetBankH(h: VRAM_H_TYPE); inline;
begin
VRAM_H_CR^ := VRAM_ENABLE or h;
end;
procedure vramSetBankI(i: VRAM_I_TYPE); inline;
begin
VRAM_I_CR^ := VRAM_ENABLE or i;
end;
procedure setBackdropColor(const color: cuint16); inline;
begin
BG_PALETTE[0] := color;
end;
procedure setBackdropColorSub(const color: cuint16); inline;
begin
BG_PALETTE_SUB[0] := color;
end;
{$endif NDS_IMPLEMENTATION}