Obsah
2. Textové a grafické režimy MCGA
3. Rozhraní pro připojení monitoru k adaptéru MCGA
5. Textové režimy podporované kartou VGA
6. Standardní grafické režimy karty VGA
1. Grafický adaptér MCGA
Grafický adaptér MCGA, neboli celým názvem MultiColor Graphics Array, navrhla firma IBM pro svoji známou řadu počítačů PS/2, konkrétně pro modely PS/2 25 a PS/2 30 (jedná se o nejnižší model z celé řady PS/2). V podstatě se jedná o značně zjednodušenou (a z tohoto důvodu i levnou) variantu grafické karty VGA, která bude popsána v dalším textu. V původním návrhu firmy IBM byl adaptér MCGA integrován přímo na základní desce, což je podstatný rozdíl oproti dříve popsaným grafickým kartám MDA, CGA, EGA i Hercules, u nichž byla striktně dodržena základní idea počítačů IBM PC – velká variabilita spočívající v umístění většiny modulů počítače na přídavné karty a nikoli přímo na základní desku (původně nebyly na základní desce dokonce osazeny ani obvody pro paralelní či sériové porty, které bývaly součástí jiných karet, včetně některých karet grafických – viz například grafická karta Hercules či zvuková karta AdLib).
Obrázek 1: Český textový editor T602 spuštěný v dvoubarevném grafickém režimu s rozlišením 640×480. V obrazové paměti se pro tento režim muselo alokovat celkem 640×480/8=38400 bajtů.
Firma IBM se snažila, aby grafický adaptér MCGA nahradil v té době již zcela nevyhovující a zastaralou grafickou kartu CGA. Z tohoto důvodu je MCGA s touto kartou slučitelná, ovšem s tím rozdílem, že není možné použít původní typy monitorů, protože je zde použit nový typ rozhraní s analogovými barvonosnými signály. MCGA však není zpětně kompatibilní s grafickou kartou EGA, na rozdíl od karty VGA, kde je zpětná kompatibilita s předchozí řadou grafických karet firmy IBM vyřešena lepším způsobem (až na úroveň řídicích registrů), ovšem na úkor zvýšené složitosti při nastavování textových či grafických režimů, což bylo částečně odstíněno službami BIOSu. Kapacita obrazové paměti byla v případě grafického adaptéru MCGA rovna 64 kB, což je obecně méně, než u grafické karty EGA, která mohla být osazena až 256 kB video paměti či karty VGA osazené vždy 256 kB. Z poměrně malé kapacity obrazové paměti pak vyplývají i omezené možnosti grafických režimů popsané v dalším textu, ale současně i již zmiňovaná nízká cena.
Obrázek 2: Úvodní obrazovka populární hry Tank Wars, která využívala grafický režim adaptéru MCGA s rozlišením 320×200 pixelů s možností zobrazení 256 barev.
2. Textové a grafické režimy MCGA
Grafický adaptér MCGA podporoval několik nových grafických režimů, které bylo možné nastavit i pomocí služeb BIOSu (přesněji řečeno – tyto režimy jsou stále součástí BIOSu, takže jsou dostupné i v současnosti). V textových režimech byly znaky ve znakové sadě definovány pomocí masky o velikosti 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é grafické kartě VGA (ale i vůči MDA či Herculesu) snížilo horizontální rozlišení ze 720 pixelů na 640 pixelů, takže čitelnost textu byla o poznání horší. Způsob uspořádání video paměti v textových režimech je kompatibilní se všemi předchozími kartami: každý znak je reprezentován dvojicí bajtů, přičemž do prvního bajtu se ukládal kód znaku (rozšířená sada ASCII) a do bajtu druhého barva popředí, barva pozadí a popř. i další atributy, například příznak podtržení či blikání (v závislosti na konfiguraci textového režimu).
Obrázek 3: Prostředí hry Tank Wars.
Kromě textových režimů byly u tohoto grafického adaptéru zavedeny dva nové rastrové grafické režimy. V prvním režimu bylo možné zobrazit rastrový obraz o rozlišení 640×480 pixelů, ale pouze ve dvou barvách, tj. s využitím jediné bitové roviny. Více bitových rovin nebylo možné v tomto režimu použít z důvodu malé kapacity obrazové paměti, protože pro dvoubarevný rastrový obraz v rozlišení 640×480 pixelů je zapotřebí alokovat 640×480/8=38400 bajtů z dostupných 65536 bajtů. Ve druhém grafickém režimu se zobrazoval rastr o rozlišení 320×200 pixelů v×256 barvách, přičemž obrazová paměť byla využita téměř stoprocentně: 320×200=64000 bajtů z 65536. Tento grafický režim se stal velmi populární, zejména však ve spojitosti s grafickou kartou VGA, kde nabízel mnohem více možností (například scrolling obrazu v libovolném směru, režim rozdělené obrazovky, double či triple buffering atd.).
Obrázek 4: Hra Tank Wars potřetí – zásah protivníka.
3. Rozhraní pro připojení monitoru k adaptéru MCGA
Časování synchronizačních signálů v obou výše zmíněných grafických režimech je stejné, jako v případě dále popsané grafické karty VGA. V režimu s rozlišením 640×480 pixelů je snímková frekvence nastavena na 60 Hz, v režimu s rozlišením 320×200 pixelů na 70 Hz. Shodné bylo i rozhraní pro připojení monitoru ke grafickému adaptéru. Poprvé se zde objevuje konektor typu DE-15, který je po nepatrných modifikacích funkce některých pinů (rozšíření o DDC a DDC-2) používán i dnes – viz VGA pinout. Díky tomu, že barvonosné signály (R, G, B) jsou analogové, není maximální počet barev omezen na šestnáct barev tak, jak je tomu u monitorů pro grafickou kartu EGA, u níž se každá barvová složka přenášela pomocí dvojice binárních (TTL) signálů. Pro každou složku tedy bylo možné nastavit pouze čtyři intenzity: nulovou, třetinovou, dvoutřetinovou a maximální.
Obrázek 5: Mnohé hry pro IBM PC, například zde zobrazený dungeon Lands of Lore, využívaly standardní grafický režim s rozlišením 320×200 pixelů.
V případě grafických adaptérů MCGA i VGA je však intenzita každé barvové složky reprezentována šesticí bitů, tj. je nutné rozlišit 64 úrovní každé základní barvy (celkový počet barevných odstínů je tedy 643=262144). Právě z tohoto důvodu se informace o barvách pixelů přenáší pomocí analogových signálů, u nichž je počet úrovní omezen především šumem digitálně-analogového převodníku na straně grafické karty a (analogových) obvodů v monitoru (plně digitální přenos by sice byl možný, například s využitím vhodného sériového protokolu, nicméně v dobách monitorů s CRT by to znamenalo zvýšenou složitost monitorů, nehledě na nutnost použití velkého přenosového pásma). Rozšíření počtu úrovní barvových složek je v tomto případě jednoduché, což se ukázalo při přechodu na modernější a výkonnější grafické karty s větší kapacitou obrazové paměti, které umožňovaly rozlišení 256 úrovní každé barvové složky a tím pádem i možnost zobrazení 2563=16777216 barevných odstínů.
Obrázek 6: První i druhý díl známé plošinovky Prince of Persia taktéž využívaly grafický režim s rozlišením 320×200 pixelů.
4. Grafická karta VGA
Dalším – a to 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 paměťových modulů tvořících obrazovou paměť. Tato grafická karta byla poprvé použita firmou IBM v počítačích řady IBM PS/2 (kromě dvou nejnižších modelů, ve kterých byl nainstalován výše popsaný grafický adaptér MCGA). V těchto typech počítačů však ještě VGA nebyla realizována jako samostatná grafická karta, ale jednalo se o čipy a pomocné součástky umístěné přímo na základní desce. Teprve později byla VGA nabízena i jako samostatná karta určená pro šestnáctibitovou sběrnici ISA – právě tuto variantu karty VGA (vyráběnou v mnoha obměnách i dalšími firmami, nejenom samotnou IBM) zná většina uživatelů osobních počítačů.
Obrázek 7: Hra F29 Retaliator firmy Ocean kupodivu využívala „pouze“ šestnáctibarevný grafický režim s rozlišením 320×200 pixelů, který byl kompatibilní i s kartou EGA.
Grafická karta VGA je do značné míry, tj. až na úroveň řídicích registrů, zpětně kompatibilní s již popsanými grafickými kartami CGA, EGA a MCGA (nikoli však s Herculesem), avšak s tím pochopitelným rozdílem, že není možné použít původní monitory, protože se změnily frekvence synchronizačních signálů i samotné rozhraní pro připojení monitorů. Velikost obrazové paměti je rovna 256 kB, protože v nejvyšším oficiálně podporovaném grafickém režimu se pro framebuffer (obrazovou paměť) alokuje místo o kapacitě 150 kB – viz další text. Vzhledem k omezením daným BIOSem a DOSem (samotné mikroprocesory již dokázaly v době nástupu karty VGA adresovat v chráněném režimu minimálně šestnáctimegabajtový paměťový prostor; stejný adresní rozsah nabízela i sběrnice ISA) se však nedá přímo adresovat celá obrazová paměť, viditelné je vždy jedno či dvě „okna“, každé o velikosti 64 kB, přičemž žádný z oficiálně podporovaných grafických režimů nevyužívá současně obě okna.
Obrázek 8: Další z šestnáctibarevných snímků ze hry F29 Retaliator. Dojem, že je využito více barev, je dosažen použitím ditheringu.
Jedním z důvodů pro toto chování je i to, že v počítači může být kromě grafické karty VGA nainstalována například i karta MDA či Hercules, která s kartou VGA jedno paměťové okno musí sdílet (opět se jedná o důvody dané omezením BIOSu a DOSu, protože pro mapování obrazové paměti do adresního prostoru procesoru byly vyhrazeny pouze dva segmenty začínající na adresách 0×a000:0000 a 0×b000:0000). Prakticky všechny grafické karty, které jsou dnes vyráběné, jsou s grafickou kartou VGA zpětně kompatibilní; její grafické režimy jsou použity například při inicializaci některých graficky orientovaných operačních systémů. Ostatně většina moderních PCček má při startu BIOSu nastaven jeden z grafických režimů karty VGA, typicky se jedná o šestnáctibarevný režim s rozlišením 640×400 pixelů, popř. 720×400 pixelů.
Obrázek 9: Při vykreslování palubní desky F29 je opět použit dithering.
5. Textové režimy podporované kartou VGA
U grafické karty VGA se při práci s textovým režimem většinou používá efektivní rozlišení 720×400 pixelů, což umožňuje v případě standardního textového módu s 25 řádky a 80 sloupci vytvářet znaky v×masce o velikosti 9×16 pixelů. Výsledkem je velká č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 nastavenu tuto obnovovací frekvenci). Tento textový režim se dodnes používá, a to jak během startu počítače (například při zobrazení tabulky s konfigurací zařízení), tak i v BIOSu (Award BIOS apod.), DOSu a mnohdy též i pro Linux a BSD běžící v konzolovém režimu (runlevel 3 apod.). Textový režim je možné změnou konfiguračních registrů přeprogramovat. Například je možné zvýšit vertikální rozlišení na 480 obrazových linek (to odpovídá třiceti textovým řádkům při použití masky znaků 9×16 pixelů), ale sníží se tím obnovovací frekvence na pouhých 60 Hz.
Obrázek 10: Hra Scorched Earth (ve své podstatě vylepšená varianta výše zmíněné hry Tank Wars) mohla být spuštěna jak ve standardním grafickém režimu s rozlišením 320×200 pixelů, tak i v některém z rozšířených režimů (X-mód, Y-mód atd.), zde například v režimu naprogramovaném pomocí řídicích registrů karty VGA na rozlišení 360×480 pixelů.
Výšku znaků je možné, nezávisle na počtu obrazových řádků, měnit v rozsahu 1–32 obrazových linek; například při výšce znaků rovné 14 obrazovým řádkům a použití efektivního rozlišení 720×400 pixelů se počet textových řádků zvýší z 25 na 28. Pro zajištění co největší programové kompatibility se staršími grafickými kartami se dá zmenšit i šířka znaků z devíti pixelů na pixelů osm, ale tento způsob vede k poměrně značné degradaci čitelnosti. Další vlastnosti textového režimu jsou shodné s minule popsanou kartou EGA – znaková sada je umístěna ve třetí bitové rovině (v první rovině jsou ASCII kódy znaků, v rovině druhé pak barvové atributy) a celkový počet znaků ve znakové sadě je roven buď 256 (standardní nastavení) nebo 512 (využito některými vyspělejšími textovými editory). V případě 512 znaků ve znakové sadě je jeden bit z atributového bajtu použit pro výběr spodní nebo horní poloviny tabulky znaků.
Obrázek 11: Herní prostředí hry Scorched Earth spuštěné v režimu o rozlišení 360×480 pixelů. Aby bylo dosaženo korektního zobrazení na dnešních počítačích, musel být screenshot zvětšen v horizontálním směru na dvojnásobek.
6. Standardní grafické režimy karty VGA
V předchozím textu jsme si řekli, že grafická karta VGA je zpětně kompatibilní s kartami MDA, CGA i EGA. Týká se to samozřejmě i grafických režimů, což znamená, že řídicí registry karty VGA umožňovaly takové nastavení, které vedlo k emulaci všech grafických režimů nabízených kartami CGA i EGA, samozřejmě včetně struktury video paměti (režim sudá/lichá u karty CGA, bitové roviny karty EGA, 64barevná paleta této karty atd.). Navíc je možné pomocí služeb VGA BIOSu nastavit dva nové standardní grafické režimy. První z těchto režimů nabízí rozlišení 640×480 pixelů při možnosti zobrazení maximálně šestnácti barev. Ve své podstatě se jedná o rozšíření grafického režimu karty EGA s rozlišením 640×350 pixelů, protože „pouze“ došlo ke zvýšení vertikálního rozlišení, které je umožněno vyššími frekvencemi krystalů, které generují jak oba synchronizační signály (horizontální i vertikální), tak i hodinový signál použitý při přístupu do obrazové paměti (pixel clock), který je v případě tohoto režimu roven 25,175 MHz.
Obrázek 12: Textový editor T602 běžící v grafickém režimu karty VGA s rozlišením 640×480 pixelů.
Podobně jako u karty EGA, i v grafickém režimu 640×480×16 je obrazová paměť rozdělena do čtyř bitových rovin mapovaných z hlediska mikroprocesoru do segmentu 0×a000:0000 až 0×a000:ffff. Čtení či zápis dat do bitových rovin není prováděn přímo, protože mezi mikroprocesor a obrazovou paměť jsou vloženy takzvané záchytné registry (latch) řízené pomocí několika konfiguračních registrů. Existuje několik navzájem odlišných režimů práce těchto registrů, z nichž pravděpodobně nejpoužívanějším režimem je čtení či zápis dat vždy pouze do jedné bitové roviny. Při zápisu je však možné data současně zapisovat do libovolné kombinace bitových rovin, takže například vymazání obrazovky lze v praxi provést pouze zápisem 640×480/8=38400 bajtů (zápis do všech čtyř bitových rovin současně) namísto skutečně přemazaných 640×480/2=153600 bajtů. Tento grafický režim má ještě jedno prvenství – jedná se o první grafický režim počítačů IBM PC, jehož pixely měly čtvercový tvar, což umožnilo zjednodušit některé algoritmy.
Obrázek 13: Dungeon Ishar využívající grafický režim s rozlišením 320×200 pixelů a 256 barev.
Druhý standardní grafický režim, známý též pod jménem „mód 13h“ nabízel programátorům i uživatelům rozlišení 320×200 pixelů, ovšem počet současně zobrazitelných barev byl roven 256 z celkového počtu 218=262144 barevných odstínů. Tento režim vznikl zřetězením všech bitových rovin tak, že barva prvního pixelu (osm bitů) je zapsána do první bitové roviny (první bajt), barva druhého pixelu do druhé roviny (druhý bajt), třetí pixel (překvapivě) do třetí bitové roviny, čtvrtý pixel do poslední bitové roviny, barva pátého pixelu opět do první roviny (pátý bajt) atd. – viz též obrázek číslo 14, na kterém je naznačena jak kombinace bitových rovin, tak i metoda zobrazení pixelů na obrazovce. Při zřetězení bitových rovin je sice celých 75% obrazové paměti nevyužito, protože v každé bitové rovině je adresovatelný vždy každý čtvrtý bajt, ale z hlediska procesoru se celá obrazová paměť jeví jako pole 320×200=64000 bajtů, přičemž každý bajt představuje index barvy jednoho pixelu – v reálném režimu procesoru 80×86 si snad nelze představit jednodušší strukturu obrazové paměti :-), takže není divu, že se tento grafický režim stal velmi populární.
Obrázek 14: Struktura obrazové paměti v grafickém režimu 13h.
Na bázi režimu 320×200×256 vzniklo i velké množství nestandardních grafických režimů, z nichž nejznámější je režim-X (mode-X, X-mode), jímž se budeme zabývat v následující části tohoto seriálu.
7. Odkazy na Internetu
- Support/peripheral/other chips – 6800 family
http://www.cpu-world.com/Support/6800.html - Motorola 6845
http://en.wikipedia.org/wiki/Motorola_6845 - The 6845 Cathode Ray Tube Controller (CRTC)
http://www.tinyvga.com/6845 - IBM Monochrome Display Adapter
http://en.wikipedia.org/wiki/Monochrome_Display_Adapter - Color Graphics Adapter
http://en.wikipedia.org/wiki/Color_Graphics_Adapter - Wikipedia CZ: Sběrnice:
http://cs.wikipedia.org/wiki/Sb%C4%9Brnice - Wikipedia EN: Industry Standard Architecture:
http://en.wikipedia.org/wiki/Industry_Standard_Architecture - Enhanced Graphics Adapter
http://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter - IBM Multicolor Graphics Adapter
http://en.wikipedia.org/wiki/MCGA