Monitor počítače SAVIA 84

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é.

01FD (0200) Jednorázové zobrazení textu a přečtení stavu klávesnice

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                  

0196 (0199) Zobrazení textu a čekání na stisk klávesy

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.

0179 (017C) Zobrazení textu po určitou dobu

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.

0188 Vymazání bufferu displeje

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.

014F (0152) Zobrazení dvojbytového údaje (adresy)

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.

0160 (0163) Zobrazení jednobytového údaje (dat)

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.

011D (011F, 0127) Vstup dvojbytového údaje od uživatele

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

Vstup jednobytového údaje od uživatele

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 01C3H
Vstup 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.


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 =


Zpět