PORTY, BAJTY, OSMIBITY

Počítače na koleni

Martin Malý

Vydavatel:

CZ.NIC, z. s. p. o.

Milešovská 5, 130 00 Praha 3

Edice CZ.NIC

www.nic.cz

1. vydání, Praha 2019

Kniha vyšla jako 21. publikace v Edici CZ.NIC.

ISBN 978-80-88168-39-3

© 2019 Martin Malý

Toto autorské dílo podléhá licenci Creative Commons (http://creativecommons.org/licenses/by-nd/3.0/cz/), a to za předpokladu, že zůstane zachováno označení autora díla a prvního vydavatele díla, sdružení CZ.NIC, z. s. p. o. Dílo může být překládáno a následně šířeno v písemné či elektronické formě na území kteréhokoliv státu.

ISBN 978-80-88168-39-3

—  Martin Malý

Porty, bajty, osmibity

Počítače na koleni

—  Edice CZ.NIC

Poděkování

Poděkování

Děkuji svému nakladateli za důvěru a péči, věnovanou této knize.

Děkuji všem, kteří mi s psaním knihy fandili. Dodávali mi sílu, když bylo psaní nekonečné.

Děkuji všem, co přečetli rukopis a přispěli poznámkami. Díky nim je kniha o něco jasnější a srozumitelnější.

Děkuji designérům Davidu Švejdovi a Jakubu Goldmannovi za návrh a vypracování grafických inzerátů ve stylu počítačových časopisů z 80. let.

Děkuji Míše, že se mnou proces psaní vydržela. Už podruhé.

Předmluva vydavatele

Předmluva vydavatele

Vážení čtenáři,

dostává se vám do rukou druhá kniha od Martina Malého, která je, dá se říct, volným pokračováním jeho publikace Hradla, volty, jednočipy. Jak napovídá již název této knihy – Porty, bajty, osmibity, autor popisuje své zkušenosti s osmibitovými mikrokontrolery a počítači a pokouší se je předat svým čtenářům.

Osobně jsem se s osmibitovými mikrokontrolery, konkrétně s PIC 16F84 a Atmel 8051, poprvé setkal v druhém ročníku na střední škole. Dodnes si pamatuji, jak jsme zápasili se vstupními a výstupními porty (a několik jich přitom poslali do křemíkového nebe), snažili se pochopit přímé a nepřímé adresování a nakonec i rozběhnout resetovatelné stopky s pamětí za pomoci sedmisegmentových displejů a externí paměti.

Většina úloh by se dnes dala přirovnat k dětskému hraní, ale nás to bavilo a pro mnohé to byla neocenitelná lekce, která nám poskytla základy pro naši další práci při vývoji hardwarů i softwarů. V dnešní době si samozřejmě můžete koupit Arduino a začít programovat v „céčku“ nebo jiném vyšším jazyce. Budete tak ale ochuzeni o úplné základy, nastavování jednotlivých bitů registrů a psaní kódu v assembleru. Ze své praxe mohu říct, že se vám to může někdy dost hodit.

Právě tato kniha vám může přiblížit svět osmibitových mikrokontrolerů a počítačů. Svět, ve kterém si musíte vše udělat a ošetřit sami, ale odměnou vám bude váš vlastní kus hardwaru, na kterém bude běžet váš program. A to je pocit k nezaplacení.

Přeji všem hezkou četbu a mnoho úspěchů při tvorbě vlastních elektronických aplikací.

Petr Bílek, CZ.NIC

Praha, 14. února 2019

Předmluva

Předmluva

Nevím jak vy, ale já relaxuju u her. Sednu si na gauč, nebo lehnu do postele, vezmu do ruky ovladač od XBoxu nebo PlayStationu, nahraju nějakou hru a hraju.

Po čase hraní, když už se nemusím soustředit na to, jaká tlačítka mám mačkat a co mám přesně dělat, se mi ve volných chvílích, když moje postava někam běží nebo jede nebo poslouchá nekonečně dlouhé nepřeskočitelné monology jiných postav, v hlavě rozběhnou úplně jiné myšlenky.

Většinou si říkám, že bych měl dodělat ten engine na psaní textových her, co mám rozdělaný už dva roky, pak chvilku přemýšlím nad tím, co tam ještě dodělat, chvilku si představuju, jak to bude hezké, až to bude hotové, pak si říkám, že bych měl taky dodělat ten kurz Unity, co mám rozkoukaný a zaplacený, no a konečně mi fantazie sklouzne k tomu, že bych vlastně chtěl mít ten svůj osmibit a pro něj si napsat pár her.

Abychom si rozuměli – vlastních osmibitů mám plné skříně: Spectra, Commodory, Atari, i nějaké podivnější a obskurnější značky a typy, ale já bych rád vlastní. Jako že víc vlastní. Můj. Mnou navržený a postavený.

Ano, v žebříčku kutilských projektů je myšlenka „navrhnout si a postavit vlastní osmibitový počítač a psát pro něj programy“ někde hodně… no… jak by řekla televizní věštkyně Jolanda: Je to hodně někde! Obvykle kutilský projekt aspoň předstírá, že k něčemu bude, že bude plnit nějakou užitečnou funkci. Že třeba bude měřit teplotu a hlídat garáž a zalévat květiny. Ovšem vlastní osmibitový počítač, to je něco tak moc samoúčelného, jak vám na požádání vysvětlí každý racionálně uvažující technik.

Jenže když jste amatér, tak víte, že si prostě nemůžete pomoct. Vy máte ty věci fakt rádi! A chcete je dělat, i když racionálno říká: Budeš jediný s takovým počítačem. No dobře, budete možná tři: Ty a dva blázni z internetu, co si ho postavěj’ taky. Tolik času tím strávíš, tolik času spálíš programováním, a k čemu to bude? No ne, vážně: K čemu to bude?

Je to úplně stejná otázka, jakou slyší každý hráč her. K čemu to je? A myslím, že i odpověď bude stejná: je to pro nás zábava, příjemná činnost, a smysl to má jako každý jiný podobný koníček. Děláme něco, co máme rádi, a baví nás to. Něco se při tom naučíme, získáme nějaké ty dovednosti, ale hlavně: je to mnohem lepší zábava, než civět na televizi.

Gordon Freeman v té mojí televizi právě prochází Ravenholmem. Když jsem hrál tuhle část Half-Life 2 poprvé, úplně jsem ji nenáviděl, nedokázal jsem ji projít, pořád mě něco někde zabíjelo. Dneska už to hraju tak zlehka, zkouším různé přístupy, jako „ani jeden výstřel“ nebo „co nejrychleji k cíli“ nebo „tuhle pasáž projdu extrémně opatrně“. Jak říkám – relax pro hlavu, takže se tak na dvacet procent věnuju hře, a zbytek vědomé kapacity se, nebržděn racionalitou, oddává radostným představám, v nichž tančí úplně amatérské počítače, ze kterých čouhají dráty a smrdí křemík, a přemýšlí nad tím, jestli bude lepší implementovat BASIC, nebo FORTH, a jestli bude lepší procesor 6502 nebo Z80 – ten je sice známější, ale zase složitější. A co třeba 6809?

Výstup udělám na televizi, nebo na nějaký miniaturní displej? A jak to namapuju?

A co klávesnice? Tak, PS/2 jde vždycky, ale co nějaká víc vintage? Co třeba vzít starou od nějakého Commodora, na eBay jich jsou spousty. Nebo co třeba vzít nějakou starou českou Consuláckou? Nebo co si udělat vlastní membránovou, jako mělo JPR-1? Nebo vlastní z tlačítek? A na 3D tiskárně vytisknout hmatník?

Nebo konzoli! Normálně herní konzoli, čtyři tlačítka do kříže, dvě akční, mezi to displej… A emulátor si k tomu udělám, aby se snadno vyvíjely programy! Na 3D tiskárně kryt vytisknu. Anebo použiju joystickový modul. Jako procesor klidně Arduino Nano, udělám si na to plošný spoj…

Po chvíli hru vypnu a z ničeho nic kreslím plošný spoj a posílám ho do výroby. Hrozně se na to těším, bude to fajn, budu mít herní konzoli, kterou nemá nikdo jiný, a nebude pro ni jediná hra!

STOP!

Pokud vám to připadá jako ten největší nesmysl, přestaňte číst právě teď, knihu někomu věnujte, odkaz smažte, zapomeňte… Není to pro vás.

Ale pokud si říkáte „chci taky jeden plošný spoj, budeš mít navíc?” – jste moji čtenáři! Pojďte dál, řekneme si něco o starých procesorech, o osmibitových počítačích, o tom, jak se vlastně programují, jak fungují uvnitř, ukážeme si, jak sestavit počítač v duchu těch starých časů, ukážeme si i pár modernějších triků, jako jsou malé barevné displeje, a hlavně: pár kousků si postavíme! A budou to počítače jako byly kdysi: s výstupem na terminál, černobílé, s malou hroznou klávesnicí a pípátkem na zvuk! Pojďte, pojďte!

Konvence

V této knize se podržím následujících konvencí:

 Hexadecimální hodnoty budu v textu zapisovat ve tvaru ABCDh – tedy bez počáteční nuly a se suffixem „h“. Tam, kde to bude mít speciální význam, např. u výpisu v jazyce C, použiju samozřejmě odpovídající zápis 0xABCD. U výpisu zdrojového kódu budu zase používat variantu s počáteční nulou.

 Pro negované signály budu používat úvodní lomítko, tedy např. /RESET. Nebudu používat ani nadtržení, ani suffix „B“, ani prefix či suffix „n“.

1  Slavné domácí osmibity 80. let

1  Slavné domácí osmibity 80. let

1.1  Domácí počítač

Čím jiným začít tuto knížku, než vyprávěním o slavných hvězdách let dávno minulých, z dob, kdy každý domácí počítač měl jiný systém a kompatibilita byla nanejvýš mezi sousedními modely jedné řady jednoho výrobce. Pravděpodobně jste některý z těchto počítačů měli doma, a možná ho stále máte. Bylo to Spectrum? Gumák, nebo Plusko? Nebo Atárko? Nebo snad Commodore, dokonce s disketovkou? Nebo Sharp, či snad Sord?

Na začátku 70. let stále ještě platilo, že počítač = sálové zařízení. Nejnovější výkřiky techniky pak byly velké jako skříň. Jejich srdcem byly procesory, postavené ze samostatných modulů, většinou na jedné desce.

Procesor, coby základní řídicí jednotka, obsahuje jednak část, která řídí běh programu a vykonávání instrukcí (řadič), a jednak část, která zpracovává data (aritmeticko-logická jednotka, ve zkratce ALU, a k ní sada registrů, v nichž se data uchovávají při zpracování). K procesoru byla připojena paměť, v níž je uložený program a zpracovávaná data, a taky nějaké periferie, což byly všechny ty terminály, klávesnice, snímače děrných pásek a štítků, magnetopáskové jednotky, diskové jednotky…

Ve stejné době vznikly první mikroprocesory, tedy integrované obvody, které na jednom čipu (či několika málo čipech) obsahovaly řadič instrukcí, výkonnou jednotku, pracovní registry i aritmeticko-logickou jednotku. Poměrně rychle vznikly obvody 4004, 8008 a 8080 (vše Intel). Od vzniku procesoru 8080 se vlastně dá mluvit o začátku mikroprocesorové éry.

Intel nebyl samozřejmě sám, vznikaly i další procesory, a po poklesu cen a příchodu mikroprocesorů 6502 a Z80 začaly vznikat první počítače, které se vešly na stůl. Kromě profesionálních zařízení přišla i zařízení pro amatérské použití (Altair 8800) nebo dokonce plně amatérské konstrukce.

Amatér je samozřejmě slovo, které má hanlivý nádech, ale nezapomínejme, že jeho původ je ve slově amare, tedy milovat. Amatér je tedy vlastně člověk, který se oboru věnuje nikoli proto, že by ho živil, ale proto, že ho má rád. A v tomto významu prosím čtěte i výše zmíněné „amatérské konstrukce“.

První amatérské počítače se prodávaly jako stavebnice: deska tištěných spojů, sada součástek, spájejte si doma, IKEA hadr. Přesně v tomto stylu začala vyrábět své počítače garážová firma Apple – model Apple I byl právě taková stavebnice, kterou jste si za 500 USD koupili a spájeli doma (a pokud jste si ji schovali až dodneška, má hodnotu několik desítek tisíc dolarů).

Brzy ale přišly kompletní sestavené stroje, které jste si přinesli z obchodu, zapojili – a fungovaly. Nejslavnější jména té doby (hovoříme o konci 70. let) jsou Apple II, Commodore PET a TRS-80.

Obrázek 1: Apple I

Apple II se neprodával tak dobře jako další (například v jeho BASICu chyběla podpora pro desetinná čísla), ale prodával se delší dobu, takže úhrnem až do roku 1993, kdy se přestal vyrábět, prodala firma Apple přes čtyři miliony kusů tohoto počítače.

Commodore PET přišel s ikonickým designem plechové krabice se zabudovanou klávesnicí, kazetovým magnetofonem a černobílým displejem.

Obrázek 2: Commodore PET

Commodore oznámil poměrně brzy nové modely, a tak se různých modelů PETu prodal necelý milion.

Třetí slavný počítač té doby, TRS-80, používal procesor Z80, na rozdíl od předchozích dvou, které byly poháněné procesorem 6502. Zkratka TRS odkazuje na výrobce (Tandy) a distributora tohoto počítače (Radio Shack).

Obrázek 3: TRS-80

1.2  Druhá generace

Do druhé generace domácích počítačů promluvily i další firmy. V Atari vzali hardware svých herních konzolí, přidali k němu klávesnici, a tak vznikla slavná řada domácích osmibitů od Atari (400, 800, série XL, série XE). Commodore přepracovalo PET a vznikly počítače VIC-20 a veleúspěšný Commodore 64.

V Británii sir Clive Sinclair, který věřil kalkulačkám a směřoval spíš k vědeckému použití vlastních vynálezů, vlastně jako vedlejší produkt uvedl na trh nejprve počítačovou stavebnici MK14 s méně známým procesorem SC/MP (INS8060) a později slavnou sérii počítačů ZX: ZX80, ZX81 a ZX Spectrum.

Atari a Sinclair patřily k nejrozšířenějším počítačům v tehdejší ČSSR. U Atari to byly především modely 800XL a 130XE, od Sinclaira pak ZX81, ale především Spectrum (i Spectrum Plus, vídané i pod značkou „Delta“). Méně bylo Commodorů, Specter 128, počítačů Amstrad, Sharp MZ800 nebo Sord m5.

O počítačích ZX asi nemá smysl v české knize pro českého čtenáře psát podrobněji. Přesto alespoň pár slov.

Počítač ZX80 přišel s jednoduchou konstrukcí: deska včetně membránové klávesnice, paměť, procesor a několik integrovaných obvodů, které se spolu s mikroprocesorem staraly o zobrazování textu na černobílé televizi. Sinclairovi konstruktéři vymysleli velmi důmyslný trik, kterým dokázali zobrazovat text na televizi s minimem potřebných součástek. Na druhou stranu za to zaplatil uživatel, protože procesor většinu času sloužil jako čítač adres pro zobrazování, a pouze ve chvílích, kdy se nic nezobrazovalo, mohl počítat uživatelské úlohy.

Následovník ZX81 přinesl zásadní změnu. Koncepce zůstala stejná, ale naprostá většina integrovaných obvodů byla nahrazena jedním na míru vytvořeným zákaznickým čipem ULA SCL (Sinclair Custom Logic). Počítač tak obsahoval pouhých pět integrovaných obvodů – procesor, paměť RAM (2 čipy), paměť ROM a SCL. Díky tomu byl ZX81 menší a levnější. Jinak zůstal, snad s výjimkou drobného rozdílu v přerušovacím systému, funkčně shodný s předchůdcem.

Ale protože konkurence oznamovala počítače s barevným výstupem, tak i u Sinclairů připravovali vlastní barevný stroj. Dostal název ZX Spectrum a vývojáři vyšli z toho, co dobře znali.

Použili stejnou koncepci klávesnice (jen přes ni dali gumovou masku s tlačítky, která vysloužila Spectru přezdívku „gumák“), použili stejný procesor, zvětšili paměť z 8 kB ROM na 16 kB ROM, v základu místo jednoho kilobajtu statické RAM bylo 16 kilobajtů dynamické RAM, a konečně přepracovali zákaznický obvod tak, že dokázal generovat barevný obraz. Tentokrát už bez přispění procesoru, takže procesor mohl pracovat bez ohledu na potřeby zobrazování. Pouze pokud přistupoval k paměti ve stejné paměťové oblasti, jako byl displej, tak byl mírně zpomalován.

Kromě tří modelů počítačů ZX, z nichž každý je legendou sám o sobě, přispěl Sinclair k boomu domácích počítačů i zprostředkovaně: Sinclairův zaměstnanec Chris Curry nebyl spokojen s tím, jak Sinclair vede (spíš nevede) vývoj osobních počítačů, a tak odešel a založil si vlastní firmu Acorn. Po prvním jednodeskovém Acorn System 1 přišel počítač Acorn Atom, a po něm slavný počítač Acorn Proton, známější jako BBC Micro (britská veřejnoprávní síť BBC totiž vybrala tento počítač jako výukový počítač pro svůj kurz programování a číslicové techniky).

Po BBC Micro přišla i jeho levnější varianta Acorn Electron, ovšem pak nastala krize v polovině 80. let, mnohé značky nepřežily a Acorn se udržel jen díky svému novému počítači Archimedes a vlastnímu procesoru, nazvanému Acorn RISC Machine, ve zkratce ARM. Ten je tu s námi dodnes, i když v notně vylepšené podobě.

V polovině 80. let skončila éra domácích osmibitů: Commodore ani Atari už nepředvedly významnější zlepšení osmibitové série a představily své šestnáctibitové stroje Amiga a ST. Sinclair přechod na vícebitovou architekturu urychlil tak moc, že jeho Sinclair QL předběhl dobu, zaznamenal neúspěch a Sinclair nakonec svou značku prodal konkurentům od Amstradu (kteří do té doby vyráběli počítače řady CPC).

Obrázek 4: Acorn Proton, alias BBC Micro

1.3  Další slavní…

Sinclairovi lidé, kteří od něho na začátku 80. let odešli, mají na svědomí nejen firmu Acorn, ale třeba i počítač Jupiter Ace.

Obrázek 5: Jupiter ACE (fotografie autora Factor-h pod licencí CC-BY-SA)

Tento počítač připomíná na první pohled ZX Spectrum. Uvnitř je ale podobný spíš ZX81. Nejzajímavější na něm je fakt, že na rozdíl od ostatních počítačů té doby neměl Jupiter zabudovaný programovací jazyk BASIC, ale používal jazyk FORTH. A zase: pokud máte doma tento počítač, má hodnotu několika desítek tisíc.

Zatímco Acorn jsme tu aspoň trošku znali, jméno Tangerine Computer Systems znělo povědomě snad jen těm největším fandům. Možná někdo někde zahlédl název ORIC, nebo fotografii…

Přitom první počítač této firmy, nazvaný ORIC-1 a uvedený v roce 1983, rozhodně měl šanci zaujmout. Dodával se ve verzi s 16 kB RAM nebo s 48 kB RAM, uvnitř ho poháněl osvědčený 6502A, taktovaný na 1 MHz. Na rozdíl od Spectra 48 obsahoval speciální zvukový čip – známý AY-3-8912 (později použitý ve Spectru 128). Samozřejmostí byl zabudovaný BASIC…

I v ORICu byl použit zákaznický obvod ULA, který se staral o zobrazování ve dvou grafických módech, LORES a HIRES.

V Tangerine připravili vylepšené verze Atmos, Stratos a Telestratos, ale nakonec i je dostihl konec osmibitové éry. Jako zajímavý moment dodám, že firma vyvezla zhruba tisíc počítačů Atmos do tehdejší Jugoslávie a že v Bulharsku vyráběli klon Atmosu pod označením Pravec 8D.

Firma Tandy spolu s prodejcem RadioShack pod značkou TRS pokračovala v úspěšné sérii domácích počítačů, zahájené modelem TRS-80, a po několika modelových sériích tohoto černobílého počítače přišla s barevnou verzí, nazvanou „TRS-80 Color Computer“, zkráceně CoCo. V tomto typu opustila procesor Z80 a místo něj stroje CoCo poháněl procesor Motorola 6809. Což tedy znamenalo hlavně programovou nekompatibilitu s předchozími stroji. Počítače CoCo se dočkaly tří modelů (CoCo, CoCo 2 a CoCo 3), ten poslední se vyráběl až do roku 1991. Časem se pro ně objevily i operační systémy FLEX9 a OS-9 se schopnostmi lehce přesahujícími tehdejší DOS.

Obrázek 6: TRS-80 Color Computer (autor fotografie: Bilby, CC-BY)

Firma Dragon vyráběla počítače Dragon 32 a Dragon 64, které byly koncepcí i schopnostmi velmi podobné počítači CoCo. Hlavní rozdíl byl ten, že byly britské, a tedy pracovaly se systémem PAL (nikoli NTSC). Britský tisk je označoval za „lepší než jejich britští konkurenti, ale celkem nic moc“ a trochu nespravedlivě psal, že „je to levnější klon CoCo s lepší klávesnicí“.

Obrázek 7: Dragon 32

1.4  MSX

Standard MSX byl logickou reakcí na spoustu platforem, co v té době existovala. Dneska máme v zásadě dvě hlavní platformy a tři systémy, přičemž ty platformy můžou poměrně bez problémů sdílet navzájem periferie, dokonce i některé komponenty, takže piánko. Ale představte si začátek 80. let, co výrobce, to vlastní nová geniální platforma, často nekompatibilní ani s předchozím modelem… Ti velcí, co se chytli, měli štěstí: Atari, Commodore, Sinclair. Ale co ti ostatní, kterým trh domácích počítačů ujížděl?

Na trhu profesionálních sestav bylo relativně dobře, tam se vždycky našel nějaký společný jmenovatel, třeba CP/M. Výrobci stačilo udělat stroj s disketovou mechanikou a BIOSem a systém se už nějak podařilo naportovat. Ale pro domácí počítače byly diskety v tu dobu zatím pořád drahé.

S řešením přišel Microsoft, firma, která v té době ještě nebyla nenáviděný symbol korporátní arogance a terč k diskusním jedovatostem pro každého juniorního vývojáře, ale především vývojář na tehdejší dobu velmi kvalitních interpreterů BASICu pro všemožné platformy. (Ostatně právě tohle nakonec donutilo Gatese kývnout na poptávku IBM – kdyby PC nemělo systém, Gates by nemohl prodávat své programovací jazyky pro PC, tam viděl hlavní těžiště obchodního modelu MS+PC) No a právě Microsoft se tehdy spojil s několika (převážně japonskými) výrobci elektroniky a dohromady navrhli „standard MSX“.

Vize byla jednoduchá: Každý počítač, který bude mít logo MSX, bude splňovat určitou minimální sadu požadavků, což zajistí, alespoň teoretickou, kompatibilitu software a části hardware. Počítače budou mít stejný procesor (Z80A) na stejné frekvenci (3,58 MHz), budou mít stejný grafický řadič (TMS9918, popř. ekvivalent pro PAL systém TMS9929), zvukový čip AY-3-8910, PIO 8255, na něm budou připojené standardizovaným způsobem některé interní periferie (např. přepínání paměti), a tak dál. Tedy v podstatě něco jako PC, kdyby PC bylo od začátku výsledkem dohody několika firem. A bylo na výrobcích, kolik použijí paměti (předepsáno bylo minimálně 16 kB RAM), jakou použijí klávesnici, jaké pouzdro zvolí, jaké příslušenství dodají… O základní programové vybavení se nemuseli starat: měli od Microsoftu MSX BASIC.

Obrázek 8: Počítač standardu MSX2 od Daewoo

Výhody tohoto přístupu jsou jasné a pro nás dnes už samozřejmé: výrobce mohl vyrábět třeba jen cartridge nebo software a měl jistotu, že budou fungovat na nejrůznějších modelech od nejrůznějších výrobců (ve skutečnosti měl spíš „naději“ než „jistotu“, ale dejme tomu). Zákazník si mohl koupit počítač MSX od libovolného výrobce podle svých osobních preferencí a věděl, že mu budou fungovat moduly a programy od jiných výrobců. Mohl upgradovat bez obav z toho, že na novém systému nebudou staré programy fungovat. A tak dál.

Jenže: přídavné moduly měly občas problémy při fungování s jinými. Nebyly mechanicky dobře vyřešené, takže těžké moduly občas vypadly z konektoru. Výrobci poměrně rychle začali nabízet modely s velkou pamětí, čemuž se přizpůsobili tvůrci software, a tak jste si některé hry na slabším modelu nespustili.

Ale to všechno byly jen prkotiny proti tomu největšímu problému: Počítače MSX vyráběla spousta výrobců, převážně japonských. Prodávaly se v Japonsku velmi dobře. Ale ve světě už moc ne. Ve Spojených státech a v Evropě, kde se rozhodovala bitva o domácí počítače, vládla trojice Commodore, Atari, Sinclair a MSX se tu nikdy významně nerozšířil (i když jedním z výrobců byl Philips) – snad jen s výjimkou Španělska a Nizozemí. Standard MSX se kupodivu ujal v arabských zemích a zemích Latinské Ameriky. No a nemalá část těchto počítačů, okolo milionu kusů, se prodala v – Sovětském Svazu! Tam je nakoupili do škol (embargo COCOM se na tuto kategorii strojů, na rozdíl třeba od strojů s procesorem MC68000, nevztahovalo).

Takže co tu máme? Kvalitně navržený osmibit, s velmi dobrým (na tu dobu) grafickým čipem, s procesorem, co „všichni známe“, se spoustou paměti, standardizovaný, s velmi slušným zadrátovaným BASICem, spousta modelů, hmmm… jak by to mohlo neuspět?

Obrázek 9: Sony HitBit

A vidíte – mohlo! Postupně vznikly standardy MSX2, MSX2+ a MSX TurboR, které přidávaly práci s disketami, lepší grafické a zvukové možnosti, TurboR dokonce mnohonásobně rychlejší procesor R800, ale to už byla labutí píseň – Commodore navrhl Amigu, v Atari vzniklo ST a zbytek světa pomalu šel cestou „PC a kompatibilní“. První stroje MSX vyráběly desítky výrobců, namátkou Canon, Daewoo, Fujitsu, Goldstar, Hitachi, JVC, Kawai, Panasonic, Philips, Samsung, Sanyo, Sharp, Sony, Toshiba nebo Yamaha. Všechno známé značky. Postupem času většina odpadla a u posledního standardu zůstala jen trojice Panasonic, Sanyo a Sony.

V roce 1986 vyšel v Amatérském Radiu (AR A, čísla 3 a 4) dvoudílný popis standardu MSX. Dneska už působí trošku archaicky, hlavně některé výrazy a formulace (vzpomeňte si: bylo tažení proti cizím slovům v elektronice, a tak se vymýšlely magnetoskopy, styky, styková rozhraní a podobné krkolomnosti). Z popisu funkce „STRING$ vydá řetězec na základě čísla“ dneska už fakt nejsem moudrý, ale upřímně: Zaplať pámbu za ty články!

1.5  A u nás?

Pokud jste v té době žili v ČSSR a měli jste domácí počítač, byl to pravděpodobně Sinclair, Commodore, Atari, Sord, Sharp – tedy zahraniční stroj. Ne že by se v ČSSR žádné domácí počítače nevyráběly. Vyráběly, ale nedaly se moc koupit. Kvůli nejrůznějším problémům se často nedostaly ani do škol nebo do zájmových klubů.

Československo tehdy vyrábělo hned několik strojů, které sem tak trochu spadají. Kromě školních jednodeskových počítačů PMI-80 a TEMS80-03 to byly především počítače PMD-85 a IQ-151. Ten druhý by se dal zařadit spíš do kategorie „neblaze proslulý“ a plně spadá do kategorie „chtěli jsme to udělat co nejlíp, ale dopadlo to jak vždycky“. Navržený byl jako modulární systém, ovšem zajímavý návrh zabily problémy se zdrojem (takže první verze fungovala maximálně se dvěma přídavnými kartami, následující verze naopak topila jak sporák) a naprosto příšerná klávesnice, o kterou jste si lámali prsty.

Naštěstí první jmenovaný, PMD-85, to alespoň trochu zachraňoval, a i když měl taky své mouchy, tak aspoň fungoval a netopil. Později vznikly další dva modely, s kvalitnější klávesnicí a dokonce i s barevným výstupem. A nejen to, vyráběly se i kompatibilní stroje, například počítač Maťo (což byla stavebnice s menší klávesnicí, ale do jisté míry kompatibilní) nebo počítače Consul ze Zbrojovky Brno (kde se pamětníci dodnes brání tomu, že by PMD zkopírovali).

Další klon PMD vyrábělo družstvo Didaktik Skalica pod názvy Didaktik Alfa a Didaktik Beta. Třetí do série, Didaktik Gama, byl taky klon, ovšem už ne PMD, ale naopak známého a rozšířeného ZX Spectra.

Tak trochu stranou stál tým Eduarda Smutného, českého konstruktéra počítačů, který po úspěšných průmyslových JPR-12 a JPR-1 (základ sestavy SAPI-1) zkonstruoval i obdobu Sinclairu ZX-81 pod názvem Ondra. Výrobce Ondry sliboval jednoduchý a dostupný počítač pro děti, bohužel výroba vázla a vázla, a když se rozjela, svět už byl dál.

1.6  Jednodeskové počítače

Jednodeskáč, tedy celým jménem „jednodeskový mikropočítač“, byl v 70. a 80. letech malý počítač, co se vešel na jednu desku. Dnes se na jednu desku vejde leccos, ale tehdy jste si moc vyskakovat nemohli. Většinou se tam vešel procesor, trocha paměti (typicky 1 kB RAM, 1 kB PROM), klávesnice (měla většinou okolo 20-25 tlačítek: 16 znaků 0-9 a A-F pro zadávání hexadecimálních číslic a několik ovládacích), displej (ze sedmisegmentovek) a nějaké vstupně/výstupní porty, které byly buď dostupné pro další rozšiřování, nebo na nich byly různé LEDky, motorky a podobně.

V Československu se vyráběly dva známější jednodeskáče (a několik dalších, dnes už pozapomenutých): legendární PMI-80 a školní jednodeskový počítač TEMS 80-03A. Oba s procesorem 8080A a s plus mínus stejnou technickou výbavou. Několik jednodeskových počítačů vzniklo i péčí nadšenců (BOB85, SAVIA84), vznikaly i jako stavebnice (Petr)… Technicky vzato byl třeba i Ondra jednodeskový, ale pro nás budiž jednodeskáč počítač s omezenou klávesnicí a s displejem ze sedmisegmentovek.

Ve světě se prosadil asi nejvíc KIM-1, jednodeskový počítač od MOS Technology s procesorem 6502. Vznikla i „odlehčená“ verze Junior Computer. Další zajímavý jednodeskáč byl třeba Cosmac Elf nebo Heathkit ET3400.

PMI-80

Začnu PMIčkem. Je totiž velmi dobře zdokumentované, hlavně díky sérii článků v Amatérském Radiu. PMI-80 mělo 1 kB RAM, 1 kB ROM (a mohli jste si druhý kB přidat), klávesnici s 25 tlačítky, devítimístný displej z kalkulačky (obojí připojené přes periferní obvod 8255) a primitivní rozhraní pro magnetofon.

Ovládání PMI-80

Displej byl, jako u většiny jednodeskáčů, rozdělen na část adresní (vlevo) a část datovou (vpravo). Rozdělení nebylo nijak dané, byla to čistě konvence. Klávesnice obsahovala 25 tlačítek, fyzicky rozmístěných do matice 5×5.

Tlačítko RE celý systém zresetovalo, a na displeji se objevil nápis „PMI-80“. Po stisknutí libovolné klávesy (tedy kromě RE a I) se na displeji úplně vlevo objeví znak, co má být asi otazník, který říká, že PMI je připravené přijímat pokyny.

Nejzásadnější věc u jednodeskáče byla funkce prohlížení a měnění obsahu paměti. Po stisku tlačítka M (Memory) se vlevo objevilo „velké M“ (píšu to v uvozovkách, protože na sedmisegmentovém displeji to vypadá spíš jako obrácené velké U nebo ruské P), pak mezera a čtyři pozice adresy. Třeba: „M 1C00“ Pomocí hexadecimální klávesnice jste zadali adresu (pokud jste udělali chybu, prostě jste psali dál, systém bral jako platné pouze čtyři poslední znaky) a tlačítkem „=“ jste ji potvrdili. Na displeji se objevil za adresou znak „=“ a za ním dva znaky – obsah paměti na dané adrese. Třeba „M 1C00=00“. Teď jste mohli zadat nový obsah, zase pomocí hexadecimální klávesnice a zase platily pouze poslední dva znaky. Tlačítkem „=“ jste potvrdili změnu a přesunuli se k další adrese.

Konec zadávání jste udělali tak, že jste buď stiskli klávesu, kterou program nečeká (třeba EX), nebo resetovali stroj tlačítkem RE. Tady reset neznamená vymazání paměti, takže to, co jste zadali, v ní zůstává.

Obrázek 10: klávesnice a displej PMI-80 (autor: Teslaton, CC-BY-SA)

Pomocí EX jste program spustili. Po stisku EX zase systém očekává zadání adresy, a po jejím potvrzení tlačítkem „=“ spouští program.

Sofistikovanější podobu měla funkce Break (BR). Zde jste nejprve zadali adresu, na které se má program přerušit a skočit do monitoru, a v druhém kroku spouštěcí adresu. Jakmile program narazil na danou adresu, odskočil zpět do monitoru, a vy jste si mohli zkontrolovat, zda je vše tak, jak má být.

K tomu vám dopomáhala třeba i funkce kontroly registrů – klávesa R. Po jejím stisknutí jste si vybrali, od jaké dvojice chcete prohlížet (AF, BC, DE, HL, SP – viz klávesnice). Zase můžete pomocí klávesnice obsah měnit, tlačítkem „=“ potvrzovat a přesunout se k další dvojici.

Poslední dvě funkce, S a L, fungovaly pro ukládání (save) a čtení (load) programů na pásek a z pásku.

BOB-85

Tuhle konstrukci postavil ing. Kratochvíl s procesorem 8085 a publikoval ji, jak jinak, v Amatérském Radiu, a to včetně dokumentace, výpisu monitoru, několika programů a zdrojových kódů. BOB-85 měl plus mínus stejné schopnosti jako PMI-80. Klávesnice měla 24 tlačítek (6×4) a displej pouhých 6 pozic.

Ovládání se od PMI-80 trochu lišilo. Nebyla tu možnost měnit obsah registrů nebo nastavovat breakpointy. Prohlížení paměti fungovalo podobně (jen místo klávesy M se jmenovala S MEM), místo klávesy „=“ byla klávesa „NEXT“ a při opravě dat nefungoval systém tak, že by obsah posouval, ale zadávali jste ho znovu. Navíc proti PMI tu je možnost postupovat pamětí nejen dopředu (NEXT), ale i dozadu (REC).

Klávesa EXEC vyvolala RESET stroje. Klávesa GO spouštěla program od dané adresy. VEK1, VEK2, a RST měly být nějaké přerušovací vektory do budoucna. A klávesa REC kromě už uvedené funkce vyvolávala ještě funkce pro zápis a čtení programů.

KIM-1

Pro nás trochu exotičtější stroj, s těmi jsme se v ČSSR moc nesetkávali. Koncepce opět stejná: procesor (6502), trocha pamětí, šest sedmisegmentovek, klávesnice 6×4, ale hlavně: vyvedený rozšiřující konektor, díky kterému se dalo ke KIM-1 snadno připojit leccos.

Obrázek 11: MOS KIM-1 (autor Rama, CC-BY-SA)

Displej držel stejnou konvenci, 4 pozice adresa, 2 data, ale ovládání bylo trošičku jiné. Tlačítkem AD jste zvolili možnost „zadám adresu“, tlačítkem DA jste začali přistupovat k datům. Roli tlačítka „=“, respektive „NEXT“, tu má tlačítko „+“.

Tlačítko GO spustilo program od adresy, která byla na displeji (zadaná po stisknutí AD). Tlačítko PC vyvolalo hodnotu Program Counteru (PC) na displej. RS je RESET, ST je STOP.

Poslední tlačítko nebylo tlačítko, ale přepínač SST – pokud byl aktivní, fungoval KIM-1 v režimu „Single Step“, tedy po stisknutí tlačítka GO vykonal přesně jednu instrukci a opět se zastavil.

ET3400

Tato počítačová stavebnice obsahovala procesor Motorola MC6800 a kromě klasických „jednodeskáčových“ propriet i nepájivé kontaktní pole. Co je na tomto stroji zajímavé je to, že si vystačí s šestnácti tlačítky a RESETem. Každé tlačítko mělo dvě funkce – kromě hexadecimálního znaku to byl i nějaký povel, a co bylo aktivní, to záleželo na kontextu.

Mimochodem, vřele doporučuju najít a přečíst si manuál k tomuto počítači, stejně jako manuál ke KIM-1! Není to jen „jak se to ovládá“, ale představují i procesor, popisují jeho funkce, učí ho programovat, a příručka k ET3400 začíná dokonce velmi podrobným konstrukčním návodem (IKEA faktor: 100!)

2  Slavné osmibitové mikroprocesory

2  Slavné osmibitové mikroprocesory

Takto se to učí ve školách: Základní prvky každého číslicového počítače jsou: řadič, aritmeticko-logická jednotka (ALU), paměť, periferie. Řadič spolu s ALU tvoří procesor. Pokud je integrovaný do podoby jednoho nebo několika málo obvodů, hovoříme o mikroprocesoru.

Traduje se, že prvním čipem takového druhu byl Intel 4004, a od něj je počítána „éra mikroprocesorů“.

Obrázek 12: Intel 4004 (autor Thomas Nguyen, CC-BY-SA)

Mikroprocesor 4004 pracoval s daty o šířce 4 bity, což nevadilo, protože jeho zamýšlené použití bylo v kapesních kalkulátorech. Jeho drobnou úpravou vznikl procesor 4040. Ale kromě této vylepšené verze vznikl i mikroprocesor 8008 – jak už číslice napovídají, zvětšila se šířka sběrnice a zpracovávaných dat, a to na 8 bitů. Návrháři připravovali 8008 jako implementaci procesoru pro terminál Datapoint 2200 – původně měla 8008 nahradit několik desek s TTL obvody v těchto teminálech od společnosti CDC, ale vývoj vázl a původní kontrakt byl nakonec zrušen. Výsledná dohoda zněla tak, že CDC si nechá peníze a Intel svůj procesor.

2.1  8080 a 8085

Procesor 8008 se na trhu ani pořádně neohřál, a už přišel vylepšený typ 8080, záhy v rychlejší verzi 8080A. Tento procesor vlastně definoval celou rodinu procesorů 80xx od Intelu. Při přechodu od osmibitů k šestnáctibitům totiž Intel vzal právě tento procesor a jakoby jej „natáhl“ na 16 bitů. Návrháři měli stále před očima nebohé vývojáře, kteří budou muset přepisovat osmibitové programy na šestnáct bitů, a tak se jim snažili přechod ulehčit. Vznikly tak známé „segmentové registry“ a další radosti, které zná každý, kdo programoval v assembleru pro procesory řady x86. Tato architektura pak plynule přešla i do vyšších verzí, od procesoru 80386 zůstala uvnitř jako „virtuální 86“, a svým způsobem je s námi vlastně dodneška…

Procesoru 8080, respektive vylepšené variantě 8085, se budu v této knize ještě věnovat intenzivně – naučíme se jej zapojovat, postavíme si vlastní jednodeskový počítač a projdeme si krátkým kurzem programování v assembleru. Ale to až v dalších kapitolách.

Procesor 8080 má v bývalém Československu velmi silné postavení – československá Tesla totiž vyráběla klon tohoto procesoru pod označením MHB8080A, a tak většina československých mikropočítačů používala právě tento procesor.

Přitom nebyla 8080 nějak moc přívětivá. Návrhář musel počítat s tím, že procesor potřebuje tři napájecí napětí, totiž +5 voltů, +12 voltů a -5 voltů, které navíc musely nabíhat v určeném pořadí (respektive alespoň zařídit, aby při výpadku napětí -5 V vypnulo napětí +12 V). Kromě toho potřeboval procesor ještě dva podpůrné obvody, 8224 a 8228, z nichž první se staral o hodiny a o signál RESET a druhý pomáhal procesoru generovat řídicí signály a obsluhovat přerušení.

I u Intelu si těchto omezení byli vědomi a po čase přišli s vylepšenou verzí 8085. Tento procesor si vystačil s jediným napájecím napětím +5 voltů, hodinové signály mu stačily obyčejné a obešel se bez podpůrných obvodů. Navíc měl vylepšený přerušovací systém a měl navíc i jednobitové sériové rozhraní, ovládané instrukcemi RIM a SIM (tyto dvě instrukce měl 8085 navíc; používaly operační kódy, které v původní 8080 nebyly použité).

Po 8085 už další osmibit od Intelu nepřišel (když nebudeme uvažovat jednočipové počítače 8048 / 8051 / 8052), místo toho následovala 16bitová rodina x86. Přesto procesor 8080 vyráběla spousta výrobců v nejrůznějších variantách.

2.2  Z80

Návrhář procesorů ve společnosti Intel, který se jmenoval Federico Faggin, po úspěchu procesoru 8080 odešel a založil si vlastní firmu Zilog. Ta na trh v roce 1976 uvedla vlastní procesor s označením Z80. Z80 byla vlastně přepracovaná a rozšířená 8080. Při rozšiřování nechali návrháři vše to, co měla 8080 – tedy instrukční sadu a sadu registrů – a vlastní vylepšení „nacpali“ do volného místa v instrukčním souboru. Čtyři kódy měly funkci „prefixu“ a v kombinaci s dalšími vybíraly instrukce z rozšířené instrukční sady. V ní byly dotaženy některé instrukce, které 8080 neměla (třeba bitové posuny), některé instrukce byly rozšířené tak, že mohly pracovat i s jinými registry, přibyly instrukce pro blokové operace (přesun, porovnání, přenos dat), a především přibyly dva indexové registry pro snazší práci s paměťovými strukturami a k nim odpovídající prefixy pro jejich použití. Pro programátorovo pohodlí přibyla druhá sada pracovních registrů, mezi nimiž se dá přepínat, byl rozšířen a vylepšen přerušovací systém a byla zabudovaná podpora refreshe pro dynamické paměti (co je refresh vysvětlím později v kapitole o pamětech).

Z80 si vystačila s jedním napájecím napětím, brzy přišly verze, schopné pracovat až s frekvencí 4 MHz (8080A pouze 2 MHz) a většina instrukcí se zpracovávala rychleji (potřebovala menší počet cyklů). V ČSSR se tento procesor bohužel nevyráběl; ze socialistických zemí ho vyráběla například NDR pod označením U880D a používali jej němečtí výrobci, například známý Robotron.

2.3  6800

Intel nebyl jediný, kdo vyráběl mikroprocesory. Nezávisle na něm svoje mikroprocesory představili i další výrobci – Texas Instruments, Signetics, National Semiconductor, RCA nebo třeba Motorola. Ačkoli i procesory jiných výrobců byly zajímavé, úspěšné byly především dvě větve. První byla ta od Intelu, 80xx, do níž můžeme započítat i Z80 od Zilogu. Druhá úspěšná větev pak byla ta s označením 68xx, právě od Motoroly.

Motorola byla v té době druhý největší výrobce integrovaných obvodů a polovodičů v USA (první byl Texas Instruments). Několik měsíců po procesoru 8080 představila i ona svůj mikroprocesor s označením 6800. Jeho návrh byl ovlivněn známým a úspěšným minipočítačem DEC PDP-11. Procesor 6800 pracoval na nižší frekvenci než 8080A, ale výkon měly oba procesory srovnatelné (6800 potřeboval menší počet cyklů na vykonání jedné instrukce). 6800 měl bohatší možnosti adresování, což bylo právě dědictví zmíněného „ideového předchůdce“, počítače PDP-11. Na druhou stranu používal jeden adresní prostor pro paměť i periferie.

Po čase přišly další varianty, jako 6805, 6809 a 6811 – některé z nich jsou stále základem jednočipových mikrokontrolérů.

Podobně jako Intel se i Motorola připravovala na nástup šestnáctibitové techniky, ale na rozdíl od Intelu šli její návrháři na věc z druhého konce. Místo aby vzali návrh 680x a zvětšili jej na 16 bitů, navrhli plně 32bitový procesor 68000 (označuje se i jako 68k) a dali mu 16bitovou datovou sběrnici. Vyhnuli se tak potížím s reálnými módy, překládáním adres a podobnými radostmi, co zažívali vývojáři ve světě x86, a zároveň měli základ pro plně dvaatřicetibitové procesory, které přišly po čase. Řada 68000 pokračovala modely 68010, 68020, 68030, 68040 – podobně jako u Intelu 286, 386, 486… Posléze byl vývoj této řady ukončen a nastoupila po ní varianta PowerPC (Apple – IBM – Motorola). Řada 68000 prošla drobnou úpravou a stala se základem mikrořadičů ColdFire a DragonBall.

Nakonec Motorola s procesory ztratila dech, její hlavní klient, Apple, přešel na technologii od Intelu, a tak Motorola z výroby polovodičů udělala nejprve samostatnou firmu Freescale (2004), kterou posléze koupila firma NXP, tu pak firma Qualcomm…

2.4  6502

Největší nevýhoda procesorů 8080 a 6800 byla jejich cena. Tedy – pro velké firmy ne, těm to nevadilo, ale vysoká cena bránila rozšíření mezi počítačové nadšence. Chuck Peddle, jeden z návrhářů procesoru 6800, navrhoval svému vedení přejít na levnější výrobní technologii a prodávat procesory v kusovém množství koncovým zákazníkům, ale management o něčem takovém nechtěl slyšet. Ostatně, kdo nikdy neslyšel okřídlenou větu to je vážná věc, to není na hraní? Inu, procesory byly vážná věc, průmyslová technologie, a nějací bastliči výrobce nezajímali.

A tak Chuck Peddle s pár kolegy od Motoroly odešel a ve firmě MOS Technology navrhnul vlastní procesor MOS 6501/6502. Na jiném místě popisuju, jak to s ním tehdy bylo, tak zde jen ve stručnosti: Procesor 6501 byl vývodově kompatibilní s procesorem 6800, ale vnitřek měl výrazně jiný, zjednodušený. Zmizel jeden akumulátor, indexové registry byly jen osmibitové a tak dále, ovšem namísto 150 dolarů stál pouhých 25. Což se Motorole samozřejmě nelíbilo, tak MOS Technology zažalovala. Peddle obratem stáhnul 6501 z nabídky – ale nevadilo mu to, protože spoléhal hlavně na procesor 6502. Ten měl jiné rozmístění vývodů, takže případná náhrada nebyla tak úplně jednoduchá, a měl jinak zapojený generátor hodin. Především měl ale díky soudnímu sporu postaráno o reklamu.

Procesor 6502 se stal po celém tehdejším západním světě legendou. Používaly ho nejrůznější počítače, domácí i průmyslové, od Apple I po herní konzole… A to i přesto, že měl některá divná omezení a některé divné chyby v instrukcích.

V socialistickém bloku moc populární mezi konstruktéry nebyl, vyrábělo ho snad jen Bulharsko pro svoje počítače Pravec 8D (klon Oric Atmos). Programátoři se s ním ale setkávali v domácích počítačích Atari nebo Commodore.

2.5  6809

Mnohými je tento procesor považován za nejlepší procesor osmibitové éry vůbec. Například Bill Gates tvrdil, že pro lepší osmibitový mikroprocesor nikdy programy nepsal. Vznikal v Motorole ve stejné době, kdy se pracovalo na procesoru 68000, a oba návrhy se částečně ovlivnily. Procesor 6809 rozšiřuje a doplňuje návrh 6800 a dotahuje to, co v 6800 nebylo dotaženo, ať už z důvodu nezkušenosti návrhářů, nebo proto, že to tehdejší technologie neumožňovala.

Na začátku návrhu stála důkladná analýza reálných programů pro 6800. Na základě statické a dynamické analýzy zjistili návrháři, které operace jsou nejčastější a jaké programátorské konstrukce vývojáři nejčastěji používají. Pak z těchto informací vyšli při návrhu architektury a instrukční sady procesoru 6809. A na výsledku to bylo doopravdy vidět.

2.6  Architektury procesorů

Už jsem zmiňoval, že mezi mikroprocesory jsou poměrně zásadní rozdíly – čímž samozřejmě nemyslím to, že je každý jiný, ale mám na mysli rozdíly v přístupu, takříkajíc filosofické.

Za chvíli si ukážeme procesor Intel 8080. Jeho nejznámější rival byl vyvinut firmou Motorola a byl označen 6800. Některé rysy měl procesor 6800 shodné s procesorem 8080 (třeba 16bitovou adresovou sběrnici, osmibitovou datovou sběrnici), ale ve spoustě věcí se lišil.

6800 používá zápis vícebajtových čísel stylem Big Endian (8080 stylem Little Endian). Pokud máte na adresy 0000 a 0001 zapsat hexadecimální číslo 1234h, pro procesor 8080 ho zapíšete tak, že na nižší adresu zapíšete nižší bajt (34h), na vyšší adresu vyšší (12h). U Motoroly 6800 to bude přesně naopak. Ve výpisu paměti na jednom řádku to pak bude vypadat takto:

Intel:    0000: 34 12 xx xx 
Motorola: 0000: 12 34 xx xx 

Procesor od Motoroly nerozlišuje paměť a porty a pracuje s obojím stejně. Nemá tedy pro čtení a zápis z/do portů speciální instrukce, ale používá standardní instrukce pro práci s pamětí, které jsou mnohem flexibilnější. Nevýhodou je, že se tak návrháři připravují o souvislý prostor 64 kB pro paměť, protože část musí vyhradit pro porty.

Procesor 8080 má šest osmibitových registrů pro volné použití a jeden akumulátor, s nímž se provádí většina výpočtů. Motorola použila v procesoru 6800 pouhé dva osmibitové akumulátory (A a B) a jeden šestnáctibitový indexový registr X. (Ukazatel zásobníku SP a programový čítač PC jsou i zde, oba šestnáctibitové).

Na první pohled to může vypadat jako nedostatečné – vždyť některé algoritmy využijí klidně šest, sedm registrů. Jak to tedy řešit u 6800?

Procesor 6800 přišel s jednoduchým trikem, který po něm převzali i jeho následníci. Paměť si rozdělil na 256 stránek po 256 bajtech (tj. horní byte adresy je „číslo stránky“ a dolní „adresa ve stránce“). Stránka 0 pak má speciální roli, protože je snadno adresovatelná. Co to znamená?

Procesor 8080 měl u spousty instrukcí pevně dáno, s jakými daty pracuje. Buď s registrem, s přímo zadanou konstantou, nebo s obsahem paměti, adresovaným registry H a L, nebo 16bitovou adresou. 6800 naproti tomu měl instrukční sadu mnohem víc ortogonální.

Ortogonální instrukční sada je taková, kdy instrukce může pracovat s různými daty naprosto stejně, bez ohledu na to, jestli jsou v registru, nebo v paměti.

Procesor 6800 proto u instrukcí nabízel několik adresních módů. Operand mohl být určen:

 Implicitně. Například instrukce INCA pracuje s registrem A.

 Bezprostředně (Immediate). LDAA #$02 nahraje do registru A (LoaD Accumulator A) konstantu „bezprostředně zapsanou“ za operačním kódem – tedy 02h.

 Přímou adresou (Direct). LDAA $02 nahraje do registru A hodnotu, která je uložená na adrese, co je zapsaná za operačním kódem. Adresa je pouze osmibitová, vyšších osm bitů se doplní nulami, adresa je tedy 0002h. Instrukce zabírá dva bajty, první je operační kód, druhý je zkrácená adresa – tedy vlastně „adresa ve stránce 0“.

 Rozšířenou adresou (Extended). Obdoba předchozího zápisu, ale adresa je dvojbajtová, lze tedy adresovat paměť v celém rozsahu. LDAA $1234 nahraje do registru A hodnotu z adresy 1234h.

 Indexovanou adresou, tedy adresou, která vznikne součtem hodnoty z indexového registru X a osmibitové konstanty.

 Relativně. V takovém případě se k adrese PC přičetla hodnota konstanty v rozsahu -128 až +127.

Pokud programátor chce k obsahu akumulátoru (tedy registru A nebo B) přičíst nějaké číslo, použije instrukci sčítání a podle adresního módu určí, jestli se bude zadávat přímo nebo z paměti, a pokud z paměti, tak jestli plnou adresou (výhoda: může být kdekoli, nevýhoda: instrukce je o bajt delší a časově náročnější), nebo ze stránky 0, nebo pomocí indexového registru… Hodnota může být přitom klidně načtena z portu, protože, jak jsme si už řekli, procesor 6800 nerozlišuje mezi porty a pamětí a ke všemu přistupuje stejně.

Z popisu adresních módů vyplývá, že stránka 0 je snadno dostupná a je to takový kompromis mezi plnou adresou a registrem v procesoru. Přístup k těmto 256 buňkám paměti je rychlý a instrukce jsou i kratší, lze je tedy považovat za určitý ekvivalent vnitřních registrů procesoru.

Assemblerem procesoru 6800 se v této knize zabývat nebudu, přesto jsem ho tu uvedl. Z architektury 6800 totiž vyšel nejen legendární procesor 6502 (kterému se věnovat budu), ale i další procesory – třeba „poslední osmibitový procesor“ 6809 (samozřejmě v uvozovkách – tento procesor měl na tehdejší dobu ojedinělé možnosti, ale přišel bohužel pozdě) a celá řada procesorů počínaje procesorem MC68000 přes další procesory téže řady až k MC68060 a dál k PowerPC. Tato řada se v běžných domácích a kancelářských počítačích už nevyskytuje (od přechodu Apple na Intel), ale dodneška se udržuje v embedded zařízeních apod.

Dovolte mi nostalgickou odbočku. Po 8080 jsem přešel na Z80 (byl jsem Spectrista) a tenhle procesor mi učaroval. Stovky instrukcí, mnoho registrů, šestnáctibitová aritmetika… Na 6502 jsem se díval s totálním nepochopením: vždyť to má jen tři registry a je to pomalé (=má to malou frekvenci). Ve skutečnosti byla „datová propustnost“ srovnatelná. Ostatně operace s pamětí v zero page zabraly 3 takty procesoru, nejrychlejší operace s pamětí u Z80 trvala 7 taktů. Krásu téhle architektury jsem docenil až později, když jsem se naučil assembler 68000 (Atari ST, Amiga). V čerstvé paměti jsem měl tehdy naučený asembler 8086, se všemi jeho „segmenty“ a „instrukcemi, co používaly vždy přesně určené registry“ – a najednou máte k dispozici ortogonální sadu a osm adresních + osm datových registrů. Třeba instrukce PUSH (která tam vlastně nebyla) fungovala jako obyčejný přesun hodnoty z registru do paměti s adresním módem „přenes do paměti na adresu danou některým adresním registrem, ale předtím hodnotu sniž“ (predekrement).

3  OMEN: Stavíme vlastní počítač

3  OMEN: Stavíme vlastní počítač

Samozřejmě osmibitový a s tak historickým duchem, jak to jen jde.

Když jsem přemýšlel o tom, jak tuto knihu pojmout, bylo mi jasné, že suchý výklad nebude stačit. Tedy, on by stačil, ale já nejsem zrovna příznivcem teoretických učebnic bez přesahu do praxe. Bylo mi tedy jasné, že nějakou konstrukci chci.

Ano, můžu vzít nějaký reálný osmibit a ukazovat na něm, jak se věci mají, možná vás i ponouknout ke stavbě repliky, ale touto cestou se mi moc jít nechtělo. Říkám si, že na vlastní konstrukci, která bude tak jednoduchá, jak jen to lze, půjde ilustrovat požadované věci mnohem líp.

Zvolil jsem tedy cestu konstrukce naprosto jednoduchých počítačů, které mají splňovat několik bodů:

 Budou používat součástky, které se dají běžně koupit.

 Nebudou se ortodoxně držet konstrukcí z 80. let – tedy když chci použít paměť, použiju moderní 32kx8bit statickou RAM, což je jeden čip, a nebudu konstruovat zapojení z osmi čipů dynamické RAM a dalších tří integrovaných obvodů kolem dokola.

 Budou v duchu starých osmibitových časů, tedy jednoduché periferie – klávesnice, displej, reproduktor – a minimální softwarové vybavení.

 Bude jednoduché psát pro ně software.

Klidně vynechám samotný starý procesor a potřebné funkce si naemuluju v moderním jednočipu. Nebo použiju jednočip místo periferií.

S těmito body na paměti jsem sednul a navrhl, upravil či vybral několik konstrukcí, které jsou vhodné pro začátečníky. Když jsem sáhl po cizích zapojeních, tak jsem se snažil vybrat konstrukce rozmanité, u nichž licence umožňuje jejich úpravu.

A tak vznikla „značka OMEN“.

3.1  OMEN?

Nojo. Osmibitový Mikropočítač pro Elektronické Nadšence. OMEN. A značení pomocí hláskového kódu: Alpha, Bravo, Charlie, Delta…

V knize bohužel není dostatek místa na popis všech instrukcí a procesorů, navíc se nakladatel se bál, že obsáhlejší kniha bude hůř prodejná. Některé konstrukce a k nim připravený text proto vyjde pouze online, formou dodatků.

OMEN Alpha je jednoduchý počítač ve stylu jednodeskových strojů z konce 70. let s procesorem 8085. Obsahuje jen to nezbytné minimum, ovládáte jej pomocí terminálu, nebo pomocí připojené hexadecimální klávesnice a sedmisegmentového displeje. Přesto lze připojit i složitější zařízení, včetně třeba čtečky SD karet či rozhraní CF/IDE.

OMEN Bravo je verze Alpha, která používá procesor 6502. Periferie jsou víceméně shodné s Alphou, ale software je, logicky, jiný.

OMEN Charlie je jednoduchá handheld herní konzole s černobílým displejem. Pohání ji ATMega328 – tedy přesněji Arduino (ve verzi Arduino Micro). Používá displej ze staré Nokie, dvě tlačítka, joystick a „pípák“. Výsledkem je funkční herní konzole se schopnostmi někde na úrovni kapesních her z 80. let. Ale Charlieho můžete naprogramovat v BASICu a běží na něm programy pro procesor 8080. Drobnou úpravou získáte Omen Charlie Color – s větším rozlišením a barevným displejem!

OMEN Delta je počítač s reálným osmibitovým procesorem Zilog Z80. Bohužel bez výstupu na televizi. Místo toho používá sériový port. Stačí pouhé 4 integrované obvody, klidně si to poskládáte na nepájivém kontaktním poli, a na výsledném stroji může běžet CP/M. Ano, CP/M. Klidně si spustíte i Turbo Pascal…

OMEN Echo je počítač s černobílým grafickým displejem. Jako hlavní procesor používá opět jednočip AVR – může to být buď Arduino, nebo „velká“ ATMega1284. Kromě procesoru obsahuje už jen jeden čip, sériovou paměť. K tomu pár rezistorů a kondenzátor. K Echu připojíte televizi s video vstupem (nebo LCD monitor se vstupem PAL) a klávesnici PS/2. Pro zájemce o „ještě většího osmibitového ducha“ mám i úpravu Echo MKII – s tlačítkovou klávesnicí a la ZX-81. Echo sice používá ATMegu, ale uvnitř může běžet například emulovaný procesor 6502.

Nadšenci můžou Echo použít i v neemulovaném módu a napevno naprogramovat třeba nějaký dialekt BASICu. Výkonem to pak bude podobné třeba zmíněnému ZX-81, Jupiteru ACE či československému počítači Ondra.

OMEN Foxtrot je počítač, který je z velké většiny „syntetizovaný“. Ve skutečnosti jde o obří programovatelné logické pole (FPGA), v němž je zkonstruovaný celý počítač: procesor, periferie, adresní logika, … Výstup můžete pustit na VGA, klávesnici použijete PS/2, a uvnitř vám běží osmibitový procesor s výkonem, jakých reálně nedosahují. Použil jsem takzvaný „soft core“, tedy „softwarově definované procesorové jádro“ s procesorem Motorola 6809. Také tento počítač se objeví až v dodatcích, přímo v této knize není popsaný, především proto, že k jeho pochopení je potřeba vysvětlit mnoho teoretických věcí k programovatelným polím a jazyku VHDL.

OMEN Kilo je reálný počítač s reálným procesorem 6809, svými schopnostmi odpovídající počítačům Alpha a Bravo.

Samozřejmě nejste odkázáni jen na tyto konstrukce – v každé sekci vám poskytnu několik tipů na zajímavé konstrukce, co se nacházejí na internetu.

Nechci vás připravit o tu radost postavit si vlastní počítač a vytvořit si pro něj software takříkajíc „na zelené louce“. Kdybyste se ale chtěli podívat, jaké programy jsem si napsal já, můžete zde:

https://github.com/osmibity

3.2  Zapojování v praxi

V této knize si navrhneme počítač takříkajíc „ideově“, v podobě schématu, ovšem tuto knihu nečtete přeci jen proto, abyste se kochali schématy, ale proto, abyste si něco vyzkoušeli. Jak si tedy vyzkoušíte stavbu vlastního počítače?

Možností je několik. Začněme tou nejjednodušší: postavit si konstrukci na nepájivém kontaktním poli.

Nepájivé kontaktní pole (breadboard)

To jde? Ano, to opravdu jde. Nepájivá kontaktní pole sice mají svá omezení, ale většinu konstrukcí z této knihy postavíte i na nich.

Nevýhody NKP jsou dané hlavně jejich mechanikou: součástky po čase mohou ztrácet kontakt, stejně tak propojovací kabely. Konstrukce není moc pevná ani vzhledná, navíc někdy neopatrný dotek může způsobit výpadek či podivné chyby. Propojování je pracné, zdlouhavé a náchylné k chybám.

Dobrý tip: Napište si na papír seznam propojek. Můžete si pak odškrtávat, co máte hotové, a zkontrolovat, co vám kde chybí.

Počítejte ale s tím, že oživování nemusí být úplně snadné. Pečlivou prací a kontrolou ovšem riziko chyb snížíte na minimum.

Popisky na obvody

To je trik, co používají někteří konstruktéři: vytisknou si na papír rozmístění vývodů integrovaného obvodu i s popisem signálů ve skutečné velikosti a přilepí si ho na integrovaný obvod. Při zapojování tak nemusíte hledat, kolikátý vývod je jaký, ale přímo vidíte, kde je D0 a kde je /CS…

Ovíjené spoje

Jde o poměrně starou techniku zapojování elektronických obvodů. Součástky umístíte do nějakého univerzálního plošného spoje, nebo jen do tenké nevodivé desky s předvrtanými otvory (anglicky: perforated board, perfboard), a pomocí izolovaného vodiče propojujete vývody jeden po druhém. Tato technika se v 70. letech používala i pro průmyslovou výrobu velkých počítačů.

Ovíjené spoje jsou o něco robustnější než konstrukce na NKP, jsou pevnější, odolnější, ale docela snadno se rozebírají. Pro ovíjené spoje jsou určené speciální objímky na integrované obvody s dlouhými vývody (wire wrap sockets).

Nevýhodou je, že tyto objímky jsou výrazně dražší než „obyčejné“.

Pro ovíjení spojů budete potřebovat izolovaný vodič a speciální nástroj, který slouží na samotné ovíjení (většinou má i část, která slouží k odizolování vodičů). S trochou cviku jde ovíjení docela dobře od ruky a na rozdíl od pájení, u něhož hrozí popálení a vzniká spousta agresivních výparů, je tato technika nenáročná a můžete ji klidně provozovat v obývacím pokoji.

3.3  Pájení na univerzální desce

Pájení je nejpoužívanější způsob propojování součástek v elektronice. Je dostupné i pro domácí použití a s dobrou páječkou můžete zapájet i moderní obvody se stovkami vývodů. Ty ale naštěstí používat nebudeme, zůstaneme u klasických obvodů s vývody s roztečí 2,54 mm. Na pájení takových obvodů stačí dobrá mikropáječka či pájecí pero. Doporučuju si trochu připlatit a koupit něco s regulací teploty.

Nedoporučuju transformátorové („pistolové“) páječky. Jednak se kolem jejich hrotu vytváří elektrické pole při zapínání a vypínání, a na to je třeba myslet při pájení integrovaných obvodů, ale hlavně: jsou těžké, a než zapájíte osmdesát vývodů, bude vás bolet ruka.

Obrázek 13: Univerzální deska plošných spojů, též „Veroboard“

Obrázek 14: Levnější varianta univerzální desky, provedení „perfboard“

Obrázek 15: Univerzální deska „stripboard“

Plošný spoj na míru