PMI-80

**PMI-80** bol jednoduchý 8-bitový jednodoskový výukový mikropočítač, vyrábaný v ČSSR v podniku Tesla Piešťany od roku 1982. Vybavený bol 9-miestnym sedemsegmentovým kalkulačkovým LED displejom a modifikovanou kalkulačkovou klávesnicou s 25 klávesami. Využíval procesor Tesla MHB8080A, česko-slovenský klon rozšíreného mikroprocesoru Intel 8080 z roku 1974, taktovaný na frekvencii 1,111 MHz a disponoval 1 KiB pamäte RAM a rovnakým množstvom pamäte ROM.

Počítač bol primárne určený na výuku programovania na stredných elektrotechnických školách a technických univerzitách. Okrem výuky bol využiteľný aj na jednoduchšiu priemyselnú a experimentálnu automatizáciu a pre nedostupnosť iných alternatív bol v 80. rokoch 20. storočia v Česko-Slovensku obľúbený aj medzi počítačovými nadšencami.

## Vznik
Prototyp počítača vyvinul na prelome rokov 19801981 Ing. Roman Kišš, v tom čase 32-ročný testovací technik integrovaných obvodov v národnom podniku Tesla Piešťany. Inšpiráciou mu bol článok v nemeckom odbornom časopise a práci na prototype sa venoval mimo svojej oficiálnej pracovnej náplne, pričom materiál na stavbu získal využitím nevyhovujúcich súčiastok z výroby a výmenou s kolegami (napr. nepotrebná kalkulačka, ktorá poslúžila ako jednoduché vstupno-výstupné zariadenie).

Neskôr v priebehu roku 1981 založil v Tesle Piešťany školiace stredisko, prvé svojho druhu vo vtedajšom Česko-Slovensku, kde si účastníci týždenného školenia mohli postaviť vlastný exemplár PMI-80 z pripravených súčiastok a naučiť sa základy jeho programovania v strojovom kóde. Svoje znalosti mohli absolventi následne odovzdať ďalej v mieste svojho pôsobenia, takže školenia svojou mierou prispeli k naštartovaniu vlny záujmu o mikropočítačovú techniku v 80. rokoch v ČSSR.

Po odovzdaní PMI-80 do výroby pracoval Roman Kišš aj na vývoji počítačov PMD 85, Didaktik Alfa a PC 88, ktoré už mali charakter štandardných  osobných počítačov s plnohodnotnými alfanumerickými klávesnicami a grafickým výstupom na televízor alebo obrazovkový monitor.

## Hardvér
Po hardvérovej stránke predstavoval počítač minimálny funkčný 8080 systém, obsahujúci len nevyhnutné podporné obvody. Operačná pamäť bola použitá statická, nevyžadujúca obvody, zabezpečujúce periodickú obnovu (refresh), ako v prípade DRAM. Zobrazovanie na displeji a skenovanie klávesnice bolo softvérovo multiplexované, pričom pre obnovu displeja a prípadné nasnímanie kódu stlačenej klávesy bolo potrebné volať príslušné systémové rutiny z monitoru (počítač neobsahoval časovač). Bez ich pravidelného volania z používateľského programu bolo možné na displeji ponechať staticky zobrazený len jeden znak.

Osadenie mikropočítača tvorilo desať integrovaných obvodov:
* 1× MHB8080A (mikroprocesor, česko-slovenský ekvivalent Intel 8080)
* 1× MH8224 (generátor taktu a signálu RESET)
* 1× MH8228 (riadiaci obvod a budič zbernice)
* 1× MH3205 (dekodér z 3-bitového kódu na 1 z 8, ekvivalent 74LS138, slúžiaci ako adresový dekodér)
* 2× MHB2114 (pamäť SRAM 1024×4b)
* 1× MHB8608 (pamäť PROM 1024×8b) alebo MHB8708 (EPROM 1024×8b)
* 1× MHB8255A (programovateľné paralelné rozhranie, 3×8 vstupno-výstupných liniek)
* 1× MH1082 (dekodér a budič 7-segmentového LED displeja)
* 1× MH7400 (4× hradlo NAND)

Okrem toho počítač z aktívnych súčiastok obsahoval už len 7 tranzistorov PNP (budenie segmentov displeja), 3 tranzistory NPN (tvarovač magnetofónového vstupu, invertor) a 6 kremíkových diód. Klávesnica 5×5, červený sedemsegmentový displej VQD30 a dekodér/budič MH1082 boli prevzaté z vreckovej kalkulačky Tesla OKU 205.

### Časovanie
Počítač bol osadený 10 MHz kryštálom, pričom takt pre samotný procesor je interne v obvode MH8224 delený deviatimi, tzn. výsledný takt CPU bol 10 / 9 ≈ 1,111 MHz. Doba vykonávania jednej inštrukcie bola pri 8080 411 taktov, tzn. výpočtový výkon PMI-80 bol približne v rádoch stoviek tisíc inštrukcií za sekundu (0,10,28 MIPS).

Pre porovnanie, súčasný (2014) jednodoskový počítač Raspberry Pi 2 so štvorjadrovým 32-bitovým procesorom s jadrom ARM Cortex-A7, dosahuje výkon približne 1 000 MIPS na jedno jadro, je teda približne 20 000-násobne výkonnejší, už pokiaľ ide čisto o počet inštrukcií, vykonateľných za jednotku času (a teda odhliadnuc od ďalších benefitov, súvisiacich so 4-násobnou šírkou slova, integrovanou hw. násobičkou/deličkou priamo v ALU, integrovaným numerickým a grafickým koprocesorom a pod.).

### Vstupno-výstupné rozhrania a rozšíriteľnosť
Dve z troch 8-bitových brán obvodu MHB8255A boli využité interne pre multiplexované budenie displeja, klávesnice a vstup/výstup na magnetofón. Zvyšná brána bola vyvedená na FRB konektor (K2) a využiteľná používateľsky ako 8 paralelných vstupno-výstupných liniek s TTL úrovňami. Na doske je ďalej pripravené miesto pre osadenie druhého obvodu MHB8255A so všetkými troma bránami vyvedenými na konektor.

Voľné miesto bolo tiež ponechané pre prípadnú druhú používateľskú pamäť EPROM 8708 a na konektore systémovej zbernice (K1) bolo vyvedených 5 z 8 vybavovacích signálov z adresového dekodéru MH3205, ktoré sa dali využiť na jednoduché externé rozšírenia RAM alebo ROM o jednu až päť 1 KiB stránok bez potreby ďalších adresových dekodérov.

V spodnej časti dosky bolo k dispozícii pole 31×8 predvŕtaných kontaktných plôšok (padov) v rastri 2,54 mm, ktoré bolo použiteľné ako univerzálna DPS pre realizáciu prípadných vlastných obvodov, prepojených s počítačom.

## Softvér
Počítač bol z výroby osádzaný 1 KiB pamäťou PROM resp. EPROM, obsahujúcou základný obslužný program – monitor strojového kódu (ďalej len „monitor“) s nasledovnými funkciami:
* inicializácia systému (klávesa RE; reset zachováva obsah pamäte)
* inšpekcia a zmena hodnôt registrov (klávesa R)
* inšpekcia a zmena obsahu pamäte (klávesa M)
* štart používateľského programu od zadanej adresy (klávesa EX)
* trasovanie programu (breakpoint; klávesa BR)
* spracovanie vonkajšieho prerušenia (klávesa I)
* čítanie a zápis údajov na pripojený magnetofón (klávesy L, S)

### Programovanie
náhľad|Bloková schéma počítača a prehľad inštrukčného súboru 8080 na vnútornej strane veka kufríka.

Programovanie počítača bolo, najmä z dnešného pohľadu, pomerne namáhavé. Program si bolo treba najprv premyslieť a manuálne zapísať v jazyku symbolických inštrukcií (JSI) procesoru 8080. Pri školskom využití v 80. rokoch sa koncept programu v JSI pripravoval spravidla na papieri, v pracovnom zošite. Počítače s obrazovkovým výstupom a textovým editorom, prípadne asemblerom pre automatizovaný preklad programu z JSI do strojového kódu 8080, ktoré by túto prácu dokázali výrazne uľahčiť, ešte neboli bežne dostupné, okrem toho PMI-80 bol cielený primárne práve na výuku nízkoúrovňového programovania.

Program, vopred pripravený v JSI sa potom na PMI-80 zapisoval do pamäte formou zadávania inštrukčných kódov na klávesnici v šestnástkovej sústave. Ako pomôcka slúžil okrem príručky aj papierový „ťahák“ s blokovou schémou počítača a prehľadom inštrukčného súboru 8080 v štruktúrovanej podobe s názvami inštrukcií a ich hexadecimálnymi kódmi, umiestnený na vnútornej strane transportného kufríka počítača.

Zmeny v už zapísanom programe boli možné znova len prepisom inštrukčných kódov na zadaných adresách v pamäti. Prípadné nadbytočné inštrukcie bolo možné prepísať kódom „prázdnej“ inštrukcie NOP (z ), avšak vsúvanie nových inštrukcií medzi existujúce nebolo možné – zostávalo jedine zapísať ich na iné voľné miesto v pamäti ako podprogram a na pôvodné miesto vložiť jeho volanie (pokiaľ sa zmestilo), alebo celý program prípadne jeho časť prepísať nanovo, vrátane prepočítania adries všetkých volaných návestí a podprogramov.

### Príklad programu
Príklad jednoduchého programu, realizujúceho 8-bitové počítadlo stlačení klávesy s priebežným zobrazovaním počtu (0 až 28−1 = 255, tzn. 00 až FF v šestnástkovej sústave) na displeji. Program využíva ako podprogramy zdokumentované rutiny monitoru PMI-80 pre vymazanie displeja, zobrazenie číselnej hodnoty a vstup z klávesnice. Do pamäte PMI-80 sa program zadá zapísaním postupnosti inštrukčných kódov zo stredného stĺpca a spustí skokom na adresu `1C00`. Zaberá 21 bajtov, tzn. približne 2 % z 1 KiB operačnej pamäte PMI-80.

```
;adresa  ;inštrukčné kódy  ;komentovaný zápis v JSI
1C00     3E 0C             MVI  A, 0Ch   ; vlož kód znaku 'C' do akumulátora
1C02     CD AB 00          CALL CLEAR    ; vymaž displej a vľavo zobraz znak z akumulátora
1C05     1E 00             MVI  E, 0     ; inicializuj register E na 0
1C07     7B             L: MOV  A, E     ; presuň obsah E do akumulátora
1C08     32 FA 1F          STA  IN_DATA  ; ulož obsah akumulátora do pamäte na adresu bufferu
1C0B     CD F2 00          CALL OUTDA    ; zobraz 8b hodnotu z bufferu na displeji
1C0E     CD 16 01          CALL OUTKE    ; obnovuj displej a čakaj na stlačenie klávesy
1C11     1C                INR  E        ; zvýš hodnotu v E o jedna
1C12     C3 07 1C          JMP  L        ; skoč na adresu návestia L (opakovanie v slučke)
```


## Galéria

PMI-80 201802 01.jpg | Plastový transportný kufrík, vyrábalo sa viacero farebných prevedení
PMI-80 201802 02.jpg | Počítač v kufríku
PMI-80 201802 03.jpg | Doska počítača
PMI-80 201802 06.jpg | Úvodná správa monitoru po zapnutí alebo resete
PMI-80 201802 07.jpg | Programovanie prvého bajtu programu z príkladu
PMI-80 201802 08.jpg | Spustený program
PMI-80 201802 09.jpg | Program po 56 (38h) iteráciách


## Referencie

## Iné projekty

## Externé odkazy
* PMI-80 na nostalcomp.cz
* Online emulátor PMI-80 na asm80.com
* Prednáška Romana Kišša: Ako vznikli počítače PMI 80, PMD 85, Didaktik Alfa

Kategória:Jednodoskové počítače
Kategória:Česko-slovenské počítače