Obsah
1. PGC – první grafický akcelerátor pro osobní počítače
2. Technologické řešení grafického akcelerátoru PGC
5. Kompatibilita s běžnými grafickými kartami
6. Rozhraní pro připojení monitoru
7. Volání funkcí grafického akcelerátoru PGC
1. PGC – první grafický akcelerátor pro osobní počítače
V předchozích pěti částech seriálu o architekturách počítačů jsme si popsali vývoj grafických karet určených pro osobní počítače kompatibilní s IBM PC (PC, XT, AT, PS/2 a jejich klony). Všechny popisované karty, tj. jak MDA, CGA, EGA, MCGA, VGA, tak i Hercules však programátorům i uživatelům nabízely pouze velmi omezený repertoár základních funkcí. Jednalo se především o funkce určené pro nastavení textového či grafického režimu, změnu barvové palety, změnu definice jednotlivých znaků ve znakové sadě (podporováno na EGA, VGA a Hercules Plus) horizontální a/nebo vertikální posun obrazu (podpora u VGA a částečně EGA), možnost nastavení počátku obrazové paměti (použitelné mj. i pro double či tripple buffering), režim rozdělené obrazovky (VGA) a samozřejmě též možnost zápisu či čtení hodnot jednotlivých znaků a jejich barvových atributů v textových režimech či barev pixelů v režimech grafických.

Obrázek 1: Textový režim adaptéru MDA. Jedná se o jednu z prvních grafických karet určených pro počítače IBM PC (alternativu představovala jen karta CGA), která však podporovala pouze práci v textovém režimu s 25 řádky a 80 znaky na řádek. Tvary znaků byly reprezentovány bitmapou o rozměrech 9×14 pixelů, tj. fyzické rozlišení v textovém režimu MDA bylo rovno 720×350 pixelům.
Vlastnosti, které byly běžné už na mnoha osmibitových domácích počítačích, například podpora pro práci se sprity, nebyly na zmiňovaných grafických kartách implementovány a taktéž unifikované programové rozhraní, představované na počítačích PC službami BIOSu, pokrývalo pouze základní funkce, takže softwarové firmy i jednotliví programátoři byli nuceni si vytvářet vlastní grafické knihovny implementující například vykreslování základních geometrických tvarů (bod, úsečka, kružnice) nebo pokročilejší práci s bitmapami (přesuny bitmap v rámci obrazové paměti, přesuny bitmap mezi operační pamětí a pamětí obrazovou, „rastrové“ bitové operace včetně maskování atd). Jednou ze známějších grafických knihoven používaných širší skupinou programátorů je knihovna BGI (Borland Graphics Interface) firmy Borland, kterou bylo možné využít na mnoha grafických kartách díky „ovladačům“ těchto karet. Tyto ovladače byly zpočátku dodávány samotnou firmou Borland spolu s jejími vývojovými nástroji, později se objevily i ovladače naprogramované dalšími programátory (například ovladače podporující minule popsaný Mode-X, ovladače pro různé karty SVGA, ovladače zajišťující výstup do souborů HPGL, PostScriptu atd.).

Obrázek 2: První grafickou kartou pro IBM PC, která podporovala zobrazení rastrové grafiky, byla karta CGA. Jak jsme si již řekli v předchozích částech tohoto seriálu, umožňovala tato karta pracovat v grafickém režimu 640×200×2 (dvoubarevný režim) či 320×200×4 (čtyřbarevný režim) a při vhodném nastavení řídicích registrů taktéž v šestnáctibarevném režimu nabízejícím rozlišení 160×200. Zvláštní je, že dále popisovaný grafický akcelerátor PGC umožňoval zapnout emulaci funkcí grafické karty CGA, ovšem podporoval pouze její standardní grafické režimy.
Ovšem v roce 1984 se tato poměrně neutěšená situace částečně změnila, protože firma IBM uvedla na trh první grafický akcelerátor pro počítače PC – PGC neboli Professional Graphics Controller. Jednalo se o ucelený grafický subsystém, který již programátorům nabízel mnohem více možností, než ostatní grafické karty, a navíc byl vybaven jednoduše použitelným programovým rozhraním.

Obrázek 3: Další vývoj již vedl ke kartě EGA, která vznikla ve stejné době, jako dnes popisovaný grafický akcelerátor PGC. Kromě společného roku vzniku se však jedná o naprosto odlišné grafické adaptéry – týká se to jak jejich možností a technologického řešení, tak i ceny, která byla hlavním důvodem, proč se PGC rozšířil pouze na těch osobních počítačích, na nichž byly provozovány profesionální graficky zaměřené aplikace (CAD apod.).
2. Technologické řešení grafického akcelerátoru PGC
PGC – Professional Graphics Controller nebyl pouze jednoúčelovou grafickou kartou, protože se ve skutečnosti jednalo o celý počítač (resp. relativně samostatně pracující výpočetní subsystém založený na mikroprocesoru Intel 8088), který byl přes sloty sběrnice ISA zapojen do počítače PC. Již samotné připojení PGC do počítače je z technologického hlediska zajímavé a poměrně neobvyklé, neboť PGC je vytvořen na trojici desek plošných spojů. Obě okrajové desky byly představovány „dlouhými“ ISA kartami (jedná se o tzv. karty plné délky, jejichž konec se zasouval do ližin umístěných na přední stěně počítačové skříně), prostřední deska byla kratší a jako jediná nebyla do PC přes ISA sběrnici zapojena. Všechny tři desky byly mezi sebou propojeny společnou interní sběrnicí (fyzické provedení tohoto propojení je patrné z následujících obrázků). Pro úspěšné zapojení PGC do počítače bylo nutné, aby se konektory ISA sběrnice nacházely v takové vzdálenosti od sebe, jako u IBM PC, což kupodivu někteří výrobci základních desek (a současně i jejich šasi) nedodržovali. Celá sestava trojice plošných spojů i se zapájenými součástkami vážila přibližně 0,5 kg.

Obrázek 4: Grafický akcelerátor PGC (Professional Graphics Controller).
3. Hardwarová podoba PGC
Karta PGC na trojici svých plošných spojů obsahovala paměť ROM o kapacitě 64kB, ve které byl uložen celý algoritmus vykreslování a manipulace s vykreslovanými a zobrazovanými obrazy (viz další kapitoly). Dále byla na kartě přítomna paměť RAM o kapacitě plných (na svou dobu téměř neuvěřitelných) 320 kB, která sloužila jako framebuffer (obrazová paměť), 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 (necelých 20 kB) se používala pro manipulaci s obrazem (z toho mimo jiné vyplývá, že nemohl být podporovaný plný double buffering, což se negativně projevovalo 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ů byly na kartě PGC přítomny i tři čtyřbitové D/A převodníky – pro každou barvovou složku jeden.

Obrázek 5: Umístění čipů na trojici plošných spojů grafického akcelerátoru PGC.
Prostřední (nejmenší) plošný spoj obsahoval čipy, které zajišťovaly emulaci funkcí grafické karty CGA. Systémové spojení s osobním počítačem bylo zajištěno přes paměťovou oblast o velikosti 2 kB, která byla z hlediska mikroprocesoru namapována od adresy 0×c600: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í již zmiňované kompatibility s grafickou kartou CGA se část obrazové paměti mapovala na adresy 0×b800:0000 – 0×b800:ffff, obsazeny byly i porty 0×3d0 – 0×3df, do nichž se mapuje obsah řídicích registrů karty 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 (zaplnění kruhového bufferu bylo identifikováno chybovým kódem). Kapacita kruhového bufferu byla snížena o cca 1 kB, neboť se v této oblasti paměti nacházel i zásobník používaný procesorem Intel 8088 a sada proměnných využívaných při vykreslování (je to logické, neboť procesor i8088 umístěný na PGC neměl kromě paměti ROM k dispozici žádnou jinou paměť než výše zmiňované 2 kB a 320 kB pro framebuffer).
4. Grafické režimy PGC
Grafický akcelerátor PGC podporoval pouze jeden nativní režim nabízející uživatelům rozlišení 640×480 pixelů, přičemž každý pixel mohl nabývat jedné z 256 barev, které byly vybírány z barvové palety obsahující 4096 barevných odstínů (tj. 212). Již z této informace je patrné, že šlo opravdu (samozřejmě s ohledem na dobu vzniku) o 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ýká se to jak osobních počítačů Atari ST a především Amiga, se kterými jsme se v tomto seriálu již zabývali (přesněji řečeno PGC tyto počítače o necelý rok předběhl), tak i grafických stanic. Cena PC i s grafickým akcelerátorem PGC (samotný PGC byl prodáván za 4000 dolarů) byla sice nižší než cena grafických stanic (1), ale přesto se tento akcelerátor mezi profesionály v oboru počítačové grafiky příliš neprosadil – pravděpodobně kvůli malé podpoře jak ze strany operačního systému, tak i ze strany výrobců aplikací typu CAD a CAM (jednouživatelský a jednoúlohový systém běžící v reálném režimu procesoru bez ochrany paměti a bez virtuální paměti asi softwarové firmy pracující v tomto segmentu trhu příliš neoslovil).
Poznámka: grafické stanice v polovině osmdesátých let minulého století většinou splňovaly pravidlo „tří M“ – jeden MB RAM, grafický režim s jedním Megapixelem a výpočetní výkon minimálně jeden MIPS. K tomu se přidávalo i čtvrté „M“ – cena cca jeden Megapenny, tj. 10 000 dolarů.
5. Kompatibilita s běžnými grafickými kartami
Kromě nativního grafického režimu popsaného v předchozí kapitole byla do jisté míry zajištěna i emulace funkcí grafické karty CGA se všemi jejími standardními textovými i grafickými režimy (dokonce bylo „simulováno“ i sněžení při přístupu do obrazové paměti :-). 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 mnohem lepší čitelnost textů (minimálně tak dobrou, jako na MDA či Herculesu, spíše však lepší, protože se používal jiný typ monitoru – viz další kapitola). Také některé nestandardní grafické režimy, například již popisovaný šestnáctibarevný režim s rozlišením 160×200 pixelů (použitelný při propojení karty CGA vybavené výstupem kompozitního videa s televizorem podporujícím normu NTSC) či emulace grafického režimu s rozlišením 160×100 pixelů vhodně nastaveným textovým módem, nebyly na PGC podporované, podobně jako třetí (nestandardní a v originální dokumentaci firmy IBM neuvedená) barvová paleta v grafických režimech.

Obrázek 6: Grafická karta CGA, se kterou je grafický akcelerátor PGC (částečně) zpětně kompatibilní. Povšimněte si, že se jedná o kartu ISA plné délky a že její plošný spoj zasahuje i do oblasti, ve které se běžně nachází šestnáctibitové rozšíření konektoru ISA (to samozřejmě způsobovalo problémy při připojení CGA do počítačů PC AT – ale kdo by si takovou vykopávku do átéčka dobrovolně instaloval? :-). Tato verze grafické karty CGA je vybavena i výstupem s kompozitním videem.
6. Rozhraní pro připojení monitoru
Pro účely zobrazování nativního grafického režimu s rozlišením 640×480 pixelů se používal speciální monitor, který musel díky vyššímu rozlišení (většímu počtu pixelů v jednom snímku) pracovat s jinými frekvencemi, než monitory určené pro grafické karty CGA, Hercules/MDA či EGA (jak již víme, grafická karta VGA vznikla až o několik let později než PGC). Kromě toho bylo nutné, aby se u každé barvové složky odlišovalo šestnáct úrovní (na vstup každého digitálně-analogového převodníku byl čtyřbitový registr), takže rozhraní k monitoru již bylo analogové – každá barvová složka byla představována analogovým signálem, synchronizační signály však samozřejmě byly stále digitální. Monitor se připojoval přes devítipinový dvouřadý konektor, avšak pomocí specializovaného konvertoru bylo později možné připojit i standardní VGA monitor (vybavený patnáctipinovým trojřadým konektorem), který je taktéž analogový a obecně multifrekvenční.

Obrázek 7: Zadní strana grafického akcelerátoru PGC s dvouřadým devítipinovým konektorem určeným pro připojení monitoru.
7. Volání funkcí grafického akcelerátoru PGC
Veškerá komunikace mezi počítačem a grafickým akcelerátorem PGC probíhala přes kruhový buffer o velikosti 1 kB (buffer je mapovaný do adresního prostoru počítače, viz předchozí kapitoly), do kterého se posílaly příkazy, které si akcelerátor postupně vybíral a ve volném čase prováděl, samozřejmě nezávisle na tom, co právě prováděl mikroprocesor v počítači. Příkazy mohly být zadány jak v hexadecimálním kódu (dva bajty), tak i jako běžné textové příkazy zapisované v ASCII kódu, podobně jako je tomu například u tiskáren a plotterů zpracovávajících příkazy jazyka HPGL. Z tohoto hlediska se PGC choval jako poměrně schopný interpretr grafických příkazů. Procesor umístěný na tomto grafickém akcelerátoru dokázal rozpoznat a interpretovat cca 80 příkazů, které se týkaly práce s rastrovým obrazem (přesuny dat, „rastrové“ bitové operace – raster-ops atd.), vykreslování vektorově definovaných plošných scén a konečně práce s vektorově vykreslovanou trojrozměrnou scénou (takzvaný drátový model – wireframe). V následující tabulce je pro přehled možností PGC vypsána pouze malá reprezentativní část všech příkazů (celý repertoár je možné získat na adrese http://www.seasip.info/…ePC/pgc.html#cmds):
Příkaz | Popis |
---|---|
ARC | vykreslení oblouku v rovině |
AREA | vyplnění obecné plošné oblasti vzorkem či barvou (funkce fill) |
CIRCLE | vykreslení kružnice v rovině |
CLEARS | smazání celé obrazovky |
CLOOP | vytvoření smyčky, kterou lze použít například pro vykreslování polí (opakujících se tvarů) |
DRAW | vykreslení úsečky v rovině |
DRAW3 | vykreslení prostorové úsečky (jeden z mála příkazů pro práci v 3D prostoru) |
IMAGER | čtení části pixmapy (barevného rastrového obrazu) nebo celého framebufferu |
IMAGEW | zápis části pixmapy nebo celého framebufferu |
MDMATX | vytvoření 3D transformační matice |
MDROTX | rotace trojrozměrného modelu přes zadanou transformační matici (transformace lze skládat) |
MDSCAL | změna měřítka trojrozměrného modelu přes zadanou transformační matici |
MDTRAN | translace (posun) trojrozměrného modelu přes zadanou transformační matici |
POINT | vykreslení bodu |
PROJCT | nastavení zorného úhlu při 3D projekci do promítací roviny |
TEXT | vykreslení textu |
Při práci s trojrozměrnými objekty se transformace zadávala pomocí transformační matice o velikosti 4×4 prvky. Transformace se skládaly, podobně jako v grafické knihovně OpenGL, násobením jednotlivých transformačních matic, čímž se z jednoduchých základních transformací (posun, rotace, změna měřítka, zkosení, příprava pro perspektivní projekci) tvořily transformace složitější. Vykreslování trojrozměrných scén se vždy provádělo pomocí úseček, šlo tedy o takzvané wireframe (drátové) modely používané zejména v CAD a CAM systémech. Podpora pro vyplněné plošky s konstantním či Gouraudovým stínováním není podporována, ale vzhledem k tomu, že veškeré vykreslování řídí procesor Intel 8088, je absence této vlastnosti pochopitelná.

Obrázek 8: Drátové modely se používají například v aplikacích typu CAD a CAM.
8. Barvová paleta
Pomocí příkazu PALETTE bylo možné nastavit jednu z dále uvedených barvových palet, které jsou specifikovány svým číslem:
Číslo palety | Význam |
---|---|
4 bity intenzita, 4 bity barva (šestnáct barev, každá v šestnácti intenzitách) | |
1 | 16barevná 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=216 barvových odstínů |
Grafický akcelerátor PGC sice nebyl příliš rozšířený (pravděpodobně díky již zmíněné ceně 4000 dolarů a nevhodné kombinaci platformy a operačního systému), některými svými vlastnostmi však ukázal cestu (i několik slepých cest :-), 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.

Obrázek 9: Barevná paleta s 6×6×6=216 barvovými odstíny podporovaná grafickým akcelerátorem PGC. Dnes se stejná paleta používá například při tvorbě obrázků pro webové stránky, které by měly být zobrazitelné i na systémech s 256 barvami (web-safe colors).
9. Odkazy na Internetu
- Support/peripheral/other chips – 6800 family
http://www.cpu-world.com/…rt/6800.html - Motorola 6845
http://en.wikipedia.org/…otorola_6845 - The 6845 Cathode Ray Tube Controller (CRTC)
http://www.tinyvga.com/6845 - IBM Monochrome Display Adapter
http://en.wikipedia.org/…play_Adapter - Color Graphics Adapter
http://en.wikipedia.org/…hics_Adapter - Wikipedia CZ: Sběrnice:
http://cs.wikipedia.org/…b%C4%9Brnice - Wikipedia EN: Industry Standard Architecture:
http://en.wikipedia.org/…Architecture - Enhanced Graphics Adapter
http://en.wikipedia.org/…hics_Adapter - IBM Multicolor Graphics Adapter
http://en.wikipedia.org/wiki/MCGA - Professional Graphics Controller
http://en.wikipedia.org/…s_Controller - The IBM PGA Graphics Adapter
http://incolor.inebraska.com/…_adapter.htm - Professional Graphics Controller: Notes
http://www.seasip.info/…ePC/pgc.html - A professional graphics controller (PDF ke stažení po zaplacení 10 doalrů)
http://domino.research.ibm.com/…6bfa00685b97?…