VGA

VGA (inglise keeles Video Graphics Array ehk video graafikamassiiv; vahel ka viidatud kui graafikaadapter) viitab eelkõige kuvari riistvarale, mida tutvustati esimest korda 1987. aastal IBM PS/2 tüüpi arvutitel. Tänu selle laialdasele kasutusvõtule on hakatud seda lühendit kasutama ka analoog arvutikuvari 15-kontaktilise D-subminiature VGA-pistikühenduse, aga ka 640×480 pikslist koosneva lahutusvõime puhul. Personaalarvutite turul pärast 1990. aastaid VGA lahutusvõimet ei kasutatud, kuid see on saamas populaarseks lahutusvõimeks uutel mobiilseadmetel.

VGA oli viimane IBM-i loodud graafikastandard, millele suurem osa "PC kloonidest" vastasid. Seepärast oli see 2010. aasta seisuga üks väheseid standardeid, mille osas enamiku personaalarvutite riistvaralistelt graafikalahendustelt võis eeldada ühilduvust ilma spetsiaalselt mingi seadme jaoks tehtud tarkvarata.

IBM vahetas VGA ametlikult välja "laiendatud graafikamassiivi" ehk XGA (Extended Graphics Array) vastu, kuid konkureerivad arvutitootjad võtsid selle asemel kasutusele mitmeid omi ja XGA-st erinevaid VGA laiendusi. Nende ühisnimetuseks sai Super-VGA. Tänapäeval on VGA ja Super-VGA signaalid sageli kättesaadavad DVI-pistikühenduse kaudu, juhul kui graafikaadapter analoogsignaale väljastab.

Tehnilised andmed

Riistvara 

VGA-d nimetatakse massiiviks, mitte aga adapteriks, sest see oli algselt rakendatud üheainsa kiibina (ASIC), asendades Motorola 6845 ja tosinaid teisi loogilisi kiibistikke, mis hõlmasid IBM MDA, CGA ja EGA täispikkuses ISA graafikakaarte. Kuna VGA oli ühekiibiline, siis sai seda vähese pingutusega ka paigutada otse arvuti emaplaadile (vajalikud olid ainult videomälu, (taktsageduse) ajastuskristall ja väline RAMDAC) ja esimesed IBM PS/2 mudelid olid varustatud emaplaadile integreeritud VGA-ga. Võrdluseks võib tuua "esimese põlvkonna" IBM PC desktop mudelid – PC [5150], PC/XT [5160] ja PC AT [5170] – mis vajasid ekraani ühendamiseks siinile installitud kuvaadapterit.

VGA spetsifikatsioonid (tehnilised andmed) on järgmised:

256 kB video RAM-i (esimesi kaarte oli võimalik tellida ka 64 kB või 128 kB RAM-iga, kaotades sellega aga mõned videorežiimid)
16 värvi ja 256 värvi režiim
262 144 väärtusega värvipalett (6 bitti kanali kohta ehk punasele 6 bitti, sinisele 6 bitti ja rohelisele 6 bitti)
valitav 25,175 MHz või 28,332 MHz töösagedus
horisontaalselt maksimaalselt 800 pikslit
kuni 600 rida
värskendussagedus kuni 70 Hz
pakitud pikslite režiim: 256 värvi (Mode 13h)
sujuvkerimise riivaraline tugi
ekraanipoolituse tugi

VGA toetab nii graafilist režiimi (kõik punktid adresseeritud) kui ka tärktekstirežiimi. Graafika standardrežiimid on:
640x480 – 16 värvi režiimis
640x350 – 16 värvi režiimis
320x200 – 16 värvi režiimis
320x200 – 256 värvi režiimis (Mode 13h)

Peale standardrežiimide saab VGA-d seadistada ka jäljendama paljude tema eelkäijate (EGA, CGA ja MDA) mitmeid režiime. BIOS-i tasemel on ühilduvus peaaegu täielik, aga ka registrite tasemel on saavutatud kõrge ühilduvuse määr. VGA ei ole ühilduv spetsiaalsete IBM PCjr ega HGC videorežiimidega.

Signaal
VGA horisontaalse sageduse soovitud väärtus on täpselt kahekordne NTSC-M videosüsteemi väärtus. Valem VGA horisontaalse väärtuse arvutamiseks on seega (60 ÷ 1001) × 525 kHz = 4500 ÷ 143 kHz ≈ 31,4686 kHz. Kõik teised väärtused, mida VGA-kaart kasutab, on tuletatud selle väärtuse korrutamisest või jagamisest täisarvuga. Kuna kvartskella täpsus on piiratud, on reaalsetel kaartidel natuke kõrgem või madalam sagedus. Kõige tavalisema VGA-režiimi 640x480 "60 Hz" progressiivlaotuse horisontaalsed ajastused on:

(Kogu horisontaalne sünkroonimisaeg 6,60 µs)

Vertikaalsed ajastused on:

(Kogu vertikaalne sünkroonimisaeg 1,43 ms)

640 × 400 @ 70 Hz videorežiim on kasutusel enamiku x86 arhitektuuriga personaalarvutite alglaadimisel.
640 × 480 @ 60 Hz on vaikimisi MS-Windowsi 16 värvi graafikarežiim.
Tegelik ajastus võib natuke varieeruda. Näiteks 640×480 @ 60 FPS jaoks 25,17 µs aktiivvideo aega pikslisagedusega 25,174 MHz annab tulemuseks 633 pikslit loodetud 640 piksli asemel.

Standardsed tekstirežiimid
BIOS pakub mõningaid tekstirežiime VGA-adapteritele, millel on 80x25, 40x25, 80x43 või 80x50 tekstiruudustik. Iga element võib valida ühe 16-st saadaolevast värvist esiplaani värviks ning 8-st värvist tausta jaoks. Need 8 taustavärvi, mis on lubatud, on need, millel on madala intensiivsusega bitikombinatsioon iga element võib olla tehtud ka vilkuvaks ning kõik vilkuvaks tehtud elemendid vilguvad korraga.

Mustvalged režiimid
VGA-adapterid toetavad tavaliselt nii monokroomset kui ka värvirežiimi, kuigi monokroone (mustvalge) režiim leiab väga vähe kasutust ning tugi kõikidele MDA tekstirežiimi atribuutidele (heleduse intensiivsus, allajoonimine) on tihti puudu. Must ja valge tekst on peaaegu kõigil uuematel VGA-adapteritel kuvatud kasutades halli teksti mustal taustal värvirežiimis. Enamik monokroomsetest VGA-kuvaritest, mis algul olid mõeldud eelkõige teksti kuvamiseks, töötab vähemalt adekvaatselt VGA-adapteriga ka värvirežiimis. Mõnikord põhjustas vigane ühendus uuema kuvari ja graafikakaarti VGA osa vahel selle, et kuvar identifitseeriti kui mustvalge; see aga põhjustas BIOS-i ja alglaadimise mustvalge kuvamise. Kui aga videokaardi draiverid on laaditud (nt jätkates operatsioonisüsteemi alglaadimist), siis saadakse aru, et kuvar peaks töötama värvirežiimis, ja see lülitatakse värvirežiimi.

Adresseerimisdetailid

VGA videomälu on kaardistatud PC mällu läbi "akna", mis asub segmentide 0xA0000 ja 0xBFFFF vahel PC reaalrežiimi (real mode) aadressiruumis (A000:0000 ja B000:FFFF segmendid nihutatud notatsioonis). Tavaliselt on need algussegmendid:
0xA0000 EGA/VGA graafilistel režiimidel (64 kB);
0xB0000 monokroomse tekstirežiimi jaoks (32 kB);
0xB8000 värviteksti režiimi jaoks ja CGA-ühilduv graafikarežiim (32 kB).

Tänu erinevate režiimide erinevatele mäluaadressidele on võimalik installida samale arvutile nii monokroomne kuvaadapter kui ka värviadapter (nt VGA, EGA või CGA). 1980. aastate algul oli see tavaliselt kasutusel Lotus 1-2-3 arvutustabelite (spreadsheets) kuvamisel kõrglahutusega tekstidena MDA-kuvaril ja sellega seotud graafika kuvamisel madala lahutusega CGA-kuvaril samaaegselt. Paljud programmeerijad kasutasid sama lahendust, et kuvada monokroomse kaardi abil veaparanduse (debug) informatsioon, samas kui programm ise jooksis graafikarežiimis teise kaardi peal. Mitmed veaparandusprogrammid, näiteks Borlandi Turbo Debugger, D86 (autor Alan J. Cox) ja Microsofti CodeView, olid võimelised töötama kahe kuvariga seadistuses. Nii Turbo Debuggeri kui ka CodeView' abil sai teha Windowsi veaparandust. Olid ka olemas DOS-i draiverid, näiteks ox.sys, mis jooksutasid jadaliidese simulatsiooni MDA-kuvaril, mis näiteks andsid kasutajale võimaluse saada veateateid Windowsi versioonide veaparanduse ajal tegelikku jadaterminali kasutamata. Võimalik oli kasutada ka "MODE MONO" käsku DOS-i redaktoris, et suunata väljund ümber monokroomsele kuvarile. Kui monokroomse kuvari adapter ei olnud ühendatud, oli võimalik kasutada 0xB000 – 0xB7FF aadressiruumi lisamäluna teistele programmidele (näiteks lisades rea "DEVICE=EMM386.EXE I=B000-B7FF" faili config.sys, see mälu tehti saadavaks nendele programmidele, mida oli võimalik "laadida kõrgele" – laadida kõrgmälusse).

VGA värvipalett

VGA-värvisüsteem on tagasiühilduv CGA- ja EGA-adapteritega ja see lisab neile ühe konfiguratsioonitaseme. CGA oli võimeline kuvama kuni 16 värvi ja EGA laiendas seda, lastes iga värvi 16-st valida 64-värvilisest paletist (need 64 värvi on moodustatud kahest bitist iga värvi – punane, roheline, sinine – jaoks. Kaks bitti korda kolm värvi võrdub kuus bitti, seega 64 värvi). VGA laiendab seda süsteemi veelgi, suurendades EGA paletti 64-lt sisendilt 256-le sisendile. Lisati veel kaks plokki järjest tumedamates toonides värve ja ka 8 "tühja" sisendit, mis seadistati mustaks.

Lisaks laiendatud paletile võis igaühele 256-st sisendist määrata suvalise värvi väärtuse VGA DAC kaudu. EGA BIOS lasi ainult kahel bitil kanali kohta väljendada igat sisendit, samas kui VGA lasi kuuel bitil väljendada iga põhivärvi (punane, roheline, sinine) intensiivsust. See andis kokku 64 erinevat intensiivsusetaset punasele, rohelisele ja sinisele, andes kokku 262 144 võimalikku värvi, igaüks 256-st oli võimalik määrata paletile (ning samas nendest 256-st 16 oli võimalik kuvada CGA-videorežiimides).

See meetod lasi uusi VGA värve kasutada ka EGA ja CGA graafikarežiimides, eeldades, et need mäletasid, kuidas erinevad paletisüsteemid on kokku pandud. Näiteks et seada tekstirežiimis teksti värvus tumepunaseks, peab see olema seadistatud ühte CGA värvi (näiteks vaikevärvi #7: helehall.) See värv määratakse siis ühte EGA paletti kuulavasse sisendisse – CGA värvi 7 puhul määratakse see EGA sisendisse 42. VGA DAC peab olema siis seadistatud nii, et ta muudaks värvi 42 tumepunaseks, ja kohe muutub tumepunaseks kõik, mis oli ekraanil kuvatud helehallina (CGA värv 7). Seda funktsiooni kasutati tihti 256-värvilistes VGA DOS-i mängudes, kui nad algul laadisid ja tekstiaken hääbus mustaks (nt mäng "Descent" aastast 1995).

Kui CGA ja EGA-ühilduvad režiimid lasid kuvada ainult 16 värvi korraga, siis teistes VGA-režiimides, näiteks laialt kasutatud mode 13h, lasi kuvada kõik 256 paleti sisendit korraga, seejuures nendes režiimides olid 256 värvi valitud saadaolevast 262 144 värvist.

Programmeerimise trikid
Dokumenteerimata, kuid populaarne VGA-graafikaadapterite kasutamise tehnika oli hüüdnimega "Mode X" ehk "tuunitud VGA" (autor Michael Abrash). See muutis võimalikuks lahtusvõimed, mis polnud võimalikud BIOS-i katkestuse nr. 13h standardsete funktsioonidega (Mode 13h). Sellega saavutati 256 kB VGA videomälu "lahtiühendamine" neljaks erinevaks "tasandiks," mis muutis kogu VGA 256 kB muutmälu kasutatavaks 256-värvilistes režiimides. See oli kompromiss lisakeerukuse ja jõudluse vähenemise näol mõnda tüüpi graafikaoperatsioonides, mille positiivne pool oli see, et teised operatsioonid muutusid teatud olukordades kiiremaks:
 Ühevärvilise hulknurga täitmiine kiirenes tänu võimalusele seada neli pikslit ühe kirjutamiskorraga riistvarale.
Videoadapter sai abistada videomälu pildiregioonide kopeerimiseks, mis oli mõnikord kiirem, kui pildiregioonide kopeerimine protsessori abil läbi suhteliselt aeglase arvutisiini (vt ISA siin).
Võimalikud olid ka suurema lahutusega kuvarežiimid: 16 värviga, 704×528, 736×552, 768×576 ja isegi 800×600. Programmiteek nagu näiteks Xlib (VGA-graafika kogu C-keele jaoks 1990. aastate alguses) ja programm ColoRIX (256 värviga graafika programm), toetasid samuti tuunitud 256 värvi režiimi, kasutades laiusi 256, 320, ja 360 pikslit ja kõrgusi 200, 240, 256, 400 ja 480 rida (ülemine piir oli 640×400, mis kasutas 250 kB VGA 256 kB video RAM-ist). Sellegipoolest oli 320×240 kõige tuntum ja sagedamini kasutatud, sest see oli tavaline 4:3 kuvasuhtega ja ruudukujuliste pikslitega (square pixels) lahutus.
Mitme videotasandi kasutamine riistvaras lubas programmeerijal teha kahekordset puhverdamist, kolmekordset puhverdamist või ekraani poolitamist, mis olid võimalikud küll VGA 320×200 16 värvi režiimis, kuid ei olnud võimalikud kasutades vaikerežiimi Mode 13h.

Vahel tuli kuvari laotussagedust vähendada, et neid režiime kasutada, mis aga suurendas koormust silmadele. Need režiimid olid ka ühildumatud mõnede vanemate kuvaritega, tekitades probleeme, näiteks pildi detailsuse kadumine, vilkumine ja horisontaalse sünkronisatsiooni puudumine, olenevalt režiimist, mida kasutati. Seepärast oli enamik VGA parandusi, mida kasutati reklaamtoodetel, piiratud "kuvari-turvalistes" kombinatsioonides, näiteks 320×240 (ruutpikslid, kolm videotasandit), 320×400 (topeltlahutus, kaks videotasandit) ja 360×480 (suurim lahutus, mis oli VGA-kuvaritega ühilduv, üks videotasand). Praegu on kõrgeim rakendatud VGA lahutus 400x600x256 (400×600 pikslit × 256 värvi). See oli kasutusel Fractintis kuulus fraktaali generaator.

Vaata ka
VGA-pistikühendus
DVI-pistikühendus

Graafikariistvara