| | S O R D Creative Computer $$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$ $$ $$$$$$$ $$ $$ $$ $$$$$$$ $$$$$$ $$$$$$ $$ $$$$$$$$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$ $$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$ $$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$ $$ $$$$$$$ $$$$$$$$$ $$$$$$$$ $$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$ ####### $$ $$$$$$$ $$$$$$$ $$$$$$$ ####### $$ $$$$$$$ $$$$$$$ $$$$$$$ ####### $$ $$$$$$$ $$$$$$$ $$$$$$$ ####### $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ -------------------------------------------------- | | | GENS 3 & MONS 3  | | | -------------------------------------------------- GENS + MONS - 1 - OBSAH CAST 1 GENS 3 ...................................... 2 Kapitola 1 Spusteni .................................... 3 Kapitola 2 Podrobnosti GENS 3 .......................... 2 2.0 Jak pracuje GENS 3 .......................... 2 2.1 Format assemblerovych instrukci ............. 6 2.2 Navesti (labels) ............................ 6 2.3 Citac adres ................................. 7 2.4 Tabulka symbolu ............................. 7 2.5 Vyrazy ...................................... 8 2.6 Ridici povely assembleru .................... 9 2.7 Podminene pseudoinstrukce ................... 10 2.8 Prikazy assembleru .......................... 10 Kapitola 3 Editor ...................................... 11 3.1 Uvod do editoru ............................. 11 3.2 Prikazy editoru ............................. 12 3.2.1 Vkladani textu .............................. 12 3.2.2 Vypis textu ................................. 13 3.2.3 Uprava textu ................................ 13 3.2.4 Prikazy pro pasku ........................... 15 3.2.5 Kompilace a spusteni ........................ 16 3.2.6 Ostatni prikazy ............................. 16 3.3 Priklad pouziti editoru ..................... 17 Priloha 1 Chybova hlaseni a jejich vyznam ............. 18 Priloha 2 Rezervovana slova, mnemonika atd ............ 19 Priloha 3 Funkcni priklad ............................. 20 Cast 2 MONS 3 ...................................... 24 Kapitola 1 Spusteni .................................... 25 Kapitola 2 Pouzivane prikazy ........................... 26 'SYMBOL SHIFT 3' ............................ 26 'SYMBOL SHIFT 4' nebo '$' ................... 26 'ENTER' ..................................... 26 'CAPS SHIFT 7' .............................. 26 'CAPS SHIFT 5' .............................. 26 'CAPS SHIFT 8' .............................. 26 ',' (carka) ................................ 26 'G' ......................................... 26 'H' ......................................... 27 'I' ......................................... 27 'J' ......................................... 27 'SYMBOL SHIFT K' ............................ 27 'L' ......................................... 28 'M' ......................................... 28 'N' ......................................... 28 'O' ......................................... 28 'P' ......................................... 29 'Q' ......................................... 29 'SYMBOL SHIFT T' ............................ 29 'T' ......................................... 29 'U' ......................................... 31 'V' ......................................... 31 'W' ......................................... 32 'X' ......................................... 32 'Y' ......................................... 33 'SYMBOL SHIFT Z' ............................ 33 Priklad krokovani ........................... 33 'SYMBOL SHIFT P' ............................ 35 Zmeny obsahu pameti ......................... 35 Zmeny obsahu registru ....................... 35 Priloha Priklad zobrazeni celniho panelu ............ 36 GENS + MONS - 3 - KAPITOLA 1 SPUSTENI GENS 3 je vyborny a jednoduse pouzitelny assembler pro Z80, ktery je velice blizky standardnimu assembleru ZILOG. Na rozdil od mnoha jinych assembleru pro mikropocitace je GENS 3 rozsahly profesionalni software a doporucujeme prostudovat nasledujici kapitoly spolu s prikladem v priloze 3 velmi pozorne jeste pred pouzitim assembleru. Jste-li uplny zacatecnik, zacnete nejdrive prilohou 3. GENS 3 je dlouhy zhruba 7kbyte a pouziva svou vlastni vnitrni zasobnikovou pamet takze je zcela sobestacny. Obsahuje vlastni radkovy editor, ktery umistuje textovy soubor ihned za GENS 3 CODE, zatimco tabulka symbolu assembleru se tvori za textovym souborem. Pri nahrani GENS 3 musite tudiz nechat dostatek mista pro vlastni assembler, tabulku symbolu a text, ktery budete pri praci potrebovat. Je proto vhodne umistit GENS 3 do spodni casti pameti. Nahrani GENS 3 se provadi nasledovne: 'LOAD "GENS3" CODE xxxxx' ENTER - kde xxxxx je dekadicka adresa od ktere chcete GENS 3 umistit a spoustet. Jakmile je do pocitace nahran GENS 3, muzete vstoupit do assembleru pomoci 'RANDOMIZE USR xxxxx', kde xxxxx je adresa, od ktere byl GENS 3 nahran. Je-li treba kdykoli pozdeji vstoupit opet do assembleru, je nutne pouzit adresu xxxxx + 56 pro studeny start (dojde k vyprazdneni) nebo xxxxx + 61 pro teply start (zachova se vytvoreny text). Je nutne si uvedomit, ze pres adresu xxxxx se spusti GENS 3 pouze jednou, nebot dojde k rozmisteni strojniho kodu. Napr.: chcete-li nahrat GENS 3 od adresy #5E00 (nebo 24064 dekadicky) - postupujte nasledovne: LOAD "GENS3"CODE 24064 RANDOMIZE USR 24064 Pro novy studeny start pouzijte 'RANDOMIZE USR 24120' a 'RANDOMIZE USR 24125' k teplemu startu. Kdyz spustite GENS 3 poprve adresou xxxxx, objevi se zprava 'Buffer size?': mate vlozit cislo od 0 do 9 vcetne, nasledovane ENTER nebo pouze ENTER, kdy se predpoklada standardni hodnota 4. Vlozene cislo nebo standardni hodnota urcuje velikost pameti pro vkladani v jednotkach 256 bytu (viz kapitola 2.8 - vkladani). Chcete-li minimalizovat prostor zabrany GENS 3 (a nepotrebujete-li vyuzit moznost vkladani) vlozte 0 nasledovanou ENTER - tim se vytvori nejmensi mozny prostor, t.j. 64 bytu. Po zodpovezeni teto otazky se objevi znak '>', ze editor je pripraven - podivejte se do kapitoly 3, jak vkladat a do kapitoly 2 co vkladat. Dulezite upozorneni! : Z duvodu vetsi rychlosti a lepsiho spojeni je blokovano preruseni. To znamena, ze kazdy program vyzadujici preruseni musi byt vybaven instrukci pro preruseni (EI) drive nez toto bude pozadovano. Gens 3 rovnez vyuziva registr IY. KAPITOLA 2 PODROBNOSTI GENS 3 2.0 Jak pracuje GENS 3 GENS 3 je rychly assembler pro Z80 se dvema prubehy, ktery lze prizpusobit vetsine systemu se Z80. Zahrnuje kompilaci vsech standardnich instrukci Z80 a je vybaven dalsimi moznostmi jako je podminena kompilace a mnoho assemblerovych prikazu vcetne binarne vetvene tabulky symbolu. GENS + MONS - 5 - hexadecimalne, ale muze byt zobrazen i dekadicky uzitim prikazu *D+ (viz kapitola 2.8). Na druhem miste, od sloupce 6, je az 8 znaku (predstavujicich 4 byty) instrukce - ale vsimnete si prikazu *C uvedeneho nize. Nasleduje cislo radku - cele cislo v rozmezi 1 az 32767 vcetne. Sloupce 21 - 26 prvniho radku obsahuji prvnich sest znaku navesti definovaneho na tomto radku. Nasledujici dva odstavce se tykaji pouze systemu s uzkou obrazovkou. Systemy s delkou radku vetsi nez 40 maji kazdy radek assembleru uveden na jednom radku obrazovky. Po kazdem navesti nasleduje novy radek - na nem je uvedena instrukce ve sloupcich 21 - 24. Nasleduje pole operandu od sloupce 26 a nakonec komentar, ktery je vkladan na konec radku a generuje novy radek pokud je to nutne. Uvedeny format usnadnuje citelnost u systemu s uzkou obrazovkou jako je SPECTRUM. GENS 3 nemeni pocet znaku na obrazovce, nebot by to vyzadovalo rozsireni GENS 3 a nebylo by mozno pouzit standardni rutiny v ROM. Prikaz assembleru *C muze byt pouzit ke zkraceni radku a zpusobi vynechani 9 znaku predstavujicich strojni kod radku a umozni zobrazeni vice radku na obrazovce (viz kapitola 2.8 nize) Je mozna modifikace formatu radky zapsanim pomoci POKE do tri mist GENS 3. Podrobnosti jsou uvedeny dale. Rozlisujeme mezi radkem assembleru a radkem obrazovky, coz je to co je videt na obrazovce. Radek assembleru je zpravidla vic nez radek obrazovky. 1. 'Start GENS 3 + 51 (#33)' urci, na ktere pozici (sloupec-5) skonci prvni radek vystupu assembleru. Zmenou tohoto bytu na 0 se vytvori nepreruseny radek (uzitecne u tiskaren s dlouhym radkem) nebo na hodnotu <256 k ukonceni radku na dane pozici sloupce. 2. 'Start GENS 3 + 52 (#34)' udava sloupec (pocitano od 1), kde ma zacinat nasledujici radek na obrazovce. 3. 'Start GENS 3 + 53 (#35)' udava kolik znaku, zbylych z radku, ma byt zobrazeno na obrazovce po prvnim obrazovkovem radku. Jako priklad predpokladejme, ze pozadujeme pro prvni obrazovkovy radek 20 znaku (t.j. bez pole navesti a potom kazdy nasledujici obrazovkovy radek ma zacinat na pozici 1 a vyplnit cely radek. Take predpokladame, ze jste nahrali GENS 3 od adresy #5E00 nebo 24064 dekadicky. K vyvolani techto zmen provedte nasledujici: POKE 24115,20 POKE 24116,1 na zacatku nasledujiciho obrazovkoveho POKE 24117,31 radku musi byt alespon jedna mezera Vyseuvedene zmeny lze provest jen kdyz nebyl pouzit prikaz *C- tento prikaz zpusobi v pripade potreby scroll. Vystup assembleru lze prerusit na konci kazdeho radku stisknutim CAPS SHIFT a SPACE - nasledujicim stisknutim 'E' se vracime do editoru nebo stisknutim libovolneho tlacitka pokracujeme ve vystupu. Jedina chyba, ke ktere muze dojit pri druhem prubehu je *ERROR* 10 (viz priloha 1) a 'Bad ORG!' (v pripade, ze by strojni kod prepsal GENS 3, tabulku symbolu nebo textovy soubor - toto vyhodnoceni muze byt vypnuto uzitim cinnosti 32. *ERROR* 10 neni podstatna a muzete pokracovat v kompilaci. Zatimco chyby jako 'Bad ORG!' jsou podstatne a ihned vrati rizeni do editoru. GENS + MONS - 7 - 2.2 Navesti Navesti predstavuji az 16 bitovou informaci. Navesti muze byt pouzito k oznaceni adresy urcite instrukce nebo datove oblasti nebo muze byt uzito jako konstanta pomoci prikazu EQU (viz kap. 2.6). Je-li navesti prirazena hodnota vetsi nez 8 bitu a pak je pouzito jako 8 bitova konstanta, ohlasi assembler chybu. label EQU #1234 LD A,label zpusobi hlaseni *ERROR* 10 pri druhem prubehu. Navesti muze obsahovat libovolny pocet znaku (viz nize) nicmene pouze prvnich 6 znaku je platnych; techto prvnich 6 znaku musi byt jednoznacne urceno, jinak navesti nemuze byt rozpoznano (*ERROR* 4). Navesti nesmi byt tvoreno rezervovanym slovem (viz priloha 2), ac muze byt jeho soucasti. Znaky, ktere mohou tvorit navesti jsou: 0-9,$ a A-z. 'A-z zahrnuji vsechna velka i mala pismena spolu se znaky ^,`,_ , [, \ a ]. Zacinat vsak musi pismenem. Nekolik prikladu navesti: LOOP loop L[1] a dve^5 LDIR - neni navesti (rezervovane slovo) 2.3 Citac adres Assembler se stara o citac adres tak, ze symbolu v poli navesti je prirazena adresa a symbol je vlozen do tabulky symbolu. Citac adres muze byt nastaven na libovolnou hodnotu prikazem ORG (viz kap. 2.6). Symbol '$' muze byt pouzit ve vztahu k bezne hodnote citace adres tzn. LD HL,$+5 zpusobi nastaveni registroveho paru HL na hodnotu o 5 vetsi nez je soucasna hodnota citace adres. 2.4 Taublka symbolu Pri prvnim pouziti je symbol vlozen do tabulky se dvema ukazateli, ktere pozdeji oznacuji kde je symbol abecedne ulozen mezi ostatnimi v tabukce. Pri prvnim vyskytu symbolu v poli navesti je jeho hodnota (udana citacem adres nebo dana prikazem EQU) vlozena do tabulky symbolu. Jinak je hodnota vlozena jakmile je symbol postupne nalezen v poli navesti. Tento typ tabulky symbolu se nazyva binarne vetveny a jeho struktura umoznuje vkladani symbolu a jejich vybirani velmi rychle - dulezite u rozsahlych programu. Velikost vstupu se pohybuje od 8 do 13 bytu v zavislosti na delce symbolu. Je-li pri prvnim prubehu symbol definovan vice nez jednou, objevi se chybove hlaseni (*ERROR* 4) nebot assembler nevi kterou hodnotu ma priradit symbolu. Neni-li symbolu prirazena hodnota, objevi se na konci prekladu zprava '*WARNING* symbol absent'. Chybejici definice symbolu vsak neprerusi kompilaci. Do tabulky symbolu se vsak vklada pouze prvnich 6 znaku symbolu, aby tabulka nebyla prilis rozsahla. Na konci kompilace se objevi zprava, oznamujici kolik pameti bylo pouzito tabulkou symbolu behem kompilace - velikost pameti prirazene tabulce muzete upravit na zacatku pri odpovedi na dotaz 'Table:'(viz kapitola 2.0). GENS + MONS - 9 - Je-li vysledkem nasobeni absolutni hodnota vetsi nez 32767 objevi se hlaseni *ERROR* 15 zatimco pri deleni nulou ziskame hlaseni *ERROR* 14; preplneni je ignorovano. Veskera aritmetika pouziva dvojkovy doplnek, kde vsechna cisla vetsi nez 32767 jsou povazovana za zaporna napr.: 60000= -5536 (60000-65536). 2.6 Ridici povely assembleru GENS 3 rozeznava urcite pseudoinstrukce. Tyto ridici povely assembleru, jak jsou nazyvany, nemaji vliv na procesor Z80 pri jeho cinnosti, tj. nejsou prekladany do strojniho kodu, pouze ridi assembler pri kompilaci. Tyto cinnosti svym zpusobem nemaji vliv na strojni kod tvoreny GENS 3. Pseudoinstrukce jsou sestavovany presne stejne jako vykonne instrukce, muze jim predchazet navesti (nutne pro EQU) a mohou byt nasledovany komentarem. Tyto pseudoinstrukce jsou: ORG vyraz nastavi citac adres na hodnotu 'vyraz'. Neni-li zvolena cinnost 2 nebo 16 a ORG by zpusobil prepsani GENS 3, textu nebo tabulky symbolu, objevi se zprava 'Bad ORG' a kompilace se prerusi. Porobneji viz kapitola 2.0 jak ovlivnuje cinnost 2 a 16 pouziti ORG. EQU vyraz musi predchazet navesti.Priradi navesti hodnotu 'vyraz'. Vyraz nemuze obsahovat symbol, kteremu dosud nebyla pri- razena hodnota (*ERROR* 13). DEFB vyraz, vyraz,... kazdy vyraz je vyhodnocen do 8 bitu;byte na adrese,ktera je v citaci adres je nastaven na hodnotu 'vyraz' a citac se posune o 1. Opakuje se pro kazdy vyraz. DEFW vyraz, vyraz,... nastavi slovo (2 byte) na adrese,ktera je v citaci adres na hodnotu 'vyraz' a posune citac o 2. Jako prvni se umisti mene vyznamny byte nasledovany vyssim. Opakuje se pro kazdy vyraz. DEFS vyraz zvysi hodnotu citace adres o hodnotu 'vyraz' - odpovida to rezervovani bloku pameti o velikosti dane hodnotou 'vyraz'. DEFM "s" definuje obsah n bytu v pameti a tyto pak obsahuji ASCII kod retezce "s",kde n je delka retezce a muze byt teore- ticky dlouha 1 - 255. Prakticky je vsak delka retezce omezena delkou radku editoru. Prvni znak pole operandu - uvozovky - je vyhodnocen jako zacatek retezce a retezec je dan znaky mezi dvema uvozovkami; znak konec radku ma rovnez vyznam konec retezce. ENT vyraz nastavi startovaci adresu strojniho kodu na hodnotu 'vyraz'- pouziva se ve spojeni s prikazem editoru 'R' (viz kapitola 3). Pro startovaci adresu neexistuje stan- dardni hodnota (default). GENS + MONS - 11 - *F (filename) Je to velice vykonny prikaz,ktery dovoluje nacist z pas- ky blok textu do vyrovnavaci pameti a pote provest kom- pilaci z vyrovnavaci pameti;to umoznuje vytvaret rozsah- le programy ve strojnim kodu nebot prekladany text neza- bira mnoho pameti.Jmeno textu (az 10 znaku),ktery chcete vlozit v tomto miste kompilace muze byt urcen po '*F' a musi byt oddelen mezerou.Neni-li uvedeno jmeno, pak se vlozi prvni text, ktery bude na pasce nalezen. Jakykoliv text,ktery chcete vkladat timto zpusobem,musi byt predem ulozen na pasku prikazem editoru 'T' a nikoliv 'P'-toto je nezbytne, nebot text pro vkladani musi byt ulozen v blocich s dostatecnym vnitroblokovym prostorem, ktery umozni preklad bloku pred vlozenim dalsiho bloku z pasky. Velikost bloku pouzita timto prikazem (a prikazem edito- ru T ) je dana na zacatku, pri vstupu do GENS 3 vlozenim odpovedi na 'Buffer size?' viz kapitola 1. Vlozene cislo (0 - 9) je vzato jako velikost vkladaci pameti v jednot- kach po 256 bytech se standardni hodnotou 4*256 bytu. Moznost volit velikost pameti optimalizuje pomer veli- kost/rychlost pri vkladani textu z pasky; napr. nepred- pokladate-li pouziti prikazu 'F', je vhodne zvolit veli- kost pameti 0 a tak minimalizovat prostor zabrany GENS 3. Vsimnete si, ze velikost pameti specifikovana v dobe,kdy tvorite soubor pro vlozeni musi byt stejna jako velikost pameti dana v dobe kdy skutecne chcete text vkladat.Kdy- koliv assembler vyhodnoti prikaz 'F' objevi se 'Start the tape...', to se stane pri prvnim i pri druhem prube- hu,nebot vkladany text musi byt cten pri obou prubezich. Na pasce je vyhledan pozadovany soubor pro vlozeni nebo prvni soubor. Je-li nalezen soubor pro vlozeni, jehoz jmeno nesouhlasi s pozadovanym, zobrazi se zprava 'Found filename' a hledani pokracuje, jinak se zobrazi 'Using filename' a soubor se nahraje a vlozi.Viz priloha 3, kde je uveden priklad pouziti tohoto prikazu. Jine prikazy assembleru nez *F jsou rozpoznany pouze pri druhem pru- behu.Je-li kompilace vypnuta jednou z podminenych pseu- doinstrukci, je vypnut i vliv vsech prikazu assembleru. KAPITOLA 3 EDITOR 3.1 Uvod do editoru Vsechny verze editoru GENS 3 jsou jednoduche radkove editory pracujici se vsemi systemy se Z80, s jednoduchou obsluhou a schopne rychleho a efektivniho vkladani programu. Za ucelem zmenseni velikosti textoveho souboru provadi editor potlaceni urciteho poctu mezer. Je to provadeno nasledujicim zpusobem: po napsani radky z klavesnice je tato vlozena znak po znaku do vnitrni vyrovnavaci pameti assembleru; po ukonceni radku (tj. po stisknuti ENTER) dojde k presunu do textoveho souboru. Behem tohoto presunu jsou potlaceny urcite mezery: radek je vyhodnocovan od prvnio znaku; jde-li o mezeru, nahradi se znakem pro tabelaci a vsechny nasledujici mezery se vynechaji. Neni-li prvnim znakem mezera, pak se znaky presunuji do textoveho souboru dokud neni objevena mezera a pak se provadi stejna cinnost, jakoby mezera byla na prvnim miste. Toto se dale opakuje, takze znaky tabelace jsou umisteny na zacatek radku, mezi navesti a mnemoniku, mezi mnemoniku a operandy, pripadne mezi operandy a komentar. Jakmile je vyhodnocen navrat voziku GENS + MONS - 13 - vklada do vnitrni pameti GENS 3 a je-li tato pamet plna, je vkladani dalsich znaku blokovano - musite pouzit CH nebo CX k uvolneni pameti. Kdyz editor zjisti, ze se behem vkladani konec textu blizi k Ramtop, pak se zobrazi zprava 'Bad memory!'. Znamena to, ze neni mozne vkladat dalsi text a vlozeny textovy soubor nebo alespon jeho cast se musi ulozit na pasku pro pozdejsi pouziti. Prikaz: I n,m Tento prikaz umoznuje automaticke vkladani: n - je cislo prvniho vkladaneho radku a m - je odstup mezi cisly radku. Text se vklada po zobrazeni cisla radku, lze podle potreby pouzit ruzne ridici kody a text se ukonci ENTER. K ukonceni cinnosti uzijte ridici funkci CC. Vlozite-li radek s cislem, ktere jiz v textu existuje, pak je stary radek vymazan a nahrazen novym pri stisknuti ENTER. Jestlize pri automatickem cislovani radku dosahne hodnota vice nez 32767 pak se vkladani ukonci. Jestlize pri psani textu dosahnete konce radku na obrazovce aniz jste napsali 64 znaku (velikost radkove pameti), pak se obraz posune o radek a muzete pokracovat na dalsim radku - automaticky se oznaci v textu, ze toto cislo radku je oddelene od textu. 3.2.2 Listovani textu Text muzeme prohlizet pomoci prikazu 'L'; pocet soucasne zobrazenych radku pri tomto prikazu je stanoven na zacatku, ale muze byt zmenen prikazem 'K'. Prikaz: L n,m Zobrazi text na obrazovce od radku n do radku m. Standardni hodnota pro n je vzdy 1 a pro m je 32767 tj. standardni hodnota je nezavisla na drive uzitych argumentech. K listovani celym textovym souborem jednoduse pouzijte 'L' bez argumentu. Levy okraj obrazovky je usporadan tak, ze je zrejme cislovani radku. Tabelace radku se provadi automaticky a jednotliva pole jsou oddelena. Pocet zobrazenych radku muze byt regulovan prikazem 'K' - po zobrazeni prislusneho poctu radku se listovani zastavi (pokud nebylo dosazeno radku m). Ridici funkci CC lze provest navrat do editoru nebo stisknutim libovolneho jineho tlacitka pokracuje listovani. Prikaz: K n 'K' nastavi pocet radku k zobrazeni pri listovani jak bylo popsano vyse u 'L'. Je vypocitana hodnota (n MOD 256) a ulozena. Uzitim K5 pri naslednem 'L' se zobrazi 5 radku soucasne. 3.2.3 Uprava textu Po vytvoreni urciteho textu muze nastat potreba vlozeni dalsich radku. Ruzne prikazy umozni zmenu, vypusteni, presun a precislovani radku: Prikaz: D (DELETE) Vsechny radky od n do m budou vypusteny ze souboru. Je-li mP10,350,Mult ENTER Toto vytvori text a ulozi jej na pasku. Pamatujte, ze magnetofon musi byt spusten pred vlozenim prikazu 'P'. Cast 2 - odstraneni chyb v programu Nejprve se presvedcime, zda probehla spravne kompilace. Pouzijeme cinnosti 6, takze se neprovede vypis a nevytvori se strojni kod. >A ENTER Table size: ENTER (standardni hodnota velikosti tabulky symb.) Options: 6 ENTER *HISOFT GENS3 ASSEMBLER* Copyright Hisoft 1983 All Rights Reserved Pass 1 errors: 00 Pass 2 errors: 00 *WARNING* MU4 absent Table used: 74 from 161 > Z teto kompilace vidime, ze jsme udelali chybu v radku 190 a vlozili MU4 namisto Mu4, ktere je pouzite navesti. Upravime tedy radek 190: >F190,190,MU4,Mu4 ENTER 190 JR NZ, (nyni uzijte povelu 'S') > Nyni provedeme kompilaci jeste jednou a ta by mela byt bez chyby a musime vlozit kod pro odzkouseni rutiny: >N300,10 ENTER (precislovani pro vlozeni dalsiho textu) >110,10 ENTER 10 ;kod pro zkouseni ENTER 20 ;the Mult routine. ENTER 30 ENTER 40 LD HL,50 ENTER 50 LD DE,20 ENTER 60 CALL MULT ;Multiply ENTER 70 LD A,H ;o/p result ENTER 80 CALL Aout ENTER 90 LD A,L ENTER 100 CALL Aout ENTER 110 RET ;Return to editor ENTER 120 ENTER GENS + MONS - 23 - vysledku. Podstatou toho je zjistit zda DE<256 a nasobeni nezpusobi preplneni - to se provede kontrolou zda D je nulovy... ale OR pracuje spravne jen tehdy, kdyz akumulator A je na zacatku nulovy a toto zde neni zajisteno. Musime zajistit, aby A byl nulovy pred provedenim OR D, jinak ziskame nepredpoveditelne preplneni s navratem vetsiho cisla nez je vysledek. Pri prohlidce kodu vidime, ze OR A na radku 380 muzeme nahradit instrukci XOR A a tim nastavit stavove registry pro SBC HL,DE a soucasne nulovat A. Takze: >F380 ENTER 380 Mult OR A 380 I(enter insert mode)X ENTER ENTER > Nyni provedeme opet kompilaci (cinnost 4) a spustime program pouzitim 'R'. Odpoved by nyni mela byt spravna - #3EB. Muzeme nyni provest dalsi kontrolu zmenou radku 40 a 50 ke zmene cinitelu pak kompilovat a spustit - zjistime, ze rutina pracuje perfektne. Po provereni rutiny ji muzeme ulozit na pasku ve 'vkladacim' formatu: >T300,999,Mult ENTER Nezapomente spustit magnetofon na nahravani pred stisknutim ENTER. Takto ulozena rutina muze byt vlozena do programu takto: 500 RET 510 520 ;Vlozit rutinu Mult zde. 530 540 *F Mult 550 560 ;Dalsi rutina Po kompilaci tohoto textu se objevi 'Start tape..', kdyz dojde na radek 540 pri obou prubezich. Musite prehrat Mult z pasky v obou pripadech. To znamena previnout pasek po prvnim prubehu. Muzete vsak na pasek nahrat Mult 2x za sebou a pro druhy prubeh pouzit druhou nahravku. Prostudujte prosim peclive tento priklad a sami jej provedte. GENS + MONS - 25 - KAPITOLA 1 SPUSTENI MONS 3 je dodavan jako premistitelny program; proste jej nahrajete na pocatecni adresu, od ktere si prejete, aby probihal a vstoupite do nej pres tuto adresu. Chcete-li znovu vstoupit do MONS 3 (po navratu do BASICu) je treba zacit na adrese o 29 vetsi nez byla puvodni adresa. Priklad: Rekneme, ze chcete nahrat MONS 3 od adresy #C000 (49152 dek) - provedte nasledujici: LOAD "MONS 3" CODE 49152 RANDOMIZE USR 49152 Do MONS 3 vstoupime znovu tak, ze provedeme RANDOMIZE USR 49181 - tim se vynecha cast programu, ktera premistuje adresy v ramci MONS 3 pri prvnim vstupu. MONS 3 ma delku zhruba 5kbyte po premisteni, ale pri nahravani je treba pocitat s temer 6kbyty v dusledku tabulek relokacnich adres, ktere nasleduji za hlavnim programem. MONS 3 ma svou vlastni zasobnikovou pamet, takze je zcela sobestacny. V okamziku vstupu do MONS 3 se na nekolik sekund objevi text "*MONS3 c Copyright Hisoft 1983*", ktery nahradi zobrazeni tzv. "celniho panelu" (viz priklad v priloze). Ten se sklada z registru a indikatoru Z80 vcetne jejich obsahu a dale z 24bytoveho vyseku pameti, soustredeneho (pouzity znaky ">" a "<") kolem bezne hodnoty pametoveho ukazatele (MEMORY POINTER), ktery je na pocatku nastaven na adresu 0.Na prvnim radku obrazovky je dekompilovana instrukce, adresovana ukazatelem pameti. Pri vstupu do MONS 3 jsou vsechny adresy zobrazene na celnim panelu, udany v hexadecimalni forme; stisknutim SYMBOL SHIFT 3 - viz dalsi kapitola - ji lze zmenit na formu dekadickou. Nezapomente vsak, ze adresy se musi vzdy vkladat hexadecimalne. Priklady se vkladaji z klavesnice jako odpoved na systemovy naznak ">" pod zobrazenim obsahu pameti a lze je psat malymi nebo velkymi pismeny. Nektere prikazy, jejichz ucinek by pri chybnem pouziti mohl byt katastrofalni, vyzaduji stisknuti jak klavesy SYMBOL SHIFT tak klavesy prikazoveho pismene. Pouziti klavesy SYMBOL SHIFT je dale v teto prirucce reprezentovano symbolem "^"; napr. ^Z znamena soucasne stisknuti klaves SYMBOL SHIFT a Z. Prikazy maji okamzity ucinek - neni treba ji ukoncovat pomoci ENTER. Neplatne prikazy program ignoruje. Cely "Celni panel" se aktualizuje po provedeni kazdeho prikazu takze muzete sledovat jakekoliv vysledky prislusneho prikazu. Mnohe prikazy vyzaduji vstup hexadecimalniho cisla - muzete vlozit libovolny pocet hexadecimalnich cislic (0-9 a A-F nebo a-f) a ukoncete ji jakoukoliv cislici, ktera neni hexadecimalni. Je-li koncovy znak platnym prikazem, pak se provede vzapeti po predchozim prikazu. Je-li koncovym znakem "-" (znamenko minus), pak po vlozeni dostaneme zapornou hodnotu vlozeneho cisla ve forme dvojkoveho doplnku; napr. 1800- da E800. Vlozite-li vice nez 4 cislice hexadecimalniho cisla, pak se uchovaji a zobrazi pouze posledni 4 cislice. Jestlize si v kteremkoliv okamziku prejete navrat do prekladace BASIC pak proste stisknete CAPS SHIFT 1. Dulezita poznamka MONS 3 blokuje preruseni, aby zajistil radnou funkci - uzivatel by mel zajistit, aby v prubehu prace s MONS 3 nebyla preruseni aktivovana. GENS + MONS - 27 - 'H' Prevest dekadicke cislo na jeho hexadecimalni ekvivalent. Po systemovem naznaku ':' vlozte dekadicke cislo, ktere ukoncite libovolnym neciselnym znakem. Jakmile cislo ukoncite, zobrazi se na stejnem radku znak '=', za kterym nasleduje hexadecimalni ekvivalent dekadickeho cisla. Stisknutim jakekoliv klavesy se vratite do prikazoveho rezimu. Priklad: H:41472 =A200 (mezera je pouzita jako koncovy znak) 'I' Inteligentni kopie Prikaz kopiruje blok v pameti z jedne pozice na jinou - jeho in- teligence spociva v tom,ze muze prekopirovat blok i na misto,kde prekryje svou puvodni polohu. Prikaz 'I' si vyzada pocatecni a koncovou adresu bloku ('First:,Last:') a pak adresu na kterou ma byt preveden ('To:');jako odpoved na tyto naznaky vkladame hexa- decimalni cisla. Je-li pocatecni adresa vetsi nez koncova,prikaz se neprovede. V opacnem pripade se blok prevede dle prikazu. 'J' Provadeni programu od dane adresy.Tento prikaz si vyzada ':' he- xadecimalni cislo.Po jeho zadani se vynuluje vnitrni zasobnikova pamet, vymaze diplej a zacne provadeni programu. Chce-te-li se vratit k "celnimu panelu" po provedeni programu,pak nastavte bod preruseni (viz prikaz 'W') tam, kde pozadujete navrat. Priklad: J:B000 ENTER (Provadi program od B000) Pred ukoncenim adresy lze prikaz zrusit pouzitim CAPS SHIFT 5. Povsimnete si, ze 'J' nici obsah registru Z80 pred vykonem programu; tudiz program ve strojovem kodu by nemel mit zadne predpoklady, pokud jde o hodnoty v registrech. Chcete-li provadet program s registry nastavenymi na urcite hodnoty, musite pouzit prikaz SYMBOL SHIFT K - viz dale. 'SYMBOL SHIFT K' Pokracuje v provadeni programu od bezne adresy v citaci instrukci (PC). Tento prikaz bude pravdepodobne nejuzivanejsim ve spojitosti s prikazem 'W' - priklad by mel objasnit pouziti: Predpoladejme, ze krokujete v programu uvedenem dale a dosahli jste adresy #8920. Nemate zajem o krokovani v podprogramu na adrese #9000, ale chcete videt jak jsou nastaveny indikatory pro volani podprogramu na adrese #8800. 891E 3EEF LD A,-1 8920 CD0090 CALL #9000 8923 2A0080 LD HL,(#8000) 8926 7E LD A,(HL) 8927 111488 LD DE,#8814 892A CD0088 CALL #8800 892D 2003 JR NZ,lab1 892F 320280 LD (#8002),A 8932 211488 lab1 LD HL,#8814 Postupujte takto: Prikazem 'W' nastavte bod preruseni na adresu #892D (nezapomente nejdrive pouzit prikaz 'M' k nastaveni pametoveho ukazatele) a pak zadejte prikaz 'K'. Provadeni GENS + MONS - 29 - 'P' Naplnit pamet mezi zadanymi hranicemi urcenym bytem. Prikaz si vyzada pocatecni ('First:') a koncovou ('Last:') adresu bloku, ktery chcete zaplnit. Dale zada ('With:') hodnotu, kterou ma byt blok zaplnen. Priklad: P First:7000 ENTER Last:77FF ENTER With:55 ENTER 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. 'SYMBOL SHIFT T' 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 '^Z', 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 '^T' nastavuje bod preruseni za beznou instrukci a pak zada prikaz 'K'. Viz prikaz 'Z' v rozsirenem prikladu krokovani. 'T' 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 'ENTER'. Udate-li adresu, pak bude vyhotoven dekompilovany textovy soubor ve forme pouzitelne pro GENS 3. Kdyz chcete textovy soubor pouzit v GENS 3, pak jej bud musite v nem generovat, nebo do nej prevest. Prvni adresu uda prikaz 'X' edicniho programu assembleru, protoze to je adresa pocatku textu, kterou GENS 3 ocekava. GENS 3 musite rovnez sdelit, kde GENS + MONS - 31 - Priklad: T First:8B ENTER Last: 9E ENTER Printer? Y Text: ENTER First: 95 ENTER Last: 9E ENTER First: ENTER Last: ENTER 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 v souladu s relativnim posunutim,tj. ukaze vysledek instrukci JR nebo DJNZ.Prikaz 'U' se pouzije k aktuali- zaci zobrazeni pameti zpet na miste,kde bylo naposled zadano '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 spojenis 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; zob- razeni 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. GENS + MONS - 33 - '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 jejch hexadecimalni hodnoty se ukladaji do pameti od bezne hodnoty pametoveho ukazatele. Retezec znaku se ma ukoncit CAPS SHIFT 5 a DELETE (^0) lze pouzit k vypusteni znaku z retezce. Po vlozeni znaku a stisknuti ^5 se zobrazeni aktualizuje tak, ze pametovy ukazatel je umisten bezprostredne za koncem retezce. 'SYMBOL SHIFT Z' Krokovani.Pred pouzitim ^Z(nebo ^T) musi byt jak citac instrukci (PC) tak pametovy ukazatel nastaven na adresu instrukce, kterou chcete provest. ^Z 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 nasle- duje rozsahly priklad, ktery by mel objasnit pouziti mnoha odla- dovacich prikazu dostupnych v MONS 3 - je nutne jej peclive pro- studovat 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). 7080 2A0072 LD HL,(#7200) ;CAST 1 7083 ED5B0272 LD DE,(#7202) 7087 CD0071 CALL Mult 708A 7C LD A,H 708B CD1D71 CALL Aout 708E 7D LD A,L 708F CD1D71 CALL Aout 7092 210000 LD HL,0 . . . 7100 AF Mult XOR A ;CAST 2 7101 ED52 SBC HL,DE 7103 19 ADD HL,DE 7104 3001 JR NC,Mu1 7106 EB EX DE,HL 7107 B2 Mu1 OR D 7108 37 SCF 7109 C0 RET NZ 710A B3 OR E 710B 5A LD E,D 710C 2007 JR NZ,Mu4 710E EB EX DE,HL 710F C9 RET 7110 EB Mu2 EX DE,HL 7111 19 ADD HL,DE 7112 EB EX DE,HL 7113 29 Mu3 ADD HL,HL 7114 D8 RET C 7115 1F Mu4 RRA 7116 30FB JR NC,Mu3 7118 B7 OR A 7119 20F5 JR NZ,Mu2 711B 19 ADD HL,DE 711C C9 RET GENS + MONS - 35 - 'SYMBOL SHIFT P' Prikaz je zcela stejny jako prikaz 'L', krome toho, ze vystup smeruje na tiskarnu misto na obrazovku. Nezpomente na konci stranky stisknout ^5 k navratu na celni panel, nebo si libovolnou klavesou vyzadat dalsi stranku. Zmeny obsahu pameti Obsah adresy, udane pametovym ukazatelem muzeme zmenit vlozenim hexadecimalniho cisla, za kterym nasleduje zakoncovaci znak (viz kapitola 1). Dve hexadecimalni cislice nejnizzsiho radu (pokud byla vlozena pouze jedna, pak se doplni zleva nulou), se vlozi na misto adresovane beznou hodnotou adresoveho ukazatele a pak se prikaz provede pokud byl pouzit jako zakoncovaci znak. Neni-li zakoncovaci znak platnym prikazem, je ignorovan. Priklad: F2 ENTER Vlozi se #F2 a pametovy ukazatel postoupi o 1 123 CAPS SHIFT 8 Vlozi se #23 a pametovy ukazatel postoupi o 8 EM:E00_ Vlozi se #0E na pozici pametoveho ukazatele a pak je pametovy ukazatel aktualizovan na #E00. Vsimnete si, ze mezera ('_') zde byla pouzita pro ukonceni prikazu 'M'. 8CO Vlozi se #8C a pak je pametovy ukazatel aktualizovan (protoze byl pouzit prikaz 'O') na hodnotu relativni adresy #8C, tj. na svou beznou hodnotu - 115. 2A5D Vlozi se #5D a pametovy ukazatel se nezmeni, jelikoz ukoncovaci znak je mezera a ne prikaz. Zmeny obsahu registru Zapiseme-li jako odpoved na naznak '>' hexadecimalni cislo a ukoncime je znakem '.', pak dane cislo bude vlozeno do registru Z80, bezne adresovaneho ukazatelem '-->'. Pri vstupu do MONS 3 ukazuje --> na citac instrukci a tak pouziti '.' jako ukoncovaciho znaku hexadecimalniho cisla, zmeni v prvni rade obsah citace instrukci. Kdybyste chteli zmenit obsah jineho registru, pak pouzijete samotny znak '.' a ukazatel --> se bude cyklicky posunovat od registru PC k registru AF. Povsimnete si, ze neni mozne adresovat (a tudiz zmenit) ani ukazatel zasobnikove pameti (SP) ani registry IR. Priklad: Zaciname s ukazatelem v pozici PC. . adresujeme IY . " IX 0. nastavime IX na hodnotu 0 . adresujeme HL 123. nastavime HL na hodnotu #123 . adresujeme DE . " BC E2A7. nastavime BC na hodnotu #E2A7 . adresujeme AF FF00. nastavime A na hodnotu #FF a vynulujeme indikatory . adresujeme PC 8000. nastavime PC na hodnotu #8000 Nezapomente, ze '.' lze rovnez pouzit ke zmene obsahu alternativnich registru - pokud jsou zobrazeny. Pro zmenu zobrazeni souboru registru pouzijte prikaz 'Q'. -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+