Jednodesková výzva: předehra

Dámy a pánové, vítám vás u Jednodeskové výzvy, určené všem programátorům, co si troufají ukázat světu, jak to válí s osmibitem. Troufnete si napsat vlastní firmware pro jednodeskový osmibitový počítač?

V dalším článku si řekneme víc k zadání. Dnes mi dovolte udělat takové malé lehké představení „jednodeskáčů“.

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ě. (Hezky o jednodeskáčích píše Nostalcomp.)

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 plusmí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. (A samozřejmě spousta dalších.)

Nechci vás nijak zatěžovat výčtem a podrobnostmi. Spíš bych rád demostroval „ducha doby“ a „feeling“ na několika jednodeskáčích.

PMI-80

Začnu PMIčkem. Je totiž velmi dobře zdokumentované, hlavně díky sérii článků v Amatérském Radiu (výtah najdete zde). 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.

Já si kdysi udělal online emulátor PMI-80, a tak si můžete ověřit, jak to celé fungovalo.

ROM byla od adresy 0000 (logicky, po RESETu se spouštěl program od téhle adresy). RAM byla od adresy 1C00 do 1FFF. S periferiemi se komunikovalo na adresách F8, F9, FA a FB (klasická čtveřice registrů 8255 – PA, PB, PC, řídicí). Displej používal budič a dekodér 1-z-9 typu MH1082, připojený na port PC (=adresa FA), bity 0-3. Tímto bitem se vybírala pozice na displeji. Segmenty ovládal port PA (=adresa F8), a to bity 0-6 (bit 7 nebyl zapojený, desetinná tečka nefungovala).

Stejný budič používala i klávesnice, dokonce kvůli tomu byla zapojená do matice 3×9 (tlačítka I a RE, Interrupt a Reset, byly mimo matici a šly přímo k procesoru). Informace z řádků klávesnice se četly na portu PC, piny 4-6.

Displej tedy musel být pravidelně občerstvován procesorem; jakmile se program někde zasekl, zůstala svítit jediná pozice a klávesnice přestala reagovat.

Na magnetofon se vysílalo pomocí nosného kmitočtu na bitu 6 portu PA, klíčovaného bitem PA7. Z magnetofonu se data četla přes pin PC7.

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ď můžete zadat nový obsah, zase pomocí hexadecimální klávesnice a zase se berou pouze poslední dva znaky, a tlačítkem „=“ potvrdíte změnu a přesunete se k další adrese.

Konec zadávání můžete buď způsobit tím, že stisknete klávesu, kterou program nečeká (třeba EX), nebo resetujete stroj (RE). Tady reset neznamená vymazání paměti, takže to, co jste zadali, v ní zůstává.

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.

Ve výše odkazovaném PDFku najdete i další informace, včetně některých užitečných rutin z ROMky. Další spoustu materiálů najdete na stránkách PMI-80 na Nostalcompu.

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 plusmínus stejné schopnosti jako PMI-80. Klávesnice měla 24 tlačítek (6×4) a displej pouhých 6 pozic.

Displej nebyl multiplexovaný, ale každá pozice měla vlastní adresu (0A – 0F). ROM byla na adresách 0000 až 05FF, RAM od adresy 0600 do 09FF.

Pár zajímavých informací zase najdete na Nostalcompu (BOB-85), já jsem udělal online emulátor, ale je v nějaké alfaverzi a ještě jsem ho nedodělal.

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.

Manuál najdete zde, online emulátor zde.

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

U tohoto jednodeskáče emulátor nemám. Manuál ET3400 je k dispozici na Archive.org nebo jako PDF.

Tato počítačová stavebnice obsahovala procesor 6800 (ano, ten od Motoroly), a kromě klasických „jednodeskáčových“ propriet i nepájivé kontaktní pole. Co mě na tomto stroji fascinuje je, ž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, ten manuál vřele doporučuju, 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 ET3400 začíná dokonce konstrukčním návodem (IKEA faktor: 100!)

Čeho jsem chtěl touto exkurzí docílit? Chtěl jsem vás trošku vtáhnout do ducha jednodeskáčů a připravit vás na tu Jednodeskovou Výzvu, která brzy přijde. A nepůjde v ní o nic menšího, než – a teď poslouchejte – navrhnout ovládání nového jednodeskáče a napsat pro něj monitor. Máte na to pár tlačítek, osm míst na displeji, jedno kilo paměti – a ukažte se!

(A jestli ještě neumíte assembler 8080 a 6502, tak to honem napravte!)

Líbil se vám článek? Podpořte autora na Patreonu
Příspěvek byl publikován v rubrice ASM80.com, Emulace, Hardware se štítky , , , , . Můžete si uložit jeho odkaz mezi své oblíbené záložky.
  • odpad

    Ten ET3400 má prima manuál a je dobré se do něj podívat, než počítač zapojíte. Já se po přečtení štítku o napájení jak 120 tak 240V zaradoval a fouknul ho do zásuvky. Kdybych se napřed podíval do onoho IKEA návodu, ušetřil bych si pojistku v tom stroji. Ono to může fungovat i na naše volty, ale člověk musí nejdřív přepájet můstek podle návodu. 🙂

  • No tak to jsem zvědav co se z toho vyklube 🙂 I když za sebe říkám, že to asi nezvládnu, nic tak velkýho jsem v asm ještě nedělal (na druhé straně, výzvy mám rád). A schválně jsem si projel a přepsal zdroják k BOBovi… no, v rámci tradice PMI-80 je u něj chyba taky hned na prvním řádku, ale není tam zdaleka jediná. Ten výpis je stejný chaos, jako to schéma… Zlatý PMI 😉