Commodore 64: multicolor e hi-res

Nel Commodore 64 esistono due differenti approcci per la grafica: alta risoluzione (high resolution o più brevemente hi-res) e multicolor. I due differenti metodi possono essere utilizzati indifferentemente per il testo, la grafica bitmap e gli sprites.

Accendere o spegnere un determinato punto dello schermo, senza attribuirgli un dato colore, di per sé non è un problema: è sufficiente porre a 1 o a 0 il rispettivo bit in memoria. Nel Commodore 64, la risoluzione massima è di 320 x 200 punti, per un totale di 64000 punti. Un byte di memoria contiene 8 bit. Ogni punto è rappresentato da un bit, per cui la visualizzazione dell’intero schermo richiede 64000/8 = 8000 bytes (che NON sono 8 K bytes). Volendo tuttavia attribuire un colore ad ogni singolo bit, il quantitativo di memoria necessario per contenere le informazioni del colore risulterebbe eccessivo.

E’ stata dunque fatta la scelta di utilizzare il minore quantitativo possibile di memoria RAM per attribuire il colore ai pixel, accettando di imporre delle limitazioni.

Nel modo alta risoluzione, è possibile scegliere il colore soltanto per ogni cella di 8 x 8 pixel (colore di fondo e colore dello sfondo). Nel Commodore 64, tale attributo del colore viene ricavato dalla memoria video normalmente usata in modalità testuale per contenere i codici dei caratteri visualizzati (l’area che in decimale va dalle locazioni 1024 a 2023, $400 a $7E7 in esadecimale). Ciò richiede soltanto 1000 bytes per l’attributo del colore, ma è ovvio che è molto difficile ottenere immagini particolarmente colorate.

Nel modo hi-res, per ogni cella 8 x 8 devono essere scelti due colori: il colore di fondo e il colore dello sfondo. Entrambi gli attributi sono contenuti nei due nybbles del byte della cella. Così, un bit impostato ad 1 sarà del colore contenuto in un nybble, il bit impostato a 0 sarà del colore contenuto nel rimanente nybble.

Venne dunque pensato un altro sistema per poter attribuire più colori per ogni cella 8 x 8, senza aumentare molto la memoria necessaria per memorizzare questi attributi. Di qui il concetto di “multicolor”. Nello schermo bitmap, quando questa modalità è attiva, per ciascuna cella di 8 x 8 bit è possibile attribuire a ciascun pixel fino a 4 differenti colori. Purtroppo, a fronte di questa possibilità la risoluzione orizzontale viene dimezzata (non più 320 punti ma soli 160).

Nella memoria i punti risultano sempre 64000, ma ne vengono unicamente visualizzati 32000, orizzontalmente larghi il doppio di quelli ad alta risoluzione. I quattro colori disponibili per ogni cella 8 x 8 vengono ricavati, nella modalità bitmap multicolor: dal registro colore di fondo (53281 in decimale, $D021 hex), dagli attributi multicolor 1 e 2  (contenuti per ciascuna cella nei rispettivi nybbles della memoria RAM della video matrix) e dalla memoria del colore.

Ciascun punto è visivamente largo il doppio per poter essere riconosciuto in memoria come una coppia di bit. Con due bit si ottengono quattro possibili combinazioni, ed a ciascuna combinazione corrisponde uno dei quattro colori disponibili. Alla coppia 11 corrisponde un punto multicolor con il colore indicato nella memoria del colore per quella cella, alla coppia 01 il multicolor 1 (un nybble RAM dei caratteri video), alla coppia 10 il multicolor 2 (il rimanente nybble nella RAM dei caratteri video), alla coppia 00 corrisponde infine l’attributo del colore indicato nel registro del colore di fondo. In estrema sintesi, tre colori possono essere scelti indipendentemente per ciascuna cella 8 x 8, mentre il quarto colore è il colore di fondo, comune a tutte le celle (e deve dunque essere scelto molto attentamente).

Ciò richiede per memorizzare i colori di ciascun punto dello schermo bimap 1000 byte di memoria dei caratteri video e 1000 byte della RAM del colore. Ciò consente di avere una notevole varietà di colore a fronte di soli 1000 byte in più rispetto alla modalità hi-res.

Il dimezzamento della risoluzione orizzontale non è così “tragico” come potrebbe sembrare. Infatti, il terminale video più impiegato all’epoca era il televisore CRT. I vecchi televisori offrivano sfocature e distorsioni nell’immagine, il che rendeva meno evidente la ridotta risoluzione.

La modalità multicolor era anche presente per i caratteri testuali e per gli sprites, ma vi era in questo caso minore libertà nella scelta dei colori. Le coppie 01 e 10 avevano infatti attributi di colore per tutti i caratteri e per l’intero sprite.

La varietà di colore venne ritenuta prioritaria all’alta risoluzione, cosicché il multicolor è stato usato in prevalenza per la realizzazione dei videogiochi. Va precisato che questa è stata una scelta, libera e non imposta da alcuna esigenza. Come detto, in memoria anche nella modalità multicolor risultano comunque 64000 bit per l’intero schermo video. Questi bit vengono visualizzati come pixel “larghi” perché il VIC-II li interpreta in questo modo, ma il processore si ritrova comunque a gestire lo stesso quantitativo di informazioni. Questo per sottolineare come la scelta del multicolor non derivi da un compromesso per fare gravare alla CPU meno punti da gestire. L’intero schermo necessita sempre di 64000 bit per essere definito.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert