Articolo pubblicato sul n. 63 di MCmicrocomputer (Edizioni Technimedia Srl - Roma) nel maggio 1987

MCmicrocomputer


Amighevole:
Tutta la grafica di Amiga

di Andrea de Prisco

C'è chi dice che l'Amiga sia una macchina prevalentemente grafica. Altri dicono che sia buona solo a far quello. Altri ancora (gli invidiosi) dicono che non è buona neanche per questo. L'appuntamento di Amighevole di questo mese, semplicemente mostrerà come "stanno i fatti", illustrando cosa è possibile e cosa è impossibile fare con un Amiga. Copertina del numero di MCmicrocomputer contenente l'articolo

 

Prologo

 

 Siamo nel lontano 1980... o qualcosa prima. Eravamo agli albori dell'alfabetizzazione informatica, quando i computer, pur costando mille volte meno di un centro di calcolo da università, ancora non avevano sfondato nelle fasce basse del mercato dell'home computing. Il mitico PET della Commodore, dotato di soli 8, 16 o 32 k di memoria, venduto per alcune milionate in configurazione accettabile, si spartiva praticamente tutto il mercato computereccio dell'epoca assieme ai mitici Apple II e a qualche TRS-80.

L'Apple, in più dei due suoi concorrenti, disponeva di serie di una fatidica grafica ad alta risoluzione con la quale (udite! udite!) era possibile perfino disegnare sullo schermo...

Pet e TRS solo a richiesta acquistando cioè dell'hardware accessorio. Il TRS-80 disponeva delle variabili in doppia precisione nel basic fornito con la macchina, mentre coi PET potevi sbizzarrirti un po' di più con le periferiche (dischi, stampanti, plotter) disponendo di serie dell'interfaccia IEEE-488.

 Secondo alcuni l'Apple la spuntò vincitore (basta pensare che l'attuale 2GS è ancora compatibile col nonno di 8 anni fa...) proprio per il fatto di essere più grafico degli altri. Evidentemente disponendo di un video grafico, le cose che potevi fare col tuo computer erano certamente di più e l'idea doveva risultare abbastanza allettante. Stiamo parlando di risoluzioni grafiche massime di 280x192 pixel con 6 colori non senza alcune limitazioni circa la disposizione di questi.

8 anni dopo la macchina più grafica disponibile sul mercato con poche milionate di scontrino fiscale è l'Amiga. Nessuna limitazione fino a 640x512 pixel in 16 colori e se accetti qualche compromesso ne visualizzi ben 4096 su di un solo schermo grafico. Più volte ho contato e ricontato i vari modi grafici di questa macchina e ogni volta ottenevo risultati diversi. Sono così tanti che è facile dimenticarne qualcuno...

 

2 di base

 

Detto in due parole l'Amiga dispone di 2 modi grafici di base, tre modi speciali, una variante, con un numero di colori per pagina grafica variabile. Il tutto è facilmente componibile secondo degli schemi assai semplici che sviluppano una varietà di modi grafici in grado di soddisfare praticamente qualsiasi necessità. Fine dell'articolo.

Bugia: procediamo con ordine.

Dicevamo che esistono 2 modi grafici di base, detti di bassa e di alta risoluzione coi quali definiamo la risoluzione orizzontale della nostra pagina grafica: 320 o 640 punti per linea. Fissata una risoluzione possiamo definire il numero di linee di cui questa è composta e il numero di colori in cui è possibile visualizzare ogni pixel. Di risoluzione verticale ne riparleremo tra un po', dapprima esauriamo l'argomento colori. Disponendo di 16 livelli di blu, 16 di rosso e 16 di verde, combinando opportunamente tali componenti cromatiche l'Amiga è capace di visualizzare 4096 tinte. I modi grafici "normali" di Amiga permettono di definire una palette di colori (da 2 a 16 per l'alta e da 2 a 32 per la bassa risoluzione) in cui ognuno di questi è scelto indicando le tre componenti cromatiche di cui sopra ovvero spaziando in tutti i 4096 colori possibili. Ovviamente, lo spiegheremo meglio in fondo all'articolo, quanto più grande sarà la palette di colori tanta più memoria occuperà la pagina grafica: per ogni pixel dovremo riservare più o meno bit a seconda del numero di colori che questo potrà assumere.

Grazie poi all'architettura del processore video, è anche possibile visualizzare più pagine grafiche contemporaneamente, anche con risoluzioni, numero di colori, varianti e modi speciali diversi. La visualizzazione in tal caso avverrà per fasce orizzontali, dato che il processore video è in grado di variare più volte i contenuti dei propri registri interni nel corso di un solo quadro dello schermo, ovvero in corrispondenza di determinate (dall'utente) posizioni del pennello elettronico. In tal  modo, ad esempio, possiamo avere una prima zona di schermo in alta risoluzione, poi un pezzo in bassa, infine una porzione hold e modify (vedi dopo), tutto per la gioia dei nostri occhi.

Chi solo ha giocato un po' col muose avrà certamente già sperimantato quanto detto: non è raro infatti che lanciando alcune applicazioni, possiamo tirare giù lo schermo correntemente viusualizzato e vedere il workbench sotto a questo. Se abbiamo ancora spazio in memoria, dal workbench appena scoperto possiamo lanciare qualcos'altro, e fare lo stesso con le due applicazioni all'opera: un vero divertimento.

 

Interlace ON

 

Settando un determinato bit di un opportuno registro del processore video di Amiga, possiamo accedere al modo interlacciato di visualizzazione col quale si raddoppia la risoluzione verticale portandola a ben 512 linee anziché 256. Il modo interlacciato è disponibile sia per la bassa che per l'alta risoluzione quindi avremo le seguenti quattro risoluzioni:

 

320x256

640x256

320x512

640x512

 

Lo scotto da pagare per avere 512 linee è un fastidiosissimo sfarfallio di schermo tanto più accentuato quanto più sono contrastati i colori visualizzati. Ciò si manifesta dato che le 512 linee non vengono visualizzate in una sola passata del pennello elettronico ma in maniera interlacciata: durante i quadri pari si visualizzano le linee pari, durante i quadri dispari le linee dispari sfasando le seconde di mezza riga rispetto alle prime. Disponendo di un monitor ad alta persistenza (presso la Commodore alcuni mesi fa mi avevano preannunciato la futura commercializzazione di un simile salame) l'effetto sfarfalloso diminuisce fino a scomparire del tutto, nel qual caso si rischia l'effetto cometa degli oggetti in movimento (scrolling compresi) e dunque non sappiamo più qual è il male peggiore. Fatto sta, comunque, che al momento in cui scriviamo tale nuovo monitor Commodore ancora non s'è visto, quindi ne riparleremo più approfonditamente a tempo debito.

 

Modi grafici speciali

 

Sono in tutto 3, e cominceremo dal più misterioso, il modo grafico Half Brite, non menzionato nella documentazione ufficiale di Amiga (redatta in America prima dell'uscita sul mercato della macchina) il quale sembra appartenere solo alle macchine europee, dotate di uscita videocomposita PAL.

Traduzione: quello che state per leggere prendetelo con le dovute cautele essendo solo voci di corridoio, al momento attuale non verificabili. Dal momento che non se visto ancora nessun programma che sfrutta tale modo grafico, né un demo, potrebbe anche essere tutto falso. Solo per completezza lo annoveriamo tra gli altri.

Il modo grafico Half Brite (brite è l'americanizzazione di bright, diminuitivo di brightness, luminosità) è parente stretto dello standard RGBI digitale nel campo dell'RGB analogico. Ogni pixel di schermo, può essere visualizzato in 32 colori diversi, specificando anche per ognuno di essi se desideriamo o meno la mezza luminosità: in tutto, dunque, 64 tinte per schermo grafico.

Attenzione: non 64 tinte diverse, ma 32 più le stesse con luminosità dimezzata. Chiusa la parentesi corridoio.

Il secondo modo grafico speciale di Amiga è detto Dual Playfield. Riducendo il numero di colori sino ad un massimo di 8 per pixel possiamo visualizzare, sovrapposti, due schermi grafici indipendenti. Non come visto prima suddividendo in senso orizzontale lo schermo: questa volta la sovrapposizione è totale, e definendo dei buchi nello schermo visualizzato sopra possiamo vedere lo schermo con priorità più bassa. Inoltre i due schermi possono essere scambiati tra di loro (sotto il primo e sopra il secondo), manipolati indipendentemente, e generalmente contengono colori diversi. Con questa tecnica è facile realizzare giochi di simulazione astronave, sommergibile o carro armato in cui il primo playfield è l'interno del veicolo, buchiamo la pagina grafica in corrispondenza dei finestrini, e sul secondo playfield visualizziamo il paesaggio esterno. Il famoso gioco Skyfox della Electronic Arts è sicuramente realizzato così: non a caso si contano solo otto colori per il disegno dell'abitacolo (sette più il colore dei vetri, trasparente) e otto per l'esterno. Anche il modo Dual Playfield è combinabile con la risoluzione orizzontale, e nel caso dell'alta risoluzione disponiamo al massimo di tre colori (più il trasparente) per schermo.

Il terzo modo grafico speciale, combinabile solo con la risoluzione verticale (interlace on/off) è detto Hold & Modify e permette di visualizzare contemporaneamente 4096 colori su un solo schermo grafico, naturalmente con alcune pesanti limitazioni che ora illustreremo. Ciò perché, per visualizzare una pagina grafica 320x256 in 4096 colori senza limitazioni occorrono ben 120 k e alla Hi-Toro (dove "si sono inventati" Amiga) hanno pensato che erano troppi per un computer normale, quindi limitiamo.

Col modo hold & modify lo spazio occupato da una simile pagina grafica si riduce della metà (tutto qui) e la limitazione consiste nel fatto che due punti affiancati in orizzontale non possono differire che per una sola delle tre componenti cromatiche. Ovvero se il pixel n ha come componenti cromatiche rosso 3, verde 5 e blu 7, il pixel n+1 avrà due componenti cromatiche uguali al pixel n e una sola (eventualmente) diversa.  Tale "fattapposta" è poco noioso in caso di sfumature di tinte simili (es. gli incarnati) ma degrada non poco l'effetto finale in caso di pixel troppo diversi l'un l'altro.

Come palliativo della limitazione or ora menzionata un bonus di una palette di 16 colori qualsiasi, da usare per stacchi cromatici troppo bruschi che impiegherebbero ben tre pixel di sfumatura intermedia. In tal caso l'effetto è molto soddisfacente se in tutto il nostro schermo non abbiamo più di 16 salti cromatici. In caso contrario dovremo nuovamente ricorrere alle sfumature. Tutto ciò sarà molto più chiaro quando  ne spiegheremo (prossimo paragrafo) l'organizzazione in memoria.

 

Implementazione

 

All'interno di Amiga distinguiamo due tipi di memoria RAM: la chip memory e la fast memory. La prima, formata da 512 k byte è fornita con la macchina ed è l'unica parte di memoria alla quale possono accedere i chip custom della macchina (oltre naturalmente al 68000). La fast ram, non fornita con l'amiga 1000, ma disponibile sottoforma di espansione esterna, è accessibile solo da parte del 68000.

E' detta fast dato che il processore non deve spartire gli accessi a questa con gli altri coprocessori. Quando, di contro, questo tenta un accesso alla chip ram, potrebbe dover aspettare il consenso del meccanismo di arbitraggio della memoria. Ciò non succede spesso in quanto generalmente i chip custom accedono alla chip ram solo quando il processore non lo fa, presumibilmente quando, dopo aver letto una istruzione, la sta decodificando per decidere il da farsi.

Tutto ciò implica una prima grossa limitazione, il fatto che disponendo di molta memoria fast possiamo lanciare quante applicazioni vogliamo, ma se abbiamo tante schermate da visualizzare (dato che queste devono essere contenute nella chip ram) potremmo avere problemi di memoria pur non avendola ancora terminata. Traduzione: possiamo anche avere 8 mega di ram, ma per tutto ciò che riguarda il video e il suono non potremo superare la soglia dei 512 k. A meno che, ovviamente, non effettuiamo swap di memoria tra le due regioni, nel qualcaso un po' di problemi si semplifi- cherebbero seppure con un certo degrado delle performance della macchina.

Detto questo, per memorizzare una pagina grafica, l'Amiga utilizza il metodo dei bit-plane (figura 1) col quale è possibile avere una gestione più ottimizzata dalla ram. Se la nostra pagina grafica è monocromatica avremo bisogno di un solo bit per pixel visualizzato quindi adopereremo un solo bit-plane. Un bit-plane è dunque una porzione di memoria grande tanti bit quanti sono i pixel da visualizzare. Ad esempio, in bassa risoluzione non interlacciata (320x256), due soli colori per pixel (colore fondo o colore pixel) allocheremo 10240 byte di memoria.

Passando da due a quattro colori, per ogni pixel avremo bisogno di due bit di memoria. Una organizzazione tradizionale allocherebbe semplicemente una porzione doppia di memoria, mentre i progettisti di Amiga hanno ben pensato di allocare due porzioni di memoria, uguali tra di loro e ognuna di dimensioni pari alla porzione di prima. L'ottimizzazione sta nel fatto che non si necessita di grandi zone contigue di byte, ma è sufficiente anche più zone di minor dimensione allocate anche distanti tra loro.

Per 8 colori utilizzeremo tre bit-plane, per 16 quattro, per 32 cinque (solo bassa risoluzione) per 64 sei bit-plane (modo half brite).

Per visualizzare un punto, sarà sufficiente accedere tante volte in memoria quanti sono i bit-plane e stabilire così di quale colore dovrà essere il pixel. All'uopo, 32 registri del processore video contengono la palette, ovvero per ognuno di questi è indicato la quantità di blu, di verde e di rosso. In figura 1 è mostrato uno scorcio di pagina grafica 320x200 in 32 colori. Il pixel lì evidenziato, nei rispettivi bit-plane vale la sequenza binaria 11000 (24 in decimale), il processore accede al registro 24 per conoscere il colore e lo visualizza con quella tinta. Pixel dopo pixel.

Nel modo grafico half brite, il sesto bit-plane è utilizzato per indicare, di ogni pixel, la visualizzazione a luminosità normale o dimezzata, colore indicato dai 5 bit-plane rimanenti. Il limite massimo di 6 bit plane è dettato proprio dal fatto che il processore video di Amiga dispone di soli 6 registri puntatori ad altrettanti bit plane. Ciò che non si capisce, il fatto di limitare tale numero addirittura a 4 quando si passa dalla bassa all'alta risoluzione. in quest'ultimo caso, infatti, potremo disporre al massimo di una palette di 16 colori.

Il modo grafico Hold & Modify utilizza ancora tutt'e sei i bit plane disponibili. Quindi per ogni pixel visualizzato disporremo di 6 bit. Per visualizzare pagine grafiche con 4096 colori si utilizza la seguente decodifica dei bit associati ad ogni pixel: se i primi due pixel valgono 00, i rimanenti 4 pixel puntano ad uno dei 16 registri colore del processore: in proatica il funzionamento in questo caso è pari al modo grafico normale. Se i primi due bit non valgono 00 possiamo modificare, rispetto al pixel precedente, una delle sue tre componenti cromatiche. Per la precisione, se il valore è 01, i rimanenti bit indicano la quantità di blu del pixel in questione, rosso e verde come nel pixel precedente. Se vale 10 è il rosso a giocare la sua carta, se infine il valore di tali due bit è 11, possiamo modificare il verde. Per fare un esempio, per passare dal colore

 

(blu=3,rosso=4,verde=5)

 

al colore

 

(blu=12,rosso=6,verde=9)

 

se quest'ultimo è uno dei sedici contenuti nella palette, ad esempio alla posizione 4, basterà che i bit corrispondenti al pixel segnino:

 

0 00 1 0 0

 

altrimenti si dovranno utilizzare due pixel di colore intermedio cambiando una componente cromatica per volta:

 

0 11 0 1 0

 

per impostare 12 di blu,

 

1 00 1 1 0

 

per rosso=6

 

1 11 0 0 1

 

per verde=9 ed ottenere il colore desiderato.

Il modo grafico Dual Playfields, infine, è implementato utilizzando fino a 6 bit plane (massino 3 per playfield) secondo l'assortimento mostrato in figura X. Se combiniamo con esso anche l'alta risoluzione potremo utilizzarne fino a 4, in totale.

Se tutti i bit corrispondenti a un pixel sono a 0 otteniamo il colore trasparente che ci permette di vedere il play field di sfondo. Con combinazioni diverse di bit indichiamo come al solito registri colore nei quali sono contenute le componenti cromatiche di ogni tinta prescelta. Fortunatamente i due play field puntano ad insiemi diversi di registri e quindi i massimo 8 colori disponibili sul primo possono benissimo essere diversi da quelli disponibili sul secondo. è inoltre possibile scambiare la priorità dei due schermi, nel qual caso quello che stava sopra va sotto e viceversa. Essendo due oggetti completamente distinti e separati risulta in tal modo facile effettuare complesse animazioni facendo, ad esempio, scrollare in due direzioni diverse gli schermi superiore e inferiore. Tutto qui.

 


Impaginato originale...


  Clicca per ingrandire...
Clicca per ingrandire... Clicca per ingrandire...
Clicca per ingrandire...  

Articolo pubblicato su www.digiTANTO.it - per ulteriori informazioni clicca qui