Hlavní navigace

Karta EGA: první použitelná barevná grafika na PC

29. 10. 2009
Doba čtení: 12 minut

Sdílet

Při pohledu do historie vývoje osobních počítačů a jejich grafických systémů můžeme nalézt několik přelomových období. Jedním z těchto mezníků jsou i roky 1984 a 1985, protože v jejich rozmezí vznikly jak zcela nové typy osobních počítačů (Apple Macintosh, Amiga, Atari ST), tak i další typ grafické karty určené pro počítače IBM PC - jedná se o kartu EGA.

Obsah

1. Přelomové roky 1984 a 1985

2. EGA – Enhanced Graphics Adapter

3. Technické parametry karty EGA

4. Bloková struktura karty EGA

5. Textové režimy grafické karty EGA

6. Struktura obrazové paměti v textových režimech

7. Grafické režimy karty EGA

8. Barvová paleta a struktura obrazové paměti v grafických režimech

9. Odkazy na Internetu

1. Přelomové roky 1984 a 1985

V předchozích dvou částech seriálu o architekturách počítačů jsme si popsali první grafické karty MDA a CGA firmy IBM z roku 1981, které byly určené k instalaci do počítačů IBM PC, popř. i do legálně či ilegálně vyráběných klonů těchto strojů. Kromě toho jsme se zabývali i grafickými kartami Hercules a Hercules Plus, ve kterých jsou umně spojeny přednosti karty MDA (práce v textovém režimu s čitelnými znaky) s možností práce v monochromatickém grafickém režimu s rozlišením 720×348 pixelů. V perexu dnešního článku je napsáno, že jedním z mezníků v historii vývoje osobních počítačů jsou roky 1984 a 1985. V průběhu těchto dvou let se na trhu objevily nové typy osobních počítačů; shodou okolností se jedná o počítače postavené na mikroprocesoru Motorola M68000. Tyto počítače měly velký vliv mj. i na další vývoj počítačové grafiky a grafických uživatelských rozhraní.

pc85

Obrázek 1: Verze hry Pacman pro počítače vybavené grafickou kartou CGA. Kvůli podpoře pouze dvou fixních barvových palet (maximálně 4 barvy) a neexistenci spritů je tato verze Pacmana paradoxně horší než její konverze určené pro osmibitové domácí počítače.

Ovšem ani firma IBM nezahálela, protože její inženýři navrhli nový typ grafické karty určený pro počítače IBM PC. Tato karta byla na trh uvedena v roce 1984. Jedná se o poněkud kontroverzní grafickou kartu EGA neboli Enhanced Graphics Adapter, jejíž technické parametry i způsob použití budou popsány v navazujících kapitolách.

pc85

Obrázek 2: Textový režim grafické karty CGA se znaky uloženými v rastru 8×8 pixelů sice nabízel možnost definovat pro každý znak šestnáct barev popředí a osm barev pozadí, ale čitelnost textu byla v porovnání s MDA či Herculesem horší.

2. EGA – Enhanced Graphics Adapter

Na grafickou kartu EGA se můžeme dívat z několika hledisek. Z pohledu firmy IBM se jednalo o výrobek, který přesně zapadal do její vývojové koncepce – karta zaručovala zpětnou kompatibilitu jak s MDA, tak i CGA (včetně podpory monitorů, na rozdíl od příště popsaného grafického adaptéru VGA, u kterého došlo ke změně rozhraní) a její nové vlastnosti i programové rozhraní představované EGA BIOSem odpovídalo spíše potřebám kancelářských aplikací a nikoli hrám (IBM PC a posléze i PC XT bylo koncipováno především jako kancelářský počítač). Z hlediska mnohých uživatelů se jednalo spíše o zklamání, protože karta EGA neměla některé jimi očekávané vlastnosti, například rozsáhlejší barvovou paletu, existenci spritů (použitelných jak ve hrách, tak i pro zobrazení kurzoru myši v graficky orientovaných aplikacích) či podporu pro větší rozlišení v textových i grafických režimech, nehledě na určité rozčarování při porovnání karty EGA s grafickými vlastnostmi počítačů Atari ST a především Amig (jinými slovy – uživatelé i programátoři očekávali po třech letech vývoje poněkud více).

pc85

Obrázek 3: Po uvedení grafické karty EGA začaly vznikat nové hry, které využívaly její nové grafické režimy. Zde je zobrazen snímek ze hry „Ski or Die“, která pracovala v grafickém režimu s rozlišením 320×200 pixelů s využitím standardní šestnáctibarevné palety.

Ovšem z historického hlediska nelze grafické kartě EGA upřít to, že poměrně významným způsobem přispěla ke změně chápání funkce PCček – z poněkud lepších psacích strojů a tabulkových kalkulátorů (nejdříve VisiCalc, později slavný Lotus 1–2–3 – oba mimochodem pracující v textovém režimu) se i díky této grafické kartě staly univerzální počítače, pro něž začaly vznikat i hry s mnohem lepší grafickou kvalitou než v dobách kralování CGA. Také aplikace s grafickým uživatelským rozhraním začaly být teprve na této kartě skutečně použitelné – jedná se například o první CADy pro počítače PC, aplikace pro sazbu textu (Ventura Publisher) ale i grafická nadstavba nad MS-DOSem – systém Microsoft Windows. První verze MS Windows sice dokázala pracovat i s grafickou kartou CGA (jak mnozí správně uhodli v diskusi k předminulé části seriálu), ovšem rozlišení a barevná hloubka nabízená touto grafickou kartou byla nedostačující; například i počítač Apple Macintosh zobrazoval na monitoru větší množství pixelů než karta CGA ve svém „hi-res“ režimu.

pc85

Obrázek 4: Další snímek ze hry „Ski or Die“.

3. Technické parametry karty EGA

Grafická karta EGA byla ve firmě IBM navržena tak, aby byla v co největší míře kompatibilní se svými předchůdkyněmi, tj. kartami MDACGA, a to jak na programové úrovni (volání služeb BIOSu, emulace obvodu Motorola MC6845, včetně jeho řídicích registrů), tak i z hlediska použitelných monitorů, protože k EGA bylo možné po správném nastavení přepínačů na zadní straně karty připojit monochromatický monitor určený pro MDA/Hercules, kompozitní CGA monitor nebo nový typ monitoru navržený právě pro potřeby karty EGA. V případě použití monochromatického (TTL) či kompozitního monitoru však došlo (logicky) k degradaci možností této grafické karty, neboť její nové režimy byly využitelné pouze na novém typu monitoru – starší monitory postrádaly buď možnost barevného zobrazení, nebo schopnost synchronizace obrazu s více než 200 obrazovými řádky a z toho vyplývající vyšší řádkovou frekvencí.

pc85

Obrázek 5: Jedna z nejznámějších her určených pro grafickou kartu EGA je hra Sim City.

Programová kompatibilita s Herculesem nebyla zajištěna, protože firma IBM tuto konkurenční kartu ve své podstatě ignorovala. Kromě textových a grafických režimů převzatých z předchozích karet se na EGA objevují i již zmíněné nové grafické režimy; plně osazená karta umožňovala rozlišení 640×350 pixelů v šestnácti barvách vybíraných z palety 64 barev. Kapacita obrazové paměti umístěné na této grafické kartě se pohybovala v rozmezí 64 kB až 256 kB (konkrétně bylo možné použít kapacity 64, 128, 192 a 256 kB), přičemž pozdější verze byly osazeny téměř vždy plnou kapacitou 256 kB, ovšem starší programy se mohly spolehnout pouze na zmíněnou základní kapacitu 64 kB, z čehož také vycházely při nastavování grafických režimů. Vzhledem k tomu, že musely být podporovány režimy s různým počtem skenovacích (obrazových) řádků, byla řádková frekvence rovna 15,75 kHz (původní monitory pro CGA), 18,432 (monitory pro MDA/Hercules) nebo 21,8 kHz (nové „enhanced“ monitory) – na EGA tak můžeme nalézt několik krystalů. Snímková frekvence se u nových grafických režimů nastavovala na 60Hz.

pc85

Obrázek 6: Grafický režim s rozlišením 640×350 pixelů v šestnácti barvách použitý ve hře Sim City.

4. Bloková struktura karty EGA

Na grafické kartě EGA jsou integrovány obvody řadiče obrazovky (CRTC – Cathode Ray Tube Controller), obvod ovládající přístup do video paměti při generování obrazu (sekvencér), řadič přístupu mikroprocesoru k jednotlivým bitovým rovinám (GDC), řadiče barvových atributů (ATC – Attribute Controller) a obvod pro přemapování barev (LUT – Look-Up Table). Z hlediska programátorů je důležité, ž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 zpětná kompatibilita s grafickými kartami MDACGA, je grafická karta EGA velmi komplikovaná a její programování není v žádném případě jednoduché (především když si uvědomíme, že tento grafický adaptér ve skutečnosti programátorům nenabízí žádné speciální grafické prostředky jako je podpora pro sprity, blokové přenosy dat atd.). Například pouze přístup k bitovým rovinám 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.

pc85

Obrázek 7: Tento screenshot jsme si již ukázali v předchozí části seriálu: jedná se o hru Golden Axe spuštěnou v režimu kompatibility s grafickou kartou EGA. Vzhledem k omezenému počtu barev (maximálně 16) i barvového prostoru, ze kterého se barvy vybírají (celkem 64 odstínů) je při vykreslování použit dithering, který je dobře patrný při zvětšení obrázku.

5. Textové režimy grafické karty EGA

Grafická karta EGA podporuje tři textové režimy, ve kterých mohou jednotlivé znaky i jejich pozadí nabývat jedné ze šestnácti volitelných barev. První režim zobrazuje 40 znaků na 25 textových řádcích, 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 více čitelnější, než původních 8×8 pixelů. Ve druhém režimu je možné zobrazit 80 znaků na 25 textových řádcích; 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 řádcích. 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 (obrazových) řádků, který je roven 350 (v prvních dvou režimech se používá právě 25×14=350 obrazových řádků).

Grafická karta EGA zavedla v textových režimech důležitou novinku – znaková sada není uložena v paměti EPROM, ale přímo v obrazové paměti, takže implementace národních znaků (Husova nabodeníčka a jejich nesčetné varianty) je velmi jednoduchá (přesněji řečeno, karta samozřejmě obsahuje základní znakovou sadu v paměti ROM, dokonce v několika variantách, tato sada se však při nastavení textového režimu zkopíruje do obrazové paměti). S tím souvisí i možnost programové změny počtu obrazových řádků použitých pro vykreslení jednoho řádku textového. V předchozím odstavci jsme si popsali režimy používající 8 a 14 obrazových řádků na jeden textový řádek, ovšem tuto hodnotu lze snadno změnit v rozmezí 1–32. Čím vyšší jsou znaky (a tím i textové řádky), tím méně textových řádků je možné na obrazovce zobrazit.

pc85

Obrázek 8: Úvodní obrazovka známé síťové hry Netwars, která využívá šestnáctibarevný grafický režim karty EGA s rozlišením 640×350 pixelů.

6. Struktura obrazové paměti v textových režimech

Při nastavení textových režimů je obrazová paměť většinou mapována od adresy b800:0000 do adresy b800:7fff (opět zde používám adresování typu segment:offset, protože v době největšího rozmachu grafické karty EGA většina aplikací pracovala v reálném režimu procesoru). Pokud je pomocí DIPů (malých přepínačů umístěných vedle konektorů) karta přepnuta tak, aby emulovala MDA (a vlastně i Hercules), je obrazová paměť mapována od adresy b000:0000 do adresy b000:7fff. V obou případech je obrazová mapa rozdělena do čtyř (bitových) 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.

Při nastavení textového režimu pomocí služeb BIOSu je adaptér nakonfigurován tak, že první dvě roviny jsou zřetězeny a aplikacím se tak jeví, jakoby byl každý znak uložen na dvou sousedních bytech ve formátu ASCII kód+barvový atribut. Samozřejmě je možné provést přeprogramování tak, aby bylo možné měnit znakovou sadu (třetí bitovou rovinu) či pouze text. Adresu prvního vykreslovaného znaku (i atributu) lze změnit a provádět tak vertikální scrolling – programátorům je k dispozici celkem 65536/80=819 textových řádků, tj. cca 32 obrazovek textu při použití režimu 80×25 znaků (ovšem při zřetězení dvou bitových rovin pouze 16 obrazovek).

pc85

Obrázek 9: Hra Netwars zobrazovala objekty buď jako drátové (wireframe) modely nebo s využitím vyplněných trojúhelníků. Volba závisela především na výkonnosti počítače, protože vykreslování 3D scény bylo samozřejmě prováděno programově.

7. Grafické režimy karty EGA

Karta EGA podporuje poměrně velké množství nových grafických režimů i režimů určených pro zachování kompatibility se staršími programy, které využívaly možnosti karty CGA:

  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 (Gobliins, Lemmings, Dungeon Master, Civilizace, Golden Axe 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 64kB paměti, je tedy podporován 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 56kB 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 112kB paměti, to znamená že vyžaduje plnohodnotnou kartu EGA. Na kartách s menší kapacitou obrazové paměti není tento režim dostupný. Použití – jak grafické uživatelské rozhraní mnohých aplikací (T602), tak i některé hry, například Simcity apod.
pc85

Obrázek 10: Netwars v režimu zobrazení vyplňovaných (solid) objektů.

8. Barvová paleta a struktura obrazové paměti v grafických režimech

V nových grafický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; konkrétně nulová intenzita, 1/3 maximální intenzity, 2/3 maximální intenzity a maximální intenzita. Rozhraní k monitoru zůstalo stále digitální (TTL signály, na rozdíl od analogových barvonosných signálů použitých u pozdější karty VGA), pouze se zvýšil počet použitých signálových vodičů nesoucích informace o barvách pixelů.

Zajímavý byl v grafických režimech přístup do obrazové paměti, která byla (z hlediska procesoru) 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 grafických karet 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. Jedná se tudíž o poněkud jiný přístup než byl použitý například v počítačích Amiga, u nichž se všechny bitové roviny mapovaly do adresního prostoru procesoru současně (Amiga ovšem byla vybavena skutečným 32bitovým procesorem :-). 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 nejhorším případě bylo nutné provést čtyři čtení a čtyři zápisy do obrazové paměti). Na druhou stranu některé jiné grafické operace bylo možné urychlit – například bylo možné v jedné rovině zobrazovat skrolující text, v rovině druhé a třetí animovat obrázek a čtvrtou rovinu ponechat pro zobrazení nehybného pozadí – vše záviselo pouze na nastavení vhodné barvové palety, protože výsledná barva pixelů byla získána na základě hodnot uložených ve všech rovinách „pod sebou“. Důvod, proč nebylo možné všechny bitové roviny namapovat současně do adresního prostoru procesoru, je jednoduchý – v reálném režimu mohl procesor adresovat pouze 1 MB paměti (+necelých 64 kB nad tímto limitem), přičemž 640 kB bylo rezervováno pro potřeby operačního systému a aplikací (protože 640 kB přece stačí každému, že) a do zbylých 384 kB se mapoval samotný BIOS, obrazová paměť grafické karty, buffery síťových karet, NetBIOS, stránky paměti EMS atd. Z těchto důvodů mohly grafické karty využívat pouze 128 kB adresního prostoru, přičemž ve všech standardních grafických režimech se používalo maximálně 64 kB a bylo tedy nutné do tohoto rozsahu mapovat celou video paměť, která mohla mít u karty EGA velikost až 256 kB.

ict ve školství 24

pc85

Obrázek 11: Poměrně velká část aplikací podporujících grafickou kartu EGA neprováděla přenastavení barev v barvové paletě. Jednou z výjimek je například známý textový editor T602, který pro svoje účely (pozadí textu a barvu písma) barevnou paletu modifikoval.

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

Autor článku

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