sobota 3. června 2000

Mistrum ROM

autoři: Milan Pražan, Jaromír Mynařík

Tato varianta programového vybavení Mistrum vznikla po zkušenostech s některými variantami základního programového vybavení počítače ZX Spectrum, kterými se majitelé počítačů snaží zdokonalit komfort obsluhy počítačů a vylepšit tak stávající nedostatky ZX Spectrum. Nutno podotknout, že tyto úpravy v převážné většině aplikací, zejména týkajících se tvůrčich programátorské práce, nenarušují tuto činnost, ale naopak ji mnohdy ulehčují. Jinak tomu bývá při využívání počíače pouze k zábavě, tj.k hrám, kdy jsou uživatelské programy často chráněny tvůrci proti pořizování neoprávněných kopií.

Jednou z forem této ochrany je i kontrola originálnosti původního programového vybavení ZX Spectrum. Je tím částečně znemožňován přístup "levnými" prostředky do těchto programů. Nicméně existují různé způsoby proniknutí i do těchto programů. ale tato problematika není náplní tohoto popisu. Jde pouze o upozornění konstruktérů Mistrum na tuto okolnost, aby ji nebyli případně zaskočeni.

Jednou z modifikací základního programového vybavení Spectra je programové vybavení Mistrum, které se opírá o některé osvědčené výhody oproti ZX Spectrum. Počet změn v paměti EPROM je přibližně 2 500 bytů.

Převážná část původního programového vybavení ZX Spectrum zůstala zachována z důvodu programové kompatibility. Ke změnám v programu byla využita všechna volná místa v paměti, zejména nevyužitý paměťový prostor na konci paměti.

Standardní operační systém ZX Spectrum obsahuje několik chyb a také nevyužívá celé kapacity paměti ROM (např. úsek od 386EH do 3CFFH).

Mezi nejčastěji uváděné chyby patří chybné ošetření nemaskovaného přerušení (NMI), nejednoznačnost při vyhodnocení některých matematických úkonů a další chyby. Dále v počítači není nejvhodnějším způsobem vyřešena editace programů v BASIC. Chyby, které se v operačním systému vyskytují, obvykle nepůsobí nepřekonatelné potíže; je nutné s nima počítat a přizpůsobit se jim. Jiná situace však nastává, je-li zapotřebí využívat NMI, neboť tuto chybu nelze programově obejít ani opravit. Částečně i z těchto důvodů byla vytvořena nová verze operačního systému dále označovaná jako "Mistrum", která odstraňuje některé chyby a současně s dalšími úpravami umožňuje snáze ukládat a editovat programy v BASIC, včetně dalších výhod. Úpravy samozřejmě respektují programovou kompatibilitu s původním operačním systémem Spectrum.

Vlastní úpravy spočívají v následujících změnách: Po zapnutí počítače (popř. po stisku tlačítka Reset) je patrná změna ve vzhledu úvodního hlášení na obrazovce, které má tvar "(C) '88 Sinclair - CS MISTRUM" a rovněž zobrazí hlášení o velikosti volné paměti RAM v bytech ve tvaru "RAM=41523". K tomuto úvodnímu hlášení je možno se kdykoli během výpočtů či psaní programů vrátit stisknutím tlačítka Reset. Velikost volné paměti je vždy nově aktualizována. Navíc tlačítko Reset má oproti standardní verzi obrovskou výhodu v tom, že nezpůsobuje vymazání paměti RAM, ale umožňuje zastavit běh programu a předá řízení do hlavní prováděcí smyčky. Výhodu této úpravy ocení jistě každý, neboť zhroucený popř. "zacyklený" program lze snadno opravit či pozastavit, aniž by byl zničen.

Další významnou změnou oproti ZX Spectrum je nový znakový generátor včetně nejběžnějších znaků české abecedy, uložených v oblasti uživatelské grafiky (UDG). Další změnou je výpis všech hlášení v češtině, což ocení začátečníci a zejména děti.

Oproti standardní verzi je částečně pozměněna funkce magnetopáskových programů. Po zadání příkazu SAVE se nezobrazuje původní text "Start tape, then press any key", ale nahrávání začne ihned po stisku ukončovací klávesy Enter. Počítač pouze zobrazí zprávu o typu ukládaného souboru včetně hlášení že je prováděn příkaz SAVE. U ostatních magnetopáskových příkazů např. LOAD, MERGE, VERIFY je zobrazován použitý typ příkazu včetně údajů o typu souboru, jeho délce, počáteční adrese a jménu. Všechny tyto údaje jsou vypisovány z úvodní hlavičky souboru a umožňují snazší orientaci v programech, zejména v neznámých.

Na druhé straně však tyto informace mohou mít negativní vliv při nahrávání některých programů, zejména her. Nežádoucímu výpisu nadbytečných informací na obrazovky je možné zabránit použitím příkazu POKE 23739,111.

Další změnou je obsluha tlačítka NMI, kterého u standardní verze nelze využívat. Zde je obsluha NMI realizována klasickým způsobem, kdy jsou do zásobníku uschovány obsahy všech registrů včetně alternativních. Jako poslední je načtena adresa programu ukončení NMI a rovněž uložena na vrchol zásobníku. Adresa obslužné rutiny NMI (výkonné) musí být uložena v systémovvé proměnné na adresách 23728 a 23729 (5CB0H a 5CB1H). Po ukončení programu obsluhy NMI je vyzvednuta adresa ukončení NMI ze zásobníku a přes tuto část programu je obnoven původní obsah všech registrů a návrat do přerušeného programu.

Velmi podstatných změn doznal editor a kontrola syntaxe řádků BASIC. Změny se týkají především možnosti pohybu kurzorem v "basicovském" řádku (v editační oblasti) všemi směry, tedy i nahoru a dolů. Tato funkce byla umožněna rozšířením původního editoru o podprogramy pohybu kurzoru nahoru a dolů, umístěné v původně nevyužité části paměti ROM. Změna v kontrole syntaxe "basicovského" řádku způsobí, že je-li nalezena chyba, kurzor je ze svého původního místa přesunut a ukazuje chybu. Ve standardním systému na chybu ukazoval blikající otazník a jedná-li se o dlouhý řádek, je oprava značně zdlouhavá.

Dále byl operační systém rozšířen o nové příkazy, které zvyšují komfort obsluhy. Příkaz je možné používat jen v prováděcím režimu, nelze je tudíž používat v programech! K vyvolání se používá vždy znak (popř. s parametry) ukončený Enter.

Rozšiřující příkazy jsou:
! - programový Reset,
# n - editace řádku n,
% - pokračování automatického číslování po přerušení,
@ - přečíslování "basicovských" řádků,
& - výpis proměnných a polí.

Programového resetu se využívá k nastavení definovaného počátečního stavu a vynulování paměti RAM.

Příkazem # n lze přímo editovat "basicový" řádek s číslem n. Funkce tohoto programu spočívá v nalezení adresy "basicového" řádku n a skokem do editoru. Tím se přesune řádek číslo n do editační oblasti a lze s ním pracovat obdobným způsobem, jako při funkci EDIT.

Velmi výhodné jsou funkce $ a % zejména při psaní dlouhých programů v BASIC. Tato funkce umožňuje automaticky číslovat řádky s počáteční hodnotou 10 a krokem 10.

Inicializace je prováděna příkazem $, který nastaví pracovní proměnné na 10, 10. Tyto pracovní proměnné jsou uloženy v oblasti PRINTER BUFFER na adresách 5B06H - počáteční číslo řádku; 5B08H - délka kroku.

Příkaz % pracuje obdobným způsobem až na to, že neinicializuje pracovní proměnné (teplý start), ale pouze jich využívá ke stejné funkci. Pracovní proměnné je pochopitelně možné přepsat příkazem POKE podle vlastního uvážení a příkazem % využívat nastavených hodnot pro další číslování řádků. Je však nutno si uvědomit, že při použití tiskárny budou nastavené hodnoty zničeny, neboť po výpisu řádku na tiskárnu je oblast PRINTER BUFFER nulována. Bez nové inicializace těchto proměnných by použití příkazu % vedlo k číslování řádku 0 s krokem 0, ale vzhledem k tomu, že nelze přímo ukládat řádek 0, zapsané příkazy nebudou nikam uloženy!

Čísla řádků nejsou kontrolována programem, ale editorem a jsou přijata jen tehdy, leží-li v intervalu 1 až 9999. Ukončit automatické číslování řádků lze několika způsoby:

1. Vymazáním nově zobrazeného čísla řádku použitím tlačítka Delete (Caps Shift + 0) a dvojím stiskem Enter.
2. Při výskytu chyby v právě pořizovaném řádku (po jejím opravení a Enter).
3. Stiskem znaku apostrof (Symbol Shift + 7) a Enter

Další funkcí rozšiřující možnosti tohoto systému je příkaz &. Tento příkaz vypisuje označení všech číselných a řetězcových proměnných použitých v programu. Rovněž jsou vypisována označení číselných a řetězcových polí včetně jednotlivých dimenzí. Posledním vypisovaným parametrem je proměnná cyklu FOR - TO - NEXT. Tato užitečná funkce pracuje ovšem pouze tehdy, pokud byly "basicovské" proměnné již vytvořeny, tj. program byl spuštěn příkazem RUN. Do té doby proměnné ještě neexistují!

Příkazem @ se poze přečíslovávají řádky programu v BASIC. Tento příkaz přečísluje pouze čísla řádků, tedy nikoli odskoky a vyvolání (GO TO, GO SUB)! Přečíslování je nastaveno na počáteční hodnotu 10 s krokem 10.

V případě nutnosti vymazání "basicovských" řádků od čísla x do čísla y je možné použít další program implementovaný v této verzi vyvoláním příkazu na adrese 15 500. Např. při požadavku zrušení řádků č. 30 až 250 je možno zadat PRINT USR 15500,30,250 Enter. Tím se zruší uvedené řádky.

Obdobným způsobem je možno vyvolat zaváděcí program ZAVAD-ZX, který rekonfiguruje programové vybavení Mistrum na standardní verzi Spectrum (pouze u počítačů Mistrum)! Rekonfiguraci lze vyvolat příkazem PRINT USR 15414 Enter.

Všechna uvedená rozšíření mohou částečně přispět k většímu pohodlí při tvorbě programů a jistě si najdou své zastánce. Vlastnosti všech uvedených funkcí byly značnou měrou omezeny kapacitními možnostmi volného paměťového prostoru v paměti EPROM.