Programy pro MIKOS na Ondrovi

Provozovatelné na starší verzi Ondry (ROM v 5 obsahující MIKOS odvozený ze SAPI-1) nebo na novější verzi (SSM ROM ’87 od ViLi, po nahrátí MIKOSu z kazety).

.Mám smůlu. Už jsem měl článek skoro dopsaný, když mi počítač kleknul.
Musím ho tedy nadatlovat znova.
Aby toho nebylo málo, tak se mi nedaří počítač znovu zprovoznit a zdá se, že odešel i disk obsahující moji nedokončenou disertační práci, data z výzkumu, sbírku starého software, scany dokumentace a další většinou nenahraditelné věci.
Mezi ně patřil i digitalizovaný audiozáznam proramů pro MIKOS na Ondrovi. Naštěstí byl (v nižší kvalitě) zálohován na mém iDisku, kde si ho můžete stáhnout (nemám ale ověřeno, zda ho Ondra načte – verzi ve vyšší kvalitě, kterou jsem na disku měl, ale načetl bez problémů).

BASIC_EXP v5.0/G (BASIC EX 4.0 ze SAPI obohacený o grafické funkce)
Ceska_abeceda (nainstaluje do MIKOSu český font, potřebný pro práci TEditu a snad i TOOL 80)
TEDIT v5.0 (textový editor, vycházející z editoru PEDIT, který na SAPI sloužil k psaní zdrojových textů pro assembler)
TOOL80 (assembler pro 8080 s editorem PEDIT a debuggerem)

Jak samotný MIKOS, tak programy pro něj mají určitá specifika, která už dnešním uživatelům nemusí být povědomá – přeci jen, softwarové vybavení pro Ondru začalo vznikat vlastně v roce 1980, kdy Tomáš Smutný začal psát programy pro SAPI-1!

Co se týče dokumentace, Tesla dodávala k Ondrovi čtyři poměrně silné příručky, obsahující spoustu informací přímo od autorů (určitě od Edy Smutného, podíl jeho bratra Tomáče na obsahu příruček není znám, autorství není v knížkách nikde uvedeno). To byla situace lepší, než u SSM ROM, kde se žádné návody k počítači ani jeho softwarovému vybavení nezachovaly.
Díky mému výzkumu v této oblasti se ale situace otočila – kdo nemá teslácké příručky doma, na internetu je nesežene (tedy ne všechny a ne v přijatelné kvalitě – fotografie pořízené mobilem mají do kvalitního scanu daleko), zatímco díky jednoduchosti uživatelského rozhraní není problém ViLi verzi ovládat a díky tomu, že software bylo portováno z jiných počítačů, není problém sehnat manuál (pokud víte, jaký hledat), který by šel pro Ondru přiměřeně použít (Microsoft Editor/Assembler, HiSoft Pascal).

Je tedy načase aspoň nějak stručně zpřístupnit i software pro MIKOS.

$$OBR387210$$

MIKOS byl na Ondru (v 5) převeden ze SAPI-1 (v 4). Protože má Ondra umístěnu videoram jinde než SAPI, má i jinde umístěnu oblast pro spustitelné programy. Takže i když má stejný formát zápisu na kazetu (míněno v MIKOSu, protože SSM ROM používá jiný, se SAPI nekompatibilní formát), programy ze SAPI nejsou bez překompilování přímo přenositelné.
Oproti SAPI byly odstraněny příkazy, které Ondra nevyužije (DISPLAY, funkce pracující s IOBYTE), naopak byl přidán zkracující povel .L, který má usnadnit používání počítače dětmi (provede zavedení a okamžité spuštění programu z kazety).

Samotný operační systém se skládá ze tří částí: monitoru strojového kódu, který se ovládá pomocí jednopísmenných povelů, z vlasního “mikro kazetového operačního systému”, jehož povely jsou uvozeny příkazem K_ (podtržítko doplňuje sám počítač, takže povely jsou vlastně dvoupísmenné) s několika povely, které lze zadat jednopísmennou “zkrácenou volbou”, a funkcí přímo prováděných při stisku kontrolních kódů, jako je nastavení okna a podobně.

Řídící kódy monitoru jsou:
CTRL + C – přerušení programu (v Basicu nebo Toolu skočí do Basicu nebo Toolu)
CTRL + P – aktivuje nebo deaktivuje současný výpis na tiskárnu
CTRL + Q – vytvoření okna – rezervuje zadaný počet řádek na obrazovce, které nescrollují, po CTRL+Q musí následovat volba velikosti okna číslicí 0-9, vyšší hodnoty se zadávají písmeny A až 0 (s výjimkou G, které rezervuje obrazovku pro grafiku s výjimkou dvou spodních textových řádků)
CTRL + R – aktivuje nebo deaktivuje inverzní výpis
CTRL + W – přeruší činnost, vypíše obsah registrů a skočí do monitoru

Příkazy MONITORu:

.B BASIC – spustí program, pokud byl zaveden z kazety (Basic, Tedit nebo Tool), jde o ekvivalent povelu G=1000
.C CLEAR – studený start monitoru, údaje o otevřených souborech se smažou bey uložení
.G GO – skok na zadanou adresu
.M MOVE – přesun dat v paměti
.S SUBSTITUTE – prohlížení a případná změna dat v paměti
.X EXCHANGE – prohlížení a případná změna obsahu registrů
.L LOAD – nahraje a spustí program z kazety, pokud je systémový (první bajt je C3h)
(ekvivalent příkazů K_L a B, nebo K_L a G=1000)
Změna parametrů (pokud je povel vyžaduje) se děje zadáním hexadecimálního čísla, případně potvrzení mezerou (pokračuje ve vykonávání příkazu) nebo enterem (ukončí příkaz – např. v SUBSTITUTE). V SUBSTITUTE lze potvrzovat i čárkou – která způsobí výpis další zpracovávané adresy

Kromě těchto povelů lze jednopísmenně zkracovat i některé povely MIKOSu, všimněte si ale, že K_L a L nedělají úplně totéž a že K_S nemá ekvivalentní zkratku S, které je už obsazeno jinou funkcí.
Zkracovat lze povely A, D, F, I, J, O, T.

Příkazy MIKOSu:

MIKOS umožňuje omezené používání hvězdičkové konvence. V praxi to zanmená, že když místo jména souboru zadáte hvězdičku, po nalezení souboru se bude ptát, zda chcete nahrát zrovna ten.
Ačkoliv hlášení MIKOSu v Ondrovi byly počeštěny, v tomto případě bylo kdovíproč zachováno anglické Yes/No místo českého Ano/Ne.
Ondra, stejně jako SAPI, obsahuje relé ovládající REM1 signál magnetofonu. Pokud si tento signál připojíte, bude počítač sám ovládat magnetofon – tedy spouštět ho a zastavovat. Pokud chce magnetofon rozjet, zobrazí hlášeí “čtení – hotovo?” nebo “záznam – hotovo?” (na SAPI “PLAY DONE?” a “RECORD DONE?”) a čeká na klávesu, kterou máte stisknout v okamžiku, kdy máte na magnetofonu aktivováno tlačítko play nebo record a play.
Díky dialogovému způsobu práce v MIKOSu se s počítačem domluvíte snadno, vyžaduje ale interaktivní práci (kterou si žádnými skripty zjednodušit nelze).

K_I INIT – uloží hlavičku se jménem kazety, zobrazuje se při K_D
K_M MANIPULATE – manipulace s kazetou, umožní převíjení kazety bez čtení dat
K_D DIRECTORY – výpis obsahu kazety, zobrazuje názvy souborů a kazet
K_F FIND – hledání souboru, většinou není třeba provádět (nahrávací povely provádějí K_F automaticky). Zároveň otevře soubor pro čtení (první blok nahraje do vyrovnávací paměti)
K_L LOAD – nahraje binární soubor do paměti
K_T TEST – zobrazí údaje (startovací a koncovou adresu) posledního nahraného souboru, užitečné hlavně pokud chcete pořídit kopii binárního souboru
K_J JUMP – zobrazí údaje o souboru a skočí na startovací aderesu (jako K_T a B nebo K_T a G=startovací adresa)
K_O OPEN – otevření výstupního souboru s vyhledáváním místa za zadaným souborem
K_A APPEND – otevření výstupního souboru bez vyhledávání místa
K_S SAVE – uložení binárního souboru na kazetu, v případě, že bylo provedeno K_A, zapisuje rovnou do otevřeného souboru, jinak vyhledává volné místo (za zadaným souborem)
K_C CLOSE – zavře otevřené soubory a uloží do nich zbývající data

Pro zajímavost si uvedeme i čísla služeb monitoru a MIKOSu a formát dat na kazetě:
Bloky vypadají takto:

|10|10| typ bloku | data (255) | název (11) | číslo bloku | číslo souboru | checksum |10|00|

typy bloků rozeznává MIKOS tyto:

01 – hlavička souboru
04 – koncový blok souboru
3A “:” – hlavička kazety
41 “A” – ASCII znakový soubor
42 “B” – binární soubor

Checksum je negovaný součet všech znaků včetně pilotních (10|10).

Datový obsah funkčních bloků (126 byte typu bloku + 255 byte dat) je definován takto:

|”:”| název kazety (64) | výplň 00h do 256 |

|01| název souboru (11) | poznámky do 64 | výplň 00h do 256 |

|04| zbytek dat souboru | výplň 00h do 256 |

|”A”| ASCII data (255) |

|”B”|”<"| startovací adresa | koncová adresa |">“| checksum adres | data | checksum dat |

Data v ASCII souboru jsou ukončena znakem 1Ah (CTRL+Z).

Služby jsou do velké míry kompatibilní se SAPI-1, začínají na stejné adrese (100h), skáče se na ně přímo. Každý program ve strojovém kódu by se měl do monitoru vracet pomocí skoku na 139h (služba NEXT).

100h – začátek tabulky služeb
+0 START – studený start MONITORu
+3 CI – CONSOLE INPUT – vstup znaku z klávesnice v A
+6 RI – READER INPUT – načte do A byte z kazety, při konci souboru CY=1
+9 CO – CONSOLE OUTPUT – výstup znaku v C na obrazovku
+0C PO – PUNCH OUT – výstup znaku v C na kazetu
+0F LO – LIST OUT – výstup znaku v C na tiskárnu
+12 CSTS – CONSOLE STATUS – A=0 při nestištěné klávese, A!=0 při stištěné klávese, kód se načte službou CI
+15 IOCHK – v A vrací velikost rezervovaného okna obrazovky (rozdíl proti SAPI)
+18 IOSET – provede základní nastavení paměti (rozdíl proti SAPI)
+1B MEMCK – vrátí nastavení horní hranice paměti, v A low a v B high
+1E IODEF – změna proti SAPI, lze použít pouze službu C=8, což je nastavení horní hranice paměti na hodnotu zadanou v DE (programy BASIC, TOOL a TEDIT data za touto hranicí pak nepoškodí)
+21 SPCL – adresace kurzoru, v HL vrací fyzickou adresu na obrazovce, v DE polohu kurzoru (D osa X, E osa Y), v A velikost rezervovaného okna
+24 CRLF – přejde na nový řádek na obrazovce
+27 EXPR – přečte zadaný (v C) počet 16bitových parametrů na zásobník
+2A ERROR – vypíše chybové hlášení a skočí do MONITORu
+2D ASHEX – převede ASCII znak v A na hexa číslo
+30 DADR – zobrazí číslo v HL na obrazovku (pomocí CO)
+33 DBYTE – zobrazí číslo v A na obrazovku (pomocí CO)
+36 HILO – zvětší HL o 1 a porovná s DE. Při HL větší CY=1, jinak CY=0
+39 NEXT – předání řízení monitoru při normálním ukončení programu (při chybě se použije ERROR)
+3C SPACE – vypíše mezeru na obrazovku (přes CO)
+3G CINCR – přečte znak y klávesnice (CI), při CR (ENTER) CZ=1 Z=1, při SPACE CY=0 Z=1, pro jiné znaky Z=0
+42 TEXT – zobrazí text adresovaný v HL délky D
+45 XY – vyhrazeno pro TOOL
+48 HXASC – převod hexa čísla na znak v A
+48 EXFLG – ovládání flagů pro MONITOR a MIKOS. v C se předává číslo službz a v A data. Systémová proměnná MODE obsahuje flagy:
bit 0 – tiskárna (1 ano, 0 ne)
bit 1 – zákaz zobrazení kurzoru (1 – zákaz zobrazování)
bit 2 – binární soubor (1=bin, lze posílat všechny znaky včetně 1Ah (CTRL+Z))
bit 3-6 – rezervováno
bit 7 – inverzní znaky (1=inverze)
V DE vrací adresu byte, se kterým se pracovalo. Služby jsou:
C=0 mode (hodnota v A)
C=1 FIND FLAG pro otevření souboru na kazetě, A=0 počáteční nastavení
C=2 rezervováno, na Ondrovi nepoužito
C=3 OPEN FLAG pro otevření souboru na kazetě, A=0 počáteční nastavení pro výstupní soubor
C=4 rezervováno
C=5 nastav kurzor, řádek v A
C=6 nastav kurzor, sloupec v A
C=7 nastavení okna, v A počet řádků
+4E BEEP – v B výška 0-7 (0=ticho, lze využít jako čekání), v C délka. Nekompatibilní se SAPI.
+51 FAST – zapnutí či vypnutí zobrazování na obrazovce, při vypnutém zobrazování jede počítač rychleji. C=0 zákaz
+54 FIND – otevření souboru na kazetě pro čtení. Pokud HL ukazuje na uvozovky, text mezi uvozovkami se bere jako jméno (musí být ukončeno uvozovkou nebo CR), jinak e dotazuje jako při zadání *. Pokud byl již předtím nějaký soubor otevřen, uzavře se a otevře se nový.
+57 OPEN – otevření souboru na kazetě pro zápis. Jméno je ukazováno v HL jako u služby FIND. Byl-li nějaký soubor otevřen, uzavře se a nový se otvírá v režimu APPEND (bez hledání).
+5A CLOSE – uzavře výstupní soubor
+5D LOAD – nahraje binární program do paměti, jméno ukazováno v HL jako u služby FIND
+60 SAVE – zápis binárního souboru na kazetu, jméno a rozsah souboru si vyžádá od obsluhy

Protože nám (byť velmi stručný a základní) popis MIKOSu zabral hodně místa, podíváme se na stručný popis Basicu, Teditu a Toolu jindy v jiném článku.