{{htmlmetatags>metatag-robots=()
metatag-title=(Le basi dei tile)
metatag-keywords=(C,library,Midres,Animazioni,Tile,Commodore 64,Commodore VIC20,Commodore 16)
metatag-description=(Cos'è un tile e come usarlo sui retrocomputer.)
metatag-media-og:image=(:tiling_basics.png)
metatag-og:title=(Le basi dei tile)
metatag-og:description=(Cos'è un tile e come usarlo sui retrocomputer.)
}}
====== LE BASI DEI TILE ======
===== COS'E' UN TILE? =====
Il "tile" corrisponde ad un'area dello schermo di dimensioni fisse, che può essere riprodotta più e più volte. Corrisponde ad una vera e propria "casella" con la quale si suddivide lo schermo da disegnare. I dati grafici di questa casella non sono memorizzati sulla bitmap dello schermo ma in un'area speciale. Ogni casella viene quindi identificata con un indice numerico in tale area speciale.
{{ :tiling_basics.png?nolink |}}
Quando il chipset grafico deve disegnare lo schermo, esamina la memoria dello schermo e si trova di fronte a un insieme di indici. Il chipset quindi preleva il primo indice, effettua una ricerca nell'area speciale, preleva i dati grafici e li utilizza per disegnare quella casella. Procede quindi con il secondo, con il terzo, e così via. Fino a ricoprire l'intera superficie. Una volta terminato, il chipset attende il successivo "vertical blank" (il momento in cui l'hardware effettua il ridisegno di un quadro) per ripetere la procedura.
Ogni retrocomputer ha una terminologia per indicare queste aree, nonché le dimensioni coinvolte nel processo.
===== I TILE SUL COMMODORE 64 =====
{{ :lowres.png?nolink&600 |}}
Ad esempio, nel Commodore 64 abbiamo che la superficie da disegnare consiste in 320 per 200 pixel. I dati grafici di questa superficie sono memorizzati come indici numerici nella memoria dello schermo che prende il nome di "memoria video testo" (video text memory). Quest'area è costituita da 1.000 indici numerici (40 colonne per 25 righe) che prendono il nome di "codici schermo" (screen code). Ognuno di questi codici schermo altro non è che un indice nella "memoria carattere" (charset memory), le cui dimensioni sono di 8 per 8 pixel.
In altri termini: un tile sul Commodore 64 rappresenta una lettera di un testo.
===== MODIFICARE UN TILE =====
Modificare un tile significa modificare la relativa rappresentazione a bitmap nella memoria carattere. Ogni retrocomputer ha uno specifico modo per rappresentare tale informazione. In generale, tuttavia, il modo di base consiste nel modificare quei byte che descrivono graficamente il carattere e che sono identificati dal codice schermo.
{{ :tiling_tile.png?nolink&600 |}}
Ad esempio, tanto nel Commodore 64 quanto nel VIC=20 ogni casella di 8x8 pixel viene rappresentata come una serie di 8 byte consecutivi nella memoria carattere. In ogni byte, il bit pìù significativo è il pixel più a sinistra nello schermo, mentre quello meno significativo è il pixel più a destra.
In linguaggio C questo significa che il quadrato qui sopra è rappresentato dal seguente vettore di ''mr_mixel''((Questo tipo di dato è definito nella [[:midres_library|liberia midres]] ed equivale ad un ''unsigned char''.)):
mr_mixel square[8] = {
0x00, 0xfe, 0xfe, 0xfe,
0xfe, 0xfe, 0xfe, 0x00
}
Ne consegue che la modifica del tile consiste nel copiare tali byte sulla memoria carattere: la modifica sullo schermo sarà istantanea.
===== TILES E TILE SETS =====
Il singolo tile è di norma troppo piccolo per rappresentare, graficamente, qualcosa di completo. Inoltre, il chipset video ha bisogno di conoscere, in anticipo, tutti i dati grafici per i potenziali indici possibili nella memoria video. Per questo motivo, l'area speciale di memoria con i dati bitmap per ogni tile viene di solito popolata per tutti i valori possibili dei codici schermo, ed eventualmente manipolata in seguito, lavorando su singolo tile.
Questo implica che, in generale, non si ragiona per un singolo tile bensì per un insieme di tile che prende il nome di "tile set" (''mr_tileset''((Questo tipo di dato è definito nella [[:it:midres_library|liberia midres]] ed equivale ad un ''unsigned char''; di solito si utilizza insieme a ''mr_tile'' e a ''mr_pixel'' per mezzo della macro ''TM(...)'' al fine di individuare l'inizio della zona dove si trovano i tile ridefiniti))).
Sempre per convenzione il tile set viene di solito implementato come una serie contigua di tile, senza limite di continuità tra uno e l'altro.
Ad esempio, nel caso del Commodore 64 e del VIC=20, conoscendo l'altezza e la larghezza in pixel di ogni tile, si può individuare l'indirizzo di partenza con i dati bitmap di un qualsiasi screen code ''s'' con la seguent epressione:
INIZIO + s * 8
Dove ''INIZIO'' è l'indirizzo di partenza dal quale il chipset grafico sta prendendo i dati.
Il valore di questo indirizzo e la logica seguono regole diverse a seconda dell'hardware considerato.
Quindi anche se è possibile avere più tileset in memoria, a seconda delle caratteristiche del retrocomputer e delle risorse di memoria a disposizione ([[:it:midres_library:memory_layout|maggiori info qui]]), solo uno è visibile in un dato momento. Il tileset visibile modifica l'aspetto dell'intero schermo.
Oltre ai tileset visibili, devono essere citati i tileset di sistema o "rom tileset". Si tratta di tileset che vengono caricati alla partenza del sistema, ovvero resi disponibili subito dopo il boot, essendo in ROM. Tali tileset sono indispensabili per interagire con il computer, dato che ne contengono anche l'alfabeto che viene utilizzato per la resa dei testi su schermo.
{{ :c64_truetype.png?nolink&200 |}}
L'importanza di tali tileset risiede nel fatto che, di solito, sono copiati "as is" verso uno spazio speciale tramite apposite routine e permettono di evitare di riprogrammare, ad esempio, i caratteri semigrafici o le lettere alfabetiche.