Hlavní navigace

Grafické karty a grafické akcelerátory (13)

25. 5. 2005
Doba čtení: 9 minut

Sdílet

V dnešní části seriálu pojednávajícího o grafických kartách a grafických akcelerátorech si budeme povídat o třech velmi zajímavých výrobcích: prvním grafickém akcelerátoru pro počítače řady IBM PC, který se jmenuje PGC, integrované grafické kartě (čipu) MCGA a konečně o slavné grafické kartě VGA, jejíž textové a grafické režimy jsou používány i v dnešní době.

Obsah

1. PGC – první grafický akcelerátor pro počítače řady PC
2. Hardwarová podoba PGC
3. Komunikace PGC s počítačem
4. Grafický čip MCGA
5. Grafická karta VGA
6. Obsah dalšího pokračování

1. PGC – první grafický akcelerátor pro počítače řady PC

V roce 1984 začala firma IBM prodávat první grafický akcelerátor určený přímo pro osobní počítače řady IBM PC, zejména pro právě vznikající trh menších CAD a CAM systémů. Tento grafický akcelerátor, jež se nazýval PGC, což je zkratka celého názvu Professional Graphics Controller, musel ve své době působit jako zjevení, zejména při porovnání jeho možností s grafickou kartou EGA, která začala být sériově vyráběna přibližně ve stejné době jako PGC. Jedinou (avšak velmi vážnou) nevýhodou byla cena tohoto grafického akcelerátoru, která se pohybovala v řádu několika tisíců dolarů – musíme si však uvědomit, že i původní grafické karty typu EGA se v prvních letech své existence prodávaly za 500 dolarů (!) a vzhledem k této vysoké ceně se pro ně zpočátku ani nevytvářely téměř žádné hry, protože výrobci her mylně předpokládali, že se EGA bude používat pouze ve výkonných kancelářských počítačích pro práci v aplikacích typu Lotus 1–2–3 nebo Harvard Graphics.

Tento grafický akcelerátor mohl být použit i ve starších a méně výkonných počítačích typu IBM PC XT, mohl však být připojen i k dalším počítačům, například k modernějším IBM PC AT nebo jeho klonům, které však musely na svých základních deskách dodržovat standardní vzdálenost mezi ISA sloty (viz podrobnější informace uvedené ve druhé kapitole této části).

Grafický akcelerátor PGC podporoval pouze jeden nativní režim o rozlišení 640×480 pixelů, kde každý pixel mohl nabývat jedné z 256 barev, které byly vybírány z palety 4096 barev (tj. 212). Již z této informace je patrné, že šlo opravdu o (na svou dobu) profesionální grafické řešení, které je, alespoň co se týče grafického rozlišení a barevné hloubky, srovnatelné i s dalšími počítači té doby (třiceti dvou bitové počítače Commodore Amiga a Atari ST se totiž na trhu objevily až o celý rok později).

Kromě nativního grafického režimu byla do jisté míry zajištěna i emulace grafické karty CGA se všemi jejími standardními textovými i grafickými režimy. Emulace CGA však nebyla stoprocentní, například při zobrazování textových režimů se pracovalo se čtyřmi sty skenovacími řádky a ne s obvyklými dvěma sty – z tohoto důvodu byly znaky při práci s PGC vytvořeny v masce 8×14 pixelů, což zajistilo lepší čitelnost textů a také to uživatele oprostilo od nutnosti měnit každého půl roku čočky v brýlích. Také některé nestandardní grafické režimy (například dříve zmiňovaný šestnáctibarevný režim 160×100 pixelů) nebyly podporovány, stejně jako třetí (nestandardní a v dokumentaci neuvedená) barvová paleta v grafických režimech.

Pro zobrazování nativního grafického režimu 640×480×256 se používal speciální monitor, který musel zvládat jiné frekvence než monitory určené pro grafické karty CGA, Hercules/MDA či EGA. Kromě toho bylo nutné, aby se u každé barvové složky odlišovalo šestnáct úrovní (na vstupu každého DA převodníku byl čtyřbitový registr), takže rozhraní k monitoru již bylo analogové. Monitor se připojoval přes devítipinový konektor, pomocí specializovaného konvertoru bylo později možné připojit i VGA monitor, který je také analogový a obecně multifrekvenční.

2. Hardwarová podoba PGC

Ve skutečnosti není grafická karta PGC pouze grafickým akcelerátorem, ale jedná se o celý počítač (resp. výpočetní subsystém), který je přes ISA sloty zapojen do počítače PC. Již samotné zapojení do PC je zajímavé, neboť PGC je vytvořena na třech deskách. Dvě desky byly tvořeny „dlouhými” ISA kartami, prostřední deska byla kratší a jako jediná nebyla do PC zapojena. Všechny tři desky se mezi sebou propojovaly kabelem, který tvořil interní sběrnici grafického akcelerátoru. Pro zapojení PGC do počítače bylo kvůli její konstrukci nutné, aby se konektory ISA sběrnice nacházely v definované vzdálenosti od sebe, což někteří výrobci základních desek počítačů nesplňovali.

Karta PGC na svých deskách obsahovala paměť ROM o kapacitě 64 kB, ve které byl uložen celý algoritmus vykreslování a manipulace s vykreslovanými a zobrazovanými obrazy. Dále byla na kartě přítomna paměť RAM o kapacitě plných 320 kB, která sloužila jako framebuffer, protože pro uložení rastrového obrazu o rozlišení 640×480 pixelů je při osmi bitech na pixel zapotřebí alokovat 307200 bytů, zbylá část paměti RAM se používala pro manipulaci s obrazem (z toho mimo jiné vyplývá, že nemohl být podporován plný double-buffering, což bylo patrné zejména při vykreslování rozsáhlých prostorových scén). Veškeré vykreslování nebylo řízeno pomocí specializovaného čipu, ale běžného procesoru Intel 8088, který podle příkazů došlých z PC prováděl veškeré výpočty a manipulace s obrazem. Kromě těchto čipů byl na kartě PGC přítomen i trojnásobný čtyřbitový DA převodník, pro každou barvovou složku jeden.

Systémové spojení s osobním počítačem bylo zajištěno přes paměťovou oblast o velikosti 2 kB, která byla vytvořena od adresy 0xc600:0000, což mimo jiné znamenalo, že mohlo docházet ke komplikacím při současném připojení některých síťových karet či rozšířených BIOSů. Na originálních počítačích PC XT a PC AT však k těmto problémům nedocházelo. Kvůli zajištění kompatibility s grafickou kartou CGA se část obrazové paměti mapovala na adresy 0xb800:0000  – 0xb800:ffff, obsazeny byly i porty 0x3d0  – 0x3df, které mapují řídicí registry CGA. Na kartě PGC se došlé příkazy ukládaly do kruhového bufferu, ze kterého byly postupně vybírány a prováděny.

3. Komunikace PGC s počítačem

Veškerá komunikace mezi počítačem a grafickým akcelerátorem PGC probíhala přes kruhový buffer, do něhož se posílaly příkazy, které si akcelerátor postupně vybíral a ve volném čase prováděl. Příkazy mohly být zadány jak v hexadecimálním kódu, tak i jako běžné textové příkazy (v ASCII kódu), z tohoto hlediska se PGC choval jako poměrně schopný interpretr grafických příkazů. Grafická karta dokázala provést cca 80 příkazů, které se týkaly práce s rastrovým obrazem, vykreslování vektorově definovaných plošných scén a konečně práce s vektorově vykreslovanou trojrozměrnou scénou. V dalším přehledu z těchto příkazů vybírám pouze malou reprezentativ­ní část:

  1. ARC vykreslení oblouku v rovině.
  2. AREA vyplnění obecné plošné oblasti vzorkem či barvou.
  3. CIRCLE vykreslení kružnice v rovině.
  4. CLEARS smazání celé obrazovky.
  5. CLOOP vytvoření smyčky, kterou lze použít například pro vykreslování polí.
  6. DRAW vykreslení úsečky v rovině.
  7. DRAW3 vykreslení prostorové úsečky.
  8. IMAGER čtení části pixmapy nebo celého framebufferu.
  9. IMAGEW zápis části pixmapy nebo celého framebufferu.
  10. MDMATX vytvoření 3D transformační matice.
  11. MDROTX rotace trojrozměrného modelu přes zadanou transformační matici.
  12. MDSCAL změna měřítka trojrozměrného modelu přes zadanou transformační matici.
  13. MDTRAN translace trojrozměrného modelu přes zadanou transformační matici.
  14. POINT ve své podstatě se jedná o nekorektně pojmenovanou operaci typu putpixel.
  15. PROJCT nastavení zorného úhlu při 3D projekci do promítací roviny.
  16. TEXT vykreslení textu.

Při práci s trojrozměrnými objekty se transformace zadávala pomocí transformační matice o velikosti 16×16 prvků. Transformace se skládaly, podobně jako v grafické knihovně OpenGL, násobením jednotlivých transformačních matic, čímž se z jednoduchých pohybů tvořily pohyby složitější. Vykreslování trojrozměrných scén se provádělo pomocí úseček, šlo tedy o takzvané wireframe modely používané zejména v CAD a CAM systémech.

Pomocí příkazu PALETTE bylo možné nastavit jednu z dále uvedených barvových palet, které jsou specifikovány svým číslem:

  • 0– 4 bity intenzita, 4 bity barva
  • 1– 16 barevná paleta (emulace CGA)
  • 2– RGB paleta 2–3–3 (počty bitů na jednotlivé barvové složky)
  • 3– RGB paleta 3–2–3 (počty bitů na jednotlivé barvové složky)
  • 4– RGB paleta 3–3–2 (počty bitů na jednotlivé barvové složky)
  • 5– barevná kostka o velikosti 6×6×6 barvových odstínů

Grafický akcelerátor PGC sice nebyl příliš rozšířený, některými svými vlastnostmi však ukázal cestu, kterou se měli výrobci grafických karet ubírat až o několik let později při vytváření komerčně mnohem úspěšnějších grafických akcelerátorů nové generace.

4. Grafický čip MCGA

Grafický čip MCGA neboli MultiColor Graphics Array navrhla firma IBM pro svoji známou řadu počítačů PS/2, konkrétně pro model 80. Ve své podstatě se jedná o značně zjednodušenou verzi grafické karty VGA, která je popsána v následující kapitole a podrobněji pak v navazující části tohoto seriálu. IBM se snažila, aby MCGA nahradila v té době již nevyhovující grafickou kartu CGA, z toho důvodu je MCGA s touto kartou slučitelná. Kromě emulace CGA se částečně emulovala i grafická karta EGA, nikoli však stoprocentně. Kapacita obrazové paměti byla rovna 64 kB, což je obecně méně než u grafické karty EGA, která mohla být osazena až 256 kB. Z poměrně malé kapacity obrazové paměti pak vyplývají i omezené možnosti grafických režimů, ale současně i nízká cena.

V textových režimech se znaky zobrazovaly v masce 8×16 pixelů (režim s 25 textovými řádky), resp. 8×8 pixelů (režim s padesáti textovými řádky), což znamená, že se oproti dále popisované kartě VGA (ale i vůči MDA a Herculesu) snížilo horizontální rozlišení ze 720 pixelů na 640 pixelů. Kromě textových režimů byly u této karty zavedeny dva režimy nové. V prvním režimu bylo možné zobrazit rastr o rozlišení 640×480 pixelů, ale pouze ve dvou barvách. Ve druhém režimu se zobrazoval rastr o rozlišení 320×200 pixelů v 256 barvách. Tento režim je dodnes velmi populární, zejména však ve spojitosti s grafickou kartou VGA.

5. Grafická karta VGA

Dalším (a dosti podstatným) technologickým rozšířením grafických karet CGA a EGA vznikla grafická karta VGA, jejíž název je odvozen ze sousloví Video Graphics Array. Slovo array v tomto kontextu značí, že celá karta byla vytvořena na jednom čipu, samozřejmě kromě nezbytných krystalů a čipů s obrazovou pamětí. Tato grafická karta byla poprvé použita firmou IBM v počítačích řady IBM PS/2 (kromě nejnižšího modelu, který používal výše zmíněnou kartu MCGA). V těchto počítačích se dokonce provedlo zabudování grafické karty přímo na základní desku počítače, tuto konstrukci firma IBM později použila i v dalších modelech, samozřejmě s využitím výkonnějších grafických karet či grafických čipů.

Tato karta je částečně zpětně kompatibilní s grafickými kartami CGA, EGA a MCGA, avšak s tím rozdílem, že není možné použít původní monitory, protože se změnily frekvence synchronizačních signálů. Navíc se však zavádí dva nové grafické režimy: režim o rozlišení 320×200 pixelů v 256 barvách a režim o rozlišení 640×480 bodů v 16 barvách. První režim se stal velmi oblíbený, zejména u dem a počítačových her. Druhý režim byl naopak použit v CAD systémech a dalších graficky orientovaných programech – jeho velkou předností byl fakt, že tvar pixelů zde byl čtvercový, což neplatí o žádném dříve zmíněném grafickém režimu karet CGA, EGC, EGA či HGC. Velikost obrazové paměti je rovna 256 kB, protože v nejvyšším oficiálně podporovaném grafickém režimu se pro framebuffer alokuje místo o kapacitě 150 kB. Vzhledem k omezením daným BIOSem a DOSem se však nedá přímo adresovat celá obrazová paměť, viditelné je vždy jedno či dvě „okna“, každé o velikosti 64 kB.

Nesmíme také zapomenout na to, že u grafické karty VGA se při práci s textovým režimem používá rozlišení 720×400 pixelů, což umožňuje vytvářet znaky v masce o velikosti 9×16 pixelů. Výsledkem je nádherná čitelnost textu a současně i poměrně ergonomická obnovovací frekvence 70 Hz (všechny režimy karty VGA, které zobrazovaly 200 či 400 řádků, měly tuto obnovovací frekvenci). Tento textový režim se dodnes používá, a to jak při startování počítače (POST), tak i v BIOSu, DOSu a implicitně i pro Linux a BSD běžící v konzolovém režimu. Textový režim je možné přeprogramovat, lze například zvýšit vertikální rozlišení na 480 linek (to odpovídá třiceti textovým řádkům), ale sníží se tím obnovovací frekvence na pouhých 60 Hz. Pro programovou kompatibilitu se staršími grafickými kartami se dá zmenšit i šířka znaků z devíti pixelů na osm, ale tento způsob (kupodivu) vede k poměrně značné degradaci čitelnosti.

Prakticky všechny grafické karty, které jsou dnes vyráběny, jsou zpětně kompatibilní s VGA grafickou kartou, její grafické režimy jsou použity například při inicializaci některých graficky orientovaných operačních systémů (a také při nefunkčnosti ovladačů grafických karet ve starších operačních systémech Microsoft Windows – někteří lidé dokonce stále pracují v režimu 640×480×16 s obnovovací frekvencí 60 Hz!).

CS24_early

6. Obsah dalšího pokračování

V dalším pokračování tohoto seriálu si uvedeme podrobnější informace o grafické kartě VGA, protože tato karta měla velký význam, zejména pro vývoj graficky orientovaných aplikací, ale také například operačních systémů s GUI (jmenujme například Microsoft Windows, IBM OS/2, GeoWorks atd.).

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.