Hlavní navigace

Grafika na počítačích IBM PC a řadič MC6845

15. 10. 2009
Doba čtení: 13 minut

Sdílet

Dalšími stroji, jejichž grafický systém si v seriálu o architekturách počítačů popíšeme, jsou stroje kompatibilní s IBM PC. V dnešní části seriálu se budeme zabývat především popisem řadiče Motorola MC6845, který je použit například v grafických kartách MDA, CGA či Hercules.

Obsah

1. Grafický subsystém osobních počítačů IBM PC

2. Grafický řadič Motorola MC6845

3. Generování obrazu s čipem MC6845

4. Řídicí registry čipu MC6845

5. Grafická karta MDA – Monochrome Display Adapter

6. Textový režim karty MDA

7. Grafická karta CGA – Color Graphics Adapter

8. Grafické režimy karty CGA

9. Odkazy na Internetu

1. Grafický subsystém osobních počítačů IBM PC

Firma IBM vytvořila a posléze na veřejnosti prezentovala počítače řady IBM PC zejména jako kancelářské počítače, u nichž se v jejich počátcích nepočítalo s tím, že na nich budou ve větší míře provozovány grafické aplikace (hry byly doménou osmibitových počítačů a od roku 1984 i počítačů založených na mikroprocesorech Motorola 68000, náročné CAD systémy se naopak provozovaly na výkonných unixových stanicích). Pozdější vývoj aplikací i operačních systémů na PC však ke grafice neomylně směřoval a s tím se také vyvíjely grafické karty, které firma IBM vytvořila a podporovala. Pokud se zaměříme na grafické karty určené pro PC základní řady (tj. pomineme poloprofesionální a profesionální čipy PGA a 8514/A), můžeme vysledovat zajímavý tříletý cyklus nástupu nových grafických karet této firmy:

CGA + MDA 1981
EGA 1984
VGA 1987
XGA 1990

Grafickou kartou XGA končí dlouhá série grafických karet navrhovaných u IBM, v dalších letech tuto činnost přebírají jiné firmy, což je jenom dobře, IBM v tomto směru napáchala více škody než užitku. V dalších částech tohoto seriálu si jednotlivé grafické karty postupně popíšeme (a nejen je), ale nejdříve se musíme zmínit o jednom čipu, který měl pro další vývoj grafických karet na počítačích typu IBM PC poměrně zásadní význam. Jedná se o grafický řadič Motorola MC6845.

pc83

Obrázek 1: Textový režim adaptéru MDA s efektivním rozlišením 720×350 pixelů.

2. Grafický řadič Motorola MC6845

Grafický řadič Motorola MC6845 byl navržen pro řízení jednoduchých počítačových monitorů či přímo jejich obrazovek (CRT), tj. jedná se o čip obecně nazývaný CRTC – Cathode Ray Tube Controller. Řízení obrazovek spočívá, zjednodušeně řečeno, v postupném načítání barev jednotlivých pixelů či kódů znaků (serializaci) z obrazové paměti, dále o převod načtených dat na výslednou grafickou informaci a následném poslání této informace na výstup – buď přímo na monitor nebo do VF modulátoru v případě použití televizoru namísto monitoru. K vlastní obrazové informaci jsou přidány i horizontální a vertikální synchronizační signály, o jejichž generování se taktéž stará grafický řadič. Tento čip byl používán už v sedmdesátých letech minulého století, zejména pro řízení obrazovek u počítačových terminálů (samozřejmě textových). Pro tento typ úloh byl řadič MC6845 vybaven možností zobrazovat data v textové podobě, ve skutečnosti však bylo při vhodném nastavení řídicích registrů možné použít i různé grafické režimy, čehož bylo využito již u některých domácích osmibitových počítačů vybavených tímto čipem (některé z těchto počítačů si ještě popíšeme v navazujících dílech seriálu).

Kromě toho bylo možné k čipu MC6845 připojit světelné pero, které mohlo s využitím poměrně přesného měření hodin řídicích výstup jednotlivých obrazových řádků a pixelů, lokalizovat umístění aktivního hrotu světelného pera na obrazovce (samozřejmě za předpokladu, že výrobce počítače vyvedl příslušné piny čipu MC6845 přes zesilovač na konektor). Podpora pro textový režim byla u tohoto grafického řadiče na poměrně vysoké úrovni, zejména s ohledem na dobu vzniku čipu: znaky mohly mít proměnnou výšku a dokonce byl podporován takzvaný hardwarový kurzor, což není nic jiného, než ona známá blikající čárka či obdélník (většinou o šířce jednoho znaku) na obrazovce. Podpora spočívá ve zmíněném blikání, které nemuselo být řízeno programově, stejně tak jako přepis znaku, který se nachází pod kurzorem (to mimo jiné znamenalo, že i když počítač „zamrzl“, textový kurzor si dál vesele blikal, což spoustu lidí dokonale zmátlo, protože si mysleli, že počítač stále pracuje).

Celkem byly vyráběny tři základní verze tohoto čipu (MC6845 – 1 MHz, MC68A45 – 1,5 MHz, MC68B45 – 2 MHz), ovšem kromě původního výrobce (Motorola) se tento čip vyráběl v modifikované podobě i v několika dalších firmách. Mezi jednotlivými čipy existovaly větší i menší rozdíly, a to jak v časování signálů, tak i ve významu některých bitů řídicích registrů.

pc83

Obrázek 2: Grafický řadič Motorola MC6845.

3. Generování obrazu s čipem MC6845

Rozlišení a barevná hloubka grafických režimů nebyly omezeny přímo čipem MC6845, ale dalšími obvody, které se k tomuto integrovanému obvodu připojovaly. Při použití vyšších frekvencí hodinových impulsů bylo možné používat stabilní grafické režimy o rozlišení 768×384 pixelů, teoretická hranice se pohybovala u rozlišení 800×400 pixelů; při „přetaktování“ čipu však bylo možné použít i vyšších rozlišení, samozřejmě pouze za předpokladu, že se využily dostatečně rychlé paměťové čipy tvořící obrazovou paměť. Kromě přímého výstupu grafiky byl podporován i takzvaný interlace režim, tj. střídavé vykreslování lichých a sudých obrazových řádků, používaný zejména při zobrazování na televizorech. Čip MC6845 dokázal adresovat až 214 textových řádků, přičemž každý řádek mohl mít výšku 25 obrazových řádků. Celková adresovatelná kapacita paměti byla rovna 2(14+5)=512 kB, čehož však žádná grafická karta nevyužívala. Pokud se šířka textového řádku snížila na jeden obrazový řádek, simuloval se grafický režim, ovšem velikost obrazové paměti byla pouhých 214=16 kB (viz například dále popsaná karta CGA).

Z důvodu podpory jak textových, tak i grafických režimů si právě tento řadič displeje vybrala firma IBM pro návrh grafických karet určených pro vznikající IBM PC a jeho následovníky (PC XT, PC AT), což je poněkud paradoxní, protože se jedná o čip navržený především pro použití s mikroprocesorovou řadou Motorola M68×x a firma IBM se při návrhu PC schválně orientovala především na obvody kompatibilní se stavebnicemi 8080 a 8085 (důvodů bylo více, některé si ještě řekneme).

4. Řídicí registry čipu MC6845

Nastavení grafického řadiče MC6845 se provádělo přes osmnáct osmibitových řídicích registrů. Některé z těchto registrů byly určeny pro zápis (počet znaků na řádek atd.), jiné zase pro čtení (pozice světelného pera). Číselné hodnoty, které mohly být větší než 28, se musely ukládat do dvou sousedních registrů (poloha kurzoru atd.). Registry byly programátorům přístupné přes dvojici adres – zápis do první adresy vybíral příslušný řídicí registr, čtení či zápis do druhé adresy (o jedničku vyšší) již vedl ke čtení či zápisu do příslušného řídicího registru. O které adresy se konkrétně jedná záleželo na zapojení konkrétní grafické karty. Například u dále popsané grafické karty CGA se jedná o I/O porty 0×3d4 a 0×3d5 a u grafické karty Hercules se naopak o I/O porty 0×3b4 a 0×3b5. Význam jednotlivých řídicích registrů je uveden v následující tabulce (povšimněte si, že jednotkami při udávání horizontálních velikostí jsou znaky a nikoli pixely – přesné časování je odvozeno od externího hodinového signálu řízeného krystalem):

Číslo registru Význam
0 celkový počet znaků horizontálně, včetně okrajů
1 počet horizontálně zobrazených znaků (typicky 40 či 80)
2 horizontální pozice synchronizačního signálu (lze posouvat obrazem na monitoru, ovšem omezeně)
3 šířka horizontálního a vertikálního synchronizačního signálu
4 celkový počet textových řádků (například 27)
5 mikroposun textových řádků po jednotlivých obrazových řádcích
6 zobrazený počet textových řádků (například 25)
7 vertikální pozice synchronizačního signálu (lze posouvat obrazem, opět omezeně)
8 mód prokládání (interlace) a posunutí
9 počet obrazových řádků pro jeden textový řádek – výška znaku (většinou 8 či 14)
10 začátek hardwarového kurzoru (většinou výška_znaku-3)
11 konec hardwarového kurzoru (kurzor může mít například výšku dvou obrazových řádků)
12 počáteční adresa obrazové paměti (vyšší bajt)
13 počáteční adresa obrazové paměti (nižší bajt)
14 adresa kurzoru – vyšší bajt (klasický posun hardwarového kurzoru)
15 adresa kurzoru – nižší bajt
16 adresa světelného pera – vyšší bajt
17 adresa světelného pera – nižší bajt

5. Grafická karta MDA – Monochrome Display Adapter

Jak jsme si již řekli v předchozích kapitolách, nabízela firma IBM do svých prvních počítačů PC buď grafickou kartu MDA (Monochrome Display Adapter), nebo grafickou kartu CGA (dokonce bylo možné, aby byly v jednom počítači současně nainstalovány obě zmíněné karty, protože ani adresy jejich řídicích registrů – portů, ani adresní rozsah video paměti, se nepřekrýval). Počátek výroby obou typů karet se datuje do roku 1981. Grafická karta MDA se od prakticky všech dalších grafických adaptérů vyráběných pro počítače IBM PC odlišovala především v tom, že neumožňovala vykreslování rastrové grafiky (označení termínem „grafická karta“ je tedy poněkud nepřesné), jelikož podporovala pouze textový režim 80×25 znaků, který je používán například při startu počítače či v operačním systému MS-DOS; teoreticky by však mělo být možné pracovat s graficko-textovou kartou MDA i pod systémy Linux či Open/Free BSD, například pro řízení zobrazování na druhém monitoru u starších systémů vybavených sběrnicí ISA (v moderních PC se pro zobrazení na více monitorech využívá poněkud odlišná technologie). V minulosti se – zejména právě v dobách DOSu – pro tuto činnost nejčastěji používaly výprodejové karty typu Hercules, protože i ty byly navrženy tak, aby jejich řídicí porty ani adresy video paměti nekolidovaly s primární grafickou kartou.

pc83

Obrázek 3: Grafická karta MDA s čipem MC6845.

Jednoznačnou předností této grafické karty je způsob namapování do adresního prostoru procesoru. Karta totiž využívala segment začínající adresou b000:0000 (používám zde známé Intelovské šestnáctibitové adresování typu segment:offset), který nebyl na dalších grafických kartách využit. Proto bylo možné tuto kartu kombinovat s kartou jinou a vytvořit tak vícemonitorový systém, který využívaly aplikace jako AutoCAD (grafická plocha a terminál s příkazovým řádkem), Turbo Pascal (vývojové prostředí zobrazené spolu s laděnou aplikací), Turbo C++, Lotus 1–2–3 apod. V praxi bylo možné použít například kombinace grafických karet CGA+MDA, EGA+MDA a později i VGA+MDA. Vzhledem k tomu, že firma IBM tuto kartu přestala po několika letech vyrábět, převzal úlohu sekundární grafické karty její konkurent Hercules (viz další část tohoto seriálu), který kromě zobrazení textového režimu podporoval i režim grafický.

6. Textový režim karty MDA

Při zobrazování znaků v textovém režimu 80×25 znaků byl každý znak definovaný v×masce 9×14 pixelů, což znamená, že rozlišení obrazovky bylo rovno 720×350 pixelům. Poměrně velké horizontální rozlišení (a tím i velmi dobře čitelný text) bylo dále použito až u grafických karet Hercules a VGA o několik let později (grafické karty CGA a EGA byly v tomto ohledu zklamáním, zejména pro uživatele pracující převážně v textovém režimu). Znaková sada byla na grafické kartě uložena v paměti ROM, což znamená, že se při požadavku na zobrazení textů v jazycích s nabodeníčky (jedná se o prakticky všechny jazyky kromě angličtiny) musela tato paměť vyměnit za EPROM (typ 2764 případně 27C64) s vypálenou národní znakovou sadou (původní znaková sada dodávaná firmou IBM odpovídá kódové stránce 437, tj. jedná se o „rozšířenou“ ASCII tabulku). Každý znak na obrazovce měl k dispozici i svůj atributový byte, ve kterém bylo specifikováno, zda se má tento znak zobrazit normálně, zvýrazněně (větší intenzita), s podtržením, inverzně či zda by měl blikat; dokonce bylo možné nastavit i některé kombinace těchto atributů. Barevné atributy znaků byly použity (i když s poněkud jiným významem) i u dalších grafických karet na PC.

Kapacita video paměti na této kartě byla rovna čtyřem kilobajtům, přičemž 2000 bytů bylo zapotřebí pro uložení všech 80×25 znaků a dalších 2000 bytů pro uložení jejich atributů (z pohledu PC se ukládala vždy dvojice znak-atribut, tj. jednalo se o souvislou oblast paměti), zbylých 96 bytů bylo nevyužito. Zajímavé jsou signálové poměry, kterými se musely řídit připojené monitory. Snímková frekvence byla rovna 50 Hz, řádková frekvence 18,432 kHz (tj. tato frekvence byla poněkud vyšší než u dále popisované grafické karty CGA). Při prvním pohledu na údaj o snímkovém kmitočtu to může vypadat tak, že 50 Hz je pro práci na počítači naprosto nedostatečné, musíme si však uvědomit, že se ponejvíce používalo tmavé pozadí, na kterém není poblikávání obrazu tak patrné, jako na pozadí světlém či dokonce bílém.

7. Grafická karta CGA – Color Graphics Adapter

První dostupnou kartou s podporou zobrazování rastrové grafiky na osobních počítačích typu IBM PC byla grafická karta CGA, což je označení, které vzniklo z celého názvu Color Graphics Adapter. Tato karta, jež byla jako oficiální standard uvedena (spolu s výše popsanou kartou MDA) v roce 1981, oficiálně podporuje celkem dva grafické režimy a dva režimy textové. Kromě toho je však pro televizní výstup použit třetí grafický režim a vhodnou manipulací s řídicími registry lze vytvořit i další textové, grafické či smíšené režimy. Vzhledem k omezení tohoto grafického adaptéru, který byl způsobem velmi nízkou řádkovou frekvencí (pouhých 15,75 kHz), bylo možné zobrazit pouze 200 obrazových řádků, a to i v textových režimech. Z tohoto důvodu jsou jednotlivé masky znaků definovány v rastru pouhých 8×8 pixelů, tedy stejně jako u mnohých osmibitových počítačů (Atari, C64 atd.). První znakový režim dokázal zobrazit 40 znaků na textovém řádku, počet textových řádků byl roven 25. Ve druhém textovém režimu bylo možné zobrazit 80 znaků na řádku. Každý znak mohl mít přiřazenou jednu ze šestnácti předdefinovaných barev, pozadí znaku bylo možné zvolit také ze šestnácti barev, nebo pouze z osmi barev v případě, že se jeden bit atributu rezervoval pro blikání. Jak barva popředí, tak i barva pozadí byly zapsány do takzvaného atributu, který měl velikost jeden byte.

pc83

Obrázek 4: Grafický režim 320×200 se čtyřmi barvami (King's Quest). Jak je z tohoto obrázku patrné, je malý počet barev kompenzován ditheringem, který ovšem při relativně malém rozlišení situaci snad ještě více zhoršuje. Paradoxní je, že většina rozšířených osmibitových počítačů dokáže – a to dokonce s poloviční velikostí obrazové paměti – tento obrázek zobrazit mnohem lépe.

8. Grafické režimy karty CGA

Mnohem zajímavější a flexibilnější než textové režimy jsou režimy grafické, která grafická karta CGA také podporovala. Oficiálně jsou podle dokumentace IBM podporovány pouze dva grafické režimy. V prvním grafickém režimu bylo možné zobrazit obraz v rastru 320×200 pixelů ve čtyřech barvách, druhý režim měl rozlišení 640×200 pixelů dvoubarevně. V grafickém režimu o rozlišení 320×200 pixelů mohl každý pixel nabývat jedné ze čtyř barev, které byly vybrány z barevné palety. Tato paleta však nemohla být libovolná (z předchozího textu víme, že v textovém režimu je možné použít šestnáct barev), protože existovaly pouze dvě fixní barevné palety, přičemž při výběru barev se IBM skutečně „předvedla“, protože její nevkusná barevná schémata byla prakticky nepoužitelná. První paleta fixně obsahovala barvy zelenou, červenou a hnědou (red, green, brown), druhá paleta barvy azurovou, fialovou a bílou (cyan, magenta, white). Je patrné, že obě palety se liší pouze přidáním modré barvové složky.

pc83

Obrázek 5: Pro porovnání – tentýž obrázek, ovšem zobrazený v grafickém režimu 320×200 s barvami šestnácti na modernější grafické kartě.

Čtvrtá barva byla při práci s BIOSem (přesněji řečeno při používání služeb BIOSu, například přechodu do grafického režimu) vždy nastavena na černou; ve skutečnosti se však přes řídicí registry grafické karty dala tato barva (jako jediná) nastavit na jednu ze šestnácti předdefinovaných barev. Tuto poměrně zajímavou možnost však, vzhledem k nedostupnosti technických informací, mnoho aplikací nevyužívalo. Kapacita obrazové paměti byla rovna 320×200/8×2=16000 bytům, což znamenalo, že adresovací schopnosti čipu Motorola MC6845 byly využity jen částečně – ve skutečnosti se v grafických režimech používalo pouze čtrnáct bitů adresy textových řádků (viz předchozí kapitoly s popisem tohoto čipu), přičemž výška textových řádků byla nastavena na jeden obrazový řádek. Ve druhém grafickém režimu o rozlišení 640×200 pixelů mohl každý pixel nabývat pouze jedné ze dvou barev, které jsou při inicializaci tohoto režimu pomocí BIOSu nastaveny na černou a bílou. S využitím služeb BIOSu tyto barvy nastavit nelze, ale pomocí změny konfiguračních registrů je to možné – lze tak generovat například zeleno-červený obraz či libovolnou jinou kombinaci šestnácti základních barev. Kapacita obrazové paměti byla při použití tohoto režimu rovna 640×200/8=16000 bytům, tj. stejně, jako v předchozím grafickém režimu.

p83_

Obrázek 6: Známá hra Arcade Voleyball pro dva hráče taktéž využívá čtyřbarevný grafický režim karty CGA. Víc než čtyři barvy (včetně pozadí) zde skutečně nehledejte.

Kromě základních grafických režimů byly na kartě CGA podporovány i rozšiřující (poněkud nestandardní) grafické režimy. Těmi se však budeme zabývat až v následující části tohoto seriálu, stejně jako popisem adresování pixelů při použití výše zmíněných standardních grafických režimů 320×200×4 a 640×200×2.

p83_

Obrázek 7: Další známá CGA hra – Paratroopers.

root_podpora

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
p83_

Obrázek 8: Kdo uhodne, o kterou aplikaci běžící v grafickém režimu karty CGA o rozlišení 640×200 pixelů (monochromaticky) se jedná?

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.