


                              - 11 -



      db  - v adresni casti musi byt jeden nebo vic  vyrazu  od-
            delenych carkami. V pripade pseudoinstrukce db  jako
            vyraz muze byt tez retezec znaku uzavrany v apostro-
            fech,

      dw  - v adresni casti musi byt jeden nebo vic vyrazu odde-
            lenych carkami,

      equ - v poli navesti musi byt navesti a v poli adresy musi
            byt vyraz,

      ent - v poli adresy musi byt jedno nebo vic navesti  odde-
            lenych carkami,

      ext - v poli adresy musi byt jedno nebo vic navesti  odde-
            lenych carkami,

      end - pole adresy musi byt prazdne.


2.3.3 Psani radku
      Radek se pise beznym zpusobem, a pri tom se vyuzivaji  ty-
to specialni tlacitka:

      CS+8 - presune kurzor na nasledujici znak,  hranice  radku
             se kontroluji,
      CS+5 - presune kurzor na predchazejici znak, hranice  rad-
             ku se kontroluji,
      CS+9 - vlozi mezeru na pozici kurzoru a  zbytek  pole  po-
             sune doprava,
      CS+0 - vymaze znak oznaceny kurzorem a zbytek  pole  posu-
             ne doleva. Kdyz je kurzor za poslednim znakem  rad-
             ku, posune se o jeden znak doleva a znak vymaze,
      CS+4 - posune kurzor  na  zacatek  dalsiho  pole,  hranice
             radku se konstroluji,
      CS+1 - presune kurzor na  zacatek  pole  nebo  na  zacatek
             predchazejiciho pole, hranice radku se kontroluji,
      SS+space - nastavi kurzor na posledni znak v poli adresy,
      space - vyplni zbytek pole mezerami a  kurzor  nastavi  na
              zacatek dalsiho pole.  Tato  funkce  je  potlacena
              v poli poznamky, v radku poznamky,  nebo  kdyz  je
              mezera soucasti retezce  nebo  znakove  konstanty.
              V techto pripadech se  mezera  normalne  ulozi  do
              textu.

      Dalsi ridici znaky zpusobuji ukonceni psani  radku.  Radek
se syntakticky zkontroluje. Kdyz nektere pole nevyhovuje predpi-
su, kurzor se nastavi na jeho zacatek, zazni zvukovy signal a u-
zivatel musi radek opravit.
      Syntakticky spravny radek se pomerne komplikovane  kompri-
muje a opet se prevede do zdrojoveho tvaru. Potom se  porovna  s
puvodnim radkem a pokud se tyto dva radky nerovnaji,  vypise  se
radek, ktery vytvoril system misto puvodniho radku a zazni  zvu-
kovy signal. Kdyz je uzivatel s novym radkem  spokojen,  stiskne
ENTER a pokracuje v praci, jinak ho muze opravit.

-



                              - 12 -



      Na prvni pohled komplikovany system je pro uzivatele prak-
ticky neviditelny. Kdyz jsou totiz radky stejne (a to  je  vzdy,
kdyz je radek spravne napsany), pokracuje se normalne v praci.
      Pomoci tohoto mechanizmu se objevi chyby:

      - preteceni (prilis velka konstanta se komprimovanim  zme-
        ni),
      - neformalizovany zapis konstanty (hexadecimalni  konstan-
        ta musi mit sudy pocet bytu, pred  decimalni  konstantou
        nesmi byt nuly),
      - formalne spravne, ale neexistujici instrukce (napr.  in-
        strukce add hl,ix se pretvori na instrukci add  ix,ix  a
        tim se zjisti chyba).

****************************************************************
System MRS (moduly EDI, ASM, DBG) spravne zpracuje i tzv. skryte
instrukce. Jsou to jednak instrukce SLL (operacni znak  CB30  az
CB37) a instrukce ekvivalentni instrukcim, ktere pracuji  s  re-
gistry H a L, ale s prefixem DD resp. FD). Tyto potom  pracuji s
vyssim nebo nizsim bytem indexregistru IX nebo IY. Tyto instruk-
ce se zapisuji tak, ze na misto registru H se pise XH nebo YH  a
na misto registru L se pise XL nebo YL. Ne kazda  nahrada  napr.
registru H registrem XH je mozna (napr.  kdyz  uz  instrukce  ma
prefix CB, tak se H neda nahradit XH). Blize o skrytych instruk-
cich viz v odborne literature.
Jinak jedina odchylka od  standardniho  zapisu  instrukci je, ze
instrukce EX AF,AF' se pise bez apostrofu, tedy  EX  AF,AF
****************************************************************

      V pripade spravneho radku dalsi akce  zavisi  na  pouzitem
ridicim znaku.

      CS+7 - kurzor se nastavi na zacatek predchazejiciho radku.
             Kdyz je kurzor na prvnim radku obrazovky, cela  ob-
             razovka se posune o radek dolu. Kdyz je  kurzro  na
             prvnim radku textu, zazni zvukovy signal a  nic  se
             nestane.
      CS+6 - kurzor se nastavi na zacatek  nasledujiciho  radku.
             Kdyz je kurzor na poslednim radku obrazovky, posune
             se cela obrazovka o radek nahoru. Kdyz je kurzor za
             poslednim radkem textu, ozve se  zvukovy  signal  a
             nic se nestane.
      CS+3 - vypise se predchazejici obrazovka textu a kurzor je
             na zacatku prvni radky obrazovky.
      CS+2 - vypise se nasledujici obrazovka textu a  kurzor  je
             na zacatku prvniho radku obrazovky.
      SS+ENTER - vypise se  nova  obrazovka textu tak, ze radek,
             na kterem byl kurzor, se stane prvnim radkem  obra-
             zovky.
      CS+SS - vymaze se radek, na kterem byl kurzor a zbytek ob-
             razovky se posune nahoru. V tomto pripade se neana-
             lyzuje syntakticka spravnost radku. Kdyz je  kurzor
             za poslednim radkem textu, ozve se zvukovy signal a
             nic se nestane.


-



                              - 13 -



      CS+ENTER - za radkem, na kterem je nastaven kurzor, se vy-
             tvori jeho kopie.
      ENTER - text na  obrazovce  pocinaje  radkem, na kterem je
             kurzor, se posune smerem dolu, a tim se vytvori mi-
             sto pro vlozeni noveho radku.  Kdyz  je  kurzor  na
             poslednim radku obrazovky, toto  misto  se  vytvori
             posunem celeho textu o radek nahoru. Kdyz  je  kur-
             zor za poslednim radkem textu, zazni zvukovy signal
             a nic se nestane.
      BREAK - Editor vypise text edi>  do  dialogoveho  radku  a
             prejde do prikazoveho rezimu.

   Odeslani jinych ridicich znaku ma za nasledek zvukovy  signal
a nic se nestane. Kazde tlacitko ma opakovaci schopnost, tzn. ze
jeho podrzeni ma stejny ucinek, jako kdyby se opetovne stisklo.


2.3.4 Chybova hlaseni
      Na velkou vetsinu chybnych akci  reaguje  Editor  zvukovym
signalem a pripadne nastavenim kurzoru na chybnou polozku.  Exi-
stuji vsak dva chybove stavy, nasledkem  kterych  Editor  vypise
chybove hlaseni do dialogoveho radku  a  po  stisknuti  tlacitka
ENTER se rizeni vrati systemu MRS.

   mem full - tento vypis znamena, ze pamet urcena na zapis tex-
              tu se zaplnila. Je nutne text zkratit, prip. vyma-
              zat moduly z binarni knihovny (viz Program na  ob-
              sluhu knihovny). Prakticky je ale tento stav zrid-
              kakdy, protoze velikost volne pameti staci na cca
              6000 radku zdrojoveho textu. Kdyz doslo k preplne-
              ni pameti, uzivatel vyvola opet  Editor,  prikazem
              ln=0 prejde do obrazoveho rezimu, tlacitkem  CS+SS
              vymaze radek, pri kterem doslo k preplneni a  tla-
              citkem SS+ENTER obnovi obrazovku.

                 Jiny duvod pro vypis tohoto hlaseni je, kdyz se
              zaplni tabulka symbolu. Tato tabulka je ulozena za
              textem a dynamicky se  rozsiruje.  Jeji  maximalni
              kapacita je vsak 255 navesti.  Navesti,  ktera  se
              nepouziji pri prekladu se automaticky vymazou.  Po
              skonceni prekladu (viz popis Prekladace sestavova-
              ciho jazyka).


2.4 Prekladac sestavovaciho jazyka

2.4.1 Spusteni prekladu
      Prekladac sestavovaciho jazyka (v dalsim textu tez  Assem-
bler) se vyvola prikazem asm, za kterym jako dalsi parametr nas-
leduje jmeno prekladaneho modulu. Assembler vyhleda dany modul v
binarni knihovne a zdrojovy text prelozi na misto puvodniho  mo-
dulu. Pokud tento modul v knihovne neni, Assembler prelozi zdro-
jovy text jako novy modul a pripoji ho na konec knihovny.



-



                              - 14 -



      Kdyz v prikazu asm chybi jmeno modulu, vytvori se modul  s
prazdnym jmenem na konci knihovny. Takovyto modul je v  knihovne
jen docasne, kazdy dalsi preklad ho smaze.
      Jinymi slovy, uzivatel by mel  prelozit  a  odladit  modul
nejprve bez jmena, a az kdyz je vse v poradku, zaradit modul  do
knihovny prikazem asm jmeno.
      Assembler v kazdem pripade sleduje hranice  pameti,  ktera
je modulu prirazena uz velikosti mista,  ktere  zabiral  puvodni
modul, nebo velikosti mista od konce  knihovny  po  konec  volne
pameti.
      Asembler preklada text pripraveny  Editorem  do  prislusne
pameti a na obrazovce vytvari vypis prekladu.  Radek  vypisu  se
vypise do dvou az trech radku obrazovky nasledovne:

      1. az 5. znak - poradove cislo radku,

      7. znak - obsahuje mezeru nebo kod chyby. Chybove kody
                jsou popsane dale.
      9. az 12. znak - hexadecimalni vypis hodnoty citace adres,
      14. az 21. znak - hexadeciamlni vypis kodu

      Druhy a v pripade poznamky i treti radek obrazovky obsahu-
je vypis zdrojoveho textu.
      Vypis je mozne kdykoliv zastavit tlacitkem  CS+S  a  potom
znovu spustit tlacitkem CS+Q. Po skoneni prekladu vypise Assemb-
ler informaci o poctu chyb
      errors: n
kde n je pocet zjistenych chyb.
   Pokud se behem prekladu vyskytly chyby, modul se  do  knihov-
ny nezaradi. Je treba si uvedomit, ze pokud jsme chteli prelozit
text pres modul, ktery uz v knihovne byl, je tento modul chybnym
prekladem znicen, ale funkce ostatnich modulu jsou zachovane.
      Pokud se prelozil cely text (tzn. ze  pseudoinstrukce  end
je poslednim radkem textu), prohledne se  tabulka  symbolu  a  v
prekladu nepouzite symboly se vymazou.
      Na zaver prekladu, pokud byl pozadovan vystup vsech  radku
prikazem *a (viz oddil 2.4.2), se vypise tabulka pouzitych nave-
sti. Navesti jsou usporadane podle abecedy a za  jmenem  navesti
nasleduje jeho hodnota jako hexadecimalni cislo. Navesti popsane
pseudoinstrukci ext maji misto hodnoty, ktera muze byt jeste ne-
znama, znaky xxxx.

2.4.2 Vyhodnoceni vyrazu
      Vyraz v poli adresy se vyhodnoti beznym zpusobem, tzn.  ze
decimalni a hexadecimalni konstanta ma hodnotu danou svym  zapi-
sem, znakova konstanta ma hodnotu danou  hodnotou  ASCII  znaku,
ktery ji representuje a hodnota navesti je dana velikosti citace
adres v okamziku, kdy se navesti vyskytlo v poli navesti.
      Specialni unarni vyrazy jsou >symbol, ktery definuje  hod-
notu vyssich bitu ze 16-ti bitove hodnoty, a <symbol, ktery  de-
finuje hodnotu nizsich bitu 16-ti  bitove  hodnoty.  Napr.  kdyz
chceme zjistit, zda L registr se rovna nizsim 8  bitum  navesti,
muzeme to vykonat nasledovne:



-



                              - 15 -



      ld a,l
      cp <adresa

Jina moznost, jak priradit navesti hodnotu,  je  pseudoinstrukce
equ (viz dale).
Symbol $ nabyva behem prekladu hodnotu citace instrukci.

2.4.3 Rizeni prekladu pseudoinstrukcemi a direktivami
      Pseudoinstrukce ridi preklad zdrojoveho textu a  direktivy
ridi vlastni cinnost prekladace. Pseudoinstrukce uz byli  pripo-
menuty v casti venovane Editoru, zde si rozebereme jejich funkci
vzhledem k Assembleru.

      org - ridi velikost citace adres. Vyraz v poli  adresy  se
            vyhodnoti a jeho hodnota se  priradi  citaci  adres.
            Prvky vyrazu musi byt zname uz pri prvnim  pruchodu,
            tzn. ze soucasti vyrazu nesmi byt navesti, ktere  se
            predtim nevyskytlo v poli navesti.
      ds  - ridi velikost citace adres. Citac adres se  zvysi  o
            hodnotu danou vyrazem v poli adresy, a tim se vlast-
            ne v programu rezervuje pamet. Podobne jako v pripa-
            de pseudoinstrukce org musi byt hodnota vyrazu znama
            uz v prvnim pruchodu.
      db  - uklada do pameti hodnoty urcene vyrazy v poli adres.
            Tyto hodnoty se musi umistit do 1 bytu.  Kdyz  je  v
            adresni casti retezec znaku v apostrofech, tak se do
            pameti postupne ulozi jejich ASCII hodnoty.
      dw  - uklada do pameti hodnoty urcene vyrazy v poli adres.
            Kazda hodnota zabira dva byty.
      equ - priradi navesti v poli navesti hodnotou danou  vyra-
            zem v poli adres. I tato hodnota musi byt znama uz v
            prvnim pruchodu.
      ent - popisuje navesti v poli adres jako bod vstupu (entry
            point). Vyznam teto pseudoinstrukce je popsany v ca-
            sti Spojovaci program.
      ext - popisuje navesti v poli  adres  jako  vnejsi  symbol
            (external point).  Vyznam  teto  pseudoinstrukce  je
            popsany v casti Spojovaci program.
      end - tato pseudoinstrukce ukoncuje prekladanou cast  tex-
            tu, tedy text se preklada od zacatku po  pseudoinst-
            rukci end.

      Pseudoinstrukce ent a ext se mohou pouzit jen pokud  je  v
pameti pritomna knihovna binarnich modulu (aspon zakladni  modul
sysmod), v opacnem pripade jejich pouziti ma nedefinovany vysle-
dek.
      Na rizeni prace prekladace se vyuzivaji specialni radky, a
to ty, ktere zacinaji znakem *. V tomto pripade Assembler  pred-
poklada, ze za znakem * nasleduje nektery z techto prikazu:

      a - znamena, ze se ma na vystupnim zarizeni vytvaret vypis
          vsech radku. Kdyz chce uzivatel ziskat jen  vypis  ta-
          bulky symbolu (viz oddil 2.4.1), musi vlozit direktivu
          *a pred radek s pseudoinstrukci end.


-



                              - 16 -



      e - znamena, ze se ma na vystupnim zarizeni vytvaret   jen
          vypis chybovych radku. Tato hodnota je  preddefinovana
          na zacatku prekladu.
      l - znamena, ze behem prekladu se vytvari vypis  na   tis-
          karne (viz blize v oddilu 2.4.5).
      p - ma smysl jen ve spojeni s direktivou l. Pomoci  direk-
          tivy p vysleme na tiskarnu  ridici  znak  nova  strana
          (#0C). Kdyz za znakem p nasleduje decimalni konstanta,
          tak se znak nova strana vysle vzdy po vytisknuti dane-
          ho poctu radku.
      t - vypis se bude vytvaret na terminal.  Tato  hodnota  je
          nastavena na zacatku prekladu.

      Platnost direktiv zacina dalsim radkem a trva az do vysky-
tu dalsiho prikazu vcetne.

      cnnnn - (kde nnnn je hexadecimalni konstanta) znamena,  ze
          i kdyz preklad pokracuje normalnim zpusobem,  vysledny
          kod se zacne ukladat v pameti od  adresy  nnnn.  Timto
          zpusobem je mozno vytvorit  v  pameti  kod,  ktery  je
          schopny prace az po presunuti na patricne misto v  pa-
          meti. Kdyz nnnn=0, pak se binarni kod v  pameti  vubec
          nevytvari. Tak je mozne ziskat vypis programu bez  na-
          ruseni pameti. Platnost prikazu cnnnn se rusi pri  vy-
          skytu pseudoinstrukce org.

2.4.4 Ulozeni modulu do knihovny - pseudoinstrukce ORG
      Prelozeny modul se zpravidla preklada na konec knihovny  a
krome vlastniho binarniho kodu se do knihovny ulozi i  informace
o jmenu a delce modulu (tyto se ulozi pred zacatkem prekladu)  a
informace o vstupnich (ent) a vystupnich (ext)  navestich.  Tato
akce je korektni, pokud se behem prekladu nevyskytla pseudoinst-
rukce org nebo direktiva *cnnnn. V opacnem pripade se  neda  za-
rucit integrita knihovny. Pri beznem zpusobu prace  tedy  uziva-
tel pseudoinstrukci org nepouziva.
      I presto byla pseudoinstrukce ORG do prekladace zarazena a
s jeji pomoci je mozne ridit preklad tak, aby se binarni kod  u-
lozil na presne stanovene misto pameti a aby se nic  jineho  ne-
prepsalo. To je mozne dosahnout  i  vhodnym  pouzitim  direktivy
*cnnnn. V obou pripadech je nutne, aby

      - preklad byl bez jmena, tedy za prikazem asm uz nic  nes-
        mi nasledovat,
      - pseudoinstrukci org se nastavi citac adres na  pozadova-
        nou hodnotu,
      - v programu se nesmi vyskytovat pseudoinstrukce ent a ext
        aby se za program nezacali ukladat prislusna navesti.

   Jeste jednou zduraznujeme, ze pouziti pseudoinstrukce ORG  je
v systemu MRS nestandardni. Uzivatel zpravidla nemusi vedet, kde
se jeho kod ulozil, protoze se v kazdem pripade muze obracet  na
navesti a vstupni body.




-



                              - 17 -



2.4.5 Pouziti tiskarny
      Jak jiz bylo pripomenuto, vyskyt radku *l zpusobi,  ze  se
zacne vytvaret vypis na pripojene tiskarne. System  je  dodavany
bez obsluzneho programu pro tiskarnu, protoze zpusoby  pripojeni
tiskarny k pocitaci ZX Spectrum jsou velmi rozmanite. V knihovne
sysmod je vsak zarazeny vstupni bod PNTCHR,kde je instrukce sko-
ko (C3 .. ..). Normalne je v jeji adresni casti skok na instruk-
ci RET. Kdyz si uzivatel napise vlastni obsluzny podprogram  pro
vytisknuti jednoho znaku (a prip. i pro inicializaci  tiskarny),
zaradi ho do knihovny a odpovidajicim zpusobem modifikuje adres-
ni cast instrukce skoku na adrese PNTCHR, ziska moznost tisknout
vystup z prekladace. Uzivatelsky obsluzny podprogram prebira kod
znaku z registru A. Registry je mozno menit. Jako  ridici  znaky
se vyskytuji kody #0D (CR), #0A (LF) a  #0C  (prechod  na  novou
stranu).

2.4.6 Chybova hlaseni
      Chybova hlaseni mozno rozdelit na dve skupiny: jednak jsou
to vazne chyby, ktere okamzite ukonci preklad, a to:

      no end   - prekladac nenasel pseudoinstrukci end,ktera mu-
                 si ukoncit prekladany zdrojovy text,
      mem full - pokus o ulozeni kodu mimo vyhrazenou pamet. Bud
                 je prelozeny binarni kod  prilis  dlouhy,  nebo
                 nespravne pouzita pseudoinstrukce ORG, pripadne
                 direktiva *cnnnn. Tato chyba vznika az pri sku-
                 tecnem pokusu o zapis do pameti. Vhodnym pouzi-
                 tim direktivy *cnnnn a naslednym posunutim  bi-
                 narniho kodu na spravne misto je mozne prelozit
                 kod na libovolne misto pameti.
      preruseni prekladu - kdyz uzivatel behem prekladu  stiskne
                 tlacitko BREAK, preklad se presusi, do dialogo-
                 veho radku se vypise text
                       break
                 a po stisknuti tlacitka ENTER se  rizeni  vrati
                 systemu MRS.

   Druhou skupinu tvori chyby zjistene behem prekladu.Tyto chyby
jsou indikovane kodem chyby ve znaku pred polem navesti.  Chybne
radky se zobrazi na obrazovce vzdy, neni mozne je potlacit.

      u - v adresni casti se  vyskytuje  navesti,  ktere  nebylo
          definovane, tj. nevyskytlo se v poli navesti ani neby-
          lo definovane pseudoinstrukci EXT. Navesti  v  adresni
          casti pseudoinstrukce musi byt definovane  drive,  nez
          se vyskytnou v adresni casti, tj. musi byt  definovane
          v prvnim pruchodu prekladu. Navesti, ktere bylo jednou
          oznacene jako nedefinovane, je tak oznacen pri  kazdem
          vyskytu,i kdyz bylo prip. dale v textu v poli navesti.
      m - v poli navesti se vyskytuje navesti, ktere uz bylo de-
          finovane, tj. uz se vyskytlo v poli navesti.Timto chy-
          bovym kodem je oznaceny kazdy jeho vyskyt. Tato  chyba
          se vyskytne i tehdy, kdyz jako  vstupni  navesti  bylo
          popsane navesti, ktere se jako vstupni bod v  knihovne
          jiz vyskytuje, nebo je  jako  vnejsi  navesti  popsane
          nektere navesti programu.
- 



                              - 18 -



      d - v adresni casti se vyskytlo navesti, ktere bylo  vice-
          krat definovane, tj. jeho vyskyt v  poli  navesti  byl
          oznacen chybovym kodem m. Toto hlaseni ma  v  podstate
          informativni  charakter,  ulehcuje  uzivateli   opravy
          chyby m.
      r - vyraz v adresnim poli instrukce, ktera  pripousti  jen
          8-mi bitovou hodnotu, prekrocil rozsah 1 bytu (0-255).
      e - navesti popsane jako external se vyskytlo jako soucast
          vyrazu nebo je v adresni casti instrukce,  ktera  pri-
          pousti jen 8-mi bitovou hodnotu v adresni casti.
      z - pri pouziti operace deleni doslo k pokusu o deleni 0.

      Vyraz, pri jehoz zpracovani byla zjistena chyba, ma hodno-
tu 0. Kdyz se v adresni casti instrukce vyskytne navesti popsane
jako vnejsi, tak v binarnim kodu se behem prekladu ukladaji  in-
formace, ktere prekladac na zaver pouzije  na  pripravu  tabulky
potrebne pro pracci Spojovaciho programu. Ve vypisu prekladu  se
tedy objevi hodnoty, ktere pro uzivatele nemaji smysl.

2.4.7 Pouziti relativnich skoku
      Pokud se v adresni casti instrukce relativniho skoku  vys-
kytne vyraz obsahujici navesti, tak vysledna hodnota se  automa-
ticky upravi. Kdyz se ve vyraze  navesti  nevyskytuje,  vysledna
hodnota vyrazu se primo zapise do adresni casti  instrukce,  tj.
napr. instrukce JR LABEL+4 ma v adresnim poli hodnotu LABEL+2-$,
kde $ je hodnota citace instrukci v dobe prekladu instrukce. In-
strukce JR #10 ma po prekladu v adresni casti hodnotu #10.


2.5 Spojovaci program
      Spojovaci program se vyvolava prikazem lnk, za kterym  ne-
nasleduje parametr. Uloha Spojovaciho programu je velmi jednodu-
cha, nebot velkou cast jeho prace uz vykonal prekladac. Spojova-
ci program jen prohleda seznam vnejsich navesti v  cele  binarni
knihovne, ke kazdemu vnejsimu navesti najde odpovidajici vstupni
navesti a jeho hodnotu ulozi na vsechny  mista  binarniho  kodu,
kde se toto navesti vyskytuje v adresni casti.  Vnejsi  navesti,
ktere se mezi vstupnimi navestimi knihovny nenajde, se vypise na
obrazovku pod hlavickou
      undefined externals:
a na zaver se vypise informace o poctu techto navesti vypisem:

      errors: n

      Kdyz byl Spojovaci program spusteni prikazem  lnk,  rizeni
se vrati modulu MRS. Kdyz byl Spojovaci program spusteni  prika-
zem ald, rizeni se vrati Editoru (kdyz se vyskytlo  nedefinovane
vnejsi navesti), nebo Ladicimu programu (DBG).
      Jinymi slovy, naveti v programu, ktere maji byt  volane  z
jinych samostatne prekladanych modulu, se popisuji v modulu,  ve
kterem se vyskytuji, pseudoinstrukci ENT a v ostatnich  modulech
pseudoinstrukci EXT.Navesti definovane pomoci EXT musi reprezen-
tovat 16-ti bitovou hodnotu a nesmi byt soucasti vyrazu.  Spojo-
vaci program spravne doplni adresni casti, ve kterych se  vysky-
tuji navesti popsane pomoci EXT a tak vlastne propoji vice modu-
lu do jednoho celku.
-



                              - 19 -



      Upozornujeme, ze se nesmi spustit program, ktery  obsahuje
vnejsi navesti, ale nebyl spojeny Spojovacim programem,nebo kte-
ry obsahuje nedefinovane vnejsi body, protoze adresni cast  pri-
slusne instrukce po prekladu obsahuje nedefinovanou hodnotu.


2.6 Program na obsluhu binarni knihovny

2.6.1 Ovladani programu na obsluhu knihovny
      Tento program se spusti prikazem  lib  bez  parametru.  Po
spusteni se prihlasi vypisem

      lib>

do dialogoveho radku a ocekava jeden z techto prikasu:

      lst - vypise seznam modulu ulozenych v knihovne. Pro kazdy
            modul tez vypise seznam vstupnich navesti  s  jejich
            hodnotami v hexadecimalnim tvaru.  Stejne  jako  pri
            vypisu, ktery dela prekladac, je mozno  tento  vypis
            zastavovat a spoustet tlacitky CS+S a CS+Q nebo pre-
            rusit tlacitkem BREAK. Tehdy system vypise do dialo-
            goveho radku text
                                break
            a po stisknuti tlacitka ENTER se rizeni vrati  ridi-
            cimu modulu.
      del - vymaze z knihovny posledni modul. Moduly uvnitr kni-
            hovny se nedaji vymazat tak, aby se  usetrilo  misto
            (aby se udelala komprese knihovny), nebot jsou  pre-
            lozeny v absolutnich adresach.Vymazani vnitrniho mo-
            dulu bez usetreni pameti (napr. kdyz  chceme  pouzit
            vstupni navesti, ktera jsou v nem definovana, v  ji-
            nem modulu) je mozne, kdyz prelozime  prazdny  modul
            (sestavajici z pseudoinstrukce END) se stejnym  jme-
            nem. Posledni modul bez jmena se automaticky  vymaze
            na zacatku kazdeho prekladu. Zakladni modul knihovny
            SYSMOD neni mozno vymazat.
      sav - stejne jako pri ukladani zdrojoveho textu tento pri-
            kaz ulozi binarni knihovnu na magnetovonovou  pasku.
            Pred jeho odeslanim uzivatel musi zapnout magnetofon
            a po ulozeni knihovny se prihlasi opet modul LIB.  V
            poslednich 2 bytech hlavicky jsou  zapsane  0,  cimz
            system rozezna moduly knihovny od jinych  modulu  se
            stejnym jmenem. Pred  ulozenim  knihovny  se  vymaze
            pripadny modul bez jmena.
      loa - slouzi k nahrani binarni knihovny z magnetofonu. Na-
            hravani se provede stejnym zpusobem jako  v  pripade
            zdrojoveho textu (viz tam). Program kontroluje,  zda
            se nahranim  knihovny  neprepise  pripadny  zdrojovy
            text. V tomto pripade vypise chybove hlaseni:
                         mem full
            a po stisknuti klavesy ENTER se rizeni vrati  modulu
            MRS. Nova knihovna vzdy nahradi starou knihovnu.
      ent - za prikazem nasleduje navesti, ktere je  v  knihovne
            popsane jako vstupni bod. Od tohoto navesti se potom

-



                              - 20 -



            spusti program prikazem run.  Pokud  uzivatel  jeste
            nepouzil prikaz ENT, nebo za nim neuvedl zadne nave-
            sti, prikaz run vrati rizeni okamzite systemu MRS.
      run - timto prikazem se spusti uzivatelsky program od  na-
            vesti popsane prikzem ENT. Posledni instrukce RET  v
            uzivatelskem programu vrati rizeni systemu MRS.
      mon
      edi
      asm
      lnk
      ald
      dbg - ukonci praci programu LIB a rizeni se vrati prislus-
            nemu modulu.

2.6.2 Zakladni modul knihovny
      Tento modul se nazyva SYSMOD a musi byt  v  knihovne  vzdy
pritomny. Obsahuje ruzne podprogramy systemy  MRS  popsane  jako
vstupni navesti. Uzivatel tedy nemusi vedet, na jakych  absolut-
nich adresach se moduly nachazeji, ale oznacuje je jmeny  pomoci
pseudoinstrukce EXT. Modul SYSMOD obsahuje tato vstupni navesti:

      memory - obsahuje adresu prvni  volne  pametove  bunky  za
               knihvnou. Tato hodnota se iniciuje az pri  vstupu
               do ladiciho programu.

      memtop - obsahuje adresu prvni  obsazene  pametove  bunky.
               MEMORY a MEMTOP umoznuji praci s dynamickou pame-
               ti, tj. kdyz napr. uzivatel  v  programu  pouzije
               instrukce
                           ext memory,memtop
                           ld de,(memory)
                           ld hl,(memtop)
               tak ziska v registrech <DE> a <HL>  hranice  pou-
               zitelne pameti, tj. bezici program ma k dispozici
               pamet od <DE> do <HL-1>.

      dcbn   - konverze retezce decimalnich cislic na 16-ti  bi-
               tovou binarni hodnotu
               vstup:  <HL> = adresa retezce
               vystup: <HL> = adresa konce retezce (retezec kon-
                              ci libovolnym symbolem mimo 0-9)
                       <DE> = konvertovana binarni hodnota
                       <A > = ukoncovaci znak
               meni se: <AF>, <DE>, <HL>

      hxbn   - konverze retezce hexadecimalnich cislic na  16-ti
               bitovou binarni hodnotu.
               vstup:  <HL> = adresa retezce
               vystup: <HL> = adresa konce retezce (retezec kon-
                              ci libovolnym symbolem mimo cislic
                              0-9 a pismen A-F
                       <DE> = konvertovana binarni hodnota
               meni se: <AF>, <DE>, <HL>
