Hlavní navigace

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

9. 3. 2005
Doba čtení: 9 minut

Sdílet

Osmibitové počítače, uvedené na trh koncem sedmdesátých let minulého století, způsobily svou nízkou cenou a širokou dostupností převrat v nasazení a použití výpočetní techniky, včetně počítačové grafiky. Tvůrci těchto počítačů byli postaveni před nelehký úkol: se skromnými prostředky vytvořit systém, který by umožnil práci s interaktivní počítačovou grafikou. V dalších částech uvedu vlastnosti několika domácích počítačů, které tuto problematiku řeší rozdílným způsobem.

Obsah

1. Textové a grafické režimy
2. Pseudografika
3. Spritová grafika
4. Grafické systémy na osobních osmibitových počítačích
5. Grafické čipy v osmibitových počítačích Atari
6. ANTIC – generování rastrové grafiky
7. GTIA – sprity a vícebarevná grafika
8. Obsah dalšího pokračování

1. Textové a grafické režimy

Generování grafického obrazu zajišťují u většiny osmibitových domácích počítačů specializované čipy. Buď se jedná o číslicové obvody určené pouze pro práci s grafickými informacemi, nebo o čipy, které mají za úkol obsluhovat i další zařízení (zvukový výstup, magnetofonový vstup, joysticky apod.).

Představitelem prvního typu čipů je například ANTIC a GTIA použitý v osmibitových počítačích Atari a VIC-II použitý v Commodorech. Čipy s kombinovanými funkcemi byly využity například v počítači ZX81 nebo v jeho následovníku ZX Spectrum.

Prakticky všechny grafické čipy použité u osmibitových domácích počítačů umožňují práci v textových a grafických režimech. Předností textových režimů je možnost rychlé obsluhy celé obrazové paměti, například pro typický textový režim 40×25 znaků se alokuje pouze 1000 bytů paměti. Veškerá práce s takto malou pamětí (posun textu, smazání obrazovky) je samozřejmě velmi rychlá. Na druhou stranu pouze při použití grafických režimů je uživateli umožněno plně využít možností výstupního grafického zařízení, typicky televizní obrazovky či jednoduchého digitálního monitoru.

2. Pseudografika

Některé typy osmibitových počítačů neumožňovaly práci v plnohodnotném grafickém režimu. Představitelem těchto počítačů je například známý Sinclair ZX81. Jednoduché grafické obrazce však bylo možno vytvářet ze specializovaných znaků, které se typicky nacházely mimo standardní část ASCII kódu, tj. na pozicích 0–31 a 128–255 (u ZX81 byla situace mírně odlišná, neboť tento počítač nepoužíval ASCII znakovou sadu). Znaky mimo běžný repertoár (malá a velká abeceda, číslice apod.) většinou obsahovaly různé rámečky, horizontální, vertikální a diagonální části úseček apod.

Pseudografika se používala i na těch počítačích, které umožňovaly grafický výstup. Zde se využívalo možnosti uživatelské změny znakové sady a barevného výstupu jednotlivých znaků. Předností tohoto způsobu tvorby grafiky byla opět rychlost zpracování, takže své uplatnění tento režim našel především v počítačových hrách.

3. Spritová grafika

Na osmibitových domácích počítačích se především ve hrách, ale i v dalších aplikacích zaměřených na počítačovou grafiku často používala možnost zrychleného vykreslování jednoduchých rastrových obrázků nazývaných sprity. Generování obrazů spritů na obrazovce přitom probíhalo nezávisle na ostatní scéně (zde nazývané pozadí – background), přičemž bylo možné definovat prioritu vykreslování, tj. zda bude upřednostněn pixel z pozadí nebo ze spritu – viz ilustrační obrázek.

Priorita spritu a pozadí

Grafické subsystémy, které podporovaly práci se sprity, také většinou obsahovaly takzvané kolizní registry, do kterých se ukládaly příznaky překryvu pozadí se sprity nebo mezi několika sprity navzájem. Tím se při práci s pohyblivými obrazy předmětů nemusely provádět zdlouhavé testy mezi všemi zobrazovanými pixely.

Na dále popisovaných výpočetních systémech je zajímavá především skutečnost, že video paměti pro uložení pozadí a paměti pro uložení rastrových dat spritů byly od sebe odděleny a teprve až v průběhu vykreslování na obrazovku se provedla kombinace pixelů na pozadí a pixelů uložených ve spritech.

U prvních typů grafických karet pro personální počítače se podpora spritů vytratila, aby se s velkou slávou (jako převratná novinka :-) objevila u některých karet typu SVGA, kde se sprity používaly především pro zobrazení kurzoru myši nezávisle na zobrazeném pozadí. Avšak až s nástupem 2D a 3D akcelerátorů bylo možné určitým způsobem navzájem nezávislé sprity vykreslovat, například kopírováním rastrových obrázků se zapnutým maskováním.

Je zde však jeden důležitý rozdíl: zatímco u osmibitových počítačů se sprity vytvářely zcela nezávisle na pozadí a vykreslovaly se až kombinací barev pixelů při čtení z paměti, u moderních grafických akcelerátorů jsou všechny grafické údaje zapsány společně do framebufferu, ze kterého mohou být následně přečteny a vykresleny.

4. Grafické systémy na osobních osmibitových počítačích

S nástupem osmibitových domácích počítačů je spojen i prudký rozvoj počítačové grafiky, který byl způsobem zejména vývojem počítačových her. Později byly pro tyto počítače vytvořeny i „seriózní“ programy vyžívající grafické možnosti těchto počítačů, například jednoduché CAD systémy, matematické programy apod.

Podívejme se však nejprve, jaké vlastnosti měl typický osmibitový počítač. Vzhledem k tomu, že mikroprocesory, kterými byly tyto počítače osazeny (typicky MOS 65×x a Zilog Z80), měly osmibitovou datovou sběrnici a šestnáctibitovou adresovou sběrnici, bylo možné adresovat až 216 B = 64 KB paměti.

Do tohoto adresového prostoru byla namapována jak klasická operační paměť typu RAM/RWM, tak i paměť ROM a obrazová paměť, která se většinou nacházela přímo v operační paměti, což komplikovalo přístup procesoru a grafického čipu na sběrnici.

Z výše uvedeného také vyplývá, že kapacita obrazové paměti musela být co nejmenší, aby její adresový rozsah neubíral příliš mnoho z již tak omezeného adresového prostoru mikroprocesoru. Maximální velikost obrazové paměti se z tohoto důvodu pohybovala na hranici osmi kilobytů.

I na takto malém prostoru však bylo možné vytvořit překvapivě působivé a k tomu i dynamické efekty. Návrháři většinou navrhli obvody, které mohly pracovat ve více grafických režimech, někdy byly využity i barvové atributy platné pro větší blok pixelů, typicky 8×8. Řešení je mnoho, každé má své výhody a nevýhody.

Dalším požadavkem kladeným na domácí počítače byla samozřejmě i cena. Z důvodu co nejnižšího zatížení peněženky případného kupce se proto tyto počítače konstruovaly tak, že je bylo možné zapojit na běžný televizor a jako externí paměťové médium se používaly kompaktní magnetofonové kazety nebo i klasické magnetofonové cívky (s výjimkou českého počítače Maťo, který používal gramofonové desky). Televizní přijímač vykazuje díky šířce pásma a modulaci i demodulaci při zobrazování jemné rastrové grafiky velké množství chyb, které bylo zapotřebí eliminovat (nebo i využít) vhodným návrhem grafického výstupu.

Taktovací frekvence použitých mikroprocesorů se pohybovala v řádu jednotek MHz, proto nebylo vhodné, aby samotný mikroprocesor řešil tvorbu všech grafických efektů, neboť to vyžaduje poměrně rozsáhlé, a tím pádem i pomalé přesuny dat v paměti. Z toho důvodu měly některé počítače na grafickém čipu implementovánu podporu pro sprity, pomocí nichž bylo možné zobrazovat pohybující se předměty nezávisle na okolním obraze.

S velikostí obrazové paměti úzce souvisí i rozlišovací schopnost a počet současně zobrazitelných barev. Podle rozlišovací schopnosti můžeme osmibitové počítače zhruba rozdělit do dvou skupin:

  1. V první skupině se nacházejí počítače, které zobrazovaly obraz v rozlišení 256×192 pixelů, což v textovém režimu odpovídá textovému oknu 32×24 znaků. Předností tohoto rozlišení je jednoduché adresování (délka řádku je mocninou dvou) a také fakt, že se všechny pixely zobrazily přesně i na běžném televizním přijímači. Nevýhodný je především horizontální počet pixelů při práci v textových režimech, kdy je počet 32 znaků nedostatečný, což se obcházelo zmenšením rastru, ve kterých se znaky zobrazují. Typickým zástupcem těchto počítačů je slavné ZX Spectrum a prakticky všechny jeho klony a nástupci.
  2. Ve druhé skupině se nacházejí počítače, jejichž maximální podporované rozlišení bylo 320×192 resp. 320×200 pixelů nebo vyšší. Toto rozlišení se nazývalo „profesionální“, protože bylo možné zobrazit znaky o rozměrech 8×8 pixelů v textovém režimu 40×24 resp. 40×25 znaků podobně jako na prvních PC s grafickou kartou CGA – ostatně násobky 320 najdeme i dnes u mnoha standardizovaných rozlišení. Nevýhodou těchto rozlišení je složitější výpočet pozice pixelu či znaku na obrazovce a také problematické zobrazení na televizním monitoru, kdy při poměrně velkém horizontálním rozlišení docházelo ke vzniku barevných artefaktů u sousedních pixelů, které byly navzájem kontrastní. Představitelem této skupiny počítačů jsou osmibitová Atari a Commodore C64.

V dalších odstavcích popíšu grafický systém použitý u osmibitových počítačů Atari, příště se budu věnovat počítačům Commodore a Sinclairům. Výběr značek počítačů je tedy proveden podle abecedy, což mně jako bývalému ataristovi naprosto vyhovuje :-)

5. Grafické čipy v osmibitových počítačích Atari

V osmibitových domácích počítačích firmy Atari (například Atari 800XL, Atari 800XE, Atari 130XE, Atari 1200XL a Atari 65XE) byla pro vytváření grafického výstupu použita dvojice poměrně komplikovaných číslicových obvodů nazvaných ANTIC a GTIA. Tyto dva obvody se navzájem doplňovaly ve svých funkcích, a umožňovaly tak precizní nastavení grafického či textového režimu, horizontální i vertikální posun obrazu a na zobrazeném pozadí nezávislé vykreslování spritů.

Na čipech ANTIC a GTIA je nejzajímavější začlenění do systému počítače. Obvod ANTIC byl totiž ve skutečnosti samostatným grafickým procesorem (GPU), jelikož obsahoval vlastní sadu příkazů a dokázal obsluhovat přístup do paměti bez zásahu procesoru (tím byl MOS 6502A).

Počítače Atari řady XL

6. ANTIC – generování rastrové grafiky

Na osmibitových počítačích Atari se grafika skládala ze dvou částí: pozadí (hrací pole, playfield) a pohyblivých rastrových obrázků (spritů). Pro nastavení grafického režimu pozadí (playfield) byl určen obvod ANTIC (Alpha-NumericTelevi­sion Interface Circuit), který umožnil pro každý vykreslovaný řádek (scanline) programově nastavit jeden ze čtrnácti grafických režimů, které se lišily svým rozlišením, počtem současně zobrazitelných barev a velikostí alokované paměti.

Některé z podporovaných režimů zobrazovaly pouze znaky, jiné byly čistě bitmapové. U každého zobrazovaného řádku bylo možné povolit přerušení DLI (Display-List Interrupt), které nastalo při horizontálním zpětném běhu elektronového paprsku na televizní obrazovce. Pro každý zobrazovaný řádek bylo také možné povolit jemný posuv o maximálně osm pixelů, čímž bylo možné realizovat jednoduchý scrolling obrazovky nebo její části (tj. pouze několika vybraných řádků). V následující tabulce pro ilustraci uvedu několik základních režimů obrazových řádků:

textový mód 40 znaků na řádek, dvě barvy
textový mód 20 znaků na řádek, výška znaků 8 pixelů
textový mód 20 znaků na řádek, výška znaků 16 pixelů
grafický mód 40 pixelů na řádek, čtyři barvy
grafický mód 80 pixelů na řádek, čtyři barvy
grafický mód 160 pixelů na řádek, čtyři barvy
grafický mód 320 pixelů na řádek, dvě barvy
 atd.

Vzhledem k tomu, že se čip ANTIC řídil vlastní sadou příkazů nazývanou Display List a při vykreslování přebíral od hlavního procesoru řízení sběrnice, se v podstatě jednalo o jeden z prvních široce používaných grafických procesorů (Graphics Processing Unit – GPU). Operační paměť byla mezi hlavním procesorem počítače MOS 6502 a čipem ANTIC sdílená, což vedlo k nutnosti postupného přebírání řízení jedním z procesorů za pomoci operací přerušení.

Díky frekvenci hlavního procesoru a potřebě synchronizace elektronového paprsku bylo maximální podporované rozlišení rovno 384×240 pixelům. Toto rozlišení, které se v literatuře nazývá celkem trefně overscan, se kvůli kompatibilitě s kompozitními monitory a televizními obrazovkami snižovalo na standardních 320×192 pixelů. V režimu overscan totiž paprsek okrajové části obrazu kreslil „za roh“ obrazovky, což bylo krásně viditelné například na elektronkových televizorech Salermo, které měly přední část obrazovky o cca 2 cm vysunutou z šasi přístroje.

7. GTIA – sprity a vícebarevná grafika

S obvodem ANTIC úzce spolupracoval číslicový obvod GTIA (Graphics Television Interface Adapter nebo také George's Tele­visionInterfa­ce Adapter), který zaváděl podporu pro další tři šestnáctibarevné grafické režimy s horizontálním rozlišením 80 pixelů na řádek, a především umožňoval vykreslování spritů. Současně bylo možné vykreslit čtyři sprity s rozlišením maximálně 8×256 pixelů a další čtyři sprity s rozlišením 2×256 pixelů, které bylo možno spojit do jednoho většího spritu s rozlišením 8×256 pixelů.

Sprity široké 8 pixelů se v literatuře nazývají hráči (players), úzké dvoupixelové sprity střely (missiles).

Sprity byly jednobarevné, více barev bylo možno dosáhnout logickými operacemi nad překrývajícími se sprity (počítače Commodore C64 naproti tomu nabízely i sprity v režimu multicolor). Každý sprite mohl pomocí jedné instrukce měnit svoji horizontální velikost i horizontální pozici, přičemž polohy spritů byly navzájem nezávislé.

Vertikální pozice spritů se měnila přesunem bitmapy spritu v operační paměti. Bylo také možné definovat priority vykreslování spritů vůči sobě navzájem i vůči pozadí. Na následujícím obrázku je zobrazen způsob vykreslování grafiky s použitím obvodů ANTIC a GTIA.

ict ve školství 24

Vykreslení grafiky s využitím obvodů ANTIC a GTIA

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

V následujícím pokračování tohoto seriálu se budu věnovat popisu grafických subsystémů osmibitových počítačů Commodore C64 a také nezapomenu na ZX81 a ZX Spectrum.

Autor článku

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