martedì 25 maggio 2010

Print
Continua la nostra avventura nel mondo dello standard CGA. Dopo aver analizzato la composizione della palette andiamo ad illustrare le diverse modalità in cui la scheda può essere utilizzata.

Modi testuali

Lo standard CGA prevede due distinte modalità testuali:

40 colonne x 25 righe x 16 colori

Lo schermo è suddiviso in "blocchi" di 8x8 pixel, ognuno dei qualli può visualizzare uno dei 256 caratteri messi a disposizione dalla scheda (la mappa dei caratteri risiede sulla ROM della scheda, e non sono previsti meccanismi per ridefinirla).
Ad ogni singolo carattere è possibile associare un colore di sfondo e di primo piano utilizzando l'intera palette.
La risoluzione effettiva dello schermo è di 320x200 pixel, i singoli pixel non sono indirizzabili direttamente.

80 colonne x 25 righe x 16 colori

Le caratteristiche sono analoghe a quelle della modalità precedente, senonchè essendo la risoluzione effettiva dello schermo di 640x200 pixel, il numero di colonne disponibili è raddoppiato.

Modi grafici

Due sono le modalità grafiche disponibili

320 x 200 x 4 colori

Ogni pixel può essere indirizzato direttamente, ma vista la limitata disponibilià di memoria della scheda, ognuno di essi può assumere solo uno dei quattro colori messi a disposizione dalla palette.
Le palette di sistema sono 2 e per ognuna di esse solo uno dei colori , quello di sfondo identificato dal codice 0, è ridefinibile (nero è il default) dall'utente utilizzando uno dei 16 colori della palette completa.
Selezionado una palette è possibile specificare se utilizzare la variante ad alta intensità ottenendo di fatto 4 varianti differenti.

Ecco la palette 0 con la sua variante in alta intensità:

#Palette 0Palette 0 in alta intensità
0defaultdefault
12 — verde10 — verde chiaro
24 — rosso12 — rosso chiaro
36 — marrone14 — giallo

Ed ecco il mitico Digger (fra poco la recensione) che come potete notare utilizza la palette 0 ad intensità "normale":


I colori messi a disposizione dalla palette 1 (e variante) sono i seguenti:

#Palette 1Palette 1 in alta intensità
0defaultdefault
13 — ciano11 — ciano chiaro
25 — magenta13 — magenta chiaro
37 — grigio chiaro15 — bianco


Ed ecco Alley Cat ed il magistrale utilizzo che fa della palette 1 in alta intensità :o)



Il colore grigio dei bidoni si ottiene tramite il dithering, ossia alternando due pixel di colore diverso affinchè il nostro cervello ne percepisca il colore somma (in questo caso alternando un pixel nero ed uno bianco si ha la percezione del colore grigio).


640 x 200 x 2 colori

Nella sua modalità in "alta risoluzione" la scheda CGA è in grado di indirizzare 640 x 200 pixel differenti, sempre per la scarsa quantità di memoria, ognuno di essi può assumere solo 2 colori: il colore di sfondo è sempre il nero, mentro quello di primo piano può essere selezionato dalla palette completa (nero è il default).

Tweaked mode

Il tweaked mode è una particolare tecnica di programmazione che permette di aggirare il limite dei 4 colori in contemporane sullo schermo.

Qui andiamo sul difficile, spero di riuscire ad essere abbastanza chiaro e preciso pure semplificando un po' ...

In un monitor CRT i pixel vengono illuminati quando colpiti da un "pennello" di elettroni che scandisce i pixel, per linee (dette scanline), dall'angolo in alto a sinistra a quello in basso a destra.
Quando il penello arriva nell'angolo in basso a destra , ritorna all'inizio dello schermo e ricomincia il suo viaggio.
Una volta colpito, un pixel inizia pian piano a spegnersi, se il pennello ritorna sullo stesso pixel prima che questo si sia spento il nostro occhio lo percepisce costantemente illuminato.
Se il pennello elettronico ridisegna l'intero schermo con una frequenza superiore a quella con cui il nostro occhio "campiona" le immagini (circa 25 volte al secondo), anche questa operazione non è percepita dal nostro cervello.
La frequenza di aggiornamento tipica per i monitor di quei tempi era di 50Hz quindi, lo schermo, e di conseguenza una linea, veniva ridisegnata ogni cinquantesimo di secondo.

Disponendo di un preciso riferimento temporale (e facendo un pò di conti!!!) è quindi possibile, ad esempio:

  • utilizzare una palette nella prima sezione dello schermo
  • cambiarla in qualla successiva
  • reimpostare la palette iniziale quando si inizia a ridisegnare lo schermo

In questo caso avremo quindi 8 colori contemporanei sullo schermo (4 colori per ogni zona). Generalmente si tende a mantenere un colore comune nelle due zone, per mantenere una continuità cromatica, quindi i colori contemporanei sono 7, ma poco cambia :o)

Un esempio di questa tecnica lo possiamo vedere nel mitico Frogger (1983):




  • la prima immagine in modalità standard utilizza la palette nero (sfondo), marrone, verde e rosso
  • la seconda immagine in modalità tweaked utilizza la palette blue (sfondo), marrone, verde e rosso nella parte alta e nella parte bassa, cambiando il colore di sfondo, la palette nero, marrone, verde e rosso (e come per magia appare il blu del fiume che la nostra rana dovrà attraversare)

Un esempio più complesso ci arriva invece dal grandissimo Summer Games (1988, in quegli anni c'era già la EGA ma questa è un'altra storia).


Giusto perchè i fedelissimi del C64 non si indignino, questa tecnica è stata anche utilizzata sul piccolo commodore, ad esempio, per realizzare le mitiche raster bar e per supere il limite di 8 sprite su schermo (infatti il limite è di 8 sprite per scanline). In questo caso il gioiellino made in commodore ci viene incontro perchè è la stessa CPU, tramite un opportuno interrupt, ad informarci del fatto che una determinata scanline è stata raggiunta, facilitando decisamente il lavoro del programmatore (ma anche questa è un'altra storia!!!)

160 x 100 x 16 colori

Questa non è una modalità grafica vera e propria ma un versione "truccata" della modalità testuale 80x25. Il "trucco" si basa sulla possibilità delle schede CGA di essere programmata al fine di visualizzare solamente le prime due linee (di 8 pixel ciascuna) delle 8 di cui un carattere è composto. Questo artificio porta alla quadruplicazione delle linee di testo visualizzabili sullo schermo che passano da 25 a 100.

Il carattere 221 del charset utilizzato dalla CGA (visualizzato in questa modalità), consiste in un quadrato che occupa la metà sinistra del carattere (4x2 pixel). Il caratter 222 va invece a ricoprire la metà destra.
Visto che è possibile impostare un colore di sfondo e uno di primo piano per ogni carattere, utilizzando il caratter 221, questo potrà essere colorato di blu (per esempio) sulla parte destra (per esempio) e di rosso chiaro sulla destra (sfondo). Utilizzando il caratter 222 l'utilizzo di colore di sfondo e primo piano si inverte.
Alla luce di questo utilizzando il carattere 221 (o il 222) ogni sua metà può essere considerato come un pixel individuale (di dimensione reale 4x2 pixel).

Con questa tecnica si ottiene una risoluzione di 160x100 pixel che a scapito di una grafica più cubettosa (il pixel è più grosso), permette di utilizzare tutti e 16 i colori contemporaneamente sullo schermo.

Questa modalità fu utilizzata prevalentemente dalla Sierra per la prima generazione delle sue avventura (di cui avremo modo di parlare più avanti).

Di seguito un'immagine del mitico King Quest (1984) in cui la rozzezza delle linee si contrappone alla scintillio dei 16 colori.



Conclusioni

Eccoci giunti alla fine di questo speciale sullo standard CGA ... spero che vi sia piaciuto perchè nel retrohardware non potranno mancare articoli sullo standard EGA e quello VGA ... e li le cose si complicano ulteriormente :o)

Voglio chiudere facendovi notare che lo standard CGA (e anche i suoi successori) non prevede hardware ad-hoc per la gestione di sprite e scrolling (invece disponibili per C64 ed Amiga) da cui la carenza di giochi che ne fanno un uso massiccio; essendo tutti i calcoli a carico della CPU, sarà necessario attendere processori più potenti per godere di tali beltà.

4 commenti:

  1. Bello speciale!!
    Se aggiungi un tasto "Salva in PDF" (tipo quello che ho messo sul mio blog sopra ogni articolo) sarebbe perfetto, cosi possiamo stamparci questo speciale ed archiviarlo !!

    :))

    RispondiElimina
  2. Grazie per il complimento è stato un lavoraccio :o)
    Appena capisco se su blogspot si può fare provvedo sicuramente (da un prima ricerca questa feature non la trovo ... sigh).

    Cercherò di venire incontro alle pressanti richieste dei miei utenti :)

    RispondiElimina
  3. la 640 x 200 x 2 colori viene utilizzata anche in xenon 2 megablast nella sua modalità CGA

    RispondiElimina
  4. Ottimo interessantissimo, grazie! C'è da imparare cose interessanti da tecnologie così distanti nel tempo!! In questi giorni mettevo in playlist proprio Alley Cat, uno dei più bei vecchi giochini di sempre, non so come si può definire, un arcade? Non è stato proprio dimenticato insomma. Poi il fatto che in CGA si potessero aggirare i vincoli al limite dei colori, che cmq erano bellissimi, vivaci e forse un vero pugno nell'occhio, con gli schermi non a bassa emissione da prendere la congiuntivite..

    Certo in quegli anni con i dischetti da 5 1/4 forse in un disco o due stavano tutti i giochi del mondo, tra cui Alley Cat e Spacewar di Bill Seiler, questo addirittura in bianco e nero e intramontabile che consiglio ai lettori di questa rubrica

    Ok onore e gloria al retrogaming, che diventi una moda diffusa e praticata!!

    Saluti,
    Polarsun
    // polarsun.altervista.org

    RispondiElimina