MRS

Z PMD 85 Infoserver

MRS - Memory Resident System
Autori: RNDr. Ivan Jedlička, Igor Titka, Milan Tvarožek, Ivan Fedorko, Peter Ondriš a František Kubiš


MRS - Memory Resident System
Obrázok:MRS.png
MRS - Memory Resident System
Autor:RNDr. Ivan Jedlička, Igor Titka, Milan Tvarožek, Ivan Fedorko, Peter Ondriš a František Kubiš
Vývojár:UAK - Ústav aplikovanej kybernetiky, Bratislava - Dúbravka
Lokalizácia:angličtina
Download: pmd85emu_develop.zip


Obsah


MRS - Memory Resident System - je vývojové prostredie pre písanie a ladenie programov v assembleri mikroprocesora Intel 8080 (MHB8080A). Prostredie obsahuje pohodlný celoobrazovkový editor zdrojového textu s automatickou kontrolou syntaxe, veľmi rýchly dvojprechodový kompilátor assembleru, linker pre možnosť vytvárania väčšieho kódu z viacerých zdrojových textov a debugger s bohatými možnosťami ladenia programov.

História

Prvá verzia MRS pre PMD 85 bola zo začiatku písaná na počítači MO8X, neskôr na SMEP. Viac o histórii MRS sa dozvieme v rozhovore s Ivanom Fedorkom:


Prvá verzia MRS pre ZX Spectrum, umožňujúca písať programy v asembleri Z80, vznikla 8. 10. 1986. Neskôr, v roku 1988 vznikla aj verzia MRS pre C64 pre assembler procesora 6502. Autorom tejto verzie pre C64 je Juraj Zopp (známy pod prezývkou Hell Bytes). Existuje verzia MRS aj pre Sharp MZ-800, ktorá je pravdepodobne portom zo ZX Spectra.

Spustenie MRS

MRS je distribuovaný ako klasická PTP páska mrs.ptp obsahujúca tieto súbory:

názov spustenie model poznámka
MRS JUMP 6000 1
MRS-NOVE JUMP 6000 1 upravená verzia
MRS2 JUMP 6000 2,2A,3 verzia pre PMD 85-2, 2A a 3
LIB knižnica
BZZZZT zdroják (zabzučanie z hry Hlípa)

Vybraná verzia MRS sa nahrá do pamäte klasicky pomocou MGLD 00. Po nahratí hlavného bloku treba do pamäte pomocou MGLD 00 nahrať ešte základný súbor knižnice LIB (MRS bude funkčné aj bez súboru LIB, ale v tomto prípade nebudú dostupné niektoré funkcie knižnice). Spustenie MRS je potom pomocou príkazu JUMP 6000.

Ďalší spôsob distribúcie MRS je v podobe ROM modulu (súbor mrs2.rmm). ROM modul s MRS stačí vložiť do PMD 85, urobiť Reset a MRS sa automaticky nahrá do pamäte a spustí. Ak sa počas Resetu drží kláves STOP, do pamäte sa zavedie aj základný súbor knižnice LIB. Táto verzia je určená iba pre PMD 85-2/2A/3. Na PMD 85-3 je treba najprv prejsť do režimu kompatibility pomocou JUMP FFF0.

Obsadenie pamäte

MRS samotný je v pamäti uložený na adresách 6000h až 7EFFh. Zdrojový text sa ukladá od adresy 5FFFh smerom dole. Knižnica začína od adresy 0040h a jednotlivé moduly sa ukladajú od tejto adresy smerom hore. V prípade, že sa koniec knižnice stretne so začiatkom zdrojového textu, nastane preplnenie pamäte (chyba "MEM FULL") a vtedy je nutné buď odstrániť z knižnice posledné moduly, alebo skrátiť zdrojový text, poprípade zdrojový text rozdeliť na viac menších a využiť možnosť ich postupného prekladu a následného zlinkovania v knižnici.

Ovládanie

Po štarte sa systém prihlási v dialógovom riadku výpisom a zvukovým signálom:

MRS>

a očakáva trojpísmenový príkaz. Príkazy môžu byť:

  • MON - návrat do MONITORa PMD 85
  • EDI - prechod do modulu EDITOR zdrojových textov
  • ASM - preklad zdrojového textu (ASSEMBLER)
  • LNK - zlinkovanie modulov v knižnici (LINKER)
  • DBG - spustenie ladiaceho programu (DEBBUGER)
  • ALD - postupné vykonanie príkazov ASM + LNK + DBG
  • LIB - prechod do modulu LIBRARY pre obsluhu knižnice

Editor

Modul pre vytváranie a editáciu zdrojových textov. Prihlási sa v dialógovom riadku výpisom:

EDI>

a tiež očakáva trojpísmenový príkaz, ktorý môže mať parametre.

Prvú skupinu tvoria príkazy, ktoré spúšťajú celoobrazovkovú editáciu zdrojového textu:

  • INI - vymaže existujúci zdrojový text
  • LN-X - skok o X riadkov v texte nazad
  • LN+X - skok o X riadkov v texte dopredu
  • LN-0 - skok na začiatok zdrojového textu
  • LN+0 - skok na koniec zdrojového textu
  • LN=0 - skok na naposledy editovaný riadok
  • LN=X - skok na riadok X
  • LN=návestie - skok na riadok, kde je definované dané návestie
Poznámka: Po prvom spustení MRS sa odporúča použiť príkaz INI pre inicializáciu pracovnej oblasti pre zdrojový text.

Druhú skupinu tvoria príkazy na prácu s magnetofónom:

  • SAV názov - uloženie zdrojového textu na MGF
  • LOA názov - nahratie zdrojového textu z MGF
názov je maximálne osemznakový názov súboru, oddelený od príkazu jednou medzerou. V príkaze LOA je meno nepovinné.
Poznámka: Príkaz LOA nevymaže starý zdrojový text, ale nový text vsunie do pôvodného textu za riadok, ktorý bol naposledy editovaný.

Tretiu skupinu tvoria príkazy na rôzne ďalšie činnosti so zdrojovým textom:

  • RST - Presun návestí zo zdrojového textu do pracovnej oblasti
    Pozor! Návestia sú zo zdrojového textu odstránené.
  • DIS XXXX-YYYY - Spätný preklad binárneho kódu na zdrojový text

Príkaz DIS slúži na vytváranie zdrojového textu z binárneho kódu v pamäti. XXXX a YYYY sú hexadecimálne čísla bez postfixu "H". XXXX je začiatočná adresa kódu v pamäti, YYYY je koncová adresa kódu v pamäti. Spätný preklad negeneruje žiadne návestia, všetky operandy sú čísla a bajty, ktoré nezodpovedajú žiadnej platnej inštrukcii i8080, preloží ako DB. Takto vygenerovaný zdrojový text sa vkladá pred naposledy editovaný riadok.

Štvrtú skupinu tvoria príkazy, ktoré je možné zadať aj pri ohlásení MRS>. Sú to príkazy MON, EDI, ASM, LNK, DBG, ALD a LIB.

Editácia zdrojového textu

Editácia zdrojového textu sa spúšťa príkazmi INI, RST alebo LN. Riadky musia mať jeden z troch formátov:

  • Riadky s inštrukciou alebo pseudoinštrukciou
  • Riadky s komentárom
  • Riadky s direktívou

Riadky s inštrukciou alebo pseudoinštrukciou sú rozdelené na nasledujúce polia:

  • 7 znakov - pole návestia
  • 5 znakov - pole inštrukcie
  • 16 znakov - pole operandov
  • 16 znakov - pole poznámky

Pole návestia je vyplnené medzerami alebo obsahuje návestie. Návestie musí začínať písmenom, za ktorým môžu nasledovať písmená a číslice. Maximálna dĺžka návestia je 6 znakov.

Pole inštrukcie môže obsahovať inštrukcie procesora i8080 alebo nasledujúce pseudoinštrukcie:

  • ORG - Nastavuje čítač adries, t.j. adresu, na ktorú sa bude prekladať kód. V poli operandov musí byť výraz.
  • DW - Ukladá do pamäte dvojbajtové slová dané hodnotami výrazov v poli operandov. Jednotlivé výrazy musia byť oddelené čiarkami.
  • DB - Ukladá do pamäte bajty dané hodnotami výrazov v poli operandov. Jednotlivé výrazy musia byť oddelené čiarkami.
    Ako výraz môže byť použitý viacznakový reťazec v apostrofoch.
  • DS - Rezervuje pamäť. V poli operandov musí byť výraz, ktorého hodnota sa pripočíta k čítaču adries.
  • EQU - Priradí návestiu v poli návestia hodnotu danú výrazom v poli operandov.
  • ENT - Deklaruje, že návestie napísané v poli operandov bude viditeľné v ostatných moduloch knižnice (ENTRY POINT).
  • EXT - Deklaruje, že návestie napísané v poli operandov je definované v niektorom inom module knižnice (EXTERNAL POINT).
  • END - Označuje koniec zdrojového textu pre preklad príkazmi ASM a ALD.

Pole operandov môže obsahovať prvky predpísané pre inštrukciu alebo pseudoinštrukciu. Ak sa v (pseudo)inštrukcii použije výraz (výrazy), tento výraz musí mať jeden z nasledujúcich tvarov:

   Tvar Význam
 SYMBOL Návestie, dekadické číslo, hexadecimálne číslo alebo znaková konštanta (jeden znak v apostrofoch)
 SYMBOL + SYMBOL Súčet dvoch symbolov
 SYMBOL - SYMBOL Rozdiel dvoch symbolov
-SYMBOL Záporná hodnota (dvojkový doplnok hodnoty) symbolu
>SYMBOL Vyšší bajt 16-bitovej hodnoty symbolu
<SYMBOL Nižší bajt 16-bitovej hodnoty symbolu

Hexadecimálne čísla musia začínať číslicou a byť zakončené písmenkom H, napríklad 1234H, 0ABCDH.

Pole poznámky môže obsahovať ľubovoľné znaky. Bodkočiarka na začiatku poľa poznámky nie je povinná.

Riadky s komentárom začínajú znakom ';' (bodkočiarka). Celý riadok sa považuje za komentár a pri preklade sa preskakuje.

Riadky s direktívou začínajú znakom '*' (hviezdička). Tieto riadky slúžia na riadenie prekladu. Za hviezdičkou nasleduje písmeno určujúce danú činnosť. Za písmenom môžu nasledovať podľa potreby ďalšie znaky.

  • *A - Zapnutie generovania protokolu o preklade.
  • *E - Vypnutie generovania protokolu o preklade, vypisujú sa iba riadky na ktorých sa nájde chyba.
  • *L - Nastavenie výpisu protokolu o preklade na tlačiareň.
  • *CXXXX - Nastavenie adresy kam sa má ukladať preložený kód. XXXX je hexadecimálne číslo. Ak je XXXX=0, kód sa do pamäte vôbec neukladá. Inštrukcia ORG ruší platnosť tejto direktívy.

Príklad využitia direktívy *CXXXX.

Máme zdrojový text a chceme, aby ním vygenerovaný kód fungoval na adrese 6000h. Na začiatku zdrojového textu sme preto dali pseudoinštrukciu ORG 6000H. Lenže takýto zdrojový text sa nedá priamo preložiť, pretože generovaný kód by prepísal systém MRS. Použijeme preto direktívu *C1000, ktorou systému povieme, aby kód, určený pre fungovanie na adrese 6000h, ukladal na adresu 1000h.

       ORG 6000H
*C1000
       ...

Neskôr, keď MRS už nebudeme potrebovať, náš kód presunieme na adresu 6000h a tu ho spustíme.

Editačné klávesy

Pri editácii zdrojového textu môžete použiť nasledujúce klávesy:

  • Medzera - Vyplní zbytok poľa medzerami a kurzor sa posunie na začiatok ďalšieho poľa. V poli poznámky a na riadkoch s komentárom sa do textu vkladá znak medzera ako obvykle.
  • ---> - Presun na predchádzajúci znak v riadku.
  • <--- - Presun na nasledujúci znak v riadku.
  • Shift ---> - Presun na ďalšie pole v riadku - návestie, inštrukcia, operandy, poznámka.
  • Shift <--- - Presun na predchádzajúce pole v riadku - návestie, inštrukcia, operandy, poznámka.
  • END - Nastaví kurzor na posledný znak v poli operandov. Ak je pole operandov prázdne, kurzor bude na jeho začiatku.
  • INS - Vloží medzeru na pozícii kurzora v danom poli. Zvyšok poľa odsunie doprava. Nemení ďalšie pole.
  • DEL - Zmaže znak na pozícii kurzora v danom poli. Zvyšok poľa posunie doľava. Nemení ďalšie pole.
  • EOL - Vytvorenie nového prázdneho riadku za riadkom, na ktorom je kurzor a presun kurzora na tento nový riadok.
  • Shift DEL - Vymazanie riadku, na ktorom je kurzor.
  • ¦<--- - Presun kurzora na predchádzajúci riadok.
  • --->¦ - Presun kurzora na nasledujúci riadok.
  • Shift ¦<--- - Presun kurzora na predchádzajúcu stránku zdrojového textu.
  • Shift --->¦ - Presun kurzora na nasledujúcu stránku zdrojového textu.
  • Shift šikmá <--- - Riadok, na ktorom stojí kurzor, sa stane prvým riadkom na obrazovke.
  • Shift INS - Zduplikovanie riadku, na ktorom je kurzor.
  • Shift END - Výskok z editora zdrojového textu do príkazového režimu EDI>.
Tip: Ak chceme niečo doplniť na začiatok zdrojového textu, ešte pred prvý riadok, tak prídeme kurzorom na prvý riadok a tento prvý riadok pomocou Shift INS zduplikujeme. Prvý duplikát riadku prepíšeme na nový obsah a druhý duplikát si necháme.

Chybové hlásenia

Pri editácii môže dôjsť k nasledujúcim dvom kritickým chybám:

  • MEM FULL - V pamäti nie je dosť miesta pre uloženie nového riadku zdrojového textu. Vtedy je nutné skrátiť zdrojový text alebo odstrániť z knižnice posledné moduly.
  • ST FULL - Nové návestie sa nevojde do tabuľky návestí. Maximálna kapacita tabuľky je 256 návestí. V takom prípade sa odporúča skompilovať zdrojový text, pričom pseudoinštrukcia END musí byť na poslednom riadku v zdrojovom texte. Ak kompilácia skončí úspešne (bez chyby), z tabuľky sa odstránia všetky v zdrojovom texte aktuálne nepoužité návestia. Ak ani toto nepomôže, je nutné manuálne zredukovať nejaké návestia zo zdrojového textu a zdrojový text znovu skompilovať bez chýb.

Kompilácia zdrojového textu

Kompilácia je proces, pri ktorom sa zo zdrojového textu vytvára binárny kód v pamäti počítača. Pre kompiláciu zdrojového textu je potrebné v príkazovom režime napísať jeden z týchto príkazov:

  • ASM modul
  • ALD modul

modul je nepovinný parameter - meno modulu. Pre meno modulu platia tie isté pravidlá ako pre bežné návestia - musí začínať písmenom, ďalej môžu byť písmená alebo číslice a maximálne 6 znakov.

Kód vzniknutý prekladom zdrojového textu sa (štandardne) uloží do knižnice ako modul so zadaným menom modul. Ak meno nie je uvedené, jedná sa o tzv. dočasný modul, ktorý sa nasledujúcim prekladom prepíše. Ak sa počas prekladu vyskytnú kompilačné chyby, modul sa do knižnice vôbec nezaradí. Táto koncepcia umožňuje veľmi jednoducho daný modul opakovane editovať, prekladať, linkovať a ladiť, kým nie je funkčný a až potom ho preložiť s menom a tým ho trvalo vložiť do knižnice.

Ak sa pri kompilácii vypisuje protokol o preklade (zapína sa direktívou *A a vypína *E), je možné použiť nasledujúce klávesy:

  • WRK - dočasné pozastavenie výpisu
  • Shift WRK - pokračovanie vo výpise
  • STOP - definitívne prerušenie celého prekladu

Ak preklad prebehne do konca, v dialógovom riadku sa vypíše počet nájdených chýb. V prípade ALD sa po stlačení EOL vypíše aj počet chýb z linkovania. Ďalšie stlačenie EOL vráti systém do príkazového režimu (po ASM) alebo do debuggera (po ALD).

Pri preklade môže dôjsť k nasledujúcim chybám:

Kód chyby Význam
U Použitie nedefinovaného návestia. V poli operandov sa vyskytlo návestie, ktoré nie je nikde definované, t.j. nie je ani v poli návestia a ani v poli operandov pri inštrukcii EXT.
M Viackrát definované návestie. Toto návestie sa nachádza na viacerých riadkoch v poli návestia a/alebo v pseudoinštrukciách EXT.
D V poli operandov je použité viackrát definované návestie (už označené chybovým kódom M).
R Osembitová hodnota sa nevojde do ôsmych bitov (nastane napr. pri MVI A,256). Vo všeobecnosti platí, že 16-bitová hodnota musí mať vyšší bajt 00 alebo FF. Toto umožňuje zadávať 8-bitové hodnoty v rozsahu -256..+255. Táto chyba sa tiež hlási aj v prípade, ak je návestie použité ako osembitová hodnota definované v pseudoinštrukcii EXT. V čase prekladu je hodnota takéhoto návestia ešte neznáma a je tu preto riziko, ze môže prekročiť osem bitov.
E Návestie popísané ako externé (v pseudoinštrukcii EXT) sa vyskytlo ako súčasť výrazu. Táto chyba sa hlási, pretože linker nevie vyhodnocovať výrazy v zdrojovom texte, vie iba do pamäte priamo zapísať 16-bitovú hodnotu návestia, ktoré je v pseudoinštrukcii EXT.

Riadok, na ktorom sa nájde chyba, sa zobrazí v tomto formáte:

  • Znak 1 - Kód chyby
  • Znak 2-5 - číslo chybného riadku
  • Znak 6-15 - Preložený kód (ak je možné riadok preložiť)
  • Znak 16+ - Kópia riadku zo zdrojového textu

Pri preklade môže dôjsť k nasledujúcim dvom kritickým chybám, ktoré okamžite ukončia preklad:

  • NO END - Nedefinovaný koniec programu - v zdrojovom texte chýba pseudoinštrukcia END.
  • MEM FULL - Pokus uložiť program do pamäte na adresy, kde nesmie byť. Toto môže nastať, ak by pri kompilácii modulu do knižnice vytváraný kód narazil na začiatok zdrojového textu, alebo ak by vytváraný kód prepísal samotný systém MRS (pravdepodobne nevhodná hodnota v pseudoinštrukcii ORG).

Linkovanie modulov knižnice

Linkovanie je proces, pri ktorom sa do všetkých skompilovaných modulov knižnice doplnia správne hodnoty všetkých krížových odkazov medzi jednotlivými modulmi. Krížové odkazy sú návestia označené pseudoinštrukciami ENT a EXT.

Lepší, než 1024 slov, je jeden názorný príklad:

Najprv sa do MRS nahrá a príkazom ASM MODUL1 preloží prvý zdrojový text, ktorý obsahuje:

       EXT  RUTINA
       CALL RUTINA

Pseudoinštrukcia EXT RUTINA hovorí, že adresa rutinky RUTINA nie je definovaná v tomto module MODUL1, ale niekde inde. Pri preklade tohto modulu je táto adresa preto ešte neznáma a teda nemôže byť v čase jeho kompilácie doplnená do inštrukcie CALL.

Potom sa do MRS nahrá a príkazom ASM MODUL2 preloží druhý zdrojový text, ktorý obsahuje:

       ENT  RUTINA
RUTINA ...
       ...
       RET

Pseudoinštrukcia ENT RUTINA hovorí, že linker môže použiť túto adresu pre doplnenie chýbajúcich adries vo všetkých moduloch všade tam, kde to je potrebné.

Pri linkovaní týchto dvoch modulov (príkaz LNK) vezme linker hodnotu návestia RUTINA z druhého modulu MODUL2 a doplní ju do inštrukcie CALL v prvom module MODUL1.

Pre linkovanie modulov knižnice je potrebné v príkazovom režime napísať jeden z týchto príkazov:

  • ALD modul
  • LNK

modul je nepovinný parameter - meno modulu použité pri kompilácii práve nahraného zdrojového textu.

Linkovanie stačí spustiť až po kompilácii všetkých použitých modulov.

Po skončení linkovania sa vypíše počet nájdených chýb a zoznam návestí, ktoré sú síce označené pseudoinštrukciou EXT ako externé, avšak nie sú v žiadnom module určené pre linkovanie pseudoinštrukciou ENT.

Poznámka: Linkovanie kódu a využitie knižnice nie je povinné. Pokiaľ programátor použije ORG pre umiestnenie kódu na požadované miesto a všetky návestia bude mat definované v rámci svojho zdrojového textu (nepoužije pseudoinštrukcie ENT a EXT), už samotnou kompiláciou príkazom ASM vznikne funkčný použiteľný kód a linkovanie v tomto prípade nie je potrebné.

Debugger

Poskytuje funkcie pre ladenie programov v strojovom kóde. Spúšťa sa príkazmi DBG alebo ALD. Po spustení sa v dialógovom riadku prihlási výpisom:

X PCPC INŠTRUKCIA AAFF BBCC DDEE HHLL SPSP
  • X - status - informácia o stave debuggera
  • INŠTRUKCIA - aktuálna inštrukcia v pamäti na adrese PCPC
  • PCPC, AAFF, BBCC, DDEE, HHLL, SPSP - hexadecimálny výpis obsahu jednotlivých registrov procesora i8080

Ovládacie klávesy v debuggeri:

  • Shift INS - Zapnutie alebo vypnutie kopírovania dialógového riadku do pracovnej časti obrazovky. Táto funkcia je užitočná, keď chceme vidieť históriu naposledy vykonaných operácii.
  • R - REGISTER
    Nastavovanie hodnôt registrových párov. Po stlačení R sa očakáva stlačenie jedného z nasledujúcich klávesov, následne je možné zadať novú hodnotu pre daný registrový pár.
    • P - PC : Program Counter
    • A - AF : Akumulátor a flag register. Akumulátor je vyšší bajt zadávanej hodnoty.
    • B - BC
    • D - DE
    • H - HL
    • S - SP : Stack Pointer
  • W - WINDOW
    Nastavenie ochranných okien pre krokovanie. Po stlačení klávesu W systém očakáva stlačenie jedného z klávesov M alebo P. Podľa tohto klávesu sa budú definovať pamäťové okná, alebo okná pre register PC. Po stlačení klávesu sa zobrazí osem adries, ktoré označujú jednotlivé okná nasledovne: prvá dvojica adries - prvé okno, druhá dvojica - druhé okno, atď. Stlačením číslice od 0 do 7 si systém vypýta novú hodnotu daného čísla.
    Význam okien:
    Pamäťové okná označujú oblasti pamäte, do ktorých je zákaz zapisovania. Systém pri krokovaní nevykoná inštrukciu, ktorá by sa pokúšala zapisovať do niektorého okna, ale označí ju chybou M. Prvé okno je defaultne nastavené na samotný systém MRS a zdrojový text - tieto sú tým pádom chránené proti prepísaniu.
    PC okná sú intervaly povolených hodnôt, ktoré môže PC register nadobúdať. Ak register PC nemá vhodnú hodnotu, systém túto situáciu označí chybou P. Prvé okno je defaultne nastavené na hodnotu 0000-FFFF, aby bolo možné krokovať program kdekoľvek v pamäti.
  • S - STEP
    Krokovanie programu. Jedno stlačenie S vykoná jednu inštrukciu, ktorá bola aktuálne zobrazená pred stlačením S. Pred vykonaním inštrukcie sa testuje či sa inštrukcia nepokúša zapisovať do niektorého zo zadaných pamäťových okien. Ak áno, inštrukcia sa nevykoná a zobrazí sa status M.
  • C - CALLS
    Krokovanie programu pomocou breakpointu, ktorý sa automaticky vkladá za práve vykonávanú inštrukciu. Vďaka tomu sa podprogramy volané pomocou CALL vykonajú "naostro", t.j. plnou rýchlosťou. Táto funkcia je vhodná ak ladíte hlavný program, pričom všetky podprogramy už máte odladené a funkčné.
  • T - TRACE
    Ladený program automaticky beží v krokovacom režime. Po každej vykonanej inštrukcii sa vypisujú hodnoty všetkých registrov.
    Pred vykonaním každej inštrukcie sa kontrolujú všetky ochranné okná - pre beh programu a aj pre pamäť. Pri porušení ktoréhokoľvek ochranného okna sa inštrukcia nevykoná a v statuse sa objaví status W alebo P, podľa toho, čo bolo porušené.
    Beh programu je možné manuálne zastaviť klávesom STOP.
  • N - NO TRACE
    Ladený program beží v krokovacom režime presne tak isto ako pri TRACE, ale na obrazovku sa nič nevypisuje. Umožňuje to oveľa rýchlejší beh ladeného programu.
  • G - GO
    Spustenie programu "naostro". Pri behu programu sa kontroluje iba BREAK POINT. Ak sa program korektne ukončí (napr. inštrukciou RET), tak sa status nastaví na E. Ak sa pri behu programu narazí na breakpoint, status sa nastaví na B.
  • I - INSERT BREAK
    Vloženie breakpointu (bodu prerušenia) do programu. Po stlačení klávesu I sa očakáva zadanie adresy, kde má byť breakpoint vložený. Ak program pri krokovaní (T, N) alebo behu (G) narazí na breakpoint, status sa nastaví na B a hodnoty registrov v debuggeri budú nastavené podľa aktuálneho stavu.
Poznámka: Breakpoint je fyzicky realizovaný pomocou inštrukcie RST 0, preto ak chcete používať breakpoint, váš program by nemal túto inštrukciu využívať, a tak isto by nemal modifikovať prvé tri bajty na adrese 0000, kde sa pri použití breakpointu nachádza skok do systému MRS pre obsluhu zadaného breakpointu.
  • O - OUT BREAK
    Vymazanie vloženého breakpointu.
  • D - DUMP
    Výpis obsahu pamäte presne ako príkaz DUMP v Monitore. Po stlačení klávesu D sa očakáva zadanie adresy.
    Ovládacie klávesy počas výpisu:
    • ¦<--- - Presun na predchádzajúcu stranu výpisu
    • --->¦ - Presun na nasledujúcu stranu výpisu
    • Iný kláves - Návrat do debuggera
  • M - MEMORY
    Režim editácie pamäte, podobne ako príkaz MEM v Monitore. Umožňuje meniť obsah 12 bajtov, ktoré sa vypíšu do dialógového riadku. Po stlačení klávesu M sa očakáva zadanie adresy.
    Ovládacie klávesy počas editácie:
    • ¦<--- - Presun na predchádzajúcich 12 bajtov v pamäti
    • --->¦ - Presun na nasledujúcich 12 bajtov v pamäti
    • <--- - Presun kurzora po zobrazených bajtoch doľava
    • ---> - Presun kurzora po zobrazených bajtoch doprava
    • 0-9, A-F - Modifikácia hodnoty na mieste kurzora
    • EOL - Návrat do debuggera
  • Q - QUIT
    Ukončenie debuggera a návrat do príkazového režimu MRS>.

Library

Library je časť MRS, ktorá poskytuje funkcie na správu knižnice. Prihlási sa v dialógovom riadku výpisom:

LIB>

a očakáva trojpísmenový príkaz. Príkazy môžu byť:

  • LST - Výpis modulov knižnice.
    Počas vypisovania je možné použiť nasledujúce klávesy:
    • WRK - dočasné pozastavenie výpisu
    • Shift WRK - pokračovanie vo výpise
  • DEL - Vymazanie posledného modulu z knižnice.
Poznámka: Základný modul SYSMOD nie je možné vymazať.
  • SAV názov - Uloženie knižnice na magnetofón pod menom názov.
  • LOA názov - Nahratie knižnice z magnetofónu.
    názov je osemznakové meno súboru, oddelené od príkazu jednou medzerou. Pri príkaze LOA je meno nepovinné.

Ako ďalšie príkazy je možné zadať tie, ktoré fungujú pri ohlásení MRS>. Sú to príkazy MON, EDI, ASM, LNK, DBG, ALD a LIB.

Modul knižnice SYSMOD

Sysmod je základný modul knižnice, ktorý obsahuje rôzne užitočné adresy v systéme MRS ktoré môže programátor využiť vo svojich programoch.
V prípade použitia niektorej adresy je nutné v pseudoinštrukcii EXT uviesť názov tejto adresy, aby linker vedel adresu správne zlinkovať.

Zoznam adries v module SYSMOD

  • MEMORY - Adresa prvej voľnej pamäťovej bunky za knižnicou
  • LASTLN - Na tejto adrese sa nachádza adresa prvej obsadenej pamäťovej bunky za voľnou pamäťou.

Od prvej obsadenej bunky je v pamäti uložený zdrojový text a potom samotný systém MRS.

Poznámka: Tieto dve adresy umožňujú prácu s dynamickou pamäťou. Týmto programom
      EXT  MEMORY
      EXT  LASTLN
      LXI  D,MEMORY
      LHLD LASTLN
sa získajú v registroch DE a HL hranice používateľnej pamäte. Bežiaci program má k dispozícii pamäť od DE do HL-1.

Nasledujúce adresy sú vstupné body do užitočných rutiniek zo systému MRS:

  • DCBN - Konverzia reťazca decimálnych číslic na 16-bitovú binárnu hodnotu
    • Vstup:
      HL = adresa reťazca
    • Výstup:
      HL = adresa konca reťazca (reťazec končí ľubovoľným znakom, ktorý nie je číslicou 0-9)
      DE = konvertovaná binárna hodnota
      A = ukončovací znak
    • Mení: AF, DE, HL
  • HXBN - Konverzia reťazca hexadecimálnych číslic na 16-bitovú binárnu hodnotu
    • Vstup:
      HL = adresa reťazca
    • Výstup:
      HL = adresa konca reťazca (reťazec končí ľubovoľným znakom, ktorý nie je hexadecimálnou číslicou 0-9 a A-F)
      DE = konvertovaná binárna hodnota
    • Mení: AF, DE, HL
  • BNHX - Konverzia 8-bitovej hodnoty na dve hexadecimálne číslice
    • Vstup:
      A = konvertované číslo
      HL = adresa pamäte, kde sa má výsledok konverzie uložiť
    • Výstup:
      HL = adresa pamäte za uloženou dvojicou
    • Mení: AF, HL
  • FBNDC - Konverzia 16-bitovej hodnoty na reťazec decimálnych číslic
    • Vstup:
      BC = konvertované číslo
      HL = adresa pamäte, kam sa má uložiť výsledok
    • Výstup:
      HL = adresa pamäte za reťazcom decimálnych číslic, číslo je uložené v pamäti ako reťazec ASCII znakov
    • Mení: AF, DE, HL
  • INKEY - Čítanie jedného znaku z klávesnice s automatickým opakovaním (autorepeat)
    • Výstup:
      A = kód stlačeného klávesu
    • Mení: AF
  • SCAN - Ohmatanie klávesnice. Modul zistí, či je stlačený niektorý kláves
    • Výstup:
      A = 0, ak nie je stlačené nič; A = ASCII kód stlačeného klávesu
    • Mení: AF
  • CLEAR - Vymazanie obrazovky
    • Mení: AF
  • PIXEL - Rozkreslenie znaku na obrazovke
    • Vstup:
      A = ASCII kód znaku
      HL = adresa videopamäte, kam sa má byť uložený pravý dolný roh rozkresľovaného znaku. Na vlastné rozkreslenie znaku využíva modul MONITORa.
      0C03AH = jasová úroveň, blikanie
    • Mení: AF
  • OUTCHR - Vypisuje znak na pozíciu označenú kurzorom a kurzor posunie doprava. Na konci riadku prejde na nový riadok, na konci obrazovky posunie obrazovku hore. OUTCHR správne ošetrí tieto riadiace znaky:
    83H - posun kurzora vľavo <---
    85H - posun kurzora vpravo --->
    89H - ukončenie riadku a prechod na nový riadok
    • Vstup:
      A = ASCII kód znaku
    • Mení: AF
  • CURSOR - Adresa pamäte, ktorá obsahuje pozíciu kurzora na obrazovke pre modul OUTCHR.
    Sú to dva bajty, v prvom sa uchováva číslo stĺpca (0-43), v druhom číslo riadku (0-22).
  • OUTBUF - Výpis jedného riadku na obrazovku.
    Vypisovaný text je uložený od adresy LINE a vypíše sa vždy celý počet znakov (44).
    • Vstup:
      H = číslo riadku (0-22), kam sa má vypísať daný text.
    • Mení: AF
  • LINE - Adresa pamäte, ktorá obsahuje text vypisovaný modulom OUTBUF.
    Táto pamäť má veľkosť 44 znakov, využíva ju aj systém MRS vrátane ladiaceho programu, s čím treba počítať pri ladení programov.
  • BEEP - Vydá zvukový signál.
    • Mení: AF
  • MRS - práca s dialógovým riadkom.
    Modul vypíše požadovaný text do dialógového riadku, načíta vstupný text a podľa požiadavky ho analyzuje na trojznakové príkazy. Vyvolaním tohto modulu má užívateľ k dispozícii všetky funkcie popísané v popise práce s modulom MRS. To znamená, že na editovanie textu možno použiť klávesy -->, <--, INS, DEL. Vstup textu vždy ukončuje kláves EOL.
    • Vstup:
      A = číslo pozície v dialógovom riadku, od ktorej sa má text vypisovať (0-43)
      HL = adresa vypisovaného textu
      B = dĺžka vypisovaného textu, ak B=0, text sa nevypisuje
      C = maximálna dĺžka čítaného textu vrátane EOL. Ak C=0, text sa nečíta (požiadavka len na výpis)
      DE = adresa tabuľky trojznakových príkazov. Ak DE=0, načítaný text sa neanalyzuje. V tabuľke nasledujú vždy za sebou trojznaková skratka príkazu a adresa obslužného programu. Tabuľka je zakončená bajtom 00H. Ak je požadovaná táto analýza, modul nevráti riadenie, kým užívateľ nenapíše riadok, ktorý začína prípustným príkazom.
    • Výstup:
      B = počet načítaných znakov bez EOL. Načítaný reťazec je ukončený bajtom 00H.
      DE = adresa načítaného reťazca. Pokiaľ bola požadovaná analýza trojznakových príkazov, ukazuje DE na prvý znak za príkazom.
      HL = ak bola požadovaná analýza trojznakových príkazov, obsahuje adresu príslušného podprogramu
    • Mení: AF, BC, DE, HL
  • MRS2 - umožní opraviť text načítaný modulom MRS. Musí mu predchádzať volanie modulu MRS s čítaním reťazca.
    • Vstup:
      použije informácie získané pri práci modulu MRS. Modul MRS2 sa musí volať inštrukciou: JMP MRS2
    • Výstup:
      rovnaký ako pri module MRS
    • Mení: AF, BC, DE, HL
Poznámka: Po odoslaní textu bude program znovu pokračovať za predchádzajúcim volaním modulu MRS.
  • SENTRY - Vyhľadá výstupný bod v knižnici.
    Dá sa využiť, ak napr. jeden program produkuje dáta, ktoré má spracovať iný modul knižnice. Pomocou SENTRY môže daný program nájsť tabuľku v inom module, kam má uložiť vstupné dáta.
    • Vstup:
      HL = adresa reťazca, ktorý udáva požadované vstupné návestie.
    • Výstup:
      S = 1 - chybne zadané meno
      Z = 1 - v knižnici nie je také meno
      HL = adresa mena v knižnici. Na tejto adrese je 6 znakov meno a ďalšie dva bajty sú adresa, ktorú toto meno označuje (napr. adresa tabuľky, ktorej meno je popísané ako ENT)
    • Mení: AF, BC, DE, HL
  • GETMEM - Urči symbol. Ak je symbol návestie, potom sa práca modulu GETMEM týka naposledy prekladaného modulu a jeho využitie je obdobné ako modulu SENTRY.
    • Vstup:
      HL = adresa reťazca označujúceho symbol
    • Výstup:
      B = -1 - syntakticky chybný symbol
      B = 0 - symbol je konštanta a DE = jej hodnota
      B > 1 - symbol je návestie
      HL = adresa znaku za symbolom
      Ak je symbol návestie, potom
      B = dĺžka návestia v znakoch
      C = kód návestia pre modul VSTOAS
    • Mení: AF, BC, DE, HL
  • VSTOAS - V spojení s modulom GETMEM umožňuje nájsť ľubovoľnú adresu pamäte označenú návestím v naposledy prekladanom zdrojovom texte.
    • Vstup:
      C = kód návestia získaný v module GETMEM
    • Výstup:
      HL = adresa návestia. Na tejto adrese je 6 znakov meno návestia a ďalšie dva znaky obsahujú adresu v preloženom programe, ktorá je označená daným návestím.
    • Mení: AF, HL
  • PNTCHR - Vytlačenie jedného znaku na tlačiareň.
    Prechod na nový riadok: CR (0Dh), LF (0Ah).
    • Vstup:
      A = kód tlačeného znaku
    • Mení: AF