Monitor pro Stone 1

Během práce s počítačem Stone 1 a monitorem PMI80 jsem narazil na několik "nepříjemností". Tlačítka klávesnice občas silně zakmitávají (ostatně jako většina mžikových kontaktů) a tento jev není v monitoru vůbec ošetřen. Snad proto, že originál měl tlačítka s vodivou gumou. Při ukončení editačních funkcí monitoru vyskakuje chybová hláška a dojde k restartu monitoru. Funkce tudíž nelze rozumně volat z uživatelské aplikace. Pokud aplikace používá zásobník, je spolehlivě zničen monitorem při obsluze zarážky. Monitor SAVIA84 je na tom úplně stejně.

Rozhodl jsem se proto napsat vlastní programové vybavení. Monitor je napsaný pro kompletně osazenou desku (9 segmentovek, IC9 osazen). Znak z klávesnice je generován až po zpracování pěti po sobě jdoucích shodných stavů. Chybové hlášky jsem nepoužil, protože ukončení editace není chyba ale záměr. Bylo tak možné zapracovat korektní návrat z editace. Monitor používá samostatný zásobník, aby nepřepisoval ten uživatelský. Prozatím není podporována práce s magnetofonem.

Navenek se nový monitor chová obvyklým způsobem. Podporované příkazy jsou téměř identické s předlohou. Po zapnutí / resetu se provede nejnutnější inicializace (obvod PIO, zásobníky, atd.), zobrazí se uvítací hláška Stone 1 a monitor vstoupí do čekací smyčky.

Po stisku libovolné klávesy ze zobrazí výzva k vložení příkazu - otazník.

Jsou podporovány následující příkazy:

  • [M] - editace obsahu paměti
  • [R] - editace obsahu registrů
  • [Br] - nastavení zarážky
  • [Ex] - spuštění kódu

Stisk klávesy, která není propojena s žádným příkazem se nijak neprojeví.

Vstup údajů

Pro zadávání hodnot (adresy, data) uvnitř funkcí monitoru je použito jednoduché pravidlo: Klávesy hexadecimálních číslic (0 až 9, A až F) se zapisují do nejnižších řádů údaje, předchozí obsah je při tom posunut o jedno místo doleva. Číslice nejvyššího řádu je vytlačena.

Zbývající klávesy (Ex, R, Br, M, L, S, =) ukončí režim zadávání hodnoty, přičemž pouze po stisku klávesy [=] bude nová hodnota akceptována. Ostatní klávesy jsou chápány jako odvolání či zrušení příkazu, bez zobrazení chybové hlášky. Monitor se vrací na výzvu k vložení příkazu.

MEM

Po stisku klávesy [M] se zobrazí hláška: M 1800. Je to výzva k vložení adresy, od které chceme paměť procházet, nebo provádět změny. Tato výchozí hodnota je zároveň adresa počátku paměti RAM. Potvrzením hodnoty klávesou [=] přejdeme do režimu editace dat. To se projeví zobrazením dalších dvou znaků - obsahu paměťové buňky, např: M 1800 3E. Potvrzením nové hodnoty obsahu zároveň přejdete na následující adresu.

REG

Funkce slouží k prohlížení / úpravám obrazu registrů aplikace. Tento obraz je načten do registrů procesoru při spuštění uživatelského kódu. Při vyvolání zarážky je obsah registrů procesoru zachycen a přenesen zpět do obrazu. Obsah registrů monitoru není přístupný.

Po stisku klávesy [R] se zobrazí obsah střadače a stavového slova: r XXXX AF. Nový obsah je možné vložit obvyklým způsobem. Stiskem [=] se postupně zobrazují další dvojice registrů, cyklicky v pořadí : AF, BC, DE, HL, SP a PC.

BREAK

Po stisku klávesy [Br] jsme dotázáni na adresu zarážky: b XXXX. Potvrzením zadané hodnoty klávesou [=] dojde k vložení zarážky do uživatelského programu na uvedenou adresu. Následně monitor automaticky pokračuje příkazem EXEC.

Zarážku nelze vložit do kódu monitoru.

Pokud se uživatelský program zastaví na zarážce, je zarážka odstraněna a zobrazeno br-StoP. Po stisku libovolné klávesy monitor přejde na výzvu k vložení příkazu.

EXEC

Klávesa [Ex] vyvolá dotaz na spouštěcí adresu: G XXXX. Při prvním použití je zobrazená adresa náhodná, jinak poslední použitá. Pokud byl program zastaven zarážkou, obsahuje adresu zarážky. Tím je usnadněno pokračování v uživatelském programu. Potvrzením klávesou [=] bude předáno řízení na uvedenou adresu.

Kódování znaků

Vnitřní generátor podporuje zobrazení celkem 40 různých znaků.

Kód Znak Kód Znak Kód Znak
00h 0 10h G 20h X
01h 1 11h h 21h Y
02h 2 12h i 22h -
03h 3 13h J 23h "
04h 4 14h K 24h =
05h 5 15h L 25h ?
06h 6 16h M 26h ]
07h 7 17h n 27h mezera
08h 8 18h o    
09h 9 19h P    
0Ah A 1Ah q    
0Bh b 1Bh r    
0Ch C 1Ch t    
0Dh d 1Dh U    
0Eh E 1Eh v    
0Fh F 1Fh w    

Kódování kláves

Klávesnice obsahuje celkem 25 tlačítek, z nichž dvě tlačítka (Re, I) jsou dekódovány obvodově a 23 tlačítek je dekódováno programově.

Kód Klávesa Kód Klávesa Kód Klávesa
80h 0 88h 8 90h =
81h 1 89h 9 91h Ex
82h 2 8Ah A 92h M
83h 3 8Bh B 93h L
84h 4 8Ch C 94h S
85h 5 8Dh D 97h Br
86h 6 8Eh E 9Ah R
87h 7 8Fh F    

Systémové proměnné

Část paměti RAM je vyhrazena pro vnitřní potřebu monitoru. Uživatelská aplikace může uvážlivě měnit obsah proměnných bufptr a buffer. Proměnná vector je určena pro obsluhu uživatelského přerušení (tlačítko [I], také instrukce RST7). Měla by obsahovat instrukci skoku na obslužnou rutinu.

Adresa Délka Název Popis
1FC8h 24 stack zásobník monitoru
1FE0h 2 save_af obraz dvojic registrů
1FE2h 2 save_bc  
1FE4h 2 save_de  
1FE6h 2 save_hl  
1FE8h 2 save_sp  
1FEAh 2 save_pc  
1FECh 2 br_adr adresa zarážky
1FEEh 1 br_ins instrukce přepsaná zarážkou
1FEFh 3 vector uživatelský vektor přerušení
1FF2h 2 bufptr ukazatel dat pro zobrazování
1FF4h 9 buffer zobrazovaná paměť
1FFDh 1 keyout kód platné klávesy
1FFEh 1 keytmp poslední vzorek klávesnice
1FFFh 1 keycnt čítač shod

Vstupní body monitoru

0000h - restart: Vhodné jako návratová adresa po ukončení uživatelského programu.

0008h - Obsluha zarážky. Jsou zachyceny stavy registrů aplikace. Nejvhodnější způsob volání je instrukce RST1. Je však třeba počítat s poškozením obsahu buňky, na kterou ukazuje adresa zarážky. Můžete např. nastavit adresu zarážky na hodnotu 0000h, kde nelze nic změnit.

Podprogramy

Uživatelský program může volat všechny zde uvedené podprogramy a funkce monitoru. Jsou napsány tak, aby se vracely do místa volání, kde je obvykle třeba vyhodnotit případné chyby.

0098h - clear: Na první pozici bufferu displeje uloží znak ze střadače, do zbývajících vloží mezery. Poškozuje registry A, E, H a L. Registry B, C a D jsou uchovány.

00A7h - modad: Editace obsahu dvojregistru HL. Poškozuje registry A, B a C. Registry D a E jsou uchovány.

00B9h - modda: Editace obsahu střadače. Poškozuje registry B, C a D. Registry E , H a L jsou uchovány.

00D1h - outad: Výstup obsahu dvojregistru HL v šestnáctkovém tvaru do bufferu displeje. Poškozuje registry A, B a C. Registry D, E, H a L jsou uchovány.

00DCh - outda: Výstup obsahu střadače v šestnáctkovém tvaru do bufferu displeje. Poškozuje registry A, B a C. Registry D, E, H a L jsou uchovány.

00DFh - outhex: Výstup obsahu střadače v šestnáctkovém tvaru na adresu v BC. Poškozuje A, B a C. Registry D, E, H a L jsou zachovány.

00F0h - getc: Čekání na stisk klávesy. Současně probíhá zobrazování. Kód klávesy je vrácen ve střadači. Je nastaven příznak Z, pokud to byla klávesa [=], taky je nastaven příznak CY, pokud to byla klávesa šestnáctkové číslice. Registry B, C, D, E, H a L jsou uchovány.

00FFh - mpx: Programová obsluha displeje a klávesnice. Ve střadači vrací kód stisklé klávesy, nebo 00h. Je nastaven příznak Z, pokud není stisknuta žádná klávesa. Registry B, C, D, E, H a L jsou uchovány.

Závěr

Tato verze monitoru zabírá pouze 573 bajtů. V použité EPROM 2716 tak zbývá hodně místa pro další funkce.

Obsah EPROM ve formátu Intel-Hex a komentovaný výpis programu můžete stahovat zde: