










                     M     M    RRRR      SSSS
                     MM   MM    R   R    S    S
                     M M M M    R   R    S
                     M  M  M    RRRR      SSSS
                     M     M    R R           S
                     M     M    R  R     S    S
                     M     M    R   R     SSSS




           M E M O R Y   R E S I D E N T   S Y S T E M

                      Verze pro ZX-Spectrum


                   Uzivatelska prirucka  M R S









                                   RNDr. Ivan Jedlicka
                                   Ustav aplikovanej kybernetiky
                                   Hanulova 5/a
                                   Bratislava
                                   8 4 4 1 6


        Motto:

        Operetu PROSO ceskeho skladatele  Jary Cimrmana
        hodnotil nemecky muzikolog prof. Dr. Kurt Gupps
        slovy: "Dort ist alles". Je zajimave, ze stejna
        slova vyrkl prof. Niklaus Wirth, kdyz si precetl
        tuto prirucku.












-



                              - 2 -



                              OBSAH


1. UVOD ...................................................   3

2. POPIS PRACE S JEDNOTLIVYMI MODULY ......................   4

2.1 Spusteni systemu ......................................   4
2.2 Ridici modul ..........................................   4
2.3 Editor ................................................   5
    2.3.1 Prikazovy rezim .................................   5
    2.3.2 Obrazovkovy rezim ...............................   9
    2.3.3 Psani radku .....................................  11
    2.3.4 Chybove hlaseni .................................  12
2.4 Prekladac sestavovaciho jazyka ........................  13
    2.4.1 Spusteni prekladu ...............................  13
    2.4.2 Vyhodnoceni vyrazu ..............................  14
    2.4.3 Rizeni prekladu pseudoinstrukcemi a direktivami .  14
    2.4.4 Ulozeni modulu do knihovny - pseudoinstrukce ORG   15
    2.4.5 Pouziti tiskarny ................................  16
    2.4.6 Chybova hlaseni .................................  16
    2.4.7 Pouziti relativnich skoku .......................  17
2.5 Spojovaci program .....................................  17
2.6 Program na obsluhu binarni knihovny ...................  18
    2.6.1 Ovladani programu na obsluhu knihovny ...........  18
    2.6.2 Zakladni modul knihovny .........................  19
2.7 Ladici program ........................................  23
    2.7.1 Uvod ............................................  23
    2.7.2 Zadavani hodnoty veliciny pro ladici program ....  23
    2.7.3 Prikazy pro ladici program ......................  24
    2.7.4 Ladeni programu .................................  29

3. ZAVER ..................................................  30

4. P R I L O H A ..........................................  31





















-



                              - 3 -



Kapitola 1 - UVOD

      MRS (Memory Resident System) je programovy prostredek  ur-
ceny na vyvoj programoveho vybaveni v sestavovacim jazyku mikro-
procesoru Z80. Poskytyje vsechny bezne funkce bez vyuzivani vne-
jsich zarizeni typu pruzny disk, a proto je obzvlast vhodny  pro
praci na malych osobnich pocitacich. Jeho vyuziti je vsak  opod-
statneno i na vykonnejsich systemech, protoze  prace  s  nim  je
velmi pohodlna a rychla.

      System se sklada z nasledujicich modulu:

- Ridici modul (MRS) - zabezpecuje komunikaci uzivatele se sys-
  temem a umoznuje mu pristup k ostatnim castem systemu,

- Editor (EDI) - je urceny na psani a opravovani zdrojovych pro-
  gramu v sestavovacim jazyku mikroprocesoru Z80,

- Sestavovaci program (ASM) - preklada zdrojovy text  pripraveny
  Editorem do binarnich modulu, ktere uklada do knihovny,

- Spojovaci program (LNK) - vytvari z binarnich  modulu  vykona-
  telny program,

- Program na obsluhu knihovny binarnich modulu (LIB) - poskytuje
  nektere funkce nutne pri vyuzivani knihovny,

- Ladici program (DBG) - slouzi na ladeni programu,

- Zpetny prekladac (DIS) - vytvari  z  binarniho  kodu  zdrojovy
  text, ktery je mozne zpracovat dalsimi moduly.


      System je napsany v sestavovacim jazyku mikroprocesoru Z80
a realizovany na osobnim pocitaci MO8X. Pri navrhu byl vsak kla-
den velky duraz na prenositelnost systemu do jineho  technickeho
prostredi a uz byl realizovan prenos na mikropocitac ZX Spectrum

      Dalsi popis systemu se tyka teto konkretni implementace.

















-



                              - 4 -



Kapitola 2 - POPIS PRACE S JEDNOTLIVYMI MODULY

2.1 Spusteni systemu
      Soucasna verze systemu se dodava na kazete a sklada se  ze
dvou casti, ktere jsou na pasce v tomto poradi:

      vlastni system,
      zakladni modul binarni knihovny - sysmod

Oba moduly se nahraji pomoci kratkeho programu v BASICu prikazem

      LOAD "MRS"    nebo pouze   LOAD ""

Po nahrani se rizeni odevzda ridicimu modulu  MRS.

      Umisteni modulu v pameti pocitace je promenlive podle ver-
ze, kterou uzivatel pouziva. Distribuji se tri verze s oznacenim
MRS.V01, MRS.V02 a MRS.V03. Tyto verze se lisi umisteni  knihov-
ny, ktera je od adresy #6000, #8000 nebo #D000. Knihovny  nejsou
zamenitelne. V zavadecim modulu je jako poznamka  datum  vzniku.
Autor udrzuje jen verzi, ktera vznikla 8.10.1986.

      binarni knihovna (sysmod)  #6000 - ...
      system MRS                 #D500 - #FF00

      Prostor od adres #D500 smerem dolu se vyuziva na  zdrojovy
text uzivatele. Stack pointer je pri spusteni systemu iniciovany
na hodnotu #FF40. Jestlize uzivateli nestaci v  jeho  programech
64 bytu (#FF00-#FF40) na stack,  musi  inicioval  stack  pointer
sam. Ve skutecnosti je to o neco vice, protoze MRS nesaha az  po
adresu #FF00.
      Startovaci adresa systemu MRS je ulozena v zavadecim  pro-
gramu "MRS", po nahrati obou modulu je mozne system  spustit  od
teto adresy prikazem USR. V tomto pripade se  iniciuje  pamet  a
puvodni uzivatelsky text se vymaze. Kdyz system spustime od teto
adresy+3, obsah pameti se nezmeni (Warm Start - horky start).
      Na pozadani mohou byt vytvoreny i verze umistene v  pameti
na jinych adresach, ale pouze v oduvodnenych pripadech.
      Na adrese #FE00 je pracovni buffer systemu, ktery  pouziva
i uzivatel, a v dalsim textu jsou odvolavky na promennou  BUFER,
ktere se tykaji teto adresy.

2.2 Ridici modul - MRS
      Ridici modul se ohlasi vypisem

      mrs>

na spodni radek obrazovky. Tento radek je rezervovany  pro  styk
uzivatele se systemem a v dalsim textu ho budeme nazyvat  dialo-
govy radek. Uzivatel pise prikazy do  dialogoveho  radku  beznym
zpusobem, pricemz na opravu preklepu vyuziva tyto specialni kla-
vesy:




-



                              - 5 -



      CS+5 - presun kurzoru na predchazejici znak,
      CS+8 - presun kurzoru na nasledujici znak,
      CS+9 - vlozi mezeru na misto kurzoru a zbytek textu  posu-
             ne doprava,
      CS+0 - vymaze znak oznaceny kurzorem (pozn.  nikoliv  pred
             kurzorem) a zbytek textu posune doleva.Kdyz je kur-
             zor za poslednim znakem radku, posune se  doleva  a
             vymaze posledni znak
      ENTER - ukonci zadavani textu.

****************************************************************
Vsechny znaky, ktere system MRS jakymkoliv zpusobem  zpracovava,
musi byt napsane malymi pismeny. System vsak zna i velka  pisme-
na, ktera uzivalet muze pouzit napr. na poznamky nebo jako  tex-
tove konstanty (viz modul EDI).
****************************************************************

      Pri psani textu se sleduji hranice radku a pokus o  jejich
prekroceni, a take stisknuti nedefinovane specialni klavesy  oz-
nami zvukovym signalem.
      Dialogovy radek ma kapacitu 64 znaku, po napsani vice  jak
32 znaku se text posouva vlevo a prvni znaky mizi z obrazovky.

      Modul MRS rozeznava tyto prikazy:

      EDI - odevzda rizeni Editoru,
      ASM - odevzda rizeni Sestavovacimu programu,
      LNK - odevzda rizeni Spojovacimu programu,
      LIB - odevzda rizeni Programu na obsluhu knihovny,
      DBG - odevzda rizeni Ladicimu programu,
      MON - odevzda rizeni BASICu pocitace ZX Spectrum,
      ALD - specializovany prikaz, ktery postupne vyvola moduly
            ASM, LNK a DBG, viz popis prikazu modulu EDI,
      RUN - spusti uzivatelsky program od adresy specifikovane
            prikazem ENT modulu LIB (viz popis prikazu modulu
            LIB).

      Ostatni texty se povaziji za chybne prikazy.  Uzivatel  je
na chybu upozornen zvukovym signalem, kurzor se nastavi na prvni
znak prikazu a chybu je mozne opravit. Stejna  akce  se  vykona,
kdyz za spravnym prikazem nasleduji nespravne parametry (viz po-
pis jednotlivych prikazu).
      Program DIS je povazovany za zvlastni program na vytvaren9
zdrojovych textu a jako takovy je volatelny pouze z modulu EDI.


2.3 EDITOR

2.3.1 Prikazovy rezim
      Editor umoznuje praci ve dvou rezimech: Prikazovy rezim  a
Obrazovkovy rezim. Po vyvolani je v rezimu prikazovem, ktery  je
indikovan vypisem

      edi>

do dialogoveho radku. Mozne prikazy Editoru jsou:
-



                              - 6 -



      ini - Iniciuje pracovni oblast Editoru a  pripravi  ji  na
            vstup noveho textu. Obrazovka se vymaze,  kurzor  se
            nastavi na prvni pozici a Editor prejde do  obrazov-
            koveho rezimu.

      ln+ -
      ln- -
      ln= - Posouva kurzor po textu, a to tak,  ze  ln-n  posune
            kurzor o n radku smerem k zacatku textu,  ln+n  o  n
            radku smerem ke konci textu a  prikaz  ln=n  nastavi
            kurzor na n-ty radek. Prikaz ln-0 nastavi kurzor  na
            prvni radek, prikaz ln+0 za posledni radek a  prikaz
            ln=0 na posledni opravovany radek.
            Prikaz ln= povoluje jako dalsi parametr tez  retezec
            znaku. Kurzor se nastavi na prvni radek, ktery v po-
            li navesti obsahuje dany text. Kdyz  takovyto  radek
            neexistuje, povazuje se to za chybu a uzivatel  muze
            text opravit.
            Po vykonani prikazu se vypisou na obrazovku radky od
            vyhledaneho do konce obrazovky anebo do konce textu,
            kurzor se nastavi na prvni pozici a Editor prejde do
            obrazovkoveho rezimu (viz dale).

      dlb - Za prikazem naslduji dve decimalni  cisla  ve  tvaru
            n-m. Prikaz vymaze  radky  s  poradovymi  cisly  n-m
            vcetne a Editor ocekava dalsi prikaz.

      cpb - Za prikazem naslduji dve decimalni  cisla  ve  tvaru
            n-m. Prikaz zkopiruje radky s poradovymi  cisly  n-m
            pred radek, na kterem byl kurzor pri prechodu do di-
            alogoveho rezimu. Kdyz je tento  radek  v  intervalu
            n-m, povazuje se to za chybu  (viz  tez  Obrazovkovy
            rezim).

      sav - Slouzi na ulozeni zdrojoveho  textu  na  magnetofon.
            Soucasna verze systemy vyuziva na obsluhu magnetofo-
            nu standardni modul monitoru Spectrum, ale poskytuje
            k nemu vlastne prepojeni. Za prikazem sav jako dalsi
            parametr nasleduje jmeno  souboru,  od  prikazu  sav
            musi byt oddeleno jednou mezerou. Jmeno  souboru  je
            libovolny retezec maximalne 10 znaku (bez uvozovek),
            ktery se na tuto delku v pripade potreby dolni meze-
            rami. Kdyz je jmeno souboru 'chyba',  povazuje se to
            za chybu, zazni zvukovy signal a uzivatel muze chyb-
            ny prikaz opravit.
               Editor sam urci rozsah pameti, ktery  je  potreba
            ulozit na pasku a vyvola prislusny  modul  monitoru.
            Zdrojovy text je  ulozen  se  standardni  hlavickou,
            ktera v poslednich 2 bytech ma zapsanou 1, podle to-
            ho Editor pozna zdrojove texty.
               Pred odeslanim prikazu tlacitkem ENTER  je  nutne
            zapnout magnetofon na nahravani.  Po  nahrani  textu
            (nebo po preruseni  nahravani  tlacitkem  BREAK)  se
            opet prihlasi Editor.


-



                              - 7 -



      mer - Slouzi na nahrani zdrojoveho  textu  z  magnetofonu.
            Opet se na vlastni cinnost vyuziva  modul  monitoru.
            Za prikazem mer nasleduje jmeno pozadovanoho  textu,
            ktere tvori retezec maximalne 10  znaku  od  prikazu
            mer oddeleny mezerou. Kdyz jmeno chybi,  nahraje  se
            prvni modul, ktery Editor najde. Editor rozezna vla-
            stni moduly a  pripadny  modul  se  stejnym  jmenem,
            ktery ale nebyl vytvoren Editorem, se ignoruje.
               Po odeslani prikazu uzivatel zapne  magnetofon  a
            Editor vyhleda na pasce program s danym jmenem.  Pri
            vyhledavani vypisuje Editor do dialogoveho radku in-
            formace o prectenych modulech ve tvaru

                  jmeno

            kde jmeno je jmeno nalezeneho modulu. Kdyz se na pa-
            sce najde pozadovany modul, za jeho jmeno se do dia-
            logoveho radku vypise text

                  loading

            a modul se nahrava do pameti. Vyhledavani a  nahrani
            modulu je mozne prerusit tlacitkem BREAK.  Potom  se
            rizeni vrati Editoru.
               Kdyz se pri nahrani modulu zjisti chyba  nahrani,
            vypise se do dialogoveho radku

                  io error

            a  po  stisknuti  tlacitka  ENTER  se  rizeni  vrati
            do Editoru.
               Kdyz Editor zjisti, ze se hledany text uz do  pa-
            meti nevejde, vypise se do dialogoveho radku

                  mem full

            a po stisknuti tlacitka ENTER se rizeni vrati Edito-
            ru.
               Uspesne nahrany text se ulozi do pameti pred  ra-
            dek, na kterem byl nastaveny kurzor tehdy, kdyz uzi-
            vatel presel z obrazovkoveho rezimu do rezimu prika-
            zoveho. Toto ukladani muze trvat az 20 s a  po  tuto
            dobu je v dialogovem radku vypsany text

                  wait

            Po ulozeni nahraneho textu se opet  prihlasi  Editor
            vypisem edi>

      loa - Tento prikaz ma stejnou funkci jako prikaz mer,  jen
            s tim rozdilem, ze text nahrany z pasky prepise text
            v pameti. Proto o nem plati vse, co bylo  napsane  o
            prikazu mer, pouze po nahrani textu se  rizeni  hned
            vrati Editoru.


-



                              - 8 -



      ald - Specialni prikaz, pomovi nehoz uzivatel spusti  pos-
            tupne volani jednotlivych modulu systemu, a to  asm,
            lnk a dbg. Pokud preklad nebo spojeni konci  s  chy-
            bou, volani ostatnich modulu se neuskutecni a rizeni
            se vrati Editoru. Blizsi viz pri popisu jednotlivych
            modulu.

      dis - Spusti zpetny prekladac. Za prikazem nasleduje meze-
            ra a za ni pocatecni a koncova adresa pameti,  jejiz
            obsah se ma zpetne prelozit, ve tvaru

                  xxxx-yyyy

            kde xxxx a yyyy jsou hexadecimalni konstanty  (neza-
            cinaji vsak znakem #). Instukce na adrese yyyy se uz
            nepreklada. Text se uklada pred radek, na kterem byl
            kurzor, stejne jako kdyby ho uzivatel psal sam.  Vy-
            razy v adresnim poli jsou vyjadrene  jako  hexadeci-
            malni konstanta a kdyz hodnota na nektere adrese ne-
            o bsahuje kod platne instrukce, je tato hodnota pre-
            lozena pomoci pseudoinstrukce db (viz popis  prekla-
            dace). Kdyz chceme ziskat i  hodnoty  citace  adres,
            muzeme takto ziskany zdrojovy text normalne prelozit
            a na zaklade vypisu prekladu doplnit vyrazy  v  poli
            adresy o navesti.
               Prikaz dis se vyuziva, kdyz chceme  pokracovat  v
            praci na programu, ktery  jsme  dosud  vytvareli  ve
            strojovem kodu (nebo pod jinym systemem), nebo  kdyz
            chceme do odladeneho programu vlozit nektere  moduly
            systemu MRS, aby se program stal na systemu MRS  ne-
            zavisly (viz popis modulu LIB a LNK).
               Kdyz se pri vykonavani zpetneho  prekldu  preplni
            pamet, system vypise

                  mem full

            a rizeni se vrati do modulu MRS.

      ins - Toto je specialni obdoba prikazu  dis  a  slouzi  na
            vlozeni zdrojoveho textu, ktery nebyl vytvoren  sys-
            temem MRS. Za prikazem nasleduji  dve  hexadecimalni
            konstanty stejne jako za prikazem dis. Prvni konsta-
            nta obsahuje adresu  uzivatelskeho  podprogramu,  na
            hodnotu druhe konstanty je inicializovany registr HL
            pri prvem volani  uzivatelskeho  podprogramu.  Tento
            registr je k dispozici uzivatelskemu  modulu  a  pri
            dalsich volanich ma hodnotu, kterou mel pri  vystupu
            z podprogramu.
               Ulohou uzivatelskeho podprogramu  je  pri  kazdem
            zavolani ulozit do bufru od adresy #FEOO dalsi radek
            zdrojoveho textu a nastavit carry flag = 0. Kdyz  uz
            neni k dispozici dalsi radek, uzivatelsky podprogram
            nasadi carry flag = 1 a rizeni se vrati Editoru.



-



                              - 9 -



               Radky textu se syntakticky kontroluji  a  spravne
            radky se ukladaji do textu pred radek, na kterem byl
            kurzor (viz prikaz dis).
               Chybne radky se zobrazi do prvniho radku  obrazo-
            vky a v pravem dolnim rohu je jejich poradove cislo.
            Radky je potom mozne opravovat tak, jak je to popsa-
            ne v oddilu 2.3.3. Oprava se ukonci tlacitkem ENTER.
            V pripade chyby zazni zvukovy signal a cyklus se  o-
            pakuje.Prikaz ins je mozne prerusit tlacitkem BREAK.
            Do dialogoveho radku se vypise

                  break

            a po stlaceni tlacitka ENTER se rizeni vrati systemu
            MRS. Kdyz se pri vkladani textu preplni pamet,  sys-
            tem reaguje stejne jako pri prikazu dis. Na tlacitko
            BREAK reaguje system chvili po ukonceni opravy  tla-
            citkem ENTER.

      mon
      run
      asm
      lnk
      lib
      dbg - Tyto prikazy vyvolaji prislusny modul systemu a ode-
            vzdaji mu rizeni.

2.3.2 Obrazovkovy rezim
      Po vykonani prikazu ln a ini Editor prejde do obrazovkove-
ho rezimu, tzn. ze na obrazovku vypise text od radku nastaveneho
prikazem ln nebo je obrazovka prazdna (po prikazu  ini),  kurzor
je v levem hornim rohu a Editor ocekava dalsi text.
      Pro pochopeni obrazovkoveho rezimu je nutne  si  uvedomit,
ze Editor uz pripravuje text pro Sestavovaci jazyk, a to tak, ze
ho vhodne predzpracuje. Proto uz pri psani textu musime dbat  na
spravnou syntaxi a v dalsim textu se proto prolinaji informace o
Editoru s informacemi o Sestavovacim jazyku.
Vseobecny tvar radku textu je nasledovny:

label  ins  adr        poznamka

Vidime, ze radek je rozdeleny na 4 pole s timto obsahem:

label - pole navesti. Zacina na nulte pozici a ma delku 7 znaku.
        Je bud vyplnene mezerami, nebo obsahuje  navesti.  Nave-
        sti muze byt retezec maximalne 6 pismen a cislic,  ktery
        zacina pismenem. Zbytek pole musi byt vyplneny mezerami.

ins -   pole instrukce. Zacina na sedme pozici a ma delku 5 zna-
        ku. Bud je vyplnene mezerami, nebo obsahuje platnou  in-
        strukci mikroprocesoru Z80, prip. platnou pseudoinstruk-
        ci Sestavovaciho jazyka. Zbytek pole musi  byt  vyplneny
        mezerami.



-



                              - 10 -



adr -   pole adresy. Zacina na 12 pozici a ma  delku  20  znaku.
        Kdyz je pole ins vyplnen mezerami, musi byt i  pole  adr
        vyplnene mezerami. Jinak obsahuje platnou adresu pro in-
        strukci nebo pseudoinstrukci zapsanou  v poli ins.  Pole
        adresy musi byt zakoncene mezerou a zbytek pole musi byt
        vyplneny mezerami.

pozn -  pole poznamky. Zacina na 32. pozici a ma delku 32 znaku.
        Muze obsahovat libovolne znaky, nebot toto pole Sestavo-
        vaci jazyk ignoruje. Pri psani textu do poloviny poznam-
        ky se radek posouva doleva a prvni znaky se z  obrazovky
        ztraci. Pole poznamky nesmi byt v radku, ktery nema  in-
        strukci. Pri psani poznamky se sleduje delka radku.

   Krome takovehoto radku zna system radek poznamky a  radek  na
rizeni prekladu. Radek poznamky zacina znakem ; a muze obsahovat
libovolne znaky, nebot ho prekladac ignoruje.  Radek  na  rizeni
prekladu zacina znakem *, jeho obsah se syntakticky  kontroluje.
Platne prikazy jsou popsane v oddilu 2.4.3 a zbytek  radku  musi
byt vyplnen mezerami.
      Tyto radky nejsou clenene na  pole  a  stisknuti  tlacitek
CS+1 nebo CS+4 v nich se povazuje za chybu (viz oddil 2.3.3.).
      Pole adresy muze obsahovat mimo prvku  predepsanych  inst-
rukci i prvky, ktere se vyhodnocuji behem prekladu, a ktere  na-
zyvame vyrazy. Vyraz v systemu MRS muze mit jeden z techto tvaru

      - symbol
      - symbol+symbol
      - symbol-symbol
      - symbol*symbol
      - symbol/symbol
      - symbol!symbol    operace OR
      - symbol&symbol    operace AND
      - symbol@symbol    operace XOR
      - -symbol
      - >symbol          (vyssi byte 2-bytove konstanty)
      - <symbol          (mizsi byte 2-bytove konstanty(

Pritom symbol muze mit jeden z techto tvaru:

      - navesti,
      - decimalni konstanta, coz je retezec cislic,
      - hexadecimalni konstanta, coz je retezec cislic a  pismen
        a-f, pred nimiz je znak #,
      - znakova konstanta, coz je libovolny zobrazitelny znak
        uzavreny v apostrofech  '',
      - znak $, ktery oznacuje citac instrukci.

Mimo instrukce mohou byt v poli ins tyto pseudoinstrukce:

      org - v adresni casti musi byt vyraz,

      ds  - v adresni casti musi byt vyraz,
