Tuesday, October 26, 2010

Gestione della memoria

Come abbiamo visto nell'articolo dedicato all'hardware il Nintendo DS dispone di un totale di 656 KB di memoria video suddiviso in 9 banchi di diversa dimensione e funzionalità.
Di questi 9 banchi, i principali sono i primi 4 (A, B, C e D) e sono tutti di dimensione pari a 128 KB.
I restanti banchi hanno dimensioni che variano da 16 KB a 64 KB.
Andiamo ora ad analizzare le diverse funzioni che è possibile assegnare ai vari banchi:

-LCD (nessuna funzione): il banco è mappato ad un indirizzo fisso, diverso per ognuno, in modo da comporre un unico continuo blocco di memoria, se dovesse servire. Tutti i banchi sono in grado di lavorare in questa modalità.
-Texture memory: il banco viene utilizzato come memoria per le texture che verranno usate per i modelli 3D. Solo i 4 banchi principali A, B, C e D.
-Palette texture memory: il banco viene utilizzato come memoria per le palette (tavolozze colori) delle texture (per quelle texture che ne hanno bisogno). Solo i banchi E, F e G.
-Background memory (Main Engine): il banco viene utilizzato come memoria per i background (indipendentemente da quanti se ne useranno) del motore principale. Tutti i banchi tranne H e I.
-Background memory (Sub Engine): il banco viene utilizzato come memoria per i background del motore secondario.
Solo i banchi C, H e I.
-Sprite memory (Main Engine): il banco viene utilizzato come memoria per gli sprite del motore principale. Solo i banchi A, B, E, F e G.
-Sprite memory (Sub Engine):  il banco viene utilizzato come memoria per gli sprite del motore secondario. Solo i banchi D e I.
-Memoria per le palette estese dei background e degli sprite (Main/Sub Engine): è possibile dichiarare fino a 16 palette (da 16 o da 256 colori) per ogni background ed altre 16 palette per gli sprite. Questo per entrambi i motori grafici.

Le funzioni per impostare le modalità di funzionamento dei vari banchi hanno la seguente sintassi:

void vramSetBankx(VRAM_x_y)


dove x sta per il nome del banco e y sta per il tipo di modalità.

es.
void vramSetBankA(VRAM_A_LCD)
void vramSetBankD(VRAM_D_MAIN_SPRITE)


Riassumiamo qui di seguito le modalità possibili per ogni banco:

Memoria (dimensione) Modalità utilizzabili
VRAM_BANK_A (128 KB) VRAM_A_LCD
VRAM_A_TEXTURE
VRAM_A_MAIN_BG
VRAM_A_MAIN_SPRITE
VRAM_BANK_B (128 KB) VRAM_B_LCD
VRAM_B_TEXTURE
VRAM_B_MAIN_BG
VRAM_B_MAIN_SPRITE
VRAM_BANK_C (128 KB) VRAM_C_LCD
VRAM_C_TEXTURE
VRAM_C_MAIN_BG
VRAM_C_SUB_BG
VRAM_BANK_D (128 KB) VRAM_D_LCD
VRAM_D_TEXTURE
VRAM_D_MAIN_BG
VRAM_D_SUB_SPRITE
VRAM_BANK_E (64 KB) VRAM_E_LCD
VRAM_E_MAIN_BG
VRAM_E_MAIN_SPRITE
VRAM_E_TEX_PALETTE
VRAM_E_BG_EXT_PALETTE
VRAM_BANK_F (16 KB) VRAM_F_LCD
VRAM_F_MAIN_BG
VRAM_F_MAIN_SPRITE
VRAM_F_TEX_PALETTE
VRAM_F_BG_EXT_PALETTE
VRAM_F_SPRITE_EXT_PALETTE
VRAM_BANK_G (16 KB) VRAM_G_LCD
VRAM_G_MAIN_BG
VRAM_G_MAIN_SPRITE
VRAM_G_TEX_PALETTE
VRAM_G_BG_EXT_PALETTE
VRAM_G_SPRITE_EXT_PALETTE
VRAM_BANK_H (32 KB) VRAM_H_LCD
VRAM_H_SUB_BG
VRAM_H_SUB_BG_EXT_PALETTE
VRAM_BANK_I (16 KB) VRAM_I_LCD
VRAM_I_SUB_BG

VRAM_I_SUB_SPRITE
VRAM_I_SUB_SPRITE_EXT_PALETTE



0 comments:

Post a Comment