Lo standard CGA (Color Graphics Adapter) viene introdotto da IBM nel 1981 ponendo di fatto le basi per la realizzazione di schede grafiche a colori per PC. Lo standard prevede una profondità di colore di 4 bit con una conseguente palette di 16 colori (2^4).
I tre primi 3 bit da sinistra (3 bit meno significativi) di ogni colore specificano presenza della rispettiva componente RGB (Red, Green, Blue) , il quarto (il più significativo) specifica il valore di intensità che permettere di distinguere la tonalità chiara da quella "normale".
Assegnato ad ogni colore un codice (codice colore) da 0 a 15 le singole componenti cromatiche sono ricavate dalla seguente formula:
rosso = 2/3 * (codiceColore & 4) + 1/3 * (codiceColore & 8);
verde = 2/3 * (codiceColore & 2) + 1/3 * (codiceColore & 8);
blu = 2/3 * (codiceColore & 1) + 1/3 * (codiceColore & 8);
A prima vista può sembrare un macello, ma se ragioniamo con calma chi accorgeremo che:
- se i bit di colore è a 1 la corrispondente componente cromatica assumo il valore 170 (AA in esadecimale)
- se il bit di colore è a 0 la corrispondente componente cromatica assume il calore 0
- se il bit di intensità è a 1, bisogna sommare al valore precedente 85 (ottenendo il valore esadecimale 55 o FF come totale)
Quindi se prendiamo il codice colore 5 (0101) otteniamo il magenta: AA00AA
Se invece prendiamo il codice colore 12 (1100) otteniamo il rosso chiaro: FF5555
Se conoscete come vengono codificati in colori in HTML a questo punto per voi la palette della CGA non ha più nessun segreto :)
Dopo tutto sto pistolotto eccovi la palette CGA in tutto il suo splendore :o)
(0) Nero 000000 | (1)Blu 0000AA | (2)Verde 00AA00 | (3) Ciano 00AAAA |
(4)Rosso AA0000 | (5)Magenta AA00AA | (6)Marrone AA5500 | (6)Bianco AAAAAA |
(8)Grigio 555555 | (9)Blu chiaro 5555FF | (10)Verde chiaro 55FF55 | (11) Ciano chiaro 55FFFF | (12)Rosso chiaro FF5555 | (13)Magenta chiaro FF55FF | (14)Giallo FFFF55 | (15)Bianco intenso FFFFFF |
Se mi avete seguito con attenzione noterete che nella sequanza dei colori c'è qualcosa che non quadra ... e già il colore con codice 6 dovrebbe essere: (6)Giallo scuro (AAAA00).
Come si spiega questa anomalia? Beh, gli ingegneri di IBM si resero conto che applicando le regole di cui sopra non era disponibile il colore marrone, di conseguenza "fecere un'eccezione" che ci fa arrivare alla seguente formula completa:
rosso = 2/3 * (codiceColore & 4) + 1/3 * (codiceColore & 8);
verde = 2/3 * (codiceColore & 2) + 1/3 * (codiceColore & 8);
blu = 2/3 * (codiceColore & 1) + 1/3 * (codiceColore & 8);
if (codiceColore == 6)
verde = verde / 2;
Da cui essendo il codice colore 6 corrispondente alla seguente configurazione di bit 0110, si ottiene (con semplici calcoli) il risultato: AA5500 (essendo AA/2=55).
Vabbè credo di avervi tediato abbastanza quindi mi taccio e vi rimando al prossimo post per la conclusione di questa "interessante" discussione sullo standard CGA.
Ciao Tex!
RispondiEliminaDirei che pur essendo un articolo molto tecnico (almeno per me...per altri magari sara' una cosa semplicissima!) e' fatto davvero bene e ti consiglio di continuare su questa strada....per quanto puo' valere il consiglio di uno come me che di tecnico ha ben poco!
Continua cosi!