Pokud si chcete vyzkoušet, jak funguje můj emulátor PMI-80, nevadí vám, že to je alfaverze a potřebujete trošku postrčit, tak tu pro vás mám takového menšího průvodce…

Emulátor PMI-80 je součást mého osmibitového IDE ASM80. Je zatím v první veřejné alfaverzi, ale už je aspoň trošku funkční, tak pro největší nedočkavce zveřejňuju návod, jak si zkusit něco málo s PMI.

Pokud hledáte informace o PMI-80, mohu doporučit stránku PMI-80 na NOSTALCOMP.cz.

Spuštění emulátoru

Není co řešit – klikněte na odkaz Emulátor PMI-80. Je to webový emulátor, takže stačí mít nový prohlížeč (na starých nefunguje, protože používá některé moderní vymoženosti) a myš.

Intermezzo: Ano, asi by šlo vše upravit tak, aby to fungovalo i s IE6, ale „poměr cena-výkon“ je velmi nepříznivý. Ztratil bych tím tolik času, že by mě to pravděpodobně přestalo bavit ještě před dokončením, takže jsem upřednostnil řešení „mít hotovo pro 97 % internetové populace“ před řešením „nikdy to nedodělat pro 100 %“

 

Vlevo je sloupec se soubory, které máte uložené v prohlížeči. Uprostřed je samotný emulátor. Vpravo pak ovládání „virtuální magnetofonové pásky“ a tabulku s nápovědou, která říká, jak jsou přiřazené klávesy. Nemusíte klikat myší na virtuální klávesnici (i když to můžete taky), můžete použít klávesnici svého PC.

První krok

Stisknutím jakéhokoli tlačítka (kromě RE, což je RESET, a I, které vyvolá přerušení) se dostanete do režimu, kdy PMI čeká na příkaz – poznáte to podle toho, že se vlevo objeví „něco jako otazník“:

Co teď? Teď tam naťukáme první program. Kde ho vezmeme?

První program

Já použiju program z knihy Mikropočítač PMI-80. Co s ním? od Jaroslava Vlacha (naleznete ji na výše uvedeném odkazu na webu NOSTALCOMP). Použiju program číslo 3 – stopky. Jeho zdrojový kód je následující:

1C00                          .ORG   1c00h   
1C00                CLEAR:    EQU   00abh   
1C00                OUTDA:    EQU   00f2h   
1C00                DISP:     EQU   0140h   
1C00   3E 19                  MVI   a,19h   
1C02   CD AB 00               CALL   clear   
1C05   3E 00                  MVI   a,0   
1C07   32 FA 1F               STA   1ffah   
1C0A   16 20        L1:       MVI   d,20h   
1C0C   00           L2:       NOP   
1C0D   CD F2 00               CALL   outda   
1C10   CD 40 01               CALL   disp   
1C13   15                     DCR   d   
1C14   C2 0C 1C               JNZ   l2   
1C17   3A FA 1F               LDA   1ffah   
1C1A   3C                     INR   a   
1C1B   00                     NOP   
1C1C   32 FA 1F               STA   1ffah   
1C1F   C3 0A 1C               JMP   l1

Jistě znáte výpis assembleru – úplně vlevo adresa, pak operační kód, pak instrukce. Teď je potřeba operační kódy naťukat do PMI.

Vkládání dat do PMI-80

Na displeji máme otazník. Stiskneme M (pro práci s pamětí) a na displeji se objeví „M 0000“ (samosebou limitované sedmisegmentovým displejem, takže M je spíš takové obrácené U). Zadáme adresu (1c00) a stiskneme [=] (na PC klávesnici je to ENTER). V pravé části se objeví „00“. Teď zadáváme data. Na adrese 1C00 je to 3E, takže zadáme 3E, mačkáme ENTER ([=]), adresa se o jedničku zvýší, zadáme obsah na adrese 1C01, tedy 19… a pokračujeme, dokud nenaťukáme všechno.

Když dojdeme k poslední adrese a poslední hodnotě, tak stiskneme třeba [EX] (na klávesnici je to X). Na displeji se objeví „Err:data“, po dalším stisknutí se dostaneme zpátky na otazník.

Spouštíme program

Na displeji je otazník, PMI čeká na pokyny. Mačkáme tedy [EX]. Displej vlevo zobrazí G a čtyři znaky adresy. Zadáme 1C00 a mačkáme [=]. Tím se program spustí od adresy 1C00.

Krása, že?

Když se ho nabažíme, stiskneme [RE]. Tím se PMI resetuje, ale nebojte – o program v paměti nepřijdete, zůstane tam uložený.

Ukládáme program na pásku

Po náročném ťukání by bylo dobré svou práci uložit, ať se s tím příště nemusíte ťukat zas. PMI k tomu má rozhraní pro práci s páskou, a můj emulátor má zase „virtuální pásky“. Jak na to?

  • Z pohotovostního režimu (s otazníkem) stiskneme [S]
  • Adresu zadáme 1C00 a potvrdíme [=]
  • Číslo bloku necháme 00 a potvrdíme [=]
  • Displej ukazuje „MG run“…
  • Klikneme na „Tape start – record“, tím spustíme nahrávání. Rozhraní signalizuje „RECORDING“
  • Stiskneme opět [=] (na PMI), čímž se spustí záznam. Nějakou dobu to potrvá. Během té doby se úplně vlevo objeví znak „t“ a počítadlo odpočítává.
  • Po skončení záznamu displej ukáže „MG STOP“.
  • Klikněte na tlačítko „Tape stop“, čímž se ukončí nahrávání na virtuální pásku.
  • „Tape length: 4626“ je správná délka záznamu.
  • Stiskneme naposledy [=] a tím se ocitneme zase v pohotovostním režimu.

Virtuální páska je uložena v prohlížeči, takže když se na stránku s emulátorem vrátíte po čase, budete ji mít k dispozici.

Čteme program z pásky

Postup je obdobný ukládání.

  • Stiskneme [L] v pohotovostním režimu
  • Zadáme adresu, od které chceme data nahrát (1C00) a potvrdíme [=]
  • Zadáme číslo bloku (00) a potvrdíme [=]
  • Displej vyzve „MG Start“
  • Nejprve potvrdíme [=]…
  • … a pak klikneme na Tape start – playback
  • Data se začnou nahrávat, ukazatel odpočítává
  • Po nahrání displej zobrazí „MG Stop“
  • Stiskem [=] se zase dostaneme do pohotovostního režimu.

Ukládáme si pásku pro pozdější použití

Máme pásku nahranou. Bohužel se na ni vejde vždy jen jeden záznam. Ale to nevadí, můžeme si ji uložit pro pozdější použití. Stačí kliknout na „Save tape“ a zadat vhodné jméno („Stopky“ třeba). Soubor se uloží do souborového systému v prohlížeči a objeví se v levém sloupci s příponou „.pmitape“. Můžete si jich uložit kolik chcete. Kliknutím na něj jej zase „přesunete“ do „virtuálního magnetofonu“.

Použijeme assembler, protože jsme líní to celé překládat ručně a ťukat do klávesnice.

To samosebou lze. V horním pravém rohu je tlačítko „Back to IDE“. Klikněte na něj a ocitnete se v IDE ASM80. Vlevo je seznam souborů, vpravo ovládání, uprostřed okno editoru. Klikněte na „New file“, jako jméno zadejte „stopky.a80“ (přípona A80 řekne překladači, že má použít modul pro procesor 8080) a napište program. Nebo si ho zkopírujte odsud:

org 1c00h

clear 	equ 00abh
outda 	equ 00f2h
disp 	equ 0140h

	mvi a,19h
	call clear
	mvi a,0
	sta 1ffah
l1: mvi d, 20h
l2: nop
	call outda
	call disp
	dcr d
	jnz l2
	lda 1ffah
	inr a
	nop
	sta 1ffah
	jmp l1

Klikněte na „Save file“ a pak na „Compile“ (nebo použijte F9). Program se přeloží a v levém sloupci, mezi soubory, se kromě „stopky.a80“ objeví i další dva soubory: „stopky.a80.hex“, který obsahuje HEX formát binárních dat, a „stopky.a80.lst“, ve kterém je výpis přeloženého kódu (to je ten první výpis v tomto článku).

A protože je to celé propojené (cizím slovem „integrované“), tak se vraťte do emulátoru PMI-80 (stačí kliknout na tlačítko vpravo nahoře s nápisem PMI-80, nebo ručně zadat adresu…) V emulátoru teď vidíte v levém sloupci soubor „stopky.a80.hex“. Kliknutím na něj ho natáhnete do paměti. Tralala, žádné ťukání do kláves. Můžete si vyzkoušet – pomocí klávesy M si projděte paměť od adresy 1C00 a uvidíte, že tam je to, co čekáte…

Co dál?

Vezměte si k ruce tu knihu, experimentujte, hrajte si, ať se vám líbí! Kdybyste objevili jakoukoli chybu, použijte Uservoice (to je taková ta bublina s otazníkem vpravo nahoře) a nahlašte mi ji, děkuju.

No a pro zvědavce prozradím, že mi funguje prealfa verze emulátoru BOB-85. Musím dodělat přesné časování instrukcí procesoru 8085 a napojit jej na virtuální magnetofon. Až bude hotovo, dám vědět opět tady…