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) -