MONSnav.2                                            TASWORD TWO
Priklad:
P
First:7000 RETURN
Last:77FF RETURN
With:55 RETURN
Zaplni prostor od &7000 do &77FF (vcetne) bytem &55 ('U').
Je-li pocatecni adesa vetsi nez koncova, prikaz se neprovede.
" Q "
Zmena sady registru.
Pri vstupu zobrazi 'celni panel' standardni sadu  registru  (AF,
HL, DE, BC). Prikaz 'Q'  zobrazi  sadu  alternativnich  registru
(AF', HL',DE',BC'), ktera se od standardni rady lisi  apostrofem
za nazvem registru.
Prikaz ucinkuje i opacne.
" > "
Nastavi  bod  preruseni  za  beznou  instrukci  a  pokracuje   v
provadeni programu.
Priklad:
9000 B7     OR A
9001 C20098 CALL NZ,#9800
9004 010000 LD BC,0
9800 21FFFF LD HL,-1
Krokujte ve vyseuvedenem programu a dosli jste na adresu &9001 s
nenulovou hodnotou v registru A, takze nulovy indikator bude  po
instrukci OR A ve stavu NZ (ne nula).  Jestlize  nyni  pouzijete
pro dalsi krokovani prikaz ':' ,  pak  provadeni  programu  bude
pokracovat na adrese  podprogramu  tj.  &9800.  Neprejete-li  si
krokovat timto programem, pak pri dosazeni adresy &9001  zadejte
prikaz '^T' a instrukce CALL se provede automaticky a program se
zastavi na adrese &9004, abyste mohli  pokracovat  v  krokovani.
Pamatujte  si,  ze  ':'  nastavuje  bod  preruseni  za   beznou
instrukci a pak zada prikaz 'K'.
Viz prikaz ':' v rozsirenem prikladu krokovani.
" T "  ( funguje s chybami )
Dekompilace bloku programu s moznosti vystupu na tiskarnu.
Nejprve vas program vyzve  ke  vlozeni  pocatecni  ('First:')  a
koncove ('Last:') adresy programu, ktery si prejete dekompilovat
- vlozte  ji  hexadecimalne,  jak  bylo  podrobne  vysvetleno  v
kapitole 1. Je-li pocatecni adresa vetsi nez koncova, prikaz  se
neprovede. Po vlozeni adres budete vyzvan naznakem 'Printer?';
odpoved 'Y' nasmeruje dekompilovany program na vasi tiskarnu  -
jakakoliv jina hodnota jej odesle na obrazovku.
Pote jste vyzvani naznakem  'Text'  ke  vlozeni  (hexadecimalne)
pocatecni  adresy  libovolneho  textoveho  souboru,  ktery    ma
dekompilator vyhotovit. Nechcete-li, aby byl  generovan  textovy
soubor, stisknete proste po naznaku  RETURN .  Udate-li  adresu,
pak  bude  vyhotoven  dekompilovany  textovy  soubor  ve   forme
pouzitelne pro  EDTASM.
Jestlize jste zadali adresu textoveho souboru, budete pozadani o
adresu pracovni oblasti ('Workspace:') - to by mela  byt  adresa
volne oblasti pameti, ktera se vyuziva jako  primitivni  tabulka
symbolu  pro  veskera   navesti    generovana    dekompilatorem.
Pozadovany objem pameti je 2 byty na kazde  generovane  navesti.
Pote budete opakovane  zadani  o  prvni  ('First:')  a  posledni
('Last:') - vcetne - adresu jakychkoliv datovych oblasti v ramci
bloku, ktery chcete dekompilovat. Datove oblasti jsou oblasti  -
napr. textu, u kterych nechcete, aby  byly  interpretovany  jako
instrukce  Z80.  Misto  toho  tyto  datove   oblasti    vyvolaji
generovani assemblerovych prikazu DEFB. Je-li  hodnota  datoveho
bytu  mezi  32  a  127  (&20  az  &7F)  vcetne,  pak  je   udana
interpretace ASCII tohoto bytu, ktere nasleduji za  DEFB,  napr.
&41 se zmeni na "A". Kdyz jste ukoncili  specifikovani  datovych
oblasti  nebo  nechcete-li  je  specifikovat,  stisknete  proste
RETURN jako odezvu na oba naznaky.
Prikaz 'T' vyuziva oblast na  konci  MONS  3  k  ukladani  adres
datovych oblasti, a tak muzete urcit  tolik  oblasti,  kolik  je
dostupne pameti; kazda datova oblast  vyzaduje  4  byty  pameti.
Mejte na zreteli, ze pouziti 'T' rusi  veskere  body  preruseni,
ktere byly predtim nastaveny viz prikaz 'V'.
Nyni se vymaze obsah obrazovky. Jestlize jste si vyzadali tvorbu
textoveho souboru,  bude  nasledovat  kratka  pauza  (zavisi  na
velikosti vyseku pameti, ktery chceme dekompilovat), behem ktere
se konstruuje tabulka symbolu. Jakmile je  konstrukce  skoncena,
objevi se vypis dekompilace na  obrazovce  nebo  na  tiskarne  -
vypis muzete zastavit stiskem RETURN nebo SPACE na konci  radku
a opet pokracovat stisknutim libovolne klavesy.  Pri zastavenem
vypisu se lze stisnutim CTRL X vratit kzobrazeni celniho panelu.
Neplatny operacni kod je dekompilovan jako NOP a indikovan *  za
vypisem operacniho kodu.
Kdyz je dekompilace ukoncena, stisknete libovolno klavesu k nav-
ratu do BASICU.
Navesti se generuji vsude, kde jsou na miste (napr.  C30078)  ve
formatu Lxxxx, kde xxxx je absolutni adresa (hex)  navesti,  ale
pouze v tom pripade, ze adresa je v  ramci  hranic  dekompilace.
Je-li adresa mimo tento rozsah, navesti se negeneruje a  uda  se
pouze adresa, Napr. pri zpracovami oblasti &7000  -  &8000  bude
instrukce C30078 dekompilovana jako JP #7800  .  Jestlize  je  v
instrukci reference na urcitou adresu v ramci  dekompilace,  pak
jeji  navesti  se  objevi  v  poli  navesti  (pred   mnemonickou
zkratkou) dekompilovane instrukce na teto adrese  -  pouze  vsak
kdyz je vypis smerovan do textoveho souboru.
Priklad:
T
First:8B RETURN
Last: 9E RETURN
Printer? Y
Text: RETURN
First: 95 RETURN
Last: 9E RETURN
First:RETURN
Last: RETURN
008B    FE16    CP #16
008D    3801    JR C,L0090
008F    23      INC HL
0090    37      SCF
0091    225D5C  LD (#5C5D),HL
0094    C9      RET
0095    BF524E  DEFB  #BF, 'R', 'N'
0098    C4494E  DEFB  #C4, 'I', 'N'
009B    4B4559  DEFB  'K', 'E', 'Y'
009E    A4      DEFB  #A4
" U "
Pouziva se ve spojeni s prikazem 'O'.
Pamatujte si, ze  prikaz  'O'  aktualizuje  zobrazeni  pameti  v
souladu s relativnim posunutim, tj. ukaze vysledek instrukci  JR
nebo DJNZ. Prikaz 'U' se pouzije k aktualizaci zobrazeni  pameti
zpet na miste, kde byl zadan posledni prikaz 'O'.
Priklad:
 7200       47             71F3       77
 7201       20             71F4       C9
>7202       F2<           >71F5       F5<
 7203       06             71F6       C5
Zobrazeni 1               Zobrazeni 2
Jste na zobrazeni 1 a prejete si vedet kam  se  vetvi  relativni
skok 20F2. Stisknete tedy 'O' a zobrazeni se  zmeni  na  2.  Ted
prosetrite instrukce, ktere nasleduji  za  &71F5  a  prejete  si
navrat  k  instrukci  ktera  nasleduje  za  puvodnim  relativnim
skokem, abyste mohli zjistit, co  se  stane,  kdyz  je  nastaven
nulovy indikator  (Z).  Stisknete  tedy  'U'  a  dostanete  opet
zobrazeni 1.
Povsimnete si, ze prikazem 'U' se muzete vratit  pouze  k  mistu
posledniho zadani prikazu 'O'. Vsechny ostatni jsou ztraceny.
" V "
Pouziva se ve spojeni s prikazem 'X'.
'V'  je  podobny  prikazu  'U'  co  do  ucinku  krome  toho,  ze
aktualizuje zobrazeni pameti v miste,  kde  byl  zadan  posledni
prikaz 'X'.
Priklad:
 8702       AF             8420       18
 8703       CD             842E       A2
>8704       2F<           >842F       E5<
 8705       44             8430       21
Zobrazeni 1               Zobrazeni 2
Jste na zobrazeni 1 a chcete se podivat na  podprogram  v  miste
&842F. Stisknete tedy 'X'  se  zobrazenim  soustredenem  dle  1;
zobrazeni pameti se zmeni na 2. Prohlednete si tento  program  a
chcete se  vratit  k  instrukci  puvodniho  volani  podprogramu.
Stisknete tedy 'V' a znovu se zobrazi 1.
Stejne jako u prikazu 'U' se muzete vratit pouze na adresu,  kde
byl zadan posledni prikaz 'X'. Vsechny predchozi jsou ztraceny.
" W "
Nastavi bod preruseni do pametoveho ukazatele.Bod preruseni  je,
pokud se tyka MONS 3, prosta instrukce volani (CALL) programu  v
MONS 3,ktfry zobrazi celni panel  a  tak  umozni  programatorovi
zastavit  provadeni  programu  a  zkoumat  obsah   registru    a
indikatoru Z80,jakoz i prislusne oblasti pameti.
Takze chcete-li napr.  zastavit  provadeni  programu  na  adrese
&9876, pak pouzijete prikaz 'M' k nastaveni pametoveho ukazatele
na &9876 a prikaz 'W' k nastaveni bodu preruseni na teto adrese.
Tri byty kodu, ktere byly puvodne na adrese &9876 se uchovaji  a
nahradi instrukci CALL, ktera zastavi beh programu. Pri dosazeni
instrukce CALL se puvodni tri byty vrati na sve misto a  zobrazi
se celni panel se vsemi registry a  indikatory  ve  stavu  tesne
pred bodem preruseni. Ted muzete pouzit vsechny moznosti MONS  3
obvyklym zpusobem.
Poznamky:
MONS 3 vyuziva oblast na  svem  konci,  ktera  puvodne  obsahuje
adresy premisteni, pro ulozeni  informace  o  bodech  preruseni.
Tzn., ze muzete nastavit tolik bodu preruseni, kolik je pameti k
dispozici; kazdy bod preruseni vyzaduje 5 bytu. Po vykonani bodu
preruseni  obnovi  MONS  3  obsah  pameti  tak,  jak  byl   pred
nastavenim bodu preruseni.
Vsimnete si, ze vsechny body preruseni se zrusi, kdyz  pouzijete
prikaz 'T', protoze rovnez vyuziva tuto oblast.  Body  preruseni
lze nastavit pouze v RAM.
Jelikoz bod preruseni je tvoren  tribytovou  instrukci  CALL  je
treba venovat trochu pozornosti urcitym pripadum.
Priklad:
 8000  3E         8008   00
 8001  01         8009   00
 8002  18         800A   06
 8003  06         800B   02
>U004  AF <       800C   18
 8005  0E         800D   F7
 8006  FF         800E   06
 8007  01         800F   44
Kdyz nastavite bod preruseni na &8004 a zacnete provadet program
od &8000, pak do registru A se vlozi hodnota 1,  program  prejde
na &800A, do registru B se vlozi hodnota 2 a program  prejde  na
&8005.  Ale  adresa  &8005  byla  prepsana  spodnim  bytem  bodu
preruseni  a  tim  jsme   zkomolili    instrukci,    ktera    da
nepredpokladane vysledky. Tato situace je spise  neobvykla,  ale
musite se snazit ji zamezit - v tomto pripade vyhovi  krokovani;
viz prikaz ':' dale.
" X "
Aktualizuje pametovy ukazatel hodnotou  absolutni  adresy  mista
urceni instrukce CALL nebo JP.
'X' bere 16 bitovou adresu, urcenou bytem v pametovem  ukazateli
a bytem v pametovem ukazateli + 1 a pote  aktualizuje  zobrazeni
pameti tak, ze je soustredeno kolem teto adresy.  Pamatujte,  ze
spodni polovina adresy je dana prvnim  bytem  a  horni  polovina
adresy druhym bytem - format INTEL.
Priklad:
Chceme  se  podivat  na  podprogram,  ktery  vola  kod   CD0563;
nastavime  ukazatel  pameti  ('M')  tak,  aby  adresoval  05   v
ramci instrukce  CALL  a  stiskneme  'X'.  Zobrazeni  pameti  se
soustredi kolem adresy &6305.
Viz tez prikaz 'V' v suvislosti s prikazem 'X'.
" Y "
Vlozit ASCII do pameti.
Prikaz 'Y' vygeneruje novy radek, na ktery muzete vkladat  znaky
ASCII primo z klavesnice. Tyto  znaky  se  zpetne  kontroluji  a
jejich hexadecimalni hodnoty se  ukladaji  do  pameti  od  bezne
hodnoty pametoveho ukazatele. Retezec znaku se ma  ukoncit  CTRL
+ ; a DEL  lze pouzit k vypusteni znaku z retezce.
Po vlozeni znaku a stisknuti CTRL ; se zobrazeni aktualizuje tak
ze pametovy ukazatel je umisten bezprostredne za koncem retezce.
" : "
Krokovani
Pred pouzitim ':'(nebo '>') musi byt jak citac instrukci (PC)tak
pametovy ukazatel nastaven na adresu  instrukce,  kterou  chcete
provest.
':' pouze provede beznou instrukci a  zaktualizuje  celni  panel
tak, aby odpovidal zmenam, ktere instrukce vyvolala.
Pamatujte, ze muzete krokovat kdekoliv v pameti (RAM nebo  ROM),
ale musite zajistit, aby nebyla aktivovana preruseni.
Nyni nasleduje rozsahly priklad, ktery by mel  objasnit  pouziti
mnoha odladovacich prikazu dostupnych v MONS 3 -  je  nutne  jej
peclive prostudovat a vyzkouset.
Predpokladejme, ze mame tri casti  programu  ve  strojovem  kodu
vlozene do pocitace (viz priklad). Prvni cast je hlavni program,
ktery plni registry HL a DE cisly a pak vola  podprogram,  ktery
cisla vynasobi (2. cast), a vysledek ulozi  do  HL,  posleze  2x
vola podprogram, ktery vysle vysledek na obrazovku (3.cast).
A nyní si nahraj poslední část návodu !