Zde najdete podrobný popis rutin monitoru počítače SAVIA 84 pro použití v programech. Autoři počítače Savia 84 pravděpodobně tyto informace nikdy nikde nezveřejnili. Informace byly získány rozborem (disassemblováním) monitoru počítače SAVIA 84 a bylo též čerpáno z webových stránek. http://www.dmaster.wz.cz/konstrukce/stone1/savia.htm
Základy práce s počítačem nebudu podrobně opisovat. Lze je najít na uvedeném webu a v knize Hyan, J. T., Radioamatérské konstrukce 4, SNTL Praha (1990). Napíšu jen pár informací pro ty, kdo znají PMI-80:
Tlačítka mají podobné funkce jako u PMI-80. Podstatné rozdíly v ovládání oproti PMI-80 jsou tyto:
A tak přejdu rovnou k popisu rutin pro použití v programech. Veškeré číselné hodnoty uváděné na této stránce jsou v šestnáctkové soustavě. Rutiny popisuju v pořadí, jak se mi to zdá logické.
Jde o obdobu rutiny DISP z PMI-80.
Základní rutina monitoru.
Je-li volána adresa 01FD,
jednorázově se zobrazí text na displeji,
text se přečte z bufferu na adrese 1FF7.
Je možné vložit vlastní adresu textu do HL a pak volat adresu 0200.
Rutina nemění obsahy registrů BC a DE (jsou uzálohovány ve stacku a opět obnoveny).
Po návratu v HL zůstává adresa textu, při volání od adresy 01FD
je v HL adresa standardního bufferu displeje 1FF7.
Dále se zjistí stav klávesnice a v registru A
lze přečíst kód stisknuté klávesy dle tabulky 2.
Rutina ještě nastavuje příznaky tak, že:
C=0 indikuje příkazovou klávesu: Ex, R, Br, Ad, L, S(-), =
C=1 indikuje číselnou klávesu: číslice 0 až 9, hexačíslice A až F
Z=1 indikuje klávesu =, jinak je Z=0
Po skončení rutiny text zhasne a pro déletrvající zobrazení je nutné
periodické volání nebo použití některé ze dvou dalších rutin.
Textový buffer je dlouhý 9 bytů. Na displeji se zobrazí znak s kódem dle prvního a pak dle třetího až devátého byte. Kódy znaků jsou uvedeny v tabulce 1. Tato skutečnost a schéma mikroterminálu počítače SAVIA 84 ukazují, že SAVIA 84 měla pravděpodobně původně devítimístný displej a druhé místo pak bylo vypuštěno. Počítač se též pravděpodobně původně jmenoval SLAVIA 84 a slovo SAVIA vzniklo právě vynecháním druhého znaku. Úvodní text s názvem počítače je uložen na adresách 03AE-03B6 a zde je plný text "SLAVIA 84". Dále lze na adresách 03A5 až 03AD nalézt text "Start MGF", který se nikde nepoužívá a byl zřejmě plánován pro rutiny pro práci s magnetofonem. Při použítí standardních rutin pro zobrazování se text zobrazuje bez písmena t, tedy jako "Sart MGF". Jaký smysl mělo vynechání jedné číslicovky není zřejmé. Finanční úspora na jedné číslicovce je vůči celkové ceně součástek zanedbatelná.
Příklad:
Trvalé zobrazení textu = Ahoj =. Ukončit lze jen klávesou reset.
Použita je mnemonika překladače Telemark Assembler (TASM).
.org 01c00h
loop:
ld hl, text
call 0200h
jp loop
text:
.db 021h ;znak =
.db 0 ;zde muze byt jakakoliv hodnota
.db 023h ;mezera
.db 00ah ;pismeno A
.db 012h ;pismeno h
.db 018h ;pismeno o
.db 014h ;pismeno j
.db 023h ;mezera
.db 021h ;znak =
.end
Dále uvádím též listing s instrukcemi ve strojovém kódu, který je možno ručně vložit
funkcí Ad od adresy 1c00 a spustit funkcí Ex 1c00.
Takovýto program je i vhodný na prvotní seznámení s počítačem SAVIA 84.
1C00 21 09 1C ld hl, 1C09 1C03 CD 00 02 call 0200 1C06 C3 00 1C jp 1c00 1C09 21 1C0A 00 1C0B 23 1C0C 0A 1C0D 12 1C0E 18 1C0F 14 1C10 23 1C11 21
Odobná funkce jako rutina pro jednorázové zobrazení s tím rozdílem, že text je kontinuálně zobrazován do chvíle než uživatel stiskne některou z kláves. Jde o obdobu rutiny OUTKE z PMI-80. Při volání od adresy 0196 se zobrazuje obsah bufferu displeje na adresách 1FF7. Je možné použít jinou adresu, vložit do HL a pak volat adresu 0199. Rutina nemění obsahy registrů BC a DE (jsou uzálohovány ve stacku a opět obnoveny). Po návratu v HL zůstává adresa textu, při volání od adresy 0199 je v HL adresa standardního bufferu displeje 1FF7. Po návratu lze v registru A zjistit kód stisknuté klávesy. Příznaky se nastavují stejně jako u rutiny pro jednorázové zobrazení textu.
Odobná funkce jako předchozí dvě. Při volání od adresy 0179 se zobrazuje obsah bufferu displeje na adresách 1FF7. Je možné použít jinou adresu, vložit do HL a pak volat adresu 017C. Rutina provádí cyklické volání funkce pro jednorázové zobrazení, počet cyklů se vkládá do registru DE. Maximální počet cyklů nastává při vložení 0000 do DE (hodnota se v každém cyklu nejprve dekrementuje a pak provádí test příznaku nuly). V tomto případě je text zobrazován po dobu cca. 94 sekund. Po skončení je v registru DE vždy hodnota 0000.
Rutina vloží na první místo bufferu displej znak s kódem v A. Na ostatní místa se vloží hodnota 23 (mezera). Rutina nemění obsah žádného z registrů. Pracuje se pouze se standardním bufferem, na adrese 1FF7.
Analogie funkce OUTAD z PMI-80. Obsah dvojregistru HL se uloží na adresy 1FF4, 1FF5 a převede na 4 znaky reprezentující vyjádření v šestnáctkové soustavě. Při volání adresy 014F se tyto znaky uloží na adresy 1FF9 až 1FFC, t.j. na druhou až pátou pozici ve standardním bufferu displeje. Následně je možné hodnotu zobrazit některou z rutin pro zobrazování textu.
Do dvojregistru BC je možno uložit jinou adresu, než je standardní buffer dispeje a pak volat adresu 0152.
Obsah registrů A, F, D, E, H, L zůstává nezměněn. Ve dvojregistru BC je po návratu použitá adresa (standardní či zadaná) zvětšená o 4.
Analogie funkce OUTDA z PMI-80. Obsah registru A se uloží na adresu 1FF6 a převede na 2 znaky reprezentující vyjádření v šestnáctkové soustavě. Při volání adresy 0160 se tyto znaky uloží na adresy 1FFE a 1FFF, t.j. na poslední dvě pozice ve standardním bufferu displeje. Následně je možné hodnotu zobrazit některou z rutin pro zobrazování textu.
Do dvojregistru BC je možno uložit jinou adresu, než je standardní buffer dispeje a a pak volat adresu 0163.
Obsah registrů A, F, D, E, H, L zůstává nezměněn. Ve dvojregistru BC je po návratu použitá adresa (standardní či zadaná) zvětšená o 2.
Na rozdíl od jednoduché rutiny MODAD známé z PMI-80, SAVIA 84 disponuje poměrně komplexní rutinou od adresy 011D. Při základním použití se volá adresa 011D. Od uživatele se očekává zadání jedné dvojbytové hodnoty, přičemž výchozí hodnota je vždy 0000. Na displeji je zobrazován zadávaný údaj a vpravo jsou písmena A1. Zadávaná hodnota je vložena do zásobníku.
Příklad:
Od uživatele je očekáván vstup dvojbytové hodnoty a ta má
být následně vložena do registru HL.
Výchozí hodnotou je 0000.
CD 1D 01 CALL 011DH E1 POP HL
Za druhé je možno rutinu použít pro zadání více hodnot. Počet požadovaných hodnot se vloží do registru D a následně volá adresa 011F. Během zadávání se zobrazuje zadávaný údaj a vpravo na displeji je údaj tvaru An, kde n označuje kolikátou hodnotu uživatel vkládá. Zadávaná data jsou postupně vkládána do zásobníku. Výchozí hodnota je vždy 0000.
Příklad:
Od uživatele je očekáván vstup tří dvojbytových hodnot a ty jsou
následně vloženy do registrů BC, DE a HL tak,
že první vložená hodnota bude v BC,
druhá v DE a třetí v HL.
16 03 LD D,03 CD 1F 01 CALL 011FH E1 POP HL D1 POP DE C1 POP BC
Za třetí je možno rutinu použít pro zadání jedné dvojbytové hodnoty, přičemž lze v programu definovat výchozí hodnotu, kterou může uživatel potvrdit klávesou = nebo může zadat jinou hodnotu. V tomto případě se výchozí hodnota uloží do registru HL a následně volá adresa 0127. Zadaná hodnota je pak vložena do zásobníku. Zadávaný údaj se zobrazuje na displeji druhém až pátém místě zleva přičemž obsah ostatních míst lze v programu definovat. Stiskne-li uživatel jinou než numerickou klávesu nebo =, rutina se ukončí a provede se restart monitoru.
Příklad:
Od uživatele je očekáván vstup dvojbytové hodnoty a ta má
být následně vložena do registru HL.
Výchozí hodnotou je 8000.
21 00 80 LD HL, 8000 CD 27 01 CALL 0127H E1 POP HL
Monitor počítače SAVIA 84 nemá obdobu rutiny MODDA z PMI-80, která by byla specializovaná pro vstup jednobytového údaje. Pro zadání jednobytového údaje uživatelem se jako použitelné jeví pouze využít rutinu pro editaci obsahu paměťové buňky, kterou využívá funkce Ad. Rutina se volá od adresy 01C0 a editovaná adresa je očekávána v HL. Zobrazí se ovšem i editovaná adresa, což může vadit. Pokud je požadováno zadání dat s tím, že text na ostatních pozicích displeje je definovaný v programu, je možno volat adresu 01C3 přičemž adresa editované buňky musí být současně uložena v HL i na adresách 1FF4, 1FF5.
Příklad:
Od uživatele je očekáván vstup jednobytové hodnoty a její uložení na adresu 1E00.
Výchozí hodnota se z této adresy čte.
21 00 1E LD HL, 1E00H 22 F4 1F LD (1FF4), HL CD C3 01 CALL 01C3HVstup uživatele se zobrazuje na posledních dvou místech displeje. Obsah ostatních míst displeje se čte z bufferu displeje.
Zadání se potvrzuje klávesou = nebo S(-). V závislosti na tom je nastaven C bit v registru F. Je-li C=0, zadání bylo ukončeno klávesou =, Je-li C=1, zadání bylo ukončeno klávesou S (-). Pokud uživatel při zadávání stiskne jinou příkazovou klávesu než = nebo S(-), zadání se ukončí a provede se restart monitoru.
1FD9 - 1FDB tři byty pro instrukci JMP na požadovanou adresu zpracování RST 28 1FDC - 1FDE tři byty pro instrukci JMP na požadovanou adresu zpracování RST 30 1FDF - 1FE1 tři byty pro instrukci JMP na požadovanou adresu zpracování RST 38 1FE2, 1FE3 adresa prvního break pointu 1FE4 přepsaná instrukce 1FE5, 1FE6 adresa druhého break pointu 1FE7 přepsaná instrukce 1FE8, 1FE9 obsah registru PC 1FEA, 1FEB obsah dvojregistru AF 1FEC, 1FED obsah dvojregistru BC 1FEE, 1FEF obsah dvojregistru DE 1FF0, 1FF1 obsah dvojregistru HL 1FF2, 1FF3 obsah registru SP 1FF4, 1FF5 adresa 1FF6 data 1FF7 - 1FFF buffer displeje
Tabulka 1 - kódy znaků.
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | b | C | d | E | F |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |
| G | H | h | i | J | L | M | n | o | P | r | t | U | u | y | - |
| 20 | 21 | 22 | 23 | ||||||||||||
| " | = | ? | mezera |
Tabulka 2 - kódy kláves.
| 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 8A | 8B | 8C | 8D | 8E | 8F |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | b | C | d | E | F |
| 90 | 91 | 92 | 93 | 94 | 97 | 9A | |||||||||
| Da | Ex | Ad | L | S(-) | Br | = |