This is an old revision of the document!
Table of Contents
Sprite
Intro
Gli sprite nel C64 sono degli oggetti grafici facilmente programmabili, utili per creare giochi. Sono gestiti via hardware dal chip grafico VIC-II, tramite una serie di registri.
Registri
Attivazione
Per attivare gli sprite c'è il registro 53269 ($D015); ciascuno degli 8 bit attiva uno sprite:
bit 0 | sprite 0 |
bit 1 | sprite 1 |
bit 2 | sprite 2 |
…
bit 7 | sprite 7 |
In Basic si può quindi usare:
POKE 53269,3 : REM ATTIVA GLI SPRITE 0 e 1 POKE 53269,255: REM ATTIVA TUTTI E 8 GLI SPRITE
Posizionamento
I registri da 53248 ($D000) a 53263 ($D00F) controllano il posizionamento X,Y, rispetto all'angolo in alto a sinistra. Ciascun registro controlla una coordinata per ciascuno sprite:
Registro | Descrizione |
---|---|
53248 | sprite 0 X |
53249 | sprite 0 Y |
53250 | sprite 1 X |
53251 | sprite 1 Y |
…
I valori possibili sono quindi 0-255. Mentre la coordinata Y copre tutti i valori visibili a schermo, la coordinata X viene anche gestita dal registro 53264 ($D010) (valido per tutti gli sprite) che consente di estendere gli sprite oltre la coordinata X 255 (visibile a video solo fino al 343).
Colore
Gli sprite possono essere monocolore (risoluzione max 24×21) oppure multicolore (risoluzione max 12×21).
Multicolore
La modalità multicolore prevede, oltre al colore principale dello sprite, anche due colori aggiuntivi, condivisi da tutti gli sprite. Si usano i registri 53285, 53286 e 53276:
POKE 53285,1: REM MULTICOLOR 1 (BIANCO) X TUTTI GLI SPRITE POKE 53286,0: REM MULTICOLOR 2 (NERO) X TUTTI GLI SPRITE POKE 53276,3: REM MULTICOLOR X SPRITE 0 E 1
Colore principale
Il colore principale si setta nei registri 53287-53294, separatamente per ogni sprite.
Definizione
La definizione (forma) dello sprite avviene in questo modo. Sono presenti delle locazioni di memoria, ognuna dedicata ad uno sprite:
Locazione. | Descrizione |
---|---|
2040 ($7F8) | puntatore sprite 0 |
2041 ($7F9) | puntatore sprite 1 |
…
2047 ($7FF) | puntatore sprite 7 |
Ciascuna locazione non è abbastanza capiente per contenere la definizione di uno sprite (63 byte per i monocolore: 24 bit x 21); quindi ogni locazione è un puntatore ad un gruppo di locazioni di 63 byte. Ad es:
POKE 2040,200 POKE 2041,201
Le righe sopra stabiliscono che lo sprite 0 è definito (nella sua forma) al gruppo di locazioni che iniziano alla memoria 200×64 (12800); lo sprite 1 invece è definito al gruppo di locazioni che iniziano alla memoria 201×64 (12864).
Sarà necessario quindi riempire le locazioni che iniziano da 12800 e 12864 con i dati per formare gli sprite; conviene utilizzare un tool come il seguente, che facilita l'operazione di disegno: