Obsah
1. Grafika na osmibitových počítačích firmy Sinclair
2. Generování obrazu na počítači ZX80
3. Osmibitový počítač ZX81
4. Počítač ZX Spectrum
5. Základní parametry ZX Spectra
6. Grafický režim ZX Spectra
7. Odkazy na Internetu
8. Obsah další části seriálu
1. Grafika na osmibitových počítačích firmy Sinclair
Osmibitové domácí počítače firmy Sinclair způsobily po svém uvedení na trh poměrně významnou revoluci v chápání výpočetní techniky. Byly to totiž – alespoň v Evropě – počítače, které si mohl díky své nízké ceně pořídit téměř každý a právě na základě popularity těchto systémů přestali lidé vnímat počítače jako drahé, velké a nepraktické skříně umístěné ve výpočetních centrech. Navíc se po hardwarové stránce jednalo o relativně jednoduché, i když – co se týče funkce – poměrně sofistikované systémy, takže je bylo velmi snadné „klonovat“ (vyrábět kopie), což sice nebylo ve všech případech legální, ale zcela jistě to zapříčinilo velkou popularitu těchto počítačů i programátorskou podporu prakticky po celém vyspělém světě, včetně tehdejšího východního bloku. V bývalé ČSSR se vyráběly minimálně dva klony ZX Spectra – Didaktik Gama (s větší kapacitou paměti a originální ULA) a Didaktik M (paměť stejná jako původní Spectrum, ovšem se Sovětským ULA) – které byly dokonce oproti originálu vylepšené, například vyšší kapacitou operační paměti, snáze použitelnou klávesnicí či zabudováním disketové jednotky (počítačům vyráběným v ČSSR bude věnován samostatný článek). V následujících kapitolách si popíšeme jak způsob tvorby grafiky na původních mikropočítačích ZX80 a ZX81, tak i grafiku na slavném ZX Spectru a jeho následovnících.
Obrázek 1: Dobová reklama na mikropočítač ZX81, jehož cena (bez periferních zařízení) byla menší než 100 liber, takže se spolu se ZX80 jednalo o nejlevnější skutečně programovatelný počítač na trhu. I přes některé nedostatky se tento mikropočítač stal velmi oblíbený a připravil cestu pro svého slavného nástupce – ZX Spectrum.
2. Generování obrazu na počítači ZX80
Prvním skutečným počítačem vyráběným firmou Sinclair Research, byl domácí osmibitový počítač ZX80, jenž byl na trh uveden v lednu 1980 – odtud je ostatně odvozen i jeho název. Cena počítače v základní výbavě s 1 kB RAM byla rovna 99,95 librám (jednalo se o cenu stavebnice, protože již sestavený počítač překročil svou cenou 100 liber). Po hardwarové stránce šlo o velmi jednoduchý systém s pouhými osmnácti čipy, včetně mikroprocesoru a pamětí DRAM i ROM. V základní konfiguraci byl ZX80 vybaven pouhým jedním kilobajtem operační paměti, kterou bylo možné rozšířit až na 16 kB, pamětí ROM o kapacitě 4 kB, jenž obsahovala interpret poměrně jednoduchého jazyka Basic a mikroprocesorem Zilog Z80A s hodinovou frekvencí 3,25 MHz (od této frekvence je odvozeno generování video signálu). Program bylo možné zaznamenat na kazetu či pásku přes externí magnetofon, podobně jako u dalších osmibitových počítačů (disketové jednotky byly na začátku osmdesátých let minulého století poměrně drahé, nepočítáme-li ovšem slavnou disketovou jednotku pro Apple-II zkonstruovanou Stevem Wozniakem).
Obrázek 2: Domácí osmibitový mikropočítač ZX80. V průběhu jediného roku, kdy byl tento počítač vyráběn, se prodalo cca 70000 kusů, což je na tehdejší dobu velmi vysoké číslo.
V předchozí části tohoto seriálu jsme si kromě dalších informací o grafických subsystémech počítačů řekli, že osmibitové domácí mikropočítače Sinclair ZX80 a Sinclair ZX81 pracovaly pouze v textovém režimu, v němž bylo na jedné textové řádce uloženo maximálně 32 znaků a celkový počet řádků byl roven 24 (slovo „maximálně“ jsem použil záměrně, protože se délka jednotlivých řádků mohla lišit, jak si řekneme v navazujících odstavcích). Vzhledem k tomu, že prvních osm znaků ze speciální znakové sady tohoto počítače obsahovalo čtverce a obdélníky se stranou rovnou jedné polovině šířky znaku a k dispozici byly i inverzní varianty znaků (viz třetí obrázek), bylo možné z těchto šestnácti znaků poměrně jednoduše sestavit bitmapu o rozlišení 64×48 „čtverečků“ (ve skutečnosti byl každý „čtvereček“ představován maticí o velikosti 4×4 pixely). Potřebná kapacita paměti pro takto vytvořenou „bitmapu“ dosahovala až 768 bajtů, což představuje celé tři čtvrtiny kapacity operační paměti původního ZX80, které bylo, jak jsme si již řekli v předchozím odstavci, ve své základní verzi vybaveno pouhým jedním kilobajtem operační paměti.
Obrázek 3: Znaková sada mikropočítače ZX80 a taktéž i mikropočítače ZX81, která byla uložena v paměti ROM, jejíž celková kapacita dosahovala 4kB resp. 8kB (nejvíce místa zabral interpret jazyka Basic). S využitím znaků z této sady bylo možné vykreslit i poměrně věrohodné obrázky a složité herní scény. Povšimněte si, že tato znaková sada neodpovídá ASCII a navíc obsahuje pouze 64 znaků; dalších 64 znaků jsou jen inverzní varianty.
Programátoři však záhy přišli na způsob, jakým je možné programově ovládat vykreslování a teoreticky tak dosáhnout maximálního hardwarově podporovaného rozlišení na tomto počítači – 256×192 pixelů (ovšem zobrazovala se pouze černá a šedá barva, podpora pro barevný výstup byla až doménou slavného ZX Spectra). V následujícím textu si proto popíšeme jak způsob „standardního“ vytváření obrazu na tomto počítači, tak i různé triky, které je možné se ZX80 provádět. Způsob vykreslování je u počítače ZX80 velmi poměrně nápaditý, neboť se návrhářům tohoto systému podařilo snížit počet nutných integrovaných obvodů na naprosté minimum a navíc je jak pro uložení zobrazovaných dat, tak i vlastního programu (psaného většinou v BASICu) využito pouze nepatrné množství paměti – pouhý jeden kilobajt. Myšlenka uložení obrazových dat je poměrně jednoduchá – vzhledem k tomu, že výpis zdrojového kódu BASICového programu většinou nezabere celý textový řádek (32 znaků), jsou jednotlivé řádky uloženy v paměti za sebou jako řetězce o různé délce (samotný BASICový program je dokonce ještě mnohem kratší, neboť v paměti jsou uloženy pouze tokeny jednotlivých příkazů – ve své podstatě jde o předchůdce dnešních bajtkódů).
Obrázek 4: Všechny objekty v této hře jsou vykresleny pomocí semigrafických znaků nabízených mikropočítačem ZX80. Například kola děl jsou vytvořena z inverzních nul, střely jsou představovány čtverečkem o rozměrech 4×4 pixely (viz první znaky ve znakové sadě) apod.
Kódy znaků uložených v řetězcích různé délky (každý řetězec byl od dalšího řádku oddělen znakem NEWLINE) byly ve vykreslovací rutině postupně načítány mikroprocesorem a na základě právě aktuálního vykreslovaného obrazového mikrořádku (znaky byly vysoké přesně osm mikrořádků, termínem mikrořádek je zde myšlena jedna obrazová linka na televizní obrazovce) byl z paměti ROM načten bajt představující osm pixelů daného znaku. Výpočet adresy s uloženým bitovým vzorkem byl jednoduchý – kód znaku se vynásobil 64 (což lze provést bitovým posunem) a k této hodnotě se přičetlo číslo vykreslovaného mikrořádku modulo 8. Samotné načtení bitů sice inicioval mikroprocesor (vystavil na adresovou sběrnici adresu vypočtenou výše uvedeným způsobem), ovšem skutečný obsah získaný z paměti ROM byl přenesen do pomocných obvodů, které tyto bity zpracovaly – celou osmici bitů převedly na video signál, tj. černou či bílou (šedou barvu). Tímto způsobem se načetly a vykreslily všechny osmice bitů ležících na jednom mikrořádku. Vzhledem k tomu, že na jednom textovém řádku je uloženo 32 znaků, je jeden mikrořádek tvořen 32×8=256 bity (pixely).
Obrázek 5: Další hra využívající originální znakovou sadu počítače ZX80.
Vzhledem ke konstrukci ZX80 sice nebylo možné, aby adresa, ze které se bity představující mikrořádek znaku načítají, ukazovala do paměti RAM (nelze si tedy vytvořit uživatelsky definovanou sadu znaků), ale s využitím šikovné manipulace s registrem I, který ukazoval na tabulku znaků, mohl být každý mikrořádek znaku přečten z jiné oblasti ROM, čehož některé hry využívaly pro zvýšení rozlišení při vykreslování bitmap až na teoretickou hodnotu 256×192 pixelů. Ovšem ne všechny bitové kombinace lze zobrazit, protože znaková sada obsahuje pouze 64 znaků a jejich inverzních protějšků – na každém mikrořádku lze tedy zvolit pouze jednu ze 128 kombinací, i když pro osm bitů (pixelů) existuje kombinací 256.
Obrázek 6: Většina screenshotů těchto her byla získána pomocí emulátorů ZX81 – viz odkazy uvedené v předposlední kapitole.
3. Osmibitový počítač ZX81
Následovníkem výše popsaného domácího počítače ZX80 byl mikropočítač ZX81, který byl na trh uveden počátkem roku 1981. Tento počítač byl obchodně velmi úspěšný, jen za prvních deset měsíců se prodalo čtvrt milionu kusů, celkově bylo vyrobeno a prodáno přes jeden milion těchto systémů. Ve své podstatě se jedná o vylepšení ZX80, protože základní funkcionalita zůstala zachována. Osmnáct samostatných integrovaných obvodů se sloučilo do jednoho čipu ULA (Uncomitted Logic Array), kapacita paměti ROM se zdvojnásobila na 8 kB (zejména došlo k přidání rutin pro výpočty v systému pohyblivé řádové čárky) a i kapacita operační paměti dosahovala namísto původního jednoho kilobajtu 16 kB až 64 kB (ovšem adresovatelných bylo maximálně 56 kB, neboť zbylá část adresového prostoru byla vyhrazena pro paměť ROM). Taktéž byla vylepšena klávesnice i samotný obal, ve kterém je mikropočítač umístěn. Nás však v tomto článku zajímají především grafické schopnosti tohoto počítače. Princip zobrazování sice zůstal stejný, jako v případě ZX80, ale uživatelé se dočkali jednoho poměrně zásadního vylepšení.
Obrázek 7: Domácí osmibitový mikropočítač ZX81
Tímto vylepšením bylo zavedení takzvaného režimu SLOW. Původní režim zobrazování (FAST) popsaný v předchozí kapitole měl jednu nevýhodu – vzhledem k tomu, že zobrazování řídil samotný mikroprocesor, byla v době běhu programu obrazovka černá, protože celý jeho výpočetní výkon byl spotřebován pro interpretaci a spouštění jednotlivých příkazů. Taktéž stisk klávesy znamenal přerušení vykreslovací rutiny, které se projevilo viditelným poblikáváním. Zavedením režimu SLOW se cca 75% strojového času spotřebovalo na vykreslování obrazu a pouze zbylých 25% bylo možné využít pro běh programu – volné strojové cykly se nacházely pouze v čase vykreslování horního a spodního černého okraje. Mezi režimy FAST a SLOW se bylo možné přepínat, mnoho uživatelů dokonce používalo téměř výhradně režim FAST, a to i v době psaní programu (právě tehdy docházelo k nepříjemnému poblikávání).
Obrázek 8: Osazený plošný spoj mikropročítače ZX81. Počet čipů je zde skutečně minimální.
Obrázek 9: Schéma zapojení počítače ZX81. Povšimněte si, jakým způsobem je propojen mikroprocesor s čipem ULA i paměťmi RAM a ROM. Na sběrnici je napojena i osmice rezistorů, které nahrazují řadič sběrnice – ULA tak může snadno číst kódy znaků z paměti ROM, aniž by bylo zapotřebí procesor fyzicky odpojit od sběrnice.
4. Počítač ZX Spectrum
Pravděpodobně nejslavnějším počítačem firmy Sinclair Research je ZX Spectrum a jeho následovníci, tj. modely ZX Spectrum+ a ZX Spectrum 128 i jejich rozličné varianty. Původní ZX Spectrum („gumák“) bylo nabízeno ve dvou variantách. Levnější varianta, která byla prodávána za 125 liber, obsahovala 16 kB operační paměti, zatímco varianta dražší (nabízená za 175 liber) měla celých 48 kB RAM. Levnější model bylo možné za cca 60 liber upgradovat, tj. rozšířit paměť o 32 kB RAM. Dalším modelem bylo ZX Spectrum+, které bylo vybaveno klávesnicí s kurzorovými tlačítky i Resetem. Udává se, že po uvedení ZX Spectra na trh se každý týden prodalo až 15 tisíc kusů tohoto počítače. Velká popularita mezi uživateli se samozřejmě odrazila i v počtu aplikací – v době největší slávy ZX Spectra bylo vytvořeno více než 10000 her a dalších programů, ovšem aplikace pro něj vznikají i nyní – především se jedná o nové hry (například existuje i Doom pro Spectrum) a dema.
Obrázek 10: Slavný „gumák“ ZX Spectrum.
5. Základní parametry ZX Spectra
Všechny typy počítačů ZX Spectrum se v několika ohledech lišily od původních ZX80 a ZX81, i když základ, tj. mikroprocesor Zilog Z80, byl použitý ve všech počítačích firmy Sinclair (zde se jeho frekvence zvýšila na 3,5 MHz). Především došlo k rozšíření paměti ROM na 16 kB, takže bylo možné použít vylepšenou verzi Basicu, která obsahovala nové příkazy i funkce. Taktéž byl vylepšený způsob záznamu dat na magnetofon. Ale největší novinkou, která velkou měrou přispěla k popularitě ZX Spectra, byla upravená verze čipu ULA, jenž se mimo dalších oprací starala i o generování obrazu, které již bylo ve větší míře nezávislé na mikroprocesoru, než tomu bylo u počítačů ZX80 a ZX81. ZX Spectra taktéž začaly používat klasický framebuffer s jeho – pro tento počítač typickým – rozdělením na dvě poloviny – bitmapu o rozlišení 256×192 pixelů a atributovou paměť s 32×24 bloky, v nichž bylo možné, nezávisle na ostatních blocích, měnit barvu popředí a pozadí.
Obrázek 11: Některé hry dokázaly i přes omezení grafického režimu ZX Spectra vykreslit vícebarevné objekty, i když při jejich překryvu docházelo k nežádoucím změnám barev.
6. Grafický režim ZX Spectra
Paměťový prostor ZX Spectra, tj. 64 přímo adresovatelných kilobajtů, byl rozdělen na tři části. Na začátku se nacházela oblast paměti ROM o velikosti 16 kB s interpreterem jazyka Basic, rutinami pro práci v pohyblivé řádové čárce apod. Za pamětí ROM bylo 16 kB RAM, do které měl přístup jak mikroprocesor, tak i čip ULA (který zde měl uložený framebuffer) a poslední oblast o kapacitě 32 kB byla dostupná pouze mikroprocesoru. V dalším textu se budeme zabývat pouze šestnáctikilobajtovou oblastí paměti RAM, do které měl přístup jak mikroprocesor, tak i čip ULA. Z hlediska programátora byla tato paměť „pomalejší“ než zbylých 32 kB, což mj. znamenalo, že se do této oblasti neumisťovaly časově náročné rutiny, například podprogramy pro přehrávání zvuků či práci s magnetofonem. Čip ULA si totiž postupně načítal hodnoty jednotlivých pixelů i příslušné barvové atributy těchto pixelů při generování video signálu.
Obrázek 12: U protihráčů ve hře Starquake se objevuje známé „překrývání“ barev u postaviček, které jsou blízko sebe. Viz dva protihráči zobrazení vpravo uprostřed.
Zobrazovaná bitmapa měla rozlišení 256×192 pixelů, tj. její velikost lze snadno vypočítat: 256×192/8=6144 bajtů. Každý pixel byl v této bitmapě reprezentován jediným bitem, kterým se volilo, zda se jedná o pixel patřící k popředí či pozadí. Barvy popředí a pozadí nemohly být nastaveny pro každý pixel zvlášť, ale pouze pro celý blok 8×8 pixelů. Pro tento blok se v jednom bajtu zvaném atribut ukládaly jak informace o popředí a pozadí (k dispozici bylo osm základních barev, tj. jejich indexy bylo možné uložit ve třech bitech), tak i intenzita barev (vyšší/nižší) a příznak, zda má celý blok blikat, tj. měnit barvu popředí a pozadí. Atributů bylo celkem 32×24=768, takže celková kapacita paměti pro uložení celého obrázku byla rovna 6144+768=6912 bajtům, což zhruba odpovídá typické kapacitě framebufferů u domácích osmibitových počítačů (větší framebuffery byly nepraktické, protože zabíraly velkou část drahé operační paměti a taktéž tehdejší mikroprocesory by musely provádět přesuny objemnějších bloků dat při změně obrazu). Přesné časování čipu ULA při vykreslování obrazu si vysvětlíme v navazující části tohoto seriálu. Frekvence mikroprocesoru, tj. 3,5 MHz totiž nebyla zvolena náhodně – přesně odpovídá počtu taktů nutných pro generování video signálu pro televize pracující v normě PAL.
Obrázek 13: Na obrázku hry Barbarian je patrné, jakým způsobem je obrazová paměť organizovaná, především omezení daná atributy o velikosti 8×8 pixelů.
7. Odkazy na Internetu
- ZX80 – fotka plošného spoje
http://www.nvg.ntnu.no/sinclair/computers/zx80/images/zx80_pcb_jpg.jpg - ZX80 Circuit Diagram (fotografie)
http://woodworths.com/EBay_Auctions/Auction11.htm - ZX80 Circuit Diagram (lepší kvalita než na předchozím odkazu)
http://www.nvg.ntnu.no/sinclair/computers/zx80/images/zx80_circuit.gif - ZX80 Photos
http://www.nvg.ntnu.no/sinclair/computers/zx80/zx80_photos.htm - Emulátor ZX Spectra napsaný v Javě
http://www.zzspectrum.org/ - ZX81/ZX80 Emulator napsaný v Javě
http://www.zx81stuff.org.uk/zx81/jtyone.html - Daves Old Computers – Sinclair ZX80/81 – Timex 1000
http://www.classiccmp.org/dunfield/sinclair/index.htm - New games for ZX81
http://www.armchairarcade.com/neo/taxonomy/term/233 - RetroThing – ZX81
http://www.retrothing.com/2008/04/build-your-ow-2.html - Sinclair ZX81 Chopperdrop 3000
http://www.youtube.com/watch?v=MY6TGQEvvX4 - DOOM game on ZX Spectrum
http://www.youtube.com/watch?v=3v7cFGneuaw&feature=related - Trader ZX81 part 1
http://www.youtube.com/watch?v=FhElddXeLDU&feature=fvsr - ZX81 forever
http://www.zx-team.de/andre/ - ZX81 Caverns – předělávka hry pro ZX81
http://www.martinruffe.co.uk/view.aspx?id=36 - Steven's ZX81 Computer – ukázky programů pro ZX81 a další informace
http://www.geocities.com/CapeCanaveral/Hangar/1969/zx81/ - Sinclair ZX81 FAQ
http://www.honneamise.u-net.com/zx81/zx81faq.html
Obrázek 14: Při pečlivé práci je možné omezení představovaná atributy obejít, jak dokazuje tato bitmapa pro ZX Spectrum.
8. Obsah další části seriálu
V následující části tohoto seriálu dokončíme popis grafických možností ZX Spectra, tj. zaměříme se na různé triky, pomocí nichž bylo možné zvýšit počet barev v obraze, kreslit na okrajích obrazovky či zvýšit počet barev v jednotlivých blocích (atributech). Taktéž si popíšeme další počítače firmy Sinclair (popř. Amstrad, která celou počítačovou divizi koupila), zejména počítače Sam Coupé a Sinclair QL.