SMF - Just Installed!
Pagine: 1 [2]
07 Lug 2014 - [2] Free Pascal per NDS: Gestione della memoria videoIn questo articolo affronteremo uno degli argomenti più ostici per chi si avvicina per la prima volta alla programmazione del Nintendo DS: la gestione della memoria video.
La console adotta un sistema di gestione della memoria davvero flessibile: essa mette a disposizione 656 KB di memoria video (VRAM) suddivisi in 9 banchi di dimensioni differenti, identificati con le prime nove lettere dell'alfabeto (A, B, C, D, E, F, G, H e I), che possono essere utilizzati per contenere dati di diversi tipi (sfondi, sprites, palette, mappe, etc...). All'avvio della console i banchi di memoria non sono assegnati; è compito del programmatore stabilirne la designazione, a seconda dell'uso che se ne farà. In linea di massima, i banchi posso essere assegnati sia al motore grafico principale che a quello secondario (alcuni banchi possono essere assegnati ad un motore soltanto), fino a una quantità massima di 512 KB per motore, come dalla tabella seguente:
Piccola digressione: come è noto, la console è dotata di due schermi; sono presenti quindi due "motori" 2d, uno principale e uno secondario, che possono essere assegnati all'uno o all'altro schermo. I due motori non hanno caratteristiche identiche; il principale è leggermente più potente e può disporre di risorse maggiori. Altra cosa da tenere bene a mente è che la VRAM richiede che l'accesso in lettura e scrittura avvenga 16 bit per volta; ciò comporta che, per modificare - ad esempio - il contenuto del primo byte della memoria video, dovremo leggere i primi 2 bytes (cioè la prima halfword), modificare il valore del primo byte, quindi riscrivere in memoria la halfword appena modificata. Vedremo più avanti un esempio su come effettuare questa operazione. Le tabelle seguenti mostrano invece le costanti utilizzate per la designazione dei diversi banchi e i loro possibili utilizzi:
Si noti che uno stesso banco di memoria, ad esempio il banco VRAM_A, oltre ad avere delle costanti diverse a seconda della tipologia di utilizzo (VRAM_A_LCD per la modalità framebuffer, VRAM_A_BG per i background, VRAM_A_SPRITE per gli sprite, ecc.), presenta le stesse costanti con degli "strani" valori associati: VRAM_A_BG_0x06000000 VRAM_A_BG_0x06020000 VRAM_A_BG_0x06040000 VRAM_A_BG_0x06060000 La loro presenza è presto spiegata: i banchi di memoria vengono mappati su una zona virtuale di memoria che parte dall'indirizzo $06000000; d'altra parte essi hanno anche dimensioni differenti. Occorre quindi prestare attenzione che due o più banchi non vadano ad occupare la stessa zona di memoria; i diversi tipi di costante indicano il punto di partenza del banco ($06000000, $06020000, $06040000 o $06060000) e servono appunto per "spostare più in là" un banco, per evitare che "pesti i piedi" ad un altro banco di VRAM. Senza stare ad impazzire più di tanto, esiste un utilissimo sito che mette a disposizione un'applicazione web che ci aiuterà ad impostare correttamente la mappatura dei banchi di memoria.
Basi per tiles, bitmap e mappe
L'aspetto interessante è rappresentato dal fatto che le 16 basi di tipo bmp condividono la stessa locazione di memoria delle 16 basi di tipo char; a loro volta, le 32 basi di tipo map condividono la stessa locazione di memoria con le prime 4 basi di tipo bmp o char.
Per commenti e chiarimenti: http://www.lazaruspascal.it/index.php?topic=78.0 04 Nov 2012 - [1] Free Pascal per NDS: Gestione dei files17 Ott 2012 - [0] Free Pascal per NDS: Primi passi
Lazarus è un IDE-RAD basato su Free Pascal che si pone
l'obiettivo di essere un clone freeware e open source del suo omologo
commerciale Delphi, tentando - e riuscendovi, in molti casi - di
migliorarlo sotto diversi aspetti, primo fra tutti la possibilità di
creare codice direttamente compilabile per diverse piattaforme. Lazarus
permette di creare applicazioni in maniera visuale, posizionando
componenti sul form e gestendo gli eventi ad essi associati; è possibile
comunque utilizzare Lazarus come un avanzatissimo editor di codice,
sfruttandone tutte le caratteristiche funzionali, anche per lo sviluppo
di console application, cioè applicazioni che non dispongono di
un'interfaccia grafica visuale. Nel nostro caso utilizzeremo Lazarus
proprio in quest'ottica, tralasciando la parte visuale e concentrandoci
sulla mera gestione del codice.
Il compilatore Free Pascal per Nintendo DS si appoggia su un toolkit esterno, il devkitARM, che mette a disposizione tools e librerie per programmare la console portatile. Il ciclo delle releases del Free Pascal però è notevolmente più lento di quanto non lo sia quello del devkitARM; non di rado ci si trova di fronte ad una nuova versione del toolkit a pochi giorni dal rilascio dell'ultima versione del Free Pascal. Ovviamente ad ogni nuova versione vanno aggiornate
le librerie e, in alcuni casi sporadici, dei dettagli nel compilatore;
in mancanza di tali aggiornamenti (che, per inciso, richiedono una
ricompilazione dell'intero toolchain del Free Pascal), ci si può trovare
di fronte ad errori imprevisti o anche ad errori di compilazione.
In questi casi torna utile sapere come scaricare e - soprattutto! -
come ricompilare i sorgenti del Free Pascal per Nintendo DS. Si tratta di
un'operazione abbastanza lunga, ma con un po' di pazienza si potrà
avere sul proprio pc una versione nuova fiammante del compilatore. Pagine: 1 [2] |
Free Pascal per NDS: come scaricare i sorgenti da SVN e ricompilarli da Legolas Impostare Lazarus per l'utilizzo con Freepascal per Nintendo DS da Legolas [0] Free Pascal per NDS: Primi passi da Legolas [1] Free Pascal per NDS: Gestione dei files da Legolas [2] Free Pascal per NDS: Gestione della memoria video da Legolas [3] Free Pascal per NDS: i tipi di background e le modalità grafiche da Legolas [4] Free Pascal per NDS: configurazione dei banchi di memoria da Legolas [5] Free Pascal per NDS: background a tiles e mappe da Legolas [7] Free Pascal per NDS: gli sprites da Legolas [6] Free Pascal per NDS: rotazione e zoom dei background da Legolas Free Spider concetti base e prima applicazione da xinyiman L'oggetto request da xinyiman L'oggetto response da xinyiman L'oggetto TSpiderAction da xinyiman L'oggetto TSpiderTable da xinyiman L'oggetto TSpiderForm da xinyiman L'oggetto TSpiderPage da xinyiman Il ciclo di vita di una CGI da xinyiman Richieste simultanee da xinyiman Le sessioni utente da xinyiman Download/Upload File da xinyiman Smart Module Loading Design da xinyiman Performance da xinyiman Free Spider e database da xinyiman JQuery UI da xinyiman JQuery - Oggetto template da xinyiman JQuery - Oggetto JQGrid da xinyiman Redirect da xinyiman ExtPascal: panoramica sulle licenze da nomorelogic ExtPascal: Installazione e configurazione da nomorelogic ExtPascal: Installazione e configurazione / ExtPascal: Installation and configuration da nomorelogic Le griglie in ExtPascal - ExtPascalToolkit / Grids into ExtPascal - ExtPascalToolkit da xinyiman |