Hlavní navigace

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

18. 5. 2005
Doba čtení: 11 minut

Sdílet

V dnešním pokračování seriálu o grafických kartách a grafických akcelerátorech si popíšeme další známé grafické karty určené pro počítače řady IBM PC: Hercules a EGA, spolu s již poněkud méně známou kartou EGC.

Obsah

1. Grafická karta Hercules
2. Technické parametry karty Hercules
3. Textové a grafické režimy karty Hercules
4. Grafická karta EGA – další standard od IBM
5. Textové režimy grafické karty EGA
6. Grafické režimy grafické karty EGA
7. Grafická karta EGC – konkurence k EGA
8. Obsah dalšího pokračování

1. Grafická karta Hercules

Grafická karta Hercules (přesněji celým názvem Hercules Graphics Card – HGC) byla navržena firmou Hercules Computer Technology jako konkurenční výrobek ke grafickým kartám CGA a

MDA od firmy IBM. Zatímco CGAMDA byly nabízeny již v prvních počítačích typu IBM PC v roce 1981, Hercules se objevil až o rok později. Zatímco CGA byla často předmětem oprávněné kritiky, Hercules byl velmi oblíbený a do svých sestav ho montovali i přední výrobci personálních počítačů. Oblíbenost byla způsobena jak nízkou cenou, tak i poměrně dobrými technickými parametry, například možností práce v kvalitním textovém režimu (to nezvládala karta

CGA) či v monochromatickém grafickém režimu s vysokým rozlišením (to naopak nebylo podporováno na kartě MDA).

Vzhledem k tomu, že při generování synchronizačních signálů byly použity stejné frekvence jako na kartě MDA, nemusel se pro Hercules používat specializovaný monitor (v dnešní době multifrekvenčních monitorů to vypadá podivně, ale v minulosti byly monitory navrhovány speciálně pro určité typy grafických karet).

2. Technické parametry karty Hercules

Grafická karta Hercules je založena na čipu Motorola MC6845 nebo (v případě klonů) na VLSI obvodu se stejnou charakteristikou. Jak bude z dalšího popisu patrné, je čip MC6845 v této kartě zapojen a naprogramován poněkud jiným způsobem, než tomu bylo u grafické karty CGA. Jedná se o grafickou kartu, kterou lze připojit do osmibitové sběrnice ISA (známé také jako PC-BUS), na kartě byl kromě grafického čipu a paměti přítomný i jeden paralelní port, což také přispívalo k oblíbenosti mezi zákazníky, protože první personální počítače typu IBM PC tyto porty neměly přímo na základní desce a bylo je potřeba zvlášť dokupovat (a tím mimo jiné přicházet o jednu pozici na ISA sběrnici).

Kapacita obrazové paměti byla plných 32 kB, tedy dvakrát tolik co v případě grafické karty CGA. Kromě toho je přítomna i paměť ROM nebo EPROM, ve které je uložena znaková sada. Ovládání grafického čipu bylo prováděno pomocí parametrů ukládaných přes IO porty 3b03bf. Vhodnou změnou parametrů docházelo k přepínání mezi textovým a grafickým režimem, bylo však možné také měnit parametry zobrazení grafiky (rozlišení, zpoždění synchronizačních signálů apod.), což se často používalo při emulaci CGA. Čtením z portů lze testovat průběh horizontálního i vertikálního zatemnění (synchronizace používaná například ve hrách) a číst polohu aktivního hrotu světelného pera.

Vzhledem k tomu, že je grafická paměť uložena od adresy b000:0000 do adresy b000:7fff, nedochází k překryvu s grafickou pamětí CGA, a proto lze tyto dvě karty současně provozovat i na jednom počítači (také adresy IO portů se nepřekrývají). Hercules je přitom použit pro kvalitní zobrazování textu a monochromatické grafiky, CGA pro zobrazení barevné (ehm) grafiky.

3. Textové a grafické režimy karty Hercules

V textovém režimu je grafická karta Hercules kompatibilní s kartou MDA, tj. pracuje se s textem o 80 sloupcích a 25 řádcích. Text je zobrazován v rozlišení 720×350 pixelů, což umožňuje na jeden znak použít masku o velikosti 9×14 pixelů. Jedinou nevýhodou textových režimů je fakt, že znaková sada je uložena v paměti EPROM typu 27C64 a nelze ji tedy programově změnit, pouze „přepálit“. Znaky jsou v paměti EPROM uloženy tak, jakoby jejich maska měla velikost 8×16 pixelů, avšak pro každý znak se při jeho vykreslování dva řádky ignorují a podle pozice znaku v ASCII se doplňuje devátý sloupec pixelů, čímž se dostáváme k výsledné masce 9×14 pixelů.

Z výše uvedených informací vyplývá, že pro uložení celé znakové sady by měly dostačovat 4 kB (16 řádků*256 zna­ků). Vzhledem k tomu, že paměť EPROM 27C64 má kapacitu 8 kB, jsou horní 4 kB nevyužity, vhodnou hardwarovou úpravou je však možné implementovat dvě znakové sady – u nás se většinou používala originální sada US a čeština v kódu Kamenických. Kromě původní karty Hercules existuje i karta Hercules+, která se odlišuje tím, že znakovou sadu ukládá do paměti typu RAM, a umožňuje tak programově měnit používanou znakovou sadu.

Grafický režim je (ostatně jako téměř vždy) mnohem zajímavější a flexibilnější než režim textový, protože Hercules podporoval na svou dobu poměrně vysoké rozlišení 720×348 obrazových bodů černobíle nebo dvoubarevně (záleželo na typu obrazovky použitého monitoru, kromě obligátní kombinace černá+zelená byla oblíbená například kombinace tmavě modrá+světle červená). Horizontální rozlišení grafického režimu je stejné jako v případě režimu textového, vertikální rozlišení se však liší o dva skenovací řádky. V textovém režimu je vertikální rozlišení rovno 350 pixelům, protože platí vztah: 25 textových řádků * 14 skenovacích řádků na znak=350 skenovacích řádků celkem. V grafickém režimu je zvolena hodnota 348 skenovacích řádků proto, že je toto číslo dělitelné čtyřmi, což souvisí s režimem přístupu do obrazové paměti, jehož princip bude popsán v následujícím odstavci. Pokud porovnáme signálové poměry obou podporovaných režimů, je grafický režim totožný s režimem textovým, snížení počtu skenovacích řádků se projeví pouze delším časovým okamžikem vertikálního zpětného běhu elektronového paprsku.

Obrazová paměť je rozdělena do čtyřech oblastí. V paměťové oblasti b0000-b1fff se nachází skenovací řádky 0, 4, 8,…, v oblastib2000-b3fff řádky 1, 5, 9,…, v oblasti b4000-b5fff řádky 2, 6, 10, … a konečně v oblasti b6000-b7fff skenovací řádky 3, 7, 11, … . Přístup k jednotlivým pixelům je tak poměrně komplikovaný, což umocňuje také fakt, že v jednom bytu je uložena vždy osmice pixelů. Celková spotřeba paměti pro tento grafický režim se dá vypočítat snadno. Na jeden řádek je zapotřebí alokovat 720/8=90 bytů, na celý snímek pak 90*348=31320 bytů. Zbylých 1440 bytů obrazové paměti zůstává nevyužito.

Vzhledem k tomu, že grafická karta Hercules byla přímým konkurentem karet MDA i CGA, není podporována BIOSem počítačů PC, což pravděpodobně mělo (alespoň podle mínění IBM) zbrzdit úspěch této karty. Ve skutečnosti se však BIOSové služby pro obsluhu grafiky v reálných aplikacích příliš nepoužívaly, protože byly pomalé a neefektivní (veškerá obsluha grafiky spočívá na třech službách – čtení pixelu, zápis pixelu a výpis řetězce). Ke kartě Hercules však existovalo rozšíření BIOSu nazvané Hercules GRAFIX BIOS interface, které podporovalo zejména následující (mnohdy netriviální) činnosti a algoritmy:

  1. nastavení textového režimu
  2. nastavení grafického režimu
  3. operace putpixel (zápis barvy pixelu)
  4. operace getpixel (čtení barvy pixelu)
  5. moveto (přesun grafického kurzoru)
  6. drawto (vykreslení úsečky)
  7. draw arc (vykreslení oblouku)
  8. draw circle (vykreslení kružnice)
  9. block fill (vyplnění obdélníkové oblasti)
  10. fill area (vyplnění obecné oblasti)

Pro vektorově orientované aplikace výše uvedené funkce dostačují, avšak pro hry, jež byly v té době založeny zejména na spritech (tj. bitmapách), se musely vytvořit rychlé assemblerovské rutiny.

4. Grafická karta EGA – další standard od IBM

Rozšířením grafické karty CGA vznikla v roce 1984 grafická karta EGA (Enhanced Graphics Adapter). Tato karta, jež byla osazována zejména do počítačů IBM PC AT, umožňovala rozlišení 640×350 bodů v 16 barvách. Kapacita obrazové paměti umístěné na této grafické kartě se pohybovala v rozmezí 64 kB až 256 kB, pozdější verze obsahovaly téměř vždy plných 256 kB. Tato karta je také zpětně kompatibilní s grafickou kartou CGA, což mimo jiné znamená, že programy psané pro CGA pracují bez problémů i na kartě EGA. Částečně je zaručena i kompatibilita s kartou MDA, šířka znaků se však snížila z původních devíti pixelů na pixelů osm. K této kartě bylo možné připojit jak CGA monitor, tak i monitor určený pro kartu MDA, v obou případech však došlo k degradaci možností této grafické karty, neboť některé režimy byly využitelné pouze na novějších monitorech. Vzhledem k tomu, že musely být podporovány režimy s různým počtem skenovacích řádků, byla řádková frekvence rovna buď 15,75 kHz nebo 21,8 kHz. Snímková frekvence se u nových grafických režimů nastavovala na 60 Hz.

Na grafické kartě EGA jsou integrovány obvody řadiče obrazovky (CRTC), řadiče přístupu do paměti (sekvencéru), řadič přístupu k jednotlivým bitovým rovinám (GDC), řadiče barvových atributů (ATC) a obvodu pro přemapování barev. Důležité je, že tyto obvody jsou plně konfigurovatelné, protože jsou jejich řídicí registry mapovány do oblasti I/O portů mikroprocesoru počítače. Vzhledem k tomu, že musela být dodržena kompatibilita s MDA a CGA, je grafická kartaEGA velmi komplikovaná a její programování není v žádném případě jednoduché. Pouze přístup k bitovým rovinám (viz další text) je možné řešit čtyřmi různými způsoby. V dalších kapitolách si popíšeme podporované textové a grafické režimy, které je možné s kartou EGA používat.

5. Textové režimy grafické karty EGA

Grafická karta EGA podporuje tři textové režimy, ve kterých mohou jednotlivé znaky nabývat jedné ze šestnácti volitelných barev. První režim zobrazuje 40 znaků na 25 textových řádků, jedná se tedy o částečnou emulaci textového režimu karty CGA, ovšem s tím rozdílem, že každý znak je vytvořen v rastru 8×14 pixelů, což je mnohem čitelnější než původních 8×8 pixelů. Ve druhém režimu je možné zobrazit 80 znaků na 25 textových řádků, maska znaků má opět velikost 8×14 pixelů. Třetí textový režim je zcela nový a je v něm možné zobrazit 80 znaků na 43 textových řádků, každý znak je v tomto případě vytvořen v rastru pouhých 8×8 pixelů. Na první pohled „podivný“ počet textových řádků byl zvolen z toho důvodu, že 43*8=344, což zhruba odpovídá počtu maximálně zobrazitelných skenovacích řádků, který je roven 350. Grafická karta EGA zavedla v textových režimech novinku – znaková sada není uložena v paměti EPROM, ale přímo v obrazové paměti, takže implementace národních znaků je velmi jednoduchá.

V textovém režimu je obrazová paměť mapována od adresy b800:0000 do adresy b800:7fff. Pokud je pomocí DIPů (malých přepínačů) karta přepnuta tak, aby emulovala MDA, je obrazová paměť mapována od adresy b000:0000 do adresy b000:7fff. V obou případech je obrazová mapa rozdělena do čtyřech rovin, v první rovině se nachází vlastní text, ve druhé rovině atributy znaků, třetí rovina je rezervována pro znakovou sadu a čtvrtá rovina neobsahuje žádné relevantní informace. Pomocí BIOSu je adaptér nakonfigurován tak, že jsou první dvě roviny zřetězeny, a aplikacím se tak jeví, že každý znak je uložen na dvou bytech jako ASCII kód+atribut. Samozřejmě je možné provést přeprogramování tak, aby bylo možné měnit znakovou sadu či pouze text.

6. Grafické režimy grafické karty EGA

Karta EGA podporuje poměrně velké množství grafických režimů:

  1. Režim s rozlišením 320×200 pixelů ve čtyřech barvách – jedná se o emulaci vícebarevného režimu grafické karty CGA.
  2. Režim s rozlišením 640×200 pixelů ve dvou barvách – opět se jedná o emulaci, tentokrát však „hi-res“ režimu grafické karty CGA.
  3. Režim s rozlišením 320×200 pixelů v šestnácti barvách – jde o nový režim, který byl s úspěchem použit zejména u her (Goblins, Lemmings, Dungeon Master, Civilizace apod.)
  4. Režim s rozlišením 640×200 pixelů v šestnácti barvách. Pro tento režim je zapotřebí alokovat pouze cca 64 kB paměti, běží tedy na všech kartách EGA.
  5. Režim s rozlišením 640×350 pixelů ve čtyřech barvách. Pro tento režim je zapotřebí alokovat pouze cca 56 kB paměti, běží tedy na všech kartách EGA.
  6. Režim s rozlišením 640×350 pixelů v šestnácti barvách. Pro tento režim je zapotřebí alokovat cca 112 kB paměti, to znamená, že vyžaduje plnohodnotnou kartu EGA, na kartách s menší kapacitou obrazové paměti není tento režim dostupný.

V nových režimech karty EGA je možné vybrat paletu šestnácti barev z celkových 26=64 barev, z toho vyplývá, že pro každou barvovou složku byly k dispozici dva bity, a tím pádem čtyři hodnoty intenzity. Rozhraní k monitoru zůstalo stále digitální (TTL), pouze se zvýšil počet použitých signálových vodičů. Zajímavý byl v grafických režimech přístup do obrazové paměti, která byla mapována v adresovém rozsahu a000:0000-a000:ffff. Obrazové (skenovací) řádky jsou sice konečně uloženy v lineární sekvenci (na rozdíl od CGA a Herculesu), ale nebyla by to IBM, aby si nevymyslela další vlastnost, která programátorům znepříjemňovala život – bitové roviny. Barvy jednotlivých pixelů jsou totiž rozmístěny v jedné, dvou či čtyř bitových rovinách, které jsou mapovány na stejné adresy. Pro přístup k jednotlivým bitovým rovinám se musely naprogramovat registry řídicího bloku GDC, což je poměrně pomalá činnost. Patrně nejprimitivnější grafická operace – putpixel – se tak velmi podstatným způsobem zkomplikovala a zpomalila.

V dalším dílu bude mimo jiné popsána i grafická karta VGA, která tuto nectnost v podobě bitových rovin také přebrala a ještě umocnila volbou řetězených (chained) grafických režimů. Celkově je možné říci, že EGA nesplnila všechna očekávání, která se do ní vkládala, protože byla velmi komplikovaná, nepodporovala čtvercové pixely a k tomu nedovedla současně zobrazit více než šestnáct barev, což je pro mnoho aplikací nedostačující. Prakticky jedinou předností zůstává možnost využití více grafických stránek, a tím i podpora double-bufferingu, tj. techniky pro snadnou tvorbu neblikajících animací.

7. Grafická karta EGC – konkurence k EGA

Grafická karta EGC (Enhanced Graphics Card) se v mnohém podobá kartě EGA a i z časového hlediska se jedná o její konkurenci, i když méně známou. Tuto kartu používala například firma Olivetti a její grafické režimy podporuje i slavná T602. EGC je kompatibilní s grafickým adaptérem AT&T 6300 a v některých programech se volí právě pod tímto jménem. Z počítačů, které tuto kartu obsahují, jmenujme například známý subnotebook Olivetti Quaderno. V některých ohledech je tato karta kvalitnější než EGA, zejména díky vyššímu vertikálnímu rozlišení.

Tato grafická karta emuluje kartu CGA, a to tak dokonale, že napodobuje i její „sněžení“ při zápisu do obrazové paměti :-). V textovém režimu je možné zobrazit 80 znaků na 25 řádků, jednotlivé znaky jsou definovány v masce 8×16 pixelů, což je více, než zvládne MDA i EGA. Grafické režimy jsou podporovány dva, v prvním režimu je možné zobrazit rastr 640×400 pixelů ve dvou barvách, ve druhém režimu rastr 640×400 pixelů v šestnácti barvách. V prvním režimu postačí karta s grafickou pamětí o kapacitě 32 kB, ve druhém případě je již vyžadováno plných 128 kB paměti. Ve dvoubarevném režimu je možné do obrazové paměti přistupovat přímo (obrazové řádky jsou však rozděleny do čtyř pruhů), šestnáctibarevný režim používá bitové roviny, podobně jako grafická karta EGA. Obrazová paměť je mapována v paměťových regionech a000:0000-a000:1fff, a000:2000-a000:3fff, a000:4000-a000:5fff a a000:6000-a000:7fff.

O této grafické kartě platí to samé co o EGA, ovšem s tou výhradou, že se kvůli ní ještě více zkomplikovalo programové rozhraní pro tvorbu grafiky.

CS24_early

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

V dalším pokračování tohoto seriálu bude popsán první grafický akcelerátor pro PC – třídílná karta PGC. Dále si povíme základní informace o grafických kartách MCGA a VGA, jejichž grafické režimy jsou dodnes podporovány například v knihovně DirectX.

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.