Hlavní navigace

PGC: první grafický akcelerátor pro osobní počítače

19. 11. 2009
Doba čtení: 12 minut

Sdílet

Popíšeme si první grafický akcelerátor pro osobní počítače IBM PC nazvaný PGC neboli Professional Graphics Controller. Tento grafický akcelerátor podporoval vykreslování dvojrozměrných či trojrozměrných scén, ovšem trojrozměrná tělesa bylo možné vykreslit pouze formou takzvaných drátových modelů (wireframe).

Obsah

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

2. Technologické řešení grafického akcelerátoru PGC

3. Hardwarová podoba PGC

4. Grafické režimy 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

8. Barvová paleta

9. Odkazy na Internetu

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.

pc83

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.).

pc84

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.

pc85

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.

pc87

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.

pc8805

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.

pc8806

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í.

pc8807

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í ma­tici
MDTRAN translace (posun) trojrozměrného modelu přes zadanou transformační ma­tici
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á.

pc8808

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.

CS24_early

pc8809

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

  1. Support/perip­heral/other chips – 6800 family
    http://www.cpu-world.com/…rt/6800.html
  2. Motorola 6845
    http://en.wikipedia.org/…otorola_6845
  3. The 6845 Cathode Ray Tube Controller (CRTC)
    http://www.tinyvga.com/6845
  4. IBM Monochrome Display Adapter
    http://en.wikipedia.org/…play_Adapter
  5. Color Graphics Adapter
    http://en.wikipedia.org/…hics_Adapter
  6. Wikipedia CZ: Sběrnice:
    http://cs.wikipedia.org/…b%C4%9Brnice
  7. Wikipedia EN: Industry Standard Architecture:
     http://en.wikipedia.org/…Architecture
  8. Enhanced Graphics Adapter
    http://en.wikipedia.org/…hics_Adapter
  9. IBM Multicolor Graphics Adapter
    http://en.wikipedia.org/wiki/MCGA
  10. Professional Graphics Controller
    http://en.wikipedia.org/…s_Controller
  11. The IBM PGA Graphics Adapter
    http://incolor.inebraska.com/…_adapter.htm
  12. Professional Graphics Controller: Notes
    http://www.seasip.info/…ePC/pgc.html
  13. A professional graphics controller (PDF ke stažení po zaplacení 10 doalrů)
     http://domino.research.ibm.com/…6bfa00685b97?…

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.