# Video Graphics Array

Video Graphics Array (VGA), è uno standard analogico relativo a display per computer introdotto sul mercato nel 1987 da IBM.

## Descrizione

Ci si riferisce a VGA come "array" (vettore) invece che "adapter" (adattatore, periferica) perché progettata sin dall'inizio come un chip singolo, rimpiazzando il Motorola 6845 e le dozzine di chip presenti sulle schede madri ISA che implementavano standard quali l'MDA (Monochrome Display Adapter), il CGA (Color Graphics Adapter) o l'EGA (Enhanced Graphics Adapter).
Il chip VGA può essere installato direttamente sulla scheda madre di un PC con molta facilità (si richiede solo della memoria video, un oscillatore quarzato e un RAMDAC esterno), e già i primi modelli PS/2 erano equipaggiati col chip VGA sulla scheda madre.
Come per molto dell'hardware IBM, sono stati prodotti cloni delle schede grafiche VGA da molti altri produttori. Nonostante lo standard VGA nella forma originale fosse considerato obsoleto da tempo, è stato l'ultimo standard IBM che la maggior parte delle case produttrici decisero di seguire, facendone uno standard grafico tanto usato da essere presente negli attuali PC. Il VGA era già stato tecnicamente superato dallo standard IBM eXtended Graphics Array (XGA), ma in realtà è stato ampiamente esteso dalle numerose estensioni fatte al VGA da altre case produttrici, come il Super VGA.
Il VGA rimane tutt'oggi un importante standard grafico. È il "denominatore comune" che tutte le schede grafiche devono essere in grado di gestire, ancor prima di caricare driver specifico della scheda. Nelle macchine Windows, lo splash screen che appare all'avvio è visualizzato mentre la macchina sta lavorando in modalità VGA (non ha ancora caricato i driver specifici) ed è anche il motivo per il quale la schermata ha sempre bassa risoluzione e bassa profondità di colore.

## Modalità video

Le schede VGA gestiscono sia le modalità grafiche che testuali.

### Modalità grafiche

Le modalità grafiche standard sono:
* 640×480 in 16 colori
* 640×350 in 16 colori
* 320×200 in 16 colori
* 320×200 in 256 colori (Modalità 13h)
Oltre alle modalità standard, l'adattatore VGA può essere configurato per emulare molte modalità delle schede che ha sostituito, EGA, CGA ed MDA.
Il termine VGA è anche usato spesso per riferirsi alla risoluzione di 640×480, indipendentemente dall'hardware usato per generare l'immagine.
Per i dispositivi integrati, basandosi sulla convenzione di riferirsi alla risoluzione di 640×480 col termine VGA, sono stati coniati i termini commerciali QVGA (320×240), QQVGA (160×120) e 1/8 VGA (240×680).
Uno schermo XVGA ha 1024 per 768 pixel in 256 colori. IBM si riferisce a questa modalità come "8514", dal nome del primo monitor IBM capace di mostrare questa risoluzione.
Il termine VGA è anche usato per riferirsi alle tecniche di connessione del computer al monitor (per esempio un "connettore VGA" si distingue da un "connettore DVI"). La connessione VGA standard tra PC e monitor termina con uno spinotto/connettore maschio a 15-pin (in lingua inglese, DE-15 D-subminiature). Il cavo VGA trasporta l'immagine allo schermo anche a risoluzioni come 1600×1200 o più alte. Qualche periferica VGA usa ancora spinotti a 9-pin (dello stesso tipo di quelli usati per gli standard EGA, CGA e MDA), invece degli standard più recenti che utilizzano quelli 15-pin.

### Tecniche di programmazione

Una tecnica di programmazione diffusa ma poco documentata, chiamata Mode X (coniata per la prima volta da Michael Abrash), fu usata per rendere disponibili tecniche e risoluzioni grafiche non possibili con la modalità standard Mode 13h (una modalità standard a 256 colori delle schede VGA dell'IBM. Supporta una risoluzione 320×200 pixel e fu usata per programmare giochi e software di animazione fino al 1990). Questo fu fatto "suddividendo" la memoria a 256 kB della VGA in quattro "piani" separati, che utilizzavano tutti i 256 kB di RAM disponibili nella modalità a 256 colori. Questo fu un compromesso tra una maggiore complessità e perdita di prestazioni in qualche tipo di operazioni grafiche, ma il problema fu mitigato da operazioni che lo resero più veloce in molte situazioni: il riempimento di un colore dei poligoni poteva essere accelerato grazie all'abilità di disegnare quattro pixel con una singola istruzione dell'hardware. Risoluzioni più alte potevano essere forzate utilizzando questa tecnica, ma la 320×240 fu probabilmente la più conosciuta e usata per il tipico rapporto 4:3 con pixel quadrati.
Un'altra usata caratteristica di Mode X è la disponibilità di pagine video multiple nell'hardware, utilizzate per realizzare il page flipping, o double buffering. Nella modalità ufficiale Mode 13h il double buffering non è supportato, ma è possibile usarlo solo con il Mode X. (Tutte le modalità VGA a 16 colori lo possono usare).
La scheda VGA, grazie alla sua natura fortemente configurabile, permette moltissime modalità Mode X truccate. Fractint, un noto programma di visualizzazione di frattali, usava varie modalità VGA truccate, che spingevano il VGA ai limiti - modalità a 16 colori estese come 704×528, 736×552, 768×576, e addirittura 800×600 ove possibile. Anche altro software, come Xlib (una libreria grafica VGA scritta in C nei primi anni novanta) e ColoRIX (un programma grafico a 256 colori), supportava le modalità a 256 colori truccate, utilizzando molte combinazioni di righe (256, 320, e 360 pixel) e di colonne (200, 240, 256, 400 e 480). Il limite pratico era di 640×400 che usava praticamente ogni byte dei 256 kB di memoria video.
Bisogna far notare, comunque, che la frequenza d'aggiornamento doveva essere ridotta per permettere l'uso di queste modalità video e che esse erano incompatibili con alcuni monitor, causando problemi di visualizzazione come dettagli di immagini spariti, sfarfallamenti, mancanza di sincronia orizzontale o verticale, a seconda della modalità video tentata. A causa di ciò la maggior parte dei trucchi VGA usati nei prodotti commerciali erano limitati a combinazioni "a prova di monitor", come 320×400 (doppia risoluzione, due pagine video), 320×240 (pixel quadrati), e 360×480 (la risoluzione più alta supportata con i monitor VGA).

### Modalità testuali

Le modalità testuali alfanumeriche standard del VGA usano 80×25 o 40×25 celle di testo. Ogni cella può scegliere tra 16 colori disponibili per il carattere e 8 per lo sfondo; l'insieme degli 8 colori di sfondo permessi è lo stesso di quello dei colori del carattere, limitato ai colori per cui il bit-flag di alta intensità non è attivo. Inoltre ogni carattere può essere fatto lampeggiare; tutti quelli che sono impostati per lampeggiare, lampeggiano all'unisono. La capacità di lampeggiamento per l'intero schermo può essere barattata con l'abilità di scegliere tra 16 colori invece di 8 per lo sfondo. Tutte queste opzioni sono le stesse di quelle presenti nello standard CGA di IBM
Le schede VGA di solito supportano sia modalità testo monocromatiche che a colori, sebbene quelle monocromatiche non siano praticamente mai usate. Il testo in bianco e nero viene disegnato utilizzando testo colorato in grigio su sfondo nero su quasi tutte le moderne schede VGA. I monitor VGA monocromatici furono venduti (principalmente per applicazioni testuali), ma comunque la maggior parte di essi lavorano in modo accettabile se connessi a schede VGA a colori.
Nella modalità testo a colori ogni carattere a schermo è in realtà rappresentato da due byte. Quello inferiore, o byte di carattere, è quello che rappresenta il carattere vero e proprio all'interno del character-set attivo e quello più alto, o byte degli attributi, è un campo di bit utilizzato per selezionare vari attributi come colore, lampeggiamento, character-set, e così via. Questo schema a coppia di bit è tra le caratteristiche di VGA ereditate definitivamente da CGA.

### Dettagli sull'indirizzamento

La memoria video del VGA è mappata nella memoria centrale del calcolatore attraverso una finestra nell'intervallo 0xA0000 e 0xC0000 dello spazio di indirizzamento in modalità reale. Tipicamente questa è così suddivisa:
* 0xB0000 per la modalità testo monocroma
* 0xB8000 per la modalità testo a colori e modalità grafiche CGA-compatibile
* 0xA0000 per le modalità grafiche EGA/VGA
A causa dell'uso di mappature differenti per modalità differenti, è possibile avere una scheda video monocromatica e una a colori, come VGA, EGA, o CGA, contemporaneamente installate su una macchina. All'inizio degli anni ottanta questa era una pratica diffusa, per visualizzare ad esempio un foglio di calcolo di Lotus 1-2-3 in testo ad alta risoluzione su un display monocromatico e i grafici associati su una schermata CGA a bassa risoluzione. Più tardi molti programmatori utilizzarono tale configurazione con le schede monocromatiche per visualizzare informazioni di debug, mentre sull'altra scheda era in esecuzione un programma grafico. In particolare il debugger CodeView di Microsoft poteva lavorare in una configurazione dual-monitor per eseguire il debug di windows. C'erano anche driver per DOS, di solito chiamati ox.sys, che implementavano una simulazione di interfaccia seriale sullo schermo monocromo e, per esempio, abilitava l'utente a ricevere messaggi di crash dalle versioni di debug di Windows senza utilizzare un reale terminale seriale. È anche possibile utilizzare il comando "MODE MONO" al prompt di DOS per reindirizzare l'output allo schermo monocromo. Quando non era presente una scheda monocroma, si poteva utilizzare lo spazio 0xB000 - 0xB7FF per i programmi. Per esempio aggiungendo la linea "DEVICE=EMM386.exe I=B0000-B7FF" rendeva questo spazio di memoria disponibile per i programmi caricati nella memoria estesa.

### Modalità video VGA standard

Modalità video VGA standard :
| Modo | Tipo | Risoluzione | caratteri | colori |
| 0h,1h | Testo | 360×400 | 40×25 | 16 |
| 2h,3h | Testo | 720×400 | 80×25 | 16 |
| 4h,5h | Grafica | 320×200 | 40×25 | 4 |
| 6h | Grafica | 640×200 | 80×25 | 2 |
| 7h | Testo | 720×400 | 80×25 | Mono |
| Dh | Grafica | 320×200 | 40×25 | 16 |
| Eh | Grafica | 640×200 | 80×25 | 16 |
| Fh | Grafica | 640×350 | 80×25 | Mono |
| 10h | Grafica | 640×350 | 80×25 | 16 |
| 11h | Grafica | 640×480 | 80×30 | 2 |
| 12h | Grafica | 640×480 | 80×30 | 16 |
| 13h | Grafica | 320×200 | 40×25 | 256 |

## Dettagli tecnici

Le specifiche VGA sono le seguenti:
* 256 KiB di RAM Video
* modalità a 16 e 256 colori
* tavolozza di colori a 262 144 valori (sei bit per ogni canale, rosso, verde e blu)
* clock principale selezionabile fra 25,175 MHz o 28,322 MHz
* un massimo di 720 pixel orizzontali (colonne)
* un massimo di 480 pixel verticali (righe)
* frequenza d'aggiornamento fino a 70 Hz
* modalità Planar: fino a 16 colori (4 piani di bit)
* modalità Packed-pixel: 256 colori (Modalità 13h)
* gestione hardware dello scroll fluido
* gestione di alcuni 'operatori raster'
* Barrel shifter
* gestione di schermo suddiviso
* font software

## Struttura del connettore

Identificazione dei pin :
| Pin | Funzione |
| 1 | Rosso (video) |
| 2 | Verde (video) |
| 3 | Blu (video) |
| 4 | Monitor-ID Bit 2 |
| 5 | Massa |
| 6 | Rosso (massa) |
| 7 | Verde (massa) |
| 8 | Blu (massa) |
| 9 | chiave |
| 10 | Sincronismo (massa) |
| 11 | Monitor-ID Bit 1 |
| 12 | Monitor-ID Bit 0 |
| 13 | Sincronismo Orizzontale |
| 14 | Sincronismo Verticale |
| 15 | [Non connesso] |

### Specifiche di segnalazione

| Tipo | Analogico |
| Risoluzione | 640 (orizzontale) × 480 (verticale) |
| Frequenza di clock | 25,175 MHz |
| Frequenza orizzontale | 31,469 kHz |
| Frequenza verticale | 59,94 Hz |

### Monitor-ID Bit

I piedini Monitor-ID bit possono essere cortocircuitati o lasciati aperti per identificare il tipo di monitor collegato.
Se l'ID bit 0 e l'ID bit 2 sono collegati a terra, significa che il monitor collegato è IBM 8514 compatibile e, cioè, supporta due (o più) frequenze in modalità interlacciata a colori.
Se l'ID bit 0 è collegato a terra e l'ID bit 2 non è connesso, significa che il monitor è IBM 8512 o IBM 8513 compatibile e, cioè, supporta una (o più) frequenze in modalità non interlacciata a colori.
Se l'ID bit 0 non è connesso e l'ID bit 2 è collegato a terra, significa che il monitor è IBM 8503 compatibile monocromatico.
Normalmente l'ID bit 1 e l'ID bit 2 sono collegati insieme.

## Tabella di comparazione fra diverse risoluzioni

| Nome | x (larghezza) | y (altezza) | Pixel (×1 milione) | Aspect Ratio | Percentuale di differenza in pixel | Percentuale di differenza in pixel | Percentuale di differenza in pixel | Percentuale di differenza in pixel | Percentuale di differenza in pixel | Percentuale di differenza in pixel | Percentuale di differenza in pixel | Percentuale di differenza in pixel | Versione Widescreen | Dimensione tipica dello schermo |
| Nome | x (larghezza) | y (altezza) | Pixel (×1 milione) | Aspect Ratio | VGA | SVGA | XGA | XGA+ | SXGA | SXGA+ | UXGA | QXGA | Versione Widescreen | Dimensione tipica dello schermo |
| VGA | 640 | 480 | 0,31 | 1,33 | 0% | −36% | −61% | −69% | −77% | −79% | −84% | −90% | | |
| SVGA | 800 | 600 | 0,48 | 1,33 | 56% | 0% | −39% | −52% | −63% | −67% | −75% | −85% | | |
| XGA | 1024 | 768 | 0,79 | 1,33 | 156% | 64% | 0% | −21% | −40% | −47% | −59% | −75% | WXGA | 15" / 38 cm |
| XGA+ | 1152 | 864 | 1,00 | 1,33 | 224% | 107% | 27% | 0% | −24% | −32% | −48% | −68% | WXGA+ | 17" / 43 cm |
| SXGA | 1280 | 1024 | 1,31 | 1,25 | 327% | 173% | 67% | 32% | 0% | −11% | −32% | −58% | | 17-19" / 43-48 cm |
| SXGA+ | 1400 | 1050 | 1,47 | 1,33 | 379% | 206% | 87% | 48% | 12% | 0% | −23% | −53% | WSXGA+ | |
| UXGA | 1600 | 1200 | 1,92 | 1,33 | 525% | 300% | 144% | 93% | 46% | 31% | 0% | −39% | WUXGA | 20" / 51 cm |
| QXGA | 2048 | 1536 | 3,15 | 1,33 | 924% | 555% | 300% | 216% | 140% | 114% | 64% | 0% | WQXGA | 30" / 76 cm |