Grafika na osmibitových počítačích firmy Sinclair II

2. 7. 2009
Doba čtení: 15 minut

Sdílet

V dnešní části seriálu o architekturách počítačů dokončíme popis grafických možností ZX Spectra, včetně časování při generování grafiky. Taktéž si popíšeme způsob práce s grafikou u dalších počítačů firmy Sinclair a nakonec zajímavý (i když komerčně nepříliš úspěšný) počítač Sam Coupé.

Obsah

1. Organizace video paměti ZX Spectra
2. Časování v grafickém režimu ZX Spectra
3. Grafické triky na ZX Spectru
4. ZX Spectrum +128K
5. Sinclair QL
6. Grafické možnosti počítače Sinclair QL
7. Počítač Sam Coupé
8. Odkazy na Internetu
9. Obsah následující části seriálu

1. Organizace video paměti ZX Spectra

Již v předchozí části tohoto seriálu jsme si popsali základní strukturu obrazové paměti počítače ZX Spectrum. Z pohledu mikroprocesoru (tj. jeho adresové sběrnice) začínala tato paměť na adrese 16384, protože do prvních 16 kB byla namapována paměť ROM a od adresy 32768 se nacházel blok paměti RAM o kapacitě 32 kB, do které měl přístup pouze mikroprocesor. Jediný blok paměti, který byl sdílený mezi ULA (čip, který se mj. staral o generování video signálu) a mikroprocesorem, se nacházel od zmíněné adresy 16384 až do adresy 32767. Z hlediska programátorů se tato oblast paměti jevila jako pomalejší, protože mikroprocesor musel v některých okamžicích čekat, až ULA dokončí čtení obrazových dat. Z praktického hlediska to znamenalo, že se do této oblasti paměti ukládaly pouze data či programové rutiny, při jejichž volání nebylo nutné používat přesné časování.

obr

Obrázek 1: Doom pro ZX Spectrum!

Obrazová paměť je rozdělena na dvě části – bitmapu s rozlišením 256×192 pixelů o velikosti 256×192/8=6144 bajtů a maticí atributů s 32×24=768 bajty. Každému pixelu je v bitmapě přiřazen jediný bit rozlišující, zda se jedná o pixel s barvou pozadí či popředí, tj. v jednom bajtu jsou uloženy informace o osmi pixelech ležících na jednom obrazovém řádku. Pixely na jednom obrazovém řádku, tvořící blok o délce 32 bajtů, jsou uloženy lineárně za sebou, ovšem jednotlivé obrazové řádky jsou v paměti uloženy na přeskáčku: šestnáctibitovou adresu lze v případě práce s obrazovou pamětí rozdělit na více částí tak, jak je naznačeno níže (každé písmeno odpovídá jednomu bitu šestnáctibitové adresy):

010 BB SSS RRR CCCCC

BS:    číslo bloku 0,1,2 (v bloku číslo 3 je atributová paměť)
SSS:   číslo řádky v jednom znaku, který je vysoký osm obrazových řádků
RRR:   pozice textového řádku v bloku. Každý blok je vysoký 64 obrazových řádků, což odpovídá osmi řádkům textovým
CCCCC: index sloupce bajtu v rozmezí 0..31, kde je uložena osmice sousedních pixelů
obr

Obrázek 2: Úvodní obrazovka světoznámé hry Manic Miner.

Nejlépe je tato organizace paměti patrná při nahrávání programu z kazety, neboť nahrávací rutina pouze načítá data a postupně je ukládá od adresy 16384, tj. na obrazovce se nahrávaná bitmapa objevuje po jednotlivých „zpřeházených“ řádcích: nejprve první řádky z každého bloku (první řádek na obrazovce, řádek číslo 64 a řádek číslo 128), potom řádky posunuté o sedm pixelů dolů atd.

obr

Obrázek 3: První úroveň hry Manic Miner.

K bitmapě byla navíc přiřazena výše zmíněná atributová paměť o velikosti 32×24=768 bajtů, v níž je pro blok 8×8 pixelů zaznamenána barva popředí, barva pozadí, intenzita barvy pixelu a příznak blikání (pravidelného prohazování barvy popředí a pozadí). ZX Spectrum mělo pevně nastavenou barvovou paletu s osmi základními barvami, přičemž sedm barev (kromě barvy černé) mohlo být zobrazeno s nízkou či vysokou intenzitou. Celkem tedy bylo možné na obrazovce použít patnáct barevných odstínů, ovšem s tím omezením, že se v bloku 8×8 pixelů mohly vyskytovat maximálně dvě barvy – viz například tento ilustrační obrázek. Tato architektura obrazové paměti má jednu zásadní výhodu – pro uložení celého obrázku bylo zapotřebí pouze 6144+768=6912 bajtů. Nevýhodou je vznik nežádoucích jevů v případě, že dojde ke kolizi více objektů s různými barvami v jednom bloku 8×8 pixelů.

obr

Obrázek 4: Tento úvodní obrázek je hře Tomahawk (simulátor stejnojmenného vrtulníku) obsahoval pouze 6 barev.

2. Časování v grafickém režimu ZX Spectra

V další kapitole si řekneme, jaké grafické triky je možné na ZX Spectru použít, ovšem pro lepší pochopení některých triků je vhodné znát, jak je generování video signálu časováno. V předchozí části tohoto seriálu jsme si řekli, že mikroprocesor Zilog Z80, který byl v ZX Spectru použitý, byl taktovaný na 3,5 MHz, tj. za jednu sekundu proběhlo 3500000 hodinových cyklů. Televizní obraz je v normě PAL obnovovaný padesátkrát za sekundu, což znamená, že jeden snímek trvá přesně 3500000/50=70000 hodinových cyklů. Na obrazovce je v každém snímku (přesněji půlsnímku) vykresleno 312,5 obrazových řádků, takže jednoduchým výpočtem zjistíme, že jeden obrazový řádek je vykreslen za 224 hodinových cyklů. Zmíněných 312,5 obrazových řádků se dělí na tři oblasti: 64 řádků pro horní okraj (má konstantní barvu), 192 řádků s vlastním obrazem a konečně 56,5 řádků pro dolní okraj. Ve skutečnosti je horní okraj nižší než celých 64 řádků, protože nějaký čas zabere návrat elektronového paprsku do levého horního rohu obrazovky.

obr

Obrázek 5: Ukázka současné tvorby grafiky pro ZX Spectrum, tento obrázek obsahuje pouze devět barev a využívá ditheringu.

V 224 hodinových cyklech, které jsou vyhrazeny pro každý obrazový řádek, se vykreslí 256 pixelů, přičemž každý pixel je vykreslen v polovině hodinového cyklu (to znamená, že ULA musí každé 4 cykly načíst dvojici bajtů – osmici pixelů a atributový bajt). Pro vykreslení celého obrazového řádku je tedy zapotřebí 128 cyklů, přičemž zbývajících 224–128=96 cyklů trvá vykreslení pravého a levého okraje (24+24 cyklů) a taktéž návrat elektronového paprsku na další řádek (48 cyklů). Co je důležité – při vykreslování všech okrajů je možné zasahovat do obrazové paměti a ULA pro každý obrazový řádek čte všechny příslušné barvové atributy, tj. neobsahuje žádnou paměť, do kterých by se jednou načtené hodnoty uložily. To mj. znamená, že atributová paměť má sice velikost 768 bajtů, ale při vykreslení jednoho snímku se ve skutečnosti přečte 6144 bajtů (každý bajt osmkrát).

3. Grafické triky na ZX Spectru

Poměrně brzy po začátku prodeje ZX Spectra programátoři vymysleli některé triky, kterými mohli částečně obejít omezení daná pevnou grafickou paletou a pamětí atributů. Pravděpodobně prvním trikem bylo použití ditheringu (ten ostatně dodnes využívají například i laserové tiskárny či osvitové jednotky). Všechny screenshoty, které jsou v tomto článku zobrazeny pochází z emulátorů a snímky jsou tak ostré – je viditelný každý pixel. Ve skutečnosti při zobrazení na televizní obrazovce docházelo k rozmazávání obrázku, především v horizontálním směru, čehož se dalo využít právě s pomocí ditheringu – viz pátý a šestý obrázek. Dalším trikem byla změna atributové paměti v průběhu zobrazování jednotlivých řádků. V předchozí kapitole jsme si řekli, že ULA vždy načítá obsah atributové paměti pro celý obrazový řádek, tudíž je možné s využitím přesného časování hodnotu atributů měnit pro každý řádek zvlášť a vlastně tak zvýšit rozlišení atributové paměti z 32×24 bloků na 32×192 bloků. Ovšem rychlost mikroprocesoru na původním ZX Spectru nebyla tak vysoká, aby bylo možné přepsat všech 32 bajtů v průběhu jednoho řádku (resp. při návratu paprsku na další řádek), proto se v praxi měnila vždy jen zhruba polovina atributů – tento režim se někdy označuje 8×2.

obr

Obrázek 6: Na tomto obrázku je pouze pět barev, v pravé horní části je patrné, ve kterém místě se nachází hranice bloků 8×8 pixelů.

Další trik je založen na jednoduché myšlence – pokud nedokážeme zvýšit rozlišení ani počet barev v jednom snímku (prostorové oblasti), můžeme provádět změny v oblasti časové. Na ZX Spectru +128K (viz další kapitolu) lze využít dvojici video bufferů, tj. dvojici obrázků, mezi kterými se lze přepínat jedinou instrukcí OUT. Rychlým přepínáním vhodně zvolených obrázků je možné zvýšit počet barev, protože lidské oko si tyto snímky ve své podstatě zprůměruje. Tímto způsobem se i na ZX Spectru zobrazovala například hnědá barva, která není v jeho původní paletě přítomna. Přepínáním tří snímků lze zobrazit až 100 barev, ovšem poblikávání obrazu může být nepříjemné. Tento trik je velmi složité implementovat v moderních emulátorech ZX Spectra, protože frekvence obrazu na dnešních monitorech se odlišuje od původních 25Hz/50Hz televizní obrazovky.

4. ZX Spectrum +128K

O osmibitovém počítači ZX Spectrum +128K z roku 1986 jsme se již zmínili v předchozích částech tohoto seriálu, konkrétně při popisu zvukového čipu AY-3–8910, jenž byl použit jak v tomto velice úspěšném osmibitovém počítači, tak i například v počítačích řady Atari ST. Zatímco vzhledově se tento počítač příliš nelišil od svých předchůdců, například ZX Spectrum+, celková architektura počítače byla v několika směrech vylepšena. Především byl zvukový systém počítače (tj. jednobitový „převodník“ napojený na reproduktor) rozšířen o již zmíněný čip AY-3–8910, přesněji řečeno o jeho variantu AY-8912, která kromě zvukového výstupu obsahovala i jeden osmibitový port použitý pro připojení MIDI zařízení a externí klávesnice. Dále byla zvýšena kapacita paměti ROM ze 16 kB na 32 kB, což například umožnilo použití vylepšeného interpretru Basicu i jeho editoru. Kapacita paměti RAM je zakódována v samotném názvu počítače – má velikost 128 kB.

obr

Obrázek 7: ZX Spectrum +128K

Částečné vylepšení doznal také grafický subsystém. Největší změnou (spíše rozšířením) bylo to, že se framebuffer mohl nacházet na dvou místech v operační paměti. To znamenalo, že se dal velmi snadno implementovat například double buffering, tj. technika, při které se do jednoho (neviditelného) bufferu provádělo vykreslování, zatímco obsah druhého bufferu byl zobrazován (vykreslování tedy nevedlo například k nežádoucímu „sněžení“). Po vykreslení scény se funkce obou bufferů prohodily. Dva buffery bylo možné použít i pro implementaci výše popsaného triku GigaScreen, při kterém se na obrazovce rychle mění dva speciálně upravené obrázky.

Dalšího vylepšení grafického subsystému se však programátoři ani uživatelé nedočkali (pravděpodobně kvůli snaze o co největší zpětnou kompatibilitu) – podpora pro skutečný textový režim, sprity či plynulý scrolling obrazovky neexistovala, tyto efekty musely být naprogramovány, na rozdíl od některých jiných osmibitových počítačů, které pro tyto činnosti obsahovaly specializované či­py.

5. Sinclair QL

Nejvýkonnějším počítačem vyrobeným firmou Sinclair Research byl osobní počítač nazvaný Sinclair QL. Zkratka QL je odvozena od sousloví Quantum Leap neboli kvantový přechod. Tímto názvem pravděpodobně chtěla firma naznačit výkonový i technologický skok mezi původní řadou ZX a počítači QL. O technologický skok se skutečně jednalo – Sinclair QL totiž obsahoval mikroprocesor řady Motorola 68000, konkrétně typ Motorola 68008 taktovaný na sedmi a půl megahertzích, což je na dobu vzniku velmi slušná frekvence (vzpomeňme na pozdější Amigy či Atari ST). Vzhledem k tomu, že počítač byl představen v roce 1984, se jednalo o jeden z prvních skutečně třicetidvoubitových osobních počítačů na trhu (bitová šířka není určena externí sběrnicí, ale interní datovou sběrnicí mikroprocesoru a šířkou operandů vstupujících do ALU); prvenství si drží slavný Apple Macintosh (viz reklama na Macintosh, která je natočena v prostředí románu 1984). Jedním z uživatelů tohoto počítače byl i jistý Linus Torvalds, jehož jméno čtenáři Root.cz pravděpodobně již zaslechli :-)

obr

Obrázek 8: Sinclair QL.

Na rozdíl od Macintoshe se však Sinclair QL nesetkal s větším obchodním úspěchem. Uvádí se, že za necelé dva roky (než byla výroba ukončena) bylo prodáno cca 150 tisíc kusů, což již nepředstavuje pro polovinu osmdesátých let žádné ohromující číslo. Pravděpodobným důvodem neúspěchu je nástup nové generace počítačů firem Atari a Commodore (CBM) a také to, že počítač nebyl zpětně kompatibilní se ZX Spectrem. Poměrně zajímavá je však jeho architektura. Kromě již zmíněného třicetidvoubitového mikroprocesoru se na jeho základní desce nacházely dva zákaznické obvody označené ZX8301 a ZX8302 (původně se totiž Sinclair QL měl jmenovat ZX83, z čehož vychází i prefix označení této dvojice integrovaných obvodů) a navíc mikrořadič Intel 8049 (jedná se o řadu Intel 8048 z níž vychází i dodnes populární řada Intel 8051), který mj. sloužil pro generování zvuku a komunikaci s klávesnicí a myší. Zajímavé je, že počítač nebyl vybaven disketovou jednotkou, ale paměťovým zařízením Microdrive (nekonečnou magnetickou páskou), které jsme si již v tomto seriálu popsali.

obr

Obrázek 9: Další pohled na Sinclair QL.

6. Grafické možnosti počítače Sinclair QL

Nás však bude v kontextu grafických subsystémů zajímat především první zákaznický obvod – ZX8301, nazývaný též Master Chip. Tento obvod plní v počítači dvě funkce: obnovu obsahu dynamických pamětí (DRAM refresh) a generování video signálu. Při práci s video signálem dokázal čip ZX8301 pracovat ve dvou grafických režimech. První režim nabízel velmi slušné rozlišení 512×256 pixelů, přičemž každý pixel mohl mít nastavenu jednu ze čtyř barev (černá, červená, zelená, bílá). Ve druhém režimu bylo rozlišení v horizontální ose sníženo na polovinu, tj. 256×256, ovšem počet barev pro jeden pixel se zvýšil ze čtyř na osm (výběr se mohl provádět z palety 256 barev) a navíc se jedním bitem dalo nastavit, zda má pixel blikat. Velikost framebufferu je v obou případech shodná: 512×256×2/8=32768 bajtů; 256×256×4/8=32768 bajtů, tj. přesně 32 kB, navíc je počet pixelů na řádku představován „kulatým“ číslem, což v některých případech vede ke zjednodušení grafických algoritmů, například i rutiny putpixel.

obr

Obrázek 10: Obrazovka počítače Sinclair QL s textovým editorem.

Čip ZX8301 taktéž podporoval přepínání mezi dvěma framebuffery, čímž se dal velmi jednoduše implementovat double buffering, pomocí něhož lze provádět animace bez nežádoucího poblikávání obrazu. Přepínání mezi dvěma framebuffery znamená, že do jednoho bufferu se vykresluje scéna zatímco druhý buffer je zobrazen na obrazovce monitoru. Pokud vás grafické schopnosti počítače Sinclair QL neohromily, tak vězte, že první generace počítačů IBM PC byla vybavena kartou CGA (Color Graphics Adapter) s poloviční kapacitou framebufferu a tím pádem i omezenějšími schopnostmi (o double bufferingu ani nemluvě).

7. Počítač Sam Coupé

O počítači Sam Coupé, který je ideovým pokračovatelem vývojové řady počítačů ZX Spectrum (i když se jedná o výrobek jiné firmy), bylo již mnohokrát napsáno, že na trh přišel příliš pozdě a k tomu ještě ve špatné zemi; konkrétně ve Velké Británii a ne v USA. Toto tvrzení asi bude do jisté míry pravdivé, protože tento počítač je prakticky neznámý a nijak výrazněji se nerozšířil, i když po technické stránce se jednalo o vyzrálý produkt. Použitým procesorem byl opět oblíbený Zilog Z80. Taktovací frekvence se oproti ZX Spectru zvýšila z původních 3,5 MHz na 6 MHz, což zhruba odpovídá počítačům PC XT, které v té době obsahovaly hybrid Intel 8088. Kapacita operační paměti stoupla na 256 kB resp. 512 kB (podle modelu), externě bylo možné paměť rozšířit dokonce až na 4,5 MB. Paměť ROM však zůstávala poměrně malá – 32 kB, na což si stěžoval i tvůrce interpretru jazyka Basic. O zvuk se staral čip Philips SM 1099, který dokázal vygenerovat šestikanálovou stereo hudbu vytvářenou pomocí v té době oblíbené FM syntézy; jeho schopnosti zhruba odpovídají dvojici již popsaných zvukových čipů AY-3–8910.

obr

Obrázek 11: Počítač SAM Coupé.

Grafické možnosti tohoto počítače byly na velmi dobré úrovni a tvořily určitý přechod mezi osmibitovými počítači a počítači šestnáctibitovými. Programátorům byly dostupné celkem čtyři základní grafické režimy:

  • Grafický režim kompatibilní se ZX Spectrem o rozlišení bitmapy 256×192 pixelů a mapou 32×24 barvových atributů (16 barev). Časování při vykreslování však bylo oproti původnímu ZX Spectru odlišné.
  • Grafický režim s bitmapou o rozlišení 256×192 pixelů a mapou 32×192 atributů. To znamená, že pro každou osmici pixelů na řádku bylo možné zvolit jednu ze šestnácti barev popředí či pozadí a původní atributové bloky 8×8 pixelů se „smrskly“ na obdélník 8×1 pixel.
  • Grafický režim o rozlišení 256×192 pixelů, každý pixel může nabývat jedné ze čtyř barev a pro každý řádek lze vybrat šestnáct barev z celkového počtu 128mi barev. V tomto režimu je kapacita framebufferu největší, čemuž ovšem odpovídají i jeho možnosti.
  • Textově-grafický režim 512×192 pixelů (znakově cca 85 znaků na 24 řádků), každý pixel může opět nabýt jedné ze čtyř barev
obr

Obrázek 12: Na SAM Coupé existovala i známá hra Lemmings…

Celkem bylo možné zobrazit 128 barev, pro každý obrazový řádek se totiž barvová paleta dala přepínat. Dokonce bylo možné pro každý obrazový řádek změnit grafický režim (přes obvod ASIC, konkrétně jednalo o čip Motorola MC 1377P), podobně jako u osmibitových domácích počítačů firem Atari a Commodore. Pro zpětnou kompatibilitu bylo možné využít grafický režim původního ZX Spectra, tj. bitmapu o rozlišení 256×192 pixelů s barvovými atributy pro blok o velikosti 8×8 pixelů. Vzhledem k tomu, že se časování při vytváření obrazu od původního Spectra odlišovalo, nebylo například možné spustit některé hry, popř. je bylo nutné vhodným způsobem upravit.

obr

Obrázek 13: … stejně jako Prince of Persia.

8. Odkazy na Internetu

  1. World of Spectrum
    http://www.wor­ldofspectrum.or­g/
  2. ZX Spectrum – dokumentace
    http://www.wor­ldofspectrum.or­g/documentati­on.html
  3. The World of Spectrum FAQ
    http://www.wor­ldofspectrum.or­g/WoSFAQ.html
  4. Sinclair QL homepage
    http://www.dil­wyn.me.uk/
  5. Wikipedia CZ: Sinclair QL
    http://cs.wiki­pedia.org/wiki/Sin­clair_QL
  6. Wikipedia EN: Sinclair QL
    http://en.wiki­pedia.org/wiki/Sin­clair_QL
  7. Sinclair QL – ?
    http://bruxy.reg­net.cz/zxs/ql­.html
  8. Popis počítače Sinclair QL
    http://www.sot­hius.com/hyper­txt/welcome.html?sin­clairql.html
  9. Sinclair QL Peripherals
    http://www.bi­narydinosaurs­.co.uk/Museum/Sin­clair/ql/addon­s.php
  10. SAM Coupé
    http://bruxy.reg­net.cz/zxs/sam­.html
  11. Wikipedia EN: SAM Coupé
    http://en.wiki­pedia.org/wiki/Sam_Cou­pe
  12. Emulátor ZX Spectra napsaný v Javě
    http://www.zzspec­trum.org/
  13. DOOM game on ZX Spectrum
    http://www.you­tube.com/watch?v=3v7cFGn­euaw&feature=re­lated
  14. A Short History of Computer Graphics
    http://cs.fit­.edu/~wds/clas­ses/graphics/His­tory/history/his­tory.html
  15. ZX Spectrum Graphics Modes
    http://gfxzone­.planet-d.net/articles/zx_spec­trum_graphics-article01.html

9. Obsah následující části seriálu

V následujících třech částech seriálu o architekturách počítačů budou popsány grafické schopnosti slavných osmibitových domácích počítačů vyráběných firmami Atari, Commodore a Apple. Všichni tři zmínění výrobci své stroje osadili osmibitovým mikroprocesorem MOS 6502, který byl navržený Chuckem Peddlem (zajímavé je, že tyto mikroprocesory se dodnes, samozřejmě v inovované podobě, vyrábí). Zatímco počítače Atari byly vybaveny dvojicí „grafických“ čipů nazvaných ANTIC a GTIA (ANTIC měl dokonce i vlastní instrukční sadu, takže je v několika ohledech předchůdcem moderních GPU), v počítačích Commodore se o generování grafického obrazu staral jediný čip VIC II, který podporoval jak dva grafické režimy (takzvaný multicolor a hi-res), tak i vykreslování spritů, kterými bylo možné pohybovat v horizontálním i vertikálním směru (na Atari se pohyb spritů ve vertikálním směru řešil přesouváním dat v paměti, možná právě proto se na těchto počítačích setkáme s hrami, kde se hráči a jejich protihráči pohybují především v horizontálním směru).

obr

Obrázek 14: Hra International Karate spuštěná v emulátoru osmibitového počítače Atari.

ict ve školství 24

Pro grafický čip VIC-II bylo vymyšleno poměrně velké množství různých triků, pomocí nichž se například mohl zvýšit celkový počet barev na obrazovce, provádět vykreslování i do okrajů obrazovky („otevření“ okraje), zobrazit na jedné obrazovce větší počet spritů, než bylo podle původní dokumentace možné i mnoho dalších více či méně originálních efektů. Mnoho grafických efektů je možné provádět i s čipy ANTIC a GTIA – kromě zvýšení rozlišení ve vodorovném i svislém směru se taktéž dal zvýšit počet maximálně zobrazitelných barev, provádět jemné skrolování obrazu do všech stran, zobrazit větší počet spritů (popř. vícebarevné sprity) atd. Kromě možností čipů ANTIC, GTIA a VIC II budou popsány i první počítače firmy Apple, především slavný (alespoň v USA) počítač Apple II, který pro mnoho lidí představoval přechod mezi domácími a osobními (kancelářskými) počítači, zejména díky prvním kancelářským aplikacím – textovým procesorům a tabulkovému kalkulátoru VisiCalc.

obr

Obrázek 15: Hra International Karate na Commodore C64.

Autor článku

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