PROMTHEUS l a d c s y s t m P R O M T H E U S I. Trocha sebechvly aneb odkud to pilo Pi psan program v assembleru na Spectru lovk brzy naraz na problm velikosti pamti - do pamti se mus vejt assembler, zdrojov text, peloen kd a pokud mono njak prostedek pro ladn. Nabzej se dv een, bu si koupit nco vtho ne je Spectrum - toto een m mal zdrhel, chce to penze - nebo zskat programy, kter s tm malm mnostvm pamti, kter je k dispozici , zachzej sporn. Npady jako jsou kompilace pmo z psku jsou siln kostrbat a pro lid nevlastnc ani disketovou jednotku ani microdrive prakticky nepouiteln. Rozhldne-li se uivatel kolem sebe na nabdku assembler a ladcch prostedk zjist nsledujc fakta : GENS - nejstar a nejrozenj assembler, zdrojov text je uloen jako textov soubor, pomr mezi dlkou zdrojovho textu a pe- kladu je asi 8:1, snad nejhor editor, kter si lze vymyslet, assembler je dlouh piblin 8.5 KB, pekld pomrn rychle, siln obtujc je neustl otzka 'Table size:', kde impli- citn hodnota obvykle nesta a po hlen 'No table space' je nutno kompilaci opakovat s vt tabulkou, tak dotaz 'Option:' pi kad kompilaci prci zbyten zdruje, program je reloko- vateln, co jeho hodnotu velmi zvyuje, k programu existuje monitor MONS - bohuel prce s nm nen pohodln pro uivatele nepouvajc hexa soustavu, ani sluby, kter monitor posky- tuje u nejsou na rovni doby, monitor je dlouh 5 KB a je re- lokovateln Rozen verze GENSu - GENS3E (Lama) - vylepen verze programu GENS, obsahuje Full Screen Editor s automatickou tabelac a 42 znaky na dek, program je 12 KB dlouh a zachoval si relokovatelnost - Admkovo rozen - podobn jako GENS3E m Full Screen Editor s automatickou tabelac, na dku je 64 znak (hor itel- nost), program u nen relokovateln - MASM (MACROS, ASSEMBLER 90) - u tohoto programu by se dalo po- lemizovat, jestli je nebo nen od programu GENS odvozen, m s nm vak velk mnostv shodnch prvk (bohuel i patnch), dlka programu je 11 KB, nen relokovateln, m Full Screen Editor s automatickou tabelac, zn 'neznm instrukce', m kov reference, celkov lze ci, e to nen dn revoluce, zdrojov text je uloen stejn neefektivn jako u programu GENS OCP assembler - program je nerelokovateln, zdrojov text zabr vce msta ne stejn u programu GENS, ped kompilac je nutno zadvat del posloupnost parametr, m Full Screen Editor, chyby na rozdl od programu GENS (i modifikac) nevypisuje sly (tzn. mt po ruce tabulku) ale pmo slovy (prce je pohodlnj) Laser Genius Assembler - program je relokovateln, m dlku kolem 20 KB (s lopatou na komra), pro svou dlku je tko pouiteln bez disketov jednotky nebo microdriv, existuje k nmu Laser Genius Monitor, oba programy se vak do pamti najednou tm nevejdou Memory Resident System - prvn assembler, kter se sna uloit efektivn zdrojov text, pomr je okolo 4:1 (tedy pi stejn dlce pojme dvakrt tak dlouh zdrojov text), program je dlouh 11 KB a nen relokovateln (existuj 3 verze), m Full Screen Editor a kontroluje instrukce u pi vkldn (odstran se mnoho chyb), ve snaze zkrtit zdrojov text byla pouita nkter ne pli astn omezen - maximln 255 nvst, ve vrazu se sm pout maximln dva operandy a jeden opertor, nelze pout binrn zpis sel (zvlt prvn omezen doslova zabj dobr npad), rozporn je tak monitor, doke pi trasovn hldat assembler a zdrojov text ped nhodnm pepsnm, bohuel vechny vpisy jsou v estnctkov soustav, v monitoru se lze odkazovat na existujc nvt v tabulce symbol, pi psan MRS byl zejm poadavek na krtkost pecenn (program je dlouh 12 KB) ale na kor komfortu obsluhy i monost PIKASM - program od T.R.C., je 11 KB dlouh, nen relokovateln, m Full Screen Editor, zdrojov text ukld v komprimovan form (pomr 5-6:1), na rozdl od pedchozch editor m pjemnou vlastnost - po kompilaci zstv kurzor na tom mst, kde byl ped kompilac (pi vstupu do editoru neske ani na konec ani na zatek), assembler tak um pi kompilaci ped kadou instrukci dc bh programu (call, jp, ret) vloit voln testu klvesy BREAK - uiten pi ladn bez monitoru (lze zastavit program, kter se zacyklil (tzv. kousnul) MON, MON2 - monitory, dlouh 7.5 a 9 KB oba jsou relokovateln, um krokovat instrukce - run i automaticky (s vypisovnm po kad instrukci i bez nj - velmi rychl), vypisovat pam, mnit obsah pamti, plnit a pesouvat bloky, lze tak nadefinovat oblast obrazovky, kam budou mit vpisy (souvisl sek dk na obrazovce) VAST (FIKOMON, MILIMON, MIKROMON) - monitor dlouh 4.6 KB, umstn v obrazovkov pamti - pvodn byl uren pro hledn nekonench ivot, lze ho pout i pi ladn program v zvren fzi kdy je v pamti mlo msta. Existuje nov verze nazvan DEVAST, vylepen o dal sluby, tento program vak na rozdl od pedchozch nem na svdom T.R.C. nbr moje malikost, existuje i verze pracujc na zvolenm mst v pamti. Pro zajmavost : program DEVAST je dlouh asi 4.6 KB a jeho zdrojov text v assembleru PROMTHEUS m dlku kolem 16 KB Uveden pehled ukazuje autorovi znm stav a jeho nzory na dostupn programy. Z uvedench program jsou asto pouvan kombinace : GENS + MONS GENS + MON (MON2) OCP + MONS Memory Resident System Laser Genius Pi posouzen dostupnch program vznik mylenka vyrobit program, kter by spojoval vhody vech pedchozch program a neobsahoval jejich nevhody. Nejdleitjmi vlastnostmi, kter by takov program ml mt jsou dv : co nejefektivnj uloen zdrojovho textu a spojen assembleru s monitorem do jednoho celku, tak, aby mohl monitor pouvat nkter podprogramy z assembleru a pouvat existujc tabulku symbol pi vpisech. Proto vznikl tento program. Assembler a monitor, ladc systm PROMTHEUS vznikal za pomoci program GENS3E, GENS 3.1, MON, MON2 a VAST. Program GENS byl pouvn do t doby, ne se podailo odladit prvn provozuschopnou verzi assembleru PROMTHEUS, dal vylepovn se provdlo vdy na star verzi - assembler byl pekldn sm sebou, monitor vznikl pln od zatku na assembleru PROMTHEUS. Pro srovnn - zdrojov text GENS byl dlouh kolem 40 KB a byl tedy nutn rozdlen na dva, pekldal se celkem 40 sekund, po petaen zdrojovho textu do PROMTHEA se zdrojov text zkrtil na polovinu (20 KB), odpadla poteba msta na tabulku symbol - u obou st asi po 3 KB, text se tedy veel do pamti najednou (asi 5 KB kdu assembleru jsou tabulky a pracovn msta, kter nebyla ve zdrojovm textu). Cel zdrojov text byl nyn peloen za 3 sekundy (tedy 2 KB/s). Nejdleitj vlastnosti ladcho systmu PROMTHEUS - dlka: 11 KB assembler, 5 KB monitor (celkem 16 KB, monitor lze odpojit a neuvat) - cel program je relokovateln, a nen zvisl na systmu Spectra - pomr mezi zdrojovm textem a peloenm kdem je 3-4 : 1 (GENS 8 : 1) - tabulka symbol je organickou st zdrojovho textu, vytv se hned pi psan textu, vdy je ihned pstupn - tzn. e pro kompilaci u nen teba ani byte navc - rychlost kompilace je asi 2-3 KB/s - 10x vc ne GENS - editor je dkov orientovan, m automatickou tabelaci - skrolovn a strnkovn je velmi rychl, umouje mazn a koprovn blok, vy- hledvn a nahrazovn etzc, kad dek je pi odesln syntakticky kontrolovn - obvykl kazetov operace - SAVE, VERIFY, LOAD, monost vyhrt i pihrt (na libovoln msto) kus zdrojovho textu - pkaz GENS umouje nahrt zdrojov text ve formtu assembleru GENS (MASM) - monitor chrnc zdrojov text a ladc systm - nkolik trasovacch reim - monost definovat okna se zkazem zpisu, ten nebo bhu - monost zcela ovlivnit sloen, tvar a polohu elnho panelu, poet a zpsob vpisu vech poloek - pi krokovn um monitor zjistit asovou nronost krokovanho programu - pot cykly procesoru (tzv. Tka) Detailn jsou vlastnosti a monosti tohoto programu popsny v dalm textu. II. Instalace ladcho systmu Na kazet je program uloen jako blok CODE dlouh asi 18500 byt - obsahuje 5000 byt monitoru, 11000 byt assembleru, a 2500 byt instalanho programu a tabulky relokanch adres. Program lze nahrt na libovolnou adresu v rozmez adres 24000 a 47000 a od tto adresy spustit : CLEAR adr-1 :LOAD "" CODE adr :RANDOMIZE USR adr Po sputn se objev instalan obrazovka obsahujc nsledujc informace : Instalation adress:xxxxx_ - kde xxxxx je adresa kam byl program nahrn - tuto adresu je mono pepsat pomoc klves 0 a 9 a DELETE (CAPS SHIFT+0) na libovolnou adresu v rozsahu adres 23296 a 49500 (23296 a 54500 bez monitoru). Na tuto adresu bude PROMTHEUS umstn a od n ho bude mono z BASICu kdykoliv opt spustit. Umstte-li program od adresy 23296, nelze se ji vrtit do BASICu - program pepe systmov promnn. Budete-li pouvat instalaci na adresu pod nastaven RAMTOP, nelze se ji vrtit do BASICu bezpen. Umstte-li ladc systm tak, e pepe systmov promnn (tzn. na adresu ni ne 23755), nesm Vae programy pouvat sluby BASICu (tisk znak atd.) a povolovat peruen v mdu IM 1. Obvykle je nejlpe pout pro instalaci adresu 25000. Monitor:Yes - instalovat je mono bu cel ladc systm nebo jen assembler, zmnu volby doclte stisknutm klvesy M. Instalovat jen samotn monitor nen mon protoe pouv mnoho podprogram assembleru. Dle lze nastavit barvy, kter bude assembler pouvat. Je to barvy papru - klvesa P, barva inkoustu - klvesa I a jas tchto dvou barev - klvesa B. Pi editaci je jeden dek vyznaen jinou barvou - nastaven je obdobn, je nutn stisknout souasn navc CAPS SHIFT. PROMTHEUS um pst dvma druhy psma - obvyklm a dvojnsobn tlustm (me bt lpe iteln) - pepnn mezi obma typy psma klvesou D. Pi editaci vypisuje assembler (i disassembler) instrukce malmi psmeny a nvt velkmi psmeny, je-li vak nkdo zvykl pouvat jen velk psmena (jako GENS) nebo mal (MRS), me toto nastaven zmnit klvesou C - vsledek je hned vidt na instalan obrazovce. Posledn vlastnost ladcho systmu, kterou je mono ovlivnit pi instalaci je klvesnicov echo - mn se klvesou X jednm smrem a klvesami CAPS SHIFT + X druhm smrem - souasn nastaven je slyet pi stisku libovoln klvesy. Po nastaven poadovanch parametr stisknte klvesu ENTER, program se pesune na zvolenou adresu, pep se absolutn adresy (relokace) a program se spust. Tuto instalaci mete provdt pi kadm pouit ladcho systmu (obvykle sta jen stisknout ENTER) nebo si poadovanou konfiguraci vyhrt na pracovn kazetu - nejlpe nsledovn: 1 RANDOMIZE USR adr :STOP 9999 CLEAR adr-1 :LOAD "" CODE :RUN Kam msto "adr" a "adr-1" dosadte sla (adresa, kde je program) a na kazetu ulote pomoc: SAVE "PROMETHEUS" LINE 9999 SAVE "prometheus" CODE adr,16000 (11000 bez monitoru) Kde opt msto "adr" bude adresa. Tuto konfiguraci nahrajete pomoc obyejnho LOAD "" a z basicu budete spoutt jednodue pkazem RUN. Prvn dek z tohoto programu je dobr vloit vdy - PROMTHEUS se bude spoutt pkazem RUN a nehroz chyba, kter by mohla vzniknout pi psan "RANDOMIZE USR adr", o tom, e funkce USR pouit se patnm argumentem me znan naruit duevn pohodu uivatele snad nen nutno nijak zdrazovat. III. assembler PROMTHEUS 1. editor Assembler obsahuje pohodln dkov editor, kter se hodn podob editoru BASICu. V editoru se zadvaj tak vechny pkazy - odpad tedy nutnost neustlho pechzen z editoru do systmu a naopak spojen se ztrtou pozice v editoru jako je tomu u MRSu a rozench verz GENSu. Editor umouje blokov operace - mazn a pesouvn - a vyhledvn a nahrazovn etzce v textu. Oznaen: pstupov (pstupn) dek - barevn odlien dek ve vpisu editan dek - pln spodn dek, je na nm kurzor stavov dek obsahuje toto (zleva doprava): - sdlen nebo chybov hlen - informaci o nastavenm reimu (INSERT/OVERWRITE) - adresu poslednho bytu zdrojovho textu - adresu poslednho bytu oblasti pro zdrojov text, jaksi obdoba RAMTOP v BASICu Vkldn pkaz se provd stisknutm klvesy SYMBOL SHIFT a odpovdajcho psmene pi przdnm editanm dku, tedy kurzor je pln vlevo a za nm nen dn znak (ani mezera). Nejsou-li tyto podmnky splnny, nape se znak na dan klvese se SYMBOL SHIFTem, jsou-li splnny, vype se cel pkaz (jako klov slovo) nebo se ihned provede (nkter pkazy - skok na konec zdrojovho textu atd.) Zpis instrukce - na dek lze zapsat maximln 31 znak, prvnch 9 pozic je vyhrazeno pro nvt (maximln 8 znakov), dalch 5 pozic je vyhrazeno pro mnemoniku a zbvajc msta jsou vyhrazena pro operandy. Poznmky je mono pst pouze na zvltn dek a to hned od zatku za stednk - nelze pst komente za instrukce (ony by se tam stejn nevely). Pokud se nkomu zd 31 znak mlo, nezbv mu ne si bu zvyknout nebo pouvat jin assembler. K tomuto omezen jsem dospl na zklad zkuenost svch i svch ptel, tm nikdo, koho znm nepe komente do zdrojovho textu (maximln na papr s programem), je to prce navc a zdrojov text to nemrn prodluuje - a zpomaluje to peklad i nahrvn (to zvlt). Omezen m tak sv svtl strnky, zdrojov text je dobe iteln a pehledn. Mezernk automaticky tabeluje, instrukce je mono pst libovoln, malmi nebo velkmi psmeny, program rozli nvt a zkontroluje vkldan dek, najde-li chybu, ohls ji a dek nezaad do vpisu. Editan klvesy: CAPS SHIFT + 1 (EDIT) - penese pstupov dek do editanho dku CAPS SHIFT + 2 (CAPS LOCK) - zapn / vypn CAPS LOCK, ten pracuje trochu jinak ne obvykle, pvodn pe Spectrum pi zapnutm CAPS LOCKu pouze velk psmena, nyn funguje spe jako jaksi invertor CAPS SHIFTu, kdy je zapnut CAPS LOCK a nen stisknut CAPS SHIFT pe Spectrum velk psmena, a je-li stisknut CAPS SHIFT, pe Spectrum mal psmena CAPS SHIFT + 3 (TRUE VIDEO) - pechod ve vpisu na nsledujc strnku CAPS SHIFT + 4 (INV. VIDEO) - pechod ve vpisu na pedchzejc strnku CAPS SHIFT + 5 (ipka doleva) - posun kurzoru doleva o jeden znak v editanm dku CAPS SHIFT + 6 (ipka dol) - posun pstupnho dku na pedchoz dek ve vpisu CAPS SHIFT + 7 (ipka nahoru) - posun pstupnho dku na nsledujc dek ve vpisu CAPS SHIFT + 8 (ipka doprava) - posun kurzoru vpravo o jeden znak v editanm dku CAPS SHIFT + 9 (GRAPH) - vyma pstupov dek, posu se na pedchoz dek CAPS SHIFT + 0 (DELETE) - vyma znak vlevo ped kurzorem a posu kurzor doleva SYMBOL SHIFT + W - pepnn reim INSERT a OVERWRITE (psmeno O nebo I ve stavovm dku), pi stisku EDIT se pepne reim OVERWRITE a po odesln se vrt zpt reim INSERT, chcete-li zkoprovat jeden dek, vyeditujte ho, pepnte na INSERT a vlote na poadovan msto, chcete-li pln pepsat dek, napite text, pepnte na OVERWRITE a odelete SYMBOL SHIFT + Q - vymazn editanho dku, ne pi przdnm dku CAPS SHIFT + SYMBOL SHIFT (EXTEND MODE) - nastav okraj bloku - pslunost dku k bloku je signalizovna ernm tvercem na devt pozici, mezi nvtm a instrukc - oznaen je vidt pouze ve vpisu, nikoliv pi hledn nebo tisku, nen rozlien zatek a konec, program si pamatuje vdy dva okraje a pi zadn novho odstran ten, co byl zadn dve a pid nov okraj, chcete-li nastavit blok, nastavte jeden okraj do pstupovho dku, stisknte CAPS SHIFT + SYMBOL SHIFT, nastavte druh okraj bloku do pstupovho dku a stisknte CAPS SHIFT + SYMBOL SHIFT ENTER - odesln instrukce nebo pkazu, odesln instrukce m za nsledek jej syntaktickou kontrolu a zaazen do vpisu - podle reimu (I/O) se bu zaad za instrukci v pstupnm dku, nebo ji pepe SYMBOL SHIFT + E - jdi na konec zdrojovho textu, jde o pkaz, kter se ihned provede, je ho tedy nutno zadat pi przdnm editanm dku SYMBOL SHIFT + K - jdi na zatek zdrojovho textu, jde o pkaz, kter se ihned provede, je ho tedy nutno zadat pi przdnm editanm dku SYMBOL SHIFT + H - pepnn vpisu sel mezi destkovou a estnctkovou soustavou, ovlivn vpisy ve stavovm dku a v tabulce symbol Pkazy pro blokov operace: COPY (SYMBOL SHIFT + C) - penese nastaven blok ped pstupov dek - nelze koprovat blok do sebe DELETE (SYMBOL SHIFT + D) - vymae nastaven blok zdrojovho textu Pkazy pro vyhledvn a nahrazovn etzc: FIND (SYMBOL SHIFT + F) - vyhledvn (viz dle), nerozliuj se mal a velk psmena, nen-li etzec nalezen, zstane vpis na mst REPLACE (SYMBOL SHIFT + Z) - zamovn etzc Vyhledvn etzc: FIND s:xxxxx - vyhledn etzce 'xxxxx' od zatku zdrojovho textu FIND s - vyhledn naposledy zadanho etzce od zatku zdrojovho textu FIND b:xxxxx - vyhledn etzce 'xxxxx' v bloku od jeho zatku bloku FIND b - vyhledn naposledy zadanho etzce v bloku od zatku bloku FIND :xxxxx - vyhledn etzce 'xxxxx' od dku, kter je prv pstupn bu do konce zdrojovho textu nebo do konce bloku - toto v ppad, e posledn byl prohledvn blok FIND - vyhledn naposledy zadanho etzce od dku, kter je prv pstupn bu do konce zdrojovho textu nebo do konce bloku , opt to zvis na poslednm zpsobu prohledvn FIND b: - tmto pkazem se lze dostat okamit na zatek bloku (za dvojteku nutno zapsat jednu mezeru!) Pklady: - chci vyhledat vechny vskyty nvt 'KAREL', zadm 'FIND s:karel' (nerozliuj se mal a velk), po nalezen prvnho vskytu zadm pokad jen 'FIND' pro nalezen dalho, jakmile se po zadn 'FIND' jen obnov vpis na stejnm mst, jedn se o posledn vskyt etzce 'KAREL' - chci se opt dostat na prvn vskyt etzce 'KAREL' zadm jen 'FIND s' a dostanu se na prvn vskyt - chci vyhledat vskyt nvt 'KAREL' pouze v poli nvt (toto je nejrychlej zpsob jak se dostat ve vpisu na poadovan msto), zadm 'FIND s:KAREL ' - za nvt vlom mezeru! - chci vyhledat prvn instrukci ld a,(hl) od zatku zdrojovho textu, zadm 'FIND s:ld a,(hl)', mezi mnemoniku a operandy musm vloit tolik mezer, aby jejich poet plus poet psmen mnemoniky dal souet 5 Nahrazovn etzc: REPLACE :xxxxx - nahrad vechny vskyty etzce 'yyyy' vyhledanho pkazem 'FIND :yyyy' v danm dku etzcem 'xxxxx' a vyhled dal vskyt etzce 'yyyy' REPLACE - nahrad vechny vskyty etzce, kter byl zadn pkazem FIND, etzcem, kter byl zadn pkazem REPLACE Pklad: - chci najt a vymnit nkter vskyty etzce 'KAREL' etzcem 'JOSEF', zadm pkaz 'FIND s:karel', po nalezen vskytu etzce 'KAREL' udlm: - bu zadm 'REPLACE :JOSEF' (podruh a dle u jen 'REPLACE') kdy budu chtt vskyt nahradit - nebo zadm 'FIND' kdy budu chtt tento vskyt ponechat beze zmny co opakuji tak dlouho dokud neprojdu vechny vskyty etzce 'KAREL' Mazn zdrojovho textu a nastaven prostoru pro nj: CLEAR (SYMBOL SHIFT + X) - pkaz vymae zdrojov text a vyist tabulku symbol (ponech v n jen uzamen symboly - viz kapitolu 4 Tabulka symbol), protoe se jedn o pkaz, jeho chybn pouit me znan zvit hladinu adrenalinu v krvi uivatele, je nutno jej zadvat ve tvaru 'CLEAR y' U-TOP (SYMBOL SHIFT + U) - uivatelsk zarka, toto je posledn adresa, kam sm bt uloen zdrojov text a kam sm bt provedena kompilace (kap. 3 Peklad). Za pkazem U-TOP muste uvst slo nebo matematick vraz (bude vyhodnocen zleva doprava), me obsahovat sla i existujc definovan nvt (jinak chyba), tento pkaz lze pout i jako kalkulaku, vsledek je trvale vidt vpravo nahoe, k nastaven zarky na adresu 65535 pou- vejte pkaz 'U-TOP -1', pomoc uivatelsk zarky zskte chrnnou oblast pamti, kam mete uloit teba tiskov pod- programy a jin, pro assembler i monitor je oblast od zarky a do konce pamti nepstupn Chyby pi editovn: Bad mnemonic chyba v zpisu mnemoniky, nebo nvt v poli mnemoniky Bad operand v instrukci pouit chybn operand Big number pouit slo je vt ne 65535 Syntax horror syntaktick chyba, nkter poloka je del ne me bt, dv operace ve vrazu vedle sebe, ... Bad string patn zadan etzec, uvozovka se pe do etzce dvojit, etzec nesm bt przdn Bad instruction instrukce zapsna formln sprvn, pouit instrukce vak nem monost pracovat s touto kombinac operand Memory full pam pidlen pro zdrojov text je vyerpna, mete se pokusit zkrtit zdrojov text (viz kapitolu 6. Formt zdrojovho textu) XXXX unknown chyba pi pouit nvt, kter v tabulce symbol nen nebo tam je, ale nem definovanou hodnotu - tato chyba je hlena u pkazu U-TOP 2. magnetofonov operace Assembler PROMTHEUS umouje (kdyby ne, bylo by to na povenou) ukldat, kontrolovat a st zdrojov texty (i jejich sti) z magnetofonu. SAVE (SYMBOL SHIFT + S) Pkaz uren pro uloen zdrojovho textu na kazetu. SAVE :karel - ulo cel zdrojov text (zdrojov text a tabulku symbol) na kazetu, blok bude uloen jako BASICovsk CODE pod jmnem 'karel' SAVE - ulo cel zdrojov text na kazetu, jako jmno bude vzato naposledy pouit jmno - toto se hod jestlie pi verifikaci dolo k chyb a je nutno opakovat opt ukldn SAVE b:karel - ulo na kazetu st zdrojovho textu (nastaven blok) a celou tabulku symbol - vybrn nvt, kter jsou ve zvolenm bloku pouita, by bylo asov a pamov nron - proto chcete-li na kazetu uloit opravdu jen st zdrojovho textu, muste vymazat vechno ostatn a potom vyistit tabulku symbol (viz kapitola 4 Tabulka symbol) SAVE b - ulo zvolenou st zdrojovho textu se jmnem naposledy pouitm v pkazu SAVE nebo LOAD LOAD (SYMBOL SHIFT + L) Pkaz slouc k pihrn zdrojovho textu z kazety. Chcete-li nov zdrojov text pouze nahrt, muste ten star nejprve vymazat (pkazem 'CLEAR y' - SS + X). LOAD : - nahraje prvn nalezen zdrojov text z kazety do potae LOAD :karel - nahraje do potae zdrojov text se jmnem 'karel' LOAD - nahraje do potae zdrojov text se jmnem, kter bylo naposledy pouito v pkazech LOAD nebo SAVE Pouij-li se msto jmna sam mezery, bude to brno jako kdyby nebylo zadno dn jmno a nate se prvn nalezen blok CODE. Nahrvn probh nsledovn: 1. prohledv se kazeta dokud se nenajde blok CODE se sprvnm jmnem 2. po nalezen takovho bloku se zjist, zda se blok vejde do voln pamti, pokud ne, je hlena chyba Memory full 3. blok se nahraje na konec pamti uren pro zdrojov text (adresa poslednho bytu je napsna vpravo ve stavovm dku) 4. zjist-li se, e se nejedn o zdrojov text tohoto assembleru, pkaz je peruen 5. zane se vkldn nahranho zdrojovho textu do zdrojovho textu, kter je v pamti od minula, pi tto operaci se kad nov dek pevede na textov tvar a vlo do pvodnho textu - vkld se stejn jako pi vkldn z klvesnice - za pstupn dek, bude-li pi vkldn nalezena chyba, objev se chybov hlen a je mono chybu opravit, po oprav program pokrauje ve vkldn, pi pihrn bloku se do pamti mus vejt souasn dv tabulky symbol, star (ta se zvtuje o nov nvt) a nov, ze kter se berou nvt pi pevodu dk na textov tvar - tyto podrobnosti Vs nemus zajmat, pokud se pekld za zdrojov text (nejastj situace), tak problmy s mstem nastanou jen tko 6. stav vkldn lze zobrazit stiskem libovoln klvesy 7. stiskne-li se pi vkldn klvesa SPACE, vkldn se ukon a v editanm dku bude prv vkldan instrukce 8. pokud dojde pi vkldn k chyb a v editanm dku je chybn instrukce, lze vkldn ukonit vloenm njakho pkazu nebo povelu(teba pepnutm mezi destkovou a estnctkovou soustavou) 9. vkldn bude chvli trvat - po dobu vkldn je na obrazovce npis 'Wait please' VERIFY (SYMBOL SHIFT + V) Pkaz slouc ke kontrole na psce uloenho textu, je ho nutn provst ihned po pkazu SAVE, nepotebuje dn parametry, pouije jmno z pkazu SAVE a testuje blok pouze s tmto jmnem GENS (SYMBOL SHIFT + G) Pkaz slou k pihrn zdrojovho textu ve formtu assembleru GENS (MACROS), syntaxe je pln stejn jako u pkazu LOAD, zdrojov text nahraje a vkld stejn jako u pkazu LOAD, ped vkldnm zdrojovho textu z GENSu je vhodn text nejprve upravit - zkrtit dky tak, aby odpovdaly formtu PROMTHEA, pemstit mon komente na zvltn dky atd. - je s tm mn prce ne opravovat dky a pi vkldn Je-li konec prostoru pro zdrojov text nastaven na adresu 65535 (#FFFF), nebude rozeznn konec souboru a vkldn se zastav na chyb - dojde k pokusu vzt jako dek zdrojovho textu nkolik prvnch byt z ROM, perute vkldn vloenm njakho povelu - viz bod 8. Chcete-li se tomu vyhnout, nastavte konec pamti pro zdrojov text teba adresu 65500 (pkaz U-TOP). Pokud dojde pi kazetovch operacch ke stisku klvesy BREAK (SPACE), v editanm dku zstane naposledy zadan povel. Pokud dojde v pkazu LOAD, GENS nebo VERIFY k chyb, vype se chybov hlen 'Tape error' a opt je v editanm dku posledn zadan pkaz. Pokud budete chtt do assembleru vloit zdrojov text z jinho assem- bleru, muste ho pevst na formt assembleru GENS, kad dek zan dvma byty - slo dku (pro PROMTHEUS nen podstatn), potom text dku (sta vdy jedna mezera msto nkolika) a na konci dku je kd 13, takto upraven zdrojov text vyhrajte z pamti jako CODE a mete ho pkazem GENS dostat do PROMTHEA. Dal pouiteln zpsob (mon jednodu) je popsn v kapitole 5. Ostatn (viz GENSOR). 3. peklad ASSEMBLY (SYMBOL SHIFT + A) - pkaz provede kompilaci zdrojovho textu. Za pkazem ASSEMBLY je mono uvst parametr 'b' (nebo 'B') - v tomto ppad bude kompilovn pouze nastaven blok zdrojovho textu. Pi kompilaci neexistuje kompilan vpis - tato monost byla pro jednoduchost a zven rychlosti odstranna, upmn eeno autorovi (a nejen jemu) se zdla zbyten. Pokud se chcete dozvdt, na jak adrese je kter instrukce (to byla jedin nmitka proti odstrann kompilanho vpisu), napite tam njak nvt (pokud u tam nen) a po skonen kompilace se podvejte do tabulky symbol na jeho hodnotu (viz kapitola 4. tabulka symbol), lze tak samozejm pout disassembler monitoru. Potebujete-li z njakho dvodu (?) protokol o pekladu, peneste zdrojov text do njakho jinho assembleru (GENS pomoc programu GENSOR - viz kapitolu 5. ostatn - GENSOR) a s jeho pomoc ho zskte. Kompilace je provdna rychlost piblin 2 KB strojovho kdu za sekundu - tedy ani dlouh zdrojov text nen pekldn dle ne 3-4 sekundy, u krtkch zdrojovch text je kompilace tm okamit. Kompilace je dvouprchodov, pi prvnm prchodu se pouze zjiuj hodnoty nvt v poli nvt (nikoliv u pkazu EQU), pi druhm prchodu se ji generuje strojov kd, nyn mus bt znma vechna nvt. Ukldn strojovho kdu do pamti je kontrolovno tak, aby nebyl pepsn ladc systm, zdrojov text a oblast pamti nad uivatelskou zarkou. Mon chybov hlen: Bad PUT (ORG) - pi druhm prchodu kompilace dolo k pokusu o pepsn ladcho systmu, zdrojovho textu nebo oblasti nad uivatelskou zarkou strojovm kdem XXXXX unknown - pouit nvt 'XXXXX' nem dosud piazenou dnou hodnotu Already defined - pokus o druh definovn hodnoty nvt Big number - pokus o zapsn velkho sla do 8 bit, u pkaz relativnch skok to znamen, e vzdlenost je pli velk, u instrukc typu (ix+d) sm bt d v rozsahu -128 a 127, pkazy typu ld a,N sm bt N v rozsahu -256 a 255 (podrobnji dle) Dojde-li k chyb pi kompilaci, peklad se zastav a obnov se vpis tak, e dek, na kterm dolo k chyb je nyn pstupn (jedn-li se o chybu Already defined tak ono podruh definovan nvt je samozejm v poli nvt, nikoliv v poli operand). Pokud kompilace skon spn, vype se hlen 'Assembly complete'. RUN (SYMBOL SHIFT + R) - pkaz slouc ke sputn programu od msta zadanho pkazem ENT (Entry point - viz dle), ped sputnm programu se vdy provede kompilace - pkaz zahrnuje pkaz ASSEMBLY (peklad je rychl a nen teba zadvat dva pkazy), pokud nebude nalezen prv jeden pkaz ENT, vype se chybov hlen 'ENT ?'. Tak tento pkaz me obsahovat parametr 'b' - ped sputnm se pelo pouze zvolen blok zdrojovho textu. V program bude sputn se zakzanm peruenm a proto jej muste ppadn povolit! Instrukce: PROMTHEUS pekld vechny zkladn instrukce (znm) a tak vtinu tzv. 'neznmch' instrukc - jedin 'neznm' instrukce, kter assembler nezn jsou vechny rotace na adrese (ix+d) s nslednm penosem do zvolenho registru, pokud budete chtt tyto instrukce pout, muste je zapsat pomoc pseudo - instrukce DEFB (instrukce nebyly zaazeny protoe se v praxi nepouvaj a zvtily by dlku assembleru). Nsleduje seznam tch 'neznmch' instrukc, kter assembler pouv: Instrukce, kter pouvaj poloviny indexregistr - IX,IY. Doln polovina registru IX je znaena LX a horn polovina bude oznaena HX, obdobn pro registr IY je LY a HY. inc inc hx inc lx inc hy inc ly dec dec hx dec lx dec hy dec ly ld ld hx,N ld lx,N ld hy,N ld ly,N ld b,hx ld b,lx ld b,hy ld b,ly ld c,hx ld c,lx ld c,hy ld c,ly ld d,hx ld d,lx ld d,hy ld d,ly ld e,hx ld e,lx ld e,hy ld e,ly ld hx,hx ld hx,lx ld hy,hy ld hy,ly ld lx,hx ld lx,lx ld ly,hy ld ly,ly ld a,hx ld a,lx ld a,hy ld a,ly add add a,hx add a,lx add a,hy add a,ly adc adc a,hx adc a,lx adc a,hy adc a,ly sub sub hx sub lx sub hy sub ly sbc sbc a,hx sbc a,lx sbc a,hy sbc a,ly and and hx and lx and hy and ly xor xor hx xor lx xor hy xor ly or or hx or lx or hy or ly cp cp hx cp lx cp hy cp ly Rotace SLIA (shift left inverted arithmetic - invertovan aritmetick posun doleva) - posune doleva zvolen registr, vystupujc bit je uloen do CARRY, vstupujc bit je jednika. slia slia b slia c slia d slia e slia h slia l slia (hl) slia a U instrukc relativnch skok a instrukce DJNZ se jako u ostatnch assembler pe absolutn adresa. Pi kompilaci se vypote relativn adresa a ulo se, pokud je relativn adresa mimo rozsah -128 a 127, ohls se chyba 'Big number'. Assembler pouv nkter pseudoinstrukce - slou bu k zpisu sel a text do pamti nebo k ovldn ukazatele kompilace, umstn strojovho kdu a k nastavovn startu pro pkaz RUN a hodnot nvt - nsleduje seznam: ORG vraz - nastav ta adres a ukazatel uloen do pamti na hodnotu vrazu. Ukazatel uloen do pamti uruje, kam se bude ukldat strojov kd, ta adres uruje kde bude peloen program pracovat - hodnota tohoto tae se pouv pi dosazovn hodnot nvt pi prvnm prchodu. Ukazatel uloen do pamti i ta instrukc se vdy zvtuj o dlku prv peloen instrukce. PUT vraz - nastav ukazatel uloen do pamti na hodnotu vrazu. Tento pkaz se pouv v ppad, e je poteba uloit strojov kd jinam ne bude sputn. Chcete teba peloit program tak, aby pracoval v obrazovkov pamti tedy, od adresy 16384, protoe pekldat pmo do obrazovky nen mon, vlote za pkaz ORG 16384 jet pkaz PUT 60000 - program se bude pekldat tak, aby pracoval od adresy 16384 ale ukldat se bude od adresy 60000. Nelze pehodit poad, ve kterm jsou ob pseudoinstrukce uvedeny, protoe pkaz ORG nastavuje tak ukazatel uloen do pamti! Pkaz PUT byl zaveden jako alternativa k monosti ukldat peloen program za tabulku symbol bez ohledu na pseudo - instrukci ORG, kterou poskytuje assembler GENS (MASM), toto een je vak podstatn pizpsobivj, programtor se nemus starat, kde tabulka symbol kon a me si sm nastavit, kam se bude peklad ukldat. Chcete-li vyrobit program, kter se po sputn sm rozmst po pamti, mete to vyrobit teba takto: org 60000 START ld hl,START1 ;adresa, kde je 1. blok uloen ld de,30000 ;adresa, kde m 1. blok pracovat ld bc,BLOK1LEN ;dlka 1. bloku ldir ;pesu 1. blok ld de,35000 ;adresa, kde m 2. blok pracovat ld bc,BLOK2LEN ;dlka 2. bloku ldir ;pesu 2. blok jp 30000 ;skok na zatek 1. bloku END1 org 30000 ;prvn blok bude na adrese 30000 put END1 ;jeho kd se ukld stle dle START1 ??? ;zde je text prvnho bloku ??? BLOK1LEN equ $-START1 ;BLOK1LEN bude obsahovat dlku END2 org 35000 ;druh blok bude na adrese 35000 put END2 ;kd se ukld stle dle START2 ??? ;zde je text druhho bloku ??? BLOK2LEN equ $-START ;BLOK2LEN bude obsahovat dlku nvt EQU vraz - piad pouitmu nvt hodnotu vrazu.V okamiku, kdy dochz pi druhm prchodu ke zpracovn tto instrukce u mus bt znm hodnoty vech nvt, kter jsou pouita ve vrazu, jinak dojde k chyb. LABEL1 equ LABEL2+1 ;takhle to bude fungovat, protoe LABEL2 ;nvt LABEL2 bylo definovno ;u pi prvnm prchodu pekladu LABEL1 equ LABEL2+1 ;takhle to bohuel fungovat nebude LABEL2 equ 32000 ;protoe nvt LABEL2 jet nem ;definovanou hodnotu ENT vraz - tento pkaz slou k nastaven adresy, od kter bude sputn strojov kd v ppad, e bude pouit pkaz RUN. ent START ;program bude sputn od msta, na ;nm se nachz nvt START ;v poli nvt ent $ ;program bude sputn od msta, na ;kterm se vyskytuje tento pkaz DEFB vraz,vraz,...,vraz - ulo od adresy, na kterou ukazuje ukazatel uloen do pamti, vsledky vraz jako osmibitov hodnoty - mus leet v roz- mez -256 a 255, jinak je hlena chyba 'Big number'. Potom jsou zveny hodnoty tae adres a ukazatele uloen do pamti o poet byt, kter byly pkazem DEFB naplnny - poet vraz. DEFW vraz,vraz,...,vraz - podobn jako pkaz DEFB, ukldaj se est- nctibitov hodnoty (naped ni byte a potom vy byte). Ukazatel uloen do pamti a ta adres se zvt o poet byt, kter byly naplnny - poet vraz krt dva. DEFM etzec - uloen etzce do pamti, tento pkaz byl u assembleru rozen: defm "karel" ;ulo do pamti postupn ASCII ;kdy jednotlivch psmen defm 'karel' ;provede tm tot, posledn ;znak bude mt ASCII hodnotu vt ;o 128 - invertovan znak, pokud ;netute, k emu je to dobr, ;podvejte se na pklady program DEFS vraz - vyhodnot se vraz a o jeho hodnotu se zvt ukazatel uloen do pamti a ta adres. Tato pseudoinstrukce se pouv k vynechn msta o poadovan dlce. BUFFER defs 100 ;vynechn 100 byt BUFFER2 defs 1000 ;vynechn 1000 byt Vrazy: Assembler umouje vloit na msto, kde je v instrukci seln hodnota, matematick vraz. Matematick vraz se skld z jednoho nebo nkolika nvt i konstant oddlench od sebe opertory. Vechna sla jsou pevedena na roz- sah 0-65535 (zporn sla jsou pitena k slu 65535 a tm jsou pevedena na rozsah 0-65535), v tomto tvaru jsou provedeny operace a vsledek je pouit podle poteb instrukce. Vpoet je provdn zleva doprava, nen zachovvna priorita opertor. Pokud nen mono vraz zapsat tak, aby ho bylo mon provdt zleva doprava, muste ho rozepsat na dva dky a mezivsledek piadit njakmu n- vt a to pout na dalm dku, autor se s touto eventualitou jet nesetkal - nejastj vrazy pouvaj pouze jeden opertor. Konstanty: Jsou povoleny tyto konstanty: destkov: 1234 47 -32 estnctkov: #ABCD -#30 #a3 dvojkov: %10111 %111 -%011010 znakov: "a" "aB" """" uvozovka se mus vloit dvojit Je monost odkzat se na aktuln hodnotu tae adres: $ - na toto msto bude dosazena hodnota tae adres START ???? ;zde je st textu, jej ???? ;dlku potebujeme zjistit ???? ;a vloit do nvt LENGTH LENGTH equ $-START ;toto je na konci on sti Nvt: Nvt je posloupnost sel, psmen a znaku '_', kter zan psmenem. Znak lze pout maximln 8 a pro identifikaci jsou dleit vechny. Opertory: stn + odtn - nsoben * dlen / zbytek po dlen ? Chcete-li zskat doln byte nvt TAB, vlote TAB?256, horn byte zskte pomoc TAB/256. Dleit upozornn: pi dlen nulou nen hlena chyba a vsledek je 65535. 4. Tabulka symbol Monosti, kter poskytuje PROMTHEUS s tabulkou symbol jsou jednm ze znak, kter ho vrazn odliuj od ostatnch assembler. Tabulka symbol existuje neustle a je vdy mon prohldnout si abecedn seazen vpis nvt a jejich hodnot, pokud jim byly njak piazeny. Neustl existence tabulky symbol se me zdt nevhodn - je to vak vlastnost, kter umouje vrazn zkrcen zdrojovho textu a tak zrychlen kompilace. Pkazy pro prci s tabulkou: TABLE (SYMBOL SHIFT + T) - tento pkaz vype tabulku symbol na obrazovku, zobraz se jedna strnka (40 nvt) a oekv se stisk njak klvesy, pokud to bude klvesa SPACE, vypisovn tabulky se skon, pokud to klvesa SPACE nebude, vype se dal strnka. Nvt jsou vypsna ve dvou sloupcch, ped nvtm je vypsna bu mezera nebo hvzdika (jej vznam je popsn dle), za nvtm je vypsna hodnota, kter byla nvt piazena pi poslednm pekladu, pokud mu dn hodnota piazena nebyla, je vypsno pt teek. Hodnota nvt je vypsna v nastaven seln soustav (destkov i estnctkov viz kapitolu 1. Editor). Monost pest si tabulku symbol lze pout, zajmaj-li Vs adresy nkterch st programu nebo kdy si nejste jist (u dlouhch text se to obas stane), kter nvt jste u pouili a kter ne. TABLE p - provd vpis tabulky symbol na obrazovku a tak na tiskrnu, pro podrobnosti se podvejte na pkaz PRINT, na kad dek se vytiskne jedno nvt a jeho hodnota, jedna strnka obrazovky se tedy vype na 40 dk papru. TABLE c - vyitn tabulky symbol, z tabulky symbol se odstran ta nvt, kter se nevyskytuj ve zdrojovm textu a nejsou uzamena. Pi vymazn dku nebo bloku zdrojovho textu se z tabulky symbol neodstran ta nvt, kter se vyskytovala pouze ve vymazan sti zdrojovho textu - tato akce me bt asov nronj a nevyplat se j provdt neustle protoe by mohla zdrovat, tak nkolik byt za to nestoj. Zbyten nvt jsou vidt kdy si po proveden kompilace vypete tabulku symbol - nemaj definovanou hodnotu - pokud jejich poet vzroste, tak pouijte pkaz pro vyitn tabulky symbol. Pokud nemte problmy s volnou pamt (pak je kad byte dobr) mete na tento pkaz zapomenout, pi kadm peten zdrojovho textu z kazety (tuto akci je nutno provdt obvykle nkolikrt za den - pi ladn program ve strojovm kdu nen nouze o stavy, kdy se zkouen program odmt vrtit zpt, ppadn se rovnou po sputn vymae) se ve zdrojovm textu zachovvaj jen pouit nvt. Oddlen kompilace - kompilace po stech: TABLE l - uzamkne vechna nvt v tabulce symbol, tato nvt se pi kompilaci chovaj tak, jako by byla stle definovna, pkaz TABLE c tato nvt neodstran. Popsn smyslu tohoto pkazu nsleduje. TABLE u - odemkne vechna zamen nvt v tabulce symbol, opak pkazu TABLE l. Dva pedchoz pkazy jsou ureny pro umonn oddlen kompilace - dvodem me bt velk rozsah zdrojovho textu. Zdrojov text je nutno rozdlit na jaksi zklad (pomocn podprogramy - tiskov rutiny, prce s obrazovkou, data,...) a na hlavn st (toto rozdlen me bt i nkolika- vrstevn), dleit je, aby se zklad (ni rove) neodkazovala na nvt v hlavn sti (vy rove). Nyn se odlad zklad, zamkne tabulka symbol a vymae zdrojov text. Po vymazn zdrojovho textu zstanou v pamti vechna nvt, kter obsahoval a je mono se na n odvolvat v dalm zdrojovm textu. Tuto monost Vm snad lpe osvtl nsledujc pklad: V pkladu je program rozdlen na ti vrstvy, v prvn vrstv jsou uloeny texty, druh st obsahuje program, kter vytiskne text, jeho adresa mu bude zadna a posledn (nejvy) vrstva bude volat tisk textu. org 65000 TEXT1 defm "Zkusebni " ;toto je prvn st programu, defm 'text c.1' ;nen v n dn odkaz na TEXT2 defm "pokusny " ;nvt ve vy vrstv defm 'text c.2' Tuto st programu zkompilujte (ASSEMBLY), zamknte tabulku symbol (TABLE l) a vymae zdrojov text (CLEAR y). org 64000 PRINT ld a,(hl) ;toto je druh st programu, and 127 ;odkaz na ni rove v n rst 16 ;sice nen, mohl by vak bt, ld a,(hl) ;odkaz do vy rovn se inc hl ;zde vyskytovat nesm and 128 jr z,PRINT ret Nyn opt zkompilujte zdrojov text (ASSEMBLY), uzamknte opt tabulku symbol (TABLE l), nyn jsou v n ji ti nvt, a opt vymate zdrojov text (CLEAR y). org 63000 MAIN ld a,2 ;posledn a nejvy rove call #1601 ;programu, me se odkazovat ld hl,TEXT1 ;i na nvt definovan v call PRINT ;obou nich rovnch ret Po vloen posledn sti zdrojovho textu jsou v tabulce symbol nvt TEXT1, TEXT2, PRINT a MAIN. Prvn ti nvt jsou uzamena. Je zejm, e v uvedenm pklad nem rozdlen tohoto krtkho zdrojovho textu na kusy smysl, ilustruje vak zpsob, jakm lze zpracovvat i dlouh zdrojov texty. Tento zpsob prce byl pouit pi ladn monitoru, z kompilace zdrojovho textu byla zachovna tabulka symbol a peloen kd, do pamti byl vkldn zdrojov text monitoru a ladn - tmto zpsobem bylo mono odladit rozumnm zpsobem program dlouh 11 KB, odpovdajc zdrojov text by byl dlouh celkem asi 40 KB a neveel by se za dnch okolnost spolu s assemblerem do pamti, o poteb msta pro peloen kd ani nemluv. Pi kompilaci jednotlivch vrstev je vhodn ni vrstvy chrnit tm, e se uivatelsk zarka nastav pod n - nehroz nebezpe, e ji hotov sti budou pepsny zdrojovm textem nebo generovanm strojovm kdem. Pi kadm zahjen prce je nutno opt zkompilovat vechny vrstvy, aby se do tabulky symbol dostala potebn nvt, a vyplat se tedy spe vyhrt na kazetu celou pam, tedy ladc systm i se zdrojovm textem a ji peloe- nmi vrstvami programu. Me se to zdt, e se nahrv zbyten velk rozsah pamti, ale z asovch dvod je to lep, ne pi zapnut potae provdt nkter akce vdy znovu, navc tento postup umouje mt v pamti i dal programy a data a nemuset je pokad nahrvat z deseti rznch kazet po dlouhm hledn a pevjen kazet z jednoho konce na druh, takto popsan zpsob jsem si nevycucal z palce ale sm jsem ho pouval pi prci na monitoru k tomuto ladcmu systmu - assembler u byl pln funkn v tto dob. Mete pout nsledujc modifikaci tohoto zpsobu: 1. odladte si zkladn vrstvu 2. pro ladn dal vrstvy si vyrobte jakousi instalaci, ta bude obsahovat krtk zavdc BASIC program a dva bloky CODE - prvn bude tvoit ladc systm spolu s tabulkou symbol vzniklou odladnm zkladn vrstvy, druh pak peloen kd a ppadn njak data nebo cokoliv jinho - rozdlen je proto, e mezi ladcm systmem a peloenm kdem je obvykle velk mezera a nem smysl nahrvat nkolik KB nul, to ovem neplat kdy pekldte ped ladc systm a ne za nj. Zavdc BASIC me vypadat teba takto: 1 RANDOMIZE USR 24e3 :STOP 9999 CLEAR 23999 :LOAD "" CODE :LOAD "" CODE :RUN Odpovdajc bloky dostanete na kazetu pomoc pkaz: SAVE "Instalace" LINE 9999: SAVE "Code 1" CODE 24e3,konec-23999: SAVE "Code 2" CODE zatek,dlka 'konec' je konec zdrojovho textu (prvn slo ve stavov dce, zatek a dlka jsou sla urujc polohu a rozsah peloen ni vrstvy a ppadn dat, v tomto pkladu je assembler umstn na adrese 24000. 3. v instalaci si mete tak nastavit monitor podle svch poadavk a nemuste jej pak pokad nastavovat znovu 4. po odladn dal vrstvy si vyrobte opt novou dal instalaci - a takto pod dokola dokud nen program cel hotov Mete samozejm tak zkladn vrstvu peloit a z dalch vrstev se odkazovat u pmo na adresy, to m nejmn dv nevhody - pi pouvn monitoru se nebudete moci odkazovat na nvt v ji hotov vrstv (nebudou v tabulce) a v ppad, e se rozhodnete pro zmnu nkter sti v ni vrstv, budete muset pepsat kad odkaz na adresy ve vy vrstv protoe se tyto adresy posunou, pouijete-li ve popsan postup, sta vyrobit si novou instalaci s novmi hodnotami v tabulce symbol a vy vrstvu nemuste mnit (pokud ovem nezmnte njak vce zkladn vrstvu - jin nvt, jin smysl). Nutnost pouit oddlen kompilace se vak dky znanmu zkrcen zdrojovho textu (proti GENS je polovin) odsouv a na hranici kolem 5-7 KB generovanho strojovho kdu, krat strojov kd lze ladit najednou - jak to m vhody snad nen poteba moc zdrazovat. 5. Ostatn pkazy a monosti: Doposud nebyly uvedeny nkter pkazy, kter lze v assembleru pouvat, zde je jejich pehled. PRINT (SYMBOL SHIFT + P) - tento pkaz slou k vytitn zdrojovho textu na tiskrnu nebo plotter. Program bere jednotliv znaky a posl je znak za znakem do kanlu systmu Spectra #3 - kanl pro tiskrnu. Kad dek je ukonen kdem 13 (ENTER) a nejsou v nm pouity dn tabeltory - mezery jsou opravdu titny vechny. Pokud v tomto pkazu pouijete parametr 'b', bude vytitn pouze nastaven blok. Chcete-li si vytisknout tabulku symbol, pouijte pkaz 'TABLE p'. Provdn lze zastavit stiskem klvesy SPACE. Jakm zpsobem si pipojte svou tiskrnu na kanl #3 je Vae vc - sta, aby byl k dispozici program, kter 'um' LPRINT. MONITOR (SYMBOL SHIFT + M) - pkaz slou k pechodu do monitoru (viz dle). Pouijete-li parametr 'a', provede se ped sputnm monitoru kompilace zdrojovho textu - je to vhodnj ne zadvat pkazy ASSEMBLY a MONITOR postupn. Pokud jste si pi instalaci monitor odpojili, sputn se neprovede. BASIC (SYMBOL SHIFT + B) - vrt zen do systmu Spectra, do BASICu. Pokud se Vm vak podailo pepsat nkter systmov promnn Spectra (program pracujc s obrazovkou Vm 'utekl' a proel pes tuto oblast), pouijte pro nvrat do BASICu radji pkaz NEW. Pro nov sputn PROMTHEA pouijte adresu, na kter je instalovn - pi nvratu je assembler ve stejnm stavu v nm jste ho opustili (pokud jste ho ovem z BASIC njak 'nevylepili'). Pi nvratu se nastav potebn hodnoty do registr IY a SP, zapne peruen v mdu IM 1 a provede se skok do hlavn provdc smyky (bude se interpretovat dal pkaz), pi tomto nvratu nen poteba nastavovat registr HL ! NEW (SYMBOL SHIFT + N) - pkaz provede stejnou akci jako v BASIC pkaz NEW - vymae celou pam a po nastaven RAMTOP. Do assembleru byl zaazen protoe pi trasovn nebo pi bhu se me podait pepsat systmov promnn a hroz, e se pi nvratu pomoc pkazu BASIC systm zhrout. Pokud nevte, zda se nepepsala tak systmov promnn RAMTOP, podvejte se na jej hodnotu (je to hodnota na adresch 23730 a 23731) a ppadn ji opravte pedtm, ne pouijete pkaz NEW (toto lze provst bu v monitoru nebo tak, e vyrobte krtk program, kter to provede a ten spustte pkazem RUN: org 23296 ent $ ld hl,23999 ld (23730),hl ret Program pelote a spustte pkazem 'RUN b' - pedtm ho nastavte jako blok - potom mete bez obav provst pkaz NEW. Pokud pouvte rutiny z ROM Spectra, kter pepisuj systmov promnn, je nkdy lep pouvat pro nvrat do systmu vdy pkaz NEW - po skonen Vaeho programu toti nemus bt v tom stavu, v jakm by bt mly. QUIT (SYMBOL SHIFT + Q) - pokud bude tento pkaz pouit tak zaruen jako posledn, k pouit jinch u nebudete mt monost - provd RESET (RANDOMIZE USR 0). Tmto pkazem pouze elegantn ukonte prci a zcela vyistte pota. Protoe tento pkaz je mimodn nebezpen a jeho nechtn pouit by mohlo vyvolat u uivatele silnou depresi (u se stalo), je nutno za nj pidat parametr 'y', pouze takto se provede. GENSOR: Zpsob, jak dostat zdrojov text z programu GENS do tohoto assembleru byl ji zmnn, me nastat tak opan poteba, k tomuto elu byl vyroben krtk program GENSOR. Program GENSOR se skld z krtk sti v BASICu a piblin z 200 Byt strojovho kdu. Ke sv innosti potebuje, aby byla oblast pamti od adresy 55000 a ke konci przdn - sem se ukld zdrojov text ve formtu assembleru GENS (MASM). Nahrajte do pamti PROMTHEUS (mete odpojit monitor aby bylo vce msta) a instalujte ho teba na adresu 25000. Nahrajte do assembleru zdrojov text - pokud by pesahoval adresu 55000, budete ho muset rozdlit. Jestlie je adresa konce zdrojovho textu men ne 55000 mete nahrt program GENSOR pkazem LOAD 'GENSOR'. Po nahrn pepete v pkazu RANDOMIZE USR adr, promnnou 'adr' skutenm startem assembleru (nyn 25e3). Nyn mete zadat pkaz GO TO 0 (ne RUN !), provede se inicializace a program GENSOR se pipoj na tiskov kanl #3, potom se provede sputn assembleru. Nastavte zatek bloku na zatek zdrojovho textu a konec dejte o maximln 30 strnek dl, nyn zadejte pkaz 'PRINT b' - zadan blok pjde msto na tiskrnu do programu GENSOR, kter ho ukld za sebe - omezen na 30 strnek je dno velikost pamti, do kter se me zdrojov text ukldat (kdyby byly jednotliv dky zdrojovho textu del ne je obvykl - data nebo texty vyplujc cel dek - vlote radji konec bloku dve ne po 30 strnkch). Zadejte pkaz BASIC a nahrajte prv vytvoenou st zdrojovho textu na kazetu, po nvratu do assembleru nastavte dal st zdrojovho textu a opakujte dokud cel zdrojov text nen nahrn na kazet. Tento zpsob penesen zdrojovho textu do programu GENS mete pout i u jinch assembler, mte-li zdrojov text ve formtu pro GENS, mete ho snadno penst do PROMTHEA. 6. formt zdrojovho textu a dal podrobnosti o assembleru: Tato kapitola je urena vem, kte by se rdi dozvdli jak vypad zdrojov text, jakm zpsobem je mono ho jet zkrtit (v mezch monost samozejm) a pro vlastn dosahuje assembler v nkterch ohledech takov vkony (rychlost a dlka i spe spornost uloen zdrojovho textu) proti jinm assemblerm. Na potku byly tyto mylenky: - k tomu, aby se dala instrukce zcela jednoznan rozliit sta jej operan kd, informace o prefixech a tvaru ppadnho selnho operandu, tedy informace, kter lze zapsat do dvou byt, toto een vrazn urychl peklad, bude stait jen brt operan kdy a hldat syntaxi pkaz pi kompilaci - tyto akce se provdj u pi editovn (v tto dob ek pota na lovka a m dost asu aby tyto akce provedl) - vedlejm efektem pak je, e u pi psan zdrojovho textu dojde k vychytn spousty chyb a peklep - nvt ve zdrojovm textu mohou bt uloena jen jako odkazy do tabulky symbol, tyto odkazy zaberou jen dva byty, u nvt dlouhch alespo ti znaky vznik spora - tabulka symbol se bude vytvet ji pi psan zdrojovho textu, nebude tedy poteba vytvet ji a pi pekladu, tak kad odkaz na nvt bude nasmrovn pi editaci a nebude poteba pi pekladu tabulku prohledvat Nyn lo o to, jak to provst s nejmenm monm nrokem na as - teba jedna strnka vpisu vlastn znamen jaksi disassemblovn 20 instrukc - o rychlosti, s jakou se to provd se mete pesvdit sami (provd se po kadm odesln instrukce). Kad dek zdrojovho textu m tvar: - prvn byte je operan kd instrukce, jsou zde ale tak pseudo- instrukce a dal 'neinstrukce' jako je przdn dek a koment, ty maj tak piazeny sv kdy, aby se odliily od obyejnch instrukc, maj v druhm bytu dku (informan byte) takovou kombinaci prefix, kterou nem dn instrukce, je kombinace prefix #DD a #FD, a v poslednch tech bitech je uloeno slo 7 (mimo przdn dek, ten tu m uloenou 0), hodnota informanho bytu zvis tak na tom, jestli je nebo nen ped instrukc i neinstrukc nvt nebo ne - pro signalizaci tto skutenosti je uren 3 bit informanho bytu, kdy je nvt pouito, je zde zapsna 1, odpovdajc hodnota je zapsna v zvorce, nsleduje pehled kd 'neinstrukc': neinstrukce operan kd informan byte przdn dek 0 48 (56) koment 1 55 ent 2 55 (63) equ 3 (63) org 4 55 (63) put 5 55 (63) defb 6 55 (63) defm 7 55 (63) defs 8 55 (63) defw 9 55 (63) - druh byte je informan byte, obsahuje tyto daje: 7 bit - #CB prefix (203), 0 ne, 1 ano 6 bit - #ED prefix (237) 5 bit - #DD prefix (221) 4 bit - #FD prefix (253) 3 bit - v poli operand je nvt 2-0 bit - typ selnho vrazu - podle tohoto se dosazuje vsledek vrazu, vznam hodnoty je nsledujc: 0 - instrukce nem seln operand 1 - jeden byte, rozsah -256 a 255 2 - dva byty, mezi -65535 a 65535 3 - jeden byte, rozsah -128 a 128 4 - jeden byte, typu (ix+d) 5 - typ (ix+d),n 6 - rst p (p se vlo do op. kdu) 7 - neinstrukce uveden rozsahy je mon pouvat v textu - dal byty jsou pouity jen v ppad, e je 3 bit informanho bytu nastaven na 1 nebo kdy posledn ti bity informanho bytu neobsahuj nuly, tvar je nsledujc: 1. bit 3 je 1, bity 0 a 2 jsou vechny 0 potom v dalch dvou bytech je zapsno poad danho nvt v tabulce a na konci je slo 192+2 (dlka) 2. bit 3 je 0, bity 0 a 2 nejsou jenom 0 v dalch bytech je zapsn cel vraz nvt jsou nahrazena svm poadm v tabulce symbol, ostatn znaky jsou zapsny obvyklm zpsobem, na konci je slo 192+dlka vrazu napklad vraz 2*LABEL+#23 je zapsn takto: '2','*',128+H,L,'+','#','2','3',192+8 kde H a L jsou horn a doln byte poad nvt LABEL v tabulce symbol; vraz (2*LABEL+#23) bude uloen tak takto, jestli se jedn nebo nejedn o adresu se zjist z operanho kdu 3. bit 3 je 1, bity 0 a 2 nejsou jenom 0 uloen bude stejn jako v pedchozm ppad, ped vrazem budou dva byty obsahovat poad nvt a dlka bude o dva byty vt Monosti zkrcen zdrojovho textu: Dostane-li se programtor do situace, e potebuje nkolik destek byt pamti a tyto nejsou k dispozici, pokus se zkrtit zdrojov text tak, aby byl pi stejnm obsahu krat. Nkolik zpsob, kter vedou k vsledku: 1. Vyistte tabulku symbol od zbytench nvt pkazem 'TABLE c'. 2. Odstrate komente a przdn dky 3. Pokud se ve zdrojovm textu vyskytuj pkazy DEFB nebo DEFW za sebou, snate se dostat co nejvce vraz do jednoho pkazu (bude mn operanch kd a informanch byt) - nap: defb 255 pepisem defb 0 na defb 255,0,32 uette 4 byty defb 32 4. Zvyknte si pokud pouvte texty s poslednm invertovanm znakem pouvat rozen pkazu DEFM - sekvenci defb "Invertovany tex" ;v GENSu to jinak defb "t"+128 ;nelze udlat lze zapsat tak takto: defm "Invertovany text" , je to pehlednj a krat (zvyk bv elezn koile). 5. U konstant pouijte destkovou soustavu, stejn slo lze zapsat nej- kratm zpsobem, je to sice mn pehledn, ale d se takto uetit mnoho - hlavn u binrnho zpisu, poet znak potebn na zpis stejnho sla je rzn, teba kd mezery je mono zapsat: '32' v destkov soustav '#20' v estnctkov soustav '" "' jako znak '%100000' ve dvojkov soustav zpis v destkov soustav je viditeln ze vech nejkrat. Tak je vhodn msto 2+3 pst rovnou 5. Nkdy je vhodn pst sla v zpornm tvaru, teba slo 65535 lze zapsat jako -1, tot plat pro slo 255, pouze vak je-li pouito v instrukci s osmibitovou konstantou. 6. Zkrate nvt, o kolik znak zkrtte nvt, o tolik se zkrt tabulka symbol a tedy i cel zdrojov text, vyplat se ovem zkracovat vt mnostv nvt najednou, pouvte-li teba nvt LOOP s slem, pak je vhodn nahradit stejnou st krat sekvenc - teba LP - zde si vak dejte dobr pozor abyste prohozenm nezpsobili, e dve rzn nvt budou nyn stejn, po prohozen nvt samozejm muste vyistit tabulku symbol. 7. Vyskytuje-li se ve zdrojovm textu nkter konstanta velmi asto a je-li dlouh alespo 3 znaky, je vhodn jej hodnotu piadit nktermu nvt a nahradit ji vude tmto nvtm - tento postup nen dobr jen pro zkrcen ale i pro zpehlednn a budete-li chtt konstantu zmnit, sta ji zmnit na jednom mst a ne vude! Je-li tato konstanta pouita v pkazu DEFB (DEFW) a pouvte-li jednopsmenn nvt, me se Vm vejt na jeden dek vcekrt ne pvodn konstanta. Uveden zpsoby nejsou doporuenm jak pst zdrojov texty, vedou toti a na mal vjimky k hor pehlednosti. Je to zpsob, jak se vyhnout nutnosti pout oddlenou kompilaci. Pokud se Vm poda zjistit, e se zdrojov text nevejde do pamti u v polovin prac, nezbyde Vm ne ho rozdlit, zanou-li problmy s pamt a na konci, stoj za pokus zkrtit zdrojov text - obvykle se to poda - stle je to lep ne se zabvat dlenm zdrojovho textu a pouvat oddlenou kompilaci. Tabulka symbol: Tabulka je uloena za zdrojovm textem a m nsledujc tvar: ta dva byty poet nvt v tabulce dva byty odkazy do vlastn tabulky, poet ........ odkaz je roven potu nvt, tabulka ........ v hornm bytu odkazu je v bitech vektor ........ . 6 a 7 uloena informace o ........ definovn nebo uzamen danho dva byty nvt dva byty, jmno dva byty obsahuj hodnotu danho vlastn ............... nvt, posledn znak jmna je tabulka ............... invertovn, identifiktory jsou ............... abecedn seazeny, jejich poet dva byty, jmno je roven potu nvt Podrobnosti editoru: Na tomto mst se dozvte o zpsobu, kterm probh pevdn dku z textovho tvaru do tvaru, ve kterm je uloen. Nejdve se oddl nvt v poli nvt (pokud tam njak je), potom se rozdl instrukce na mnemoniku a dva operandy (operand me bt i przdn), zjist se o jak typ mnemoniky a operand se jedn a prohled se tabulka, jestli takov instrukce existuje. Pi prohle- dvn operand se nejprve hledaj registry a kdy se nenajdou, sna se assembler vyhodnotit operand jako vraz, tento zpsob umouje, e je mono pout jako nvt zcela libovolnou kombinaci znak, nejsou zde dn rezervo- van slova - pouze u nkterch slov je nutno pout takov zpis, aby byl vyhodnocen jako vraz: nap. chcete pout jako nvt etzec 'SP' - tento etzec by se vyhodnotil jako registr SP, napete-li vak SP+0 , bude ve v podku ld hl,sp ;takto zadan dek bude ;vyhodnocen jako chyba ld hl,sp+0 ;pi tomto zadn u bude ;pijat a slovo 'sp' bude ;vyhodnoceno jako nvt ld hl,+sp ;pokud to zadte takhle, dojde ;tak k pijet, zmiz vak ;znamnko '+' a pi vyeditovn ;a zptnm vloen bude opt ;hlena chyba (tot pi LOAD) Posledn poznmka se tk pouvn zvorek pro oznaen adresy - pokud je v zvorce seln hodnota (vraz), sta zadat jen tu levou, prav zvorka bude doplnna. Pokud vak tot udlte a v zvorce m bt registr (nap. (hl)), bude slovo 'hl' vyhodnoceno jako nvt, nikoliv jako registr - zde je nutno zvorku uzavt. Pouit zvorek pi uzvorkovn vrazu nen povoleno! ld a,(hl) ;toto se vezme jako ld a,(hl) ld a,(hl ;toto bude vyhodnoceno jako ;ld a,(HL), tedy HL je nvt! ld a,(label ;toto sta k tomu aby to bylo ;brno jako ld a,(LABEL) IV. Monitor PROMTHEUS Monitor PROMTHEUS byl vytvoen tak, aby vhodn doplnil monosti, kter poskytuje assembler PROMTHEUS. Poskytuje mnoho funkc, kter usnaduj ladn program. Pi nvrhu ovldn byla zachovna shoda s programem VAST od T.R.C prakticky ve vech shodnch funkcch - uivatel tohoto programu jist rdi tuto skutenost ocen. Po vstupu do monitoru se vymae obrazovka a vype eln panel, pokud nebyl eln panel pedefinovn, bude vypadat takto: 00000 di ;vpis dvou dk strojovho 00001 xor a ;kdu od aktuln adresy A:000 00000000 . DI (SP):45043 ;vpisy registr A,B,C,D,E,H,L B:175 \ 65297 ;a dvojregistr BC,DE,HL,IX,IY, C:255 BC:45055 SP:00000 50175 ;SP a vpis stavu peruen D:001 . DE:00257 IX:00000 04555 ;vpis zsobnku (5 adres), E:001 . HL:00000 IY:23610 23850 ;vpis registr R a F - jsou H:000 . ;vypsny platn podmnky, dle L:000 . R:000 NZ NC PO P T:00000 ;vpis potadla T-cykl UNIVERSUM Control On Call NON ;stavov a editan dek Po vypsn elnho panelu je oekvn stisk njak klvesy ppadn vce klves, po stisknut klvesy se zjist, odpovd-li stisknut klvesa njak funkci, pokud ano, pejde zen do tto funkce, pokud ne, opt se ek na stisk klvesy. Pstup k pamti (aktuln adresa) a pomocn funkce: Nvrat do systmu assembleru - klvesa Q Po stisku klvesy Q se provede nvrat do assembleru, po nvratu bude assembler ve stejnm stavu, v jakm byl oputn, toto neplat v ppad, e byla provedena zptn kompilace. Nastaven aktuln adresy - klvesa M Po stisknut klvesy M se ve spodnm dku objev otzka Memory a kurzor, nyn je mono vloit matematick vraz (pravidla jsou stejn jako v assembleru), ten bude vyhodnocen zleva doprava, v ppad, e dojde pi vyhodnocovn vrazu k chyb, zazn zvukov signl a do editanho dku se na nkolik sekund vype chybov hlen, potom se opt objev editan dek s textem, kter v nm byl pi odesln a je umonna oprava chyby. Pokud chcete peruit vkldn, stisknte klvesu EDIT (CAPS SHIFT + 1), zen se vrt do hlavn smyky. Hodnota vrazu bude piazena aktuln adrese. Posun na dal instrukci - klvesy CAPS SHIFT + 6 Pi pouit tto volby se zjist dlka instrukce na aktuln adrese a aktuln adresa se zvt o tuto dlku. Po proveden se obnov vpis elnho panelu. Posun o jeden byte zpt - klvesy CAPS SHIFT + 7 Odeten jedniky od aktuln adresy, Po proveden se obnov vpisu elnho panelu. Vnoen o jednu rove - klvesy CAPS SHIFT + 8 Pi prohlen programu ve strojovm kdu se asto objev nutnost podvat se do njakho podprogramu a neztratit pitom souasn msto - v prohlenm podprogramu me dojt ke stejn poteb. Proto existuje funkce vnoovn - po zvolen tto funkce se objev dotaz 'Memory', souasn hodnota aktuln adresy se ulo na zvltn zsobnk (kapacita 10 adres) a aktuln adresa je nastavena vloenou hodnotou. Pokud je zsobnk pln, pkaz se neprovede. Obnov se vpis elnho panelu. Vynoen o jednu rove - klvesy CAPS SHIFT + 5 Vynoen je opak funkce vnoen. Funkce odebere ze zsobnku hodnotu a nastav na ni aktuln adresu, pokud na zsobnku nen dn adresa, nic se neprovede. Obnov se vpis elnho panelu. Smazn obrazovky - klvesy CAPS SHIFT + 0 Tato funkce smae obrazovku, nastav barvy, kter pouv assembler (i monitor) a obnov se vpis elnho panelu. Smazn vpisovho okna - klvesy CAPS SHIFT + 2 Smazn sti obrazovky, kter je urena pro vpisy - tato st obrazovky je voliteln poet dk - viz Editor vpis. Voln podprogram a pouit BREAKPOINTu: Voln podprogramu - klvesy SYMBOL SHIFT + H Po stisku klvesy se objev dotaz 'Call' na adresu, o n m bt voln podprogram. Po vloen adresy (zadvejte velmi pozorn, pokud se zmlte, me to mt neodstraniteln nsledky) se nastav vechny registry na hodnoty uveden v elnm panelu, podle stavu indiktoru se provede zavoln podprogramu bu s povolenm nebo zakzanm peruenm. Md peruen bude takov, jak byl nastaven naposledy - ladc systm pracuje pod zakzanm peruenm a nemn nastaven md, pouze pi nvratu do systmu BASIC je nastaveno IM 1 (pkazy BASIC, NEW). Po nvratu z podprogramu se ulo vechny registry, zjist se jestli pi nvratu bylo nebo nebylo povoleno peruen a obnov se vpis elnho panelu. Pi voln se sprvn ukld tak hodnota registru R. Pi pouit tohoto pkazu si ovte, zda je registr SP nastaven na sprvn msto - nesm bt samozejm nastaven do oblasti pamti ROM (1-16385), takto se na zsobnku neulo nvratov adresa (ROM nelze pepsat) a program se nevrt na sprvn msto! Nastaven startu pro pouit BREAKPOINTu - klvesa W Tato funkce vezme hodnotu aktuln adresy a uschov ji pro potebu bhu s BREAKPOINTem - viz nsledujc funkce. Bh s pomoc BREAKPOINT - klvesy SYMBOL SHIFT + U Funkce vyzvedne ti byty na aktuln adrese, uschov je a na jejich msto vlo skok do monitoru. Potom se nastav vechny registry na hodnoty uveden v elnm panelu, povol nebo zake se peruen a provede skok na adresu zadanou stiskem klvesy W. Pokud program probhne mstem s BREAKPOINTem, vrt se zpt do monitoru, budou uloeny vechny registry, zjitn stav peruen a na sv msto se opt ulo odebran ti byty. Z uvedenho je zejm, e tato funkce nen pouiteln v pamti ROM. Opt je sprvn zpracovn registr R. U tto instrukce nen potebn hldat hodnotu SP, dleit je pouze to, aby procesor pi provdn programu na BREAKPOINT narazil. Pklad: 49999 ... 50000 ld hl,START ;na tomto mst stisknte W 50003 ld bc,30000 ;poet prchod LOOP ld a,(hl) 50005 cpl 50006 ld (hl),a 50007 inc hl 50008 dec bc 50009 ld a,b 50010 or c 50011 jr nz,LOOP 50013 call SUBROUT ;na tomto mst stisknte klvesy 50016 ... ;SYMBOL SHIFT + U Oznaen 'na tomto mst' znamen, e v okamiku stisknut klvesy W bude aktuln adresa rovna 50000 a v okamiku stisku klves SYMBOL SHIFT + U bude aktuln adresa rovna 50013. Varovn pklad: Pi vybrn msta pro vloen BREAKPOINTu kontrolujte dsledn, aby BREAKPOINT (3 byty) nepepsal jinou st programu, kterou bude bh potebovat: 50000 ld hl,43210 ;na tto instrukci stisknte W 50003 call PROCEDUR 50006 ret ;na tto instrukci m bt konec PROCEDUR ld a,(hl) ;kdyby byl pouit BREAKPOINT 50008 inc hl ;na adrese 50006, pep se 50009 ret ;tak adresy 50007 a 50008 co ;nelze potebovat a je tedy ;nutno zvolit jin zpsob ;projden tto sti programu Pstup na magnetofon - LOAD a SAVE: Uloen bloku na kazetu - klvesa S Assembler umouje ukldat na kazetu jak bezhlavikov bloky, tak bloky CODE (se standardn hlavikou jako v BASICu). Postup je nsledujc: - stisknte klvesu S - na dotaz 'First' vlote adresu prvnho bytu bloku, kter m bt nahrn na kazetu - na dotaz 'Last' vlote posledn adresu zvolenho bloku - na dotaz 'Leader' mete odpovdt dvma zpsoby: 1. vloenm sla - v tomto ppad bude na kazetu uloen bezhlavikov blok, jako leader (znakov byte) bude pouito toto zadan slo, nahrvn se provd hned po odesln, neek se na dal stisk klvesy 2. vloenm dvojteky a jmna (pouije se prvnch 10 znak, ostatn budou oddleny stejn jako v BASICu) - v tomto ppad bude vytvoena hlavika, ve kter bude uloen zatek bloku (First), jeho dlka (Last-First+1) a zadan jmno, po stisku klvesy ENTER se pok na stisk njak klvesy a pak se zane ukldn bloku na kazetu (magnetofon muste spustit sami) Uloen bloku na kazetu - klvesy SYMBOL SHIFT + S Tento pkaz pracuje stejn jako pedchzejc pkaz, pouze msto dotazu na 'Last' se pt na 'Length', tedy dlku ukldanho bloku - zadn parametr bloku je takto pln stejn jako v BASICu. Chcete-li napklad uloit peloen program na kazetu, provedete to nejlpe takto: - na zatek programu vlote nvt A0START - psmeno A a slo 0 jsou tam proto, aby pi vpisu tabulky symbol nebylo teba toto nvt hledat - bude hned na zatku - za konec zdrojovho textu programu vlote sekvenci A0LENGTH equ $-A0START psmeno A a slo 0 jsou tu ze stejnch dvod jako u nvt A0START - provete kompilaci pkazem 'MONITOR a' a v monitoru zvolte nyn popisovanou funkci, na dotaz 'First' vlote A0START a na dotaz 'Length' A0LENGTH - nvt A0LENGTH Vm me poskytovat informaci jak dlouh je vyroben strojov kd, kter nen nikdy na kodu Nahrn bloku z kazety do potae - klvesa J Funkce se zept na adresu, kam se m blok nahrvat - dotaz 'First', na posledn adresu nahrvanho bloku - dotaz 'Last', a na znakov byte nahrvanho bloku - dotaz 'Leader'. Potom se nahraje prvn blok, kter bude nalezen, v ppad, e nebude splovat parametry, kter byly zadny, nebo bude zjitna chyba v parit bude ohleno chybov hlen 'READ/WRITE Error'. Tato chyba bude hlena tak v ppad, e blok bude zasahovat ladc systm nebo zdrojov text - dal provdn se peru jet ped zadnm znakovho bytu. Nahrn bloku z kazety do potae - klvesy SYMBOL SHIFT + J Funkce pracuje jako funkce pedel, li se jen tm, e se msto dotazu 'Last' pouv dotaz 'Length'. Peten hlaviky nebo znakovho bytu - klvesa Y Provd se ten hlaviky z kazety - vype se typ bloku (0 je BASIC, 1 je seln pole, 2 je znakov pole a 3 je CODE), potom jmno bloku, jeho poten adresu, jeho dlku a dal informaci, jej vznam zvis na typu bloku. Po vypsn informac se oekv stisk klvesy, pokud se jedn o klvesu J, bude nahrn blok podle daj zjitnch z hlaviky. Jinak se vrac zen do hlavn smyky. Pamov vpisy Vpis disassembleru - klvesy SYMBOL SHIFT + 4 Po stisku klvesy se do vpisovho okna vypisuj disassemblovan instrukce. Vpis lze peruit stiskem klvesy EDIT (CAPS SHIFT + 1). Poten adresa vpisu je prv nastaven aktuln adresa. Vpis disassembleru od zadan adresy - klvesa V Pkaz se dote na adresu, od n m bt disassemblovn provdno, otzkou 'First'. Dal akce jsou stejn jako v pedchozm pkazu. Zpsob vpisu adres - klvesy SYMBOL SHIFT + C Pi vypisovn hodnot dvojbytovch selnch operand me disassembler pracovat ve tech reimech, pepnn tchto reim je cyklick: 1. vype se bnm zpsobem seln hodnota 2. pokud se hodnota, kter m bt vypsna, rovn hodnot nkterho nvt v tabulce symbol, vype se msto sla toto nvt, stejn tak se nvt vypisuje msto adresy ped instrukc 3. vypisuje nvt stejn jako v reimu . 2, navc pokud se hodnota zmenena o jednu rovn hodnot nkterho nvt, bude vypsno: 'nvt+1' po instalaci ladcho systmu je nastaven vypisovac reim . 3 Povolen / zkaz vpisu adres - klvesa C Monitor umouje zakzat vpis adres ped instrukcemi, tento zkaz se netk nvt, kter mohou bt vypisovna ped instrukcemi pi zvolen reim 2 a 3. Zmna seln soustavy - klvesy SYMBOL SHIFT + 3 Zmna seln soustavy se tk vech sel vypisovanch ve vech typech pamovch vpis, netk se ovem vpisu registr v elnm panelu - toto lze ovlivnit v editoru elnho panelu. Vpis disassembleru na tiskrnu - klvesa D Program umouje poslat vpis disassembleru na tiskrnu, komunikace se provd stejn jako v assembleru pes kanl . 3 operanho systmu Spectra. Pi zvolen tto funkce se program zept na prvn 'First' a na posledn 'Last' adresu seku, kter m bt vypsn na tiskrnu - instrukce zanajc na posledn 'Last' adrese u vypsna nebude. Vypisovn lze peruit stiskem klves CAPS SHIFT + ENTER po kad instrukci, kad dek je pro kontrolu tak vypisovn do vpisovho okna. Zptn peklad do zdrojovho textu - klvesy SYMBOL SHIFT + D Funkce se podob pedchoz, vpis strojovho textu smuje msto na tiskrnu do zdrojovho textu v assembleru - vkldn se provd za pstupov dek (zcela jako pi nap. pkazu LOAD). Opt dotaz na 'First' a 'Last', instrukce ponajc na adrese 'Last' se tak do zdrojovho textu nedostane. Pokud dojde k chyb, ohls se chybov hlen a uivateli je dna monost nalezenou chybu opravit, bude-li hlena chyba 'Memory full', nezbyde ne stiskem EDIT (CAPS SHIFT + 1) celou akci peruit. Chcete-li pevod pedasn ukonit, stisknte souasn klvesy CAPS SHIFT + ENTER. Pi zptnm pekladu se opt kad dek vypisuje do vpisovho okna. Vce Vm pov pklad - viz plohy. Znakov vpis pamti - klvesa O Protoe pi prohlen obsahu pamti nepotebujeme vdy vidt jen strojov kd, umouje monitor vypisovn sel v pamti jako znak. Kad dek vpisu obsahuje adresu a dvacet pt znak od tto adresy. Znaky s kdy v rozsahu 0 a 31 jsou nahrazeny tekou. Pokud je kd znaku vt ne 127, odete se slo 128 a znak se vype stejn jako pedtm, pouze bude prohozena barva papru a barva inkoustu - inverzn vpis. Jako prvn adresa se vezme aktuln adresa. Vpis se provd tak dlouho, dokud je stisknuta libovoln klvesa. Peruen vpisu a nvrat do hlavn smyky zajist stisk klvesy EDIT. Znakov vpis od zadan adresy - klvesy SYMBOL SHIFT + O Naprosto tot jako v pedchozm ppad, vpis se provd od adresy zadan na dotaz 'First'. Vpis sel - klvesa L Posledn vpis umonn monitorem je seln vpis od aktuln adresy. Na dku bude vypsna adresa, pt jednobytovch sel a pt znak odpovdajcch tmto slm. Vechno ostatn je shodn jako u znakovho vpisu. Vpis sel od zadan adresy - klvesy SYMBOL SHIFT + L Vpis se bude provdt od adresy zadan na dotaz 'First'. Jinak se tato funkce neli od pedchoz. Vyhledvn posloupnost byt v pamti Zadn posloupnosti a vyhledn prvnho vskytu - klvesa G Pkaz umouje vyhledvat 5 byt dlouhou posloupnost, nkter byty mohou bt pro porovnvn nevznamn. Po zvolen se objev dotaz '1. byte' a '5. byte', mete vloit bu poadovan slo (vraz) nebo dvojteku - takto se oznauj nevznamn byty v hledan posloupnosti. Po odesln ptho sla se provede hledn, pokud bude posloupnost nalezena, nastav se na adresu jejho vskytu aktuln adresa, potom se obnov vpis elnho panelu. Hledn se provd od adresy, kter je vt o 1 ne aktuln adresa a do konce pamti. Pklady: hledte vskyt posloupnosti znak 'ABcd', zadejte: 1. byte 'A' 2. byte 'B' 3. byte 'c' 4. byte 'd' 5. byte : hledte instrukci ld hl,33333 , zadejte: 1. byte #21 2. byte 33333?256 3. byte 33333/256 4. byte : 5. byte : Kd instrukce ld hl,N bu znte, najdete ho v tabulce nebo do przdnho msta v pamti tuto instrukci vlote (viz editace pamti) a podvte se na jej operan kd. Vyhledn dalho vskytu zadan posloupnosti - klvesa N Aktuln adresa se zvt o jedniku a od tto adresy se hled dal vskyt posloupnosti zadan pedchozm pkazem, pokud bude posloupnost nalezena, aktuln adresa se nastav na jej zatek. Penosy a plnn blok Penos bloku - klvesa I Program se zept na prvn 'First' adresu bloku, na posledn 'Last' adresu bloku a na msto, kam m bt blok penesen 'To'. Po zadn se provede kontrola jestli se msto kam m bt blok penesen nepekrv s ladcm systmem nebo zdrojovm textem, a provede se pesun. Dojde-li pi testu ke zjitn kolize tchto dvou st pamti, provdn se peru a vype se chybov hlen 'READ/WRITE Error'. Msta odkud a msta kam se bude penet se mohou pekrvat, blok bude vdy pesunut dobe. Penos bloku - klvesy SYMBOL SHIFT + I Pkaz se od pedchozho li pouze zpsobem zadn parametr bloku, msto otzky 'Last' je nyn otzka 'Length' na dlku penenho bloku. Plnn bloku - klvesa P Program se zept na zatek 'First' a na konec 'Last' bloku, provede se kontrola, zda blok nezasahuje do pamti obsazen ladcm systmem a zdrojovm textem - pokud ano, ohls se chyba 'READ/WRITE Error', pokud ne, zept se program jet na to, m 'With' chcete plnit zvolen blok, potom se blok vypln. Plnn bloku - klvesy SYMBOL SHIFT + P Obdoba pedchoz funkce - blok se tentokrt zadv parametry zatek 'First' a dlka 'Length'. Editace pamti Vraznou vlastnost monitoru PROMTHEUS je, e umouje zapisovat v monitoru do pamti pmo instrukce, nen tedy nutno pouvat tabulky operanch kd. Tato funkce vyuv podprogramy pro kompilaci z assembleru. Jednorzov editace pamti - klvesa SPACE Po stisku klvesy SPACE se objev v editanm dku kurzor pln vlevo, nyn je mono zadat instrukci strojovho kdu a to zcela stejnm zpsobem jako pi vkldn zdrojovho textu, tedy instrukce zan od destho znaku na dce - u tohoto pkazu funguje automatick tabelace, sta stisknout jet jednou mezernk. Po vloen instrukce se provedou oba prchody kompilace a instrukce bude uloena na aktuln adresu. Pi ukldn instrukce se kontroluje, aby instrukce nebyla uloena do oblasti ladcho systmu se zdrojovm textem ani za uivatelskou zarku. Pokud chcete instrukci za uivatelskou zarku pece jen vloit, muste se vrtit do assembleru, pepsat jej hodnotu, vrtit se do monitoru a vloit instrukci. Chcete-li do pamti pece jen zapsat slo nebo text, pouijte odpovdajc zpsob jako ve zdrojovm textu - pseudoinstrukce DEFB, DEFW, DEFM se stejnm inkem. Tento pkaz sice slou k editovn pamti, mete ho pout i pro nadefinovn hodnoty njakho (i novho) nvt - pouijte pseudoinstrukci EQU, vce se dozvte v ploze. Pokud bude ve vloen instrukci nalezena chyba, ohls se do editanho dku na nkolik sekund chybov hlen, bude-li to pokus o zpis do zakzan oblasti, vype se chybov hlen 'Bad PUT (ORG)'. Ve fzi vkldn instrukce do editanho dku lze funkci peruit stiskem EDIT. Opakovan editace pamti - klvesa E Chcete-li do pamti vloit vce instrukc, nen jednorzov editace pli pohodln - je nutno neustle peskakovat za prv vloenou instrukci - proto pouijte tento pkaz. Po zvolen tto funkce se v editanm dku tak objev kurzor, stejn se funkce chov i dle, po zapsn instrukce do pamti, se ukazatel posune za vloenou instrukci, obnov se vpis elnho panelu (dleit jsou dva disassemblovan dky) a je mono vloit dal instrukci. Pi vkldn mete pouvat ped instrukc tak nvt, bude mu piazena hodnota ukazatele pro ukldn instrukce. Pi psan se lze odvolvat na vechna ji existujc definovan nvt - tedy naped nvt pout v poli nvt a pak se na nj lze odvolat v poli operand, jinak bude hlena chyba, odvolvat se samozejm lze i na nvt definovan v prbhu posledn kompilace nebo definovan dve pomoc jednorzov editace pseudoinstrukc EQU - viz ploha. Krokovn a trasovn program Krokovn a trasovn jsou nejdleitj funkce, kter monitor poskytuje. Pi trasovn a krokovn instrukc se provd kontroly jestli instrukce nepouv zakzan oblasti pro zpis, ten a bh - takovch oblast je mono pro kadou innost definovat a 5, navc oblast v n se nachz ladc systm a zdrojov text se kontroluje na vechny innosti. Dle se kontroluje, aby se nepouila instrukce HALT pi zakzanm peruen. Provdn kontrol je mono vypnout a rychlost trasovn se piblin zdvojnsob - kontrola na instrukci HALT se vypnout ned, vypnaj se kontroly na zakzan oblasti pamti vetn oblasti s ladcm systmem a zdrojovm textem. U instrukc CALL a RST lze volit ti reimy - obvyklou simulaci, u vybranch adres (mono a 10 adres) se tyto instrukce provedou pmo (nebude se simulovat voln podprogramu ale cel podprogram se zavol najednou) anebo se budou vechny instrukce CALL a RST provdt najednou. Posledn dva reimy zvyuj rychlost trasovn, je tu vak riziko ztrty kontroly nad programem - reim rychlho voln vybranch podprogram lze vhodn pout na dokonale odladnch podprogramech pro zven rychlosti trasovn. V stech programu, kter jsou pmo volny samozejm neexistuj dn kontroly. V editanm dku jsou vypsny indikace stavu kontroly (Control ON/OFF) a zpsobu, jakm se budou provdt instrukce CALL a RST (Call NON/DEF/ALL) (dn/definovan/vechny instrukce se budou pmo volat). Nevypnete-li kontrolu a budete-li krokovat i trasovat sv programy se zakzanm peruenm, neme se stt, e by monitor ztratil zen programu. Budete-li pouvat povolen peruen v mdu IM 1 nesmte mnit hodnotu registru IY (je pouvn systmem jako ukazatel do systmovch promnnch), dvejte si tak pozor, aby se registr SP (ukazatel na zsobnk) nenastavil do oblasti pamti ROM. Budete-li povolovat peruen v mdu IM 2, mus bt? nastaveno sprvn - peruen nen trasovno ani nijak kontrolovno! Pi krokovn a trasovn pot monitor tak asovou nronost programu - potadlo T-cykl (T:00000). Potn cykl se hod pi prci na programech, kter mus trvat pesn zadanou dobu - programy LOAD a SAVE, hudebn rutiny, barevn efekty na obrazovce a v borderu. Na zatku nastavte potadlo na nulu a protrasujte tu st, jej asovou dlku chcete zjistit. Pi trasovn se nesm dn instrukce CALL nebo RST provdt pmo. Krokovn - klvesy SYMBOL SHIFT + Z Po stisknut klves se provede simulace jedn instrukce na aktuln adrese, ped provedenm se obnov hodnoty vech registr (vetn R) a ppadn se povol peruen, po proveden simulace se hodnoty vech registr opt ulo, zaznamen se stav peruen a obnov se vpis elnho panelu. Pokud je povolena kontrola, provedou se potebn testy ped vlastn simulac, kdy je zjitna njak kolize, vype se chybov hlen a ek se na stisk klvesy. Simulace instrukc CALL a RST se provd podle zvolenho reimu. Aktuln adresa se nastav podle toho, jak simulovan instrukce zmn obsah tae instrukc. Pomal trasovn - klvesa T Funkce provede simulaci instrukce na aktuln adrese, obnov vpis elnho panelu, zmn aktuln adresu, provede test stisknut klvesy a pokud nen stisknuta klvesa BREAK (CAPS SHIFT + SPACE) opakuje cel cyklus stle znovu. Stisknete-li pi trasovn souasn klvesy CAPS SHIFT + ENTER, vynech se po dobu, kdy budou klvesy stisknuty, obnovovn elnho panelu, tato monost je uiten pro zrychlen trasovn na krat dobu - teba pro urychlen nkterho cyklu. Simulace probh stejn jako pi krokovn. Rychl trasovn - klvesy SYMBOL SHIFT + T Pi zvolen tto monosti se program zept na adresu instrukce na n by se ml zastavit - 'Last', a provd cyklicky tyto akce: simuluje instrukci na aktuln adrese, zmn aktuln adresu, pokud jsou stisknuty klvesy CAPS SHIFT + ENTER obnov eln panel, testuje stisk klvesy BREAK (CAPS SHIFT + SPACE) a testuje, jestli se aktuln adresa nerovn zadan posledn adrese, pokud tomu tak nen a nen stisknut BREAK, sko opt na zatek cyklu. V opanm ppad se obnov vpis elnho panelu a rychl trasovn se zastav. Pokud nevte, na kter adrese by se ml program zastavit (nezle na tom - zastavte ho BREAKem) vlote teba 0. Prce s registry Zmna stavu indiktoru peruen - SYMBOL SHIFT + M Pehod hodnotu indiktoru stavu peruen z EI na DI nebo naopak. Indiktor uruje v jakm stavu peruen se bude simulovat kad instrukce, volat podprogram nebo provdt bh s pomoc BREAKPOINTu, po skonen kad takov akce se indiktor nastav podle skutenosti po proveden instrukce. Pehozen obsah zkladnch a alternativnch registr klvesy SYMBOL SHIFT + B Provede vmnu zkladn a alternativn sady registr, ve strojovm kdu je to ekvivalentn instrukcm EXX a EX AF,AF'. Pi trasovn nebo krokovn jsou zkladn vdy ty registry, kter jsou viditeln na elnm panelu. Chcete-li se tedy pi krokovn podvat na hodnoty alternativnch registr, muste ped dalm krokovnm registry vrtit. Nastaven obsahu registr - klvesy SYMBOL SHIFT + N Po zvolen tto monosti se v editanm dku objev npis 'ld ', vlote jmno registru, jeho hodnotu chcete zmnit, rku nebo mezeru a napite slo (vraz), kter chcete do tohoto registru zapsat, registry jsou tyto: Jednobytov registry: A,B,C,D,E,H,L,HX,LX,HY,LY,I,R Dvoubytov registry : AF,BC,DE,HL,IX,IY,SP Potadlo T-cykl : T Pamov ukazatele : X,Y (viz editor elnho panelu) Stavov registr : F U stavovho registru (F registr) je mono mnit jednotliv bity nsledujcm zpsobem: ld f,c - zmn hodnotu CARRY flagu z NC na C a naopak ld f,s - zmn hodnotu SIGN flagu z P na M a naopak ld f,z - zmn hodnotu ZERRO flagu z NZ na Z a naopak ld f,p - zmn hodnotu PARITY flagu z PO na PE a zpt Nastaven zakzanch oblast a jinch parametr Nastaven DEFB oblast - klvesa 1 Monitor dovoluje nastavovat oblasti, kter budou pi vpisu disassemblerem vypsny jako jednobytov data, takovch oblast si meme nadefinovat celkem 5. Kad oblast je zadna prvnm a poslednm bytem (vetn). Po stisku klvesy 1 se do vpisovho okna vyp souasn nastaven oblasti, kad dek zan slem oblasti (0 a 4), za nm je vypsna adresa prvnho bytu oblasti a pokud je stejn jako hodnota njakho nvt, je vypsno tak toto nvt, nakonec je vypsna adresa poslednho bytu oblasti a ppadn nvt. Nyn mete stisknout bu klvesu s slem nkter oblasti - tato oblast se vymae a znovu se vype seznam nastavench oblast (windows-okna), nebo klvesu I, v tomto ppad se program zept na prvn 'First' a na posledn 'Last' adresu oblasti, prov, jestli plat, e 'First'<='Last', a pid novou oblast za ji definovan oblasti, pokud je ji vech pt oblast definovno, klvesa I nebude reagovat. Stisknete-li jinou klvesu ne 0,1,2,3,4,I, program se vrt do hlavn smyky. Za oblast s jednobytovmi hodnotami je povaovn tak prostor pamti obsazen ladcm systmem a zdrojovm textem. Nastaven DEFW oblast - klvesa 2 Dal typ oblast, kter lze pouvat jsou oblasti s dvoubytovmi hodnotami (tabulky adres), jejich nastaven je pln stejn jako u oblast DEFB. Nastaven oblast, z nich se nesm st - klvesa 3 Pi ladn programu je vhodn mt jistotu, e program nete data z mst v pamti, kter k tomu nejsou urena, proto byla do programu dna monost tato msta instrukcm zakzat. Kad instrukce, kter njakm zpsobem te data z pamti, nap. pmo z adresy, z adresy v registru, pomoc indexregistr nebo pes SP registr (tedy i RET, POP a EX (SP),HL), bude nejprve provena, zda tak nein z oblasti, kde to m zakzno, pokud ano, jej simulace se neprovede a bude ohleno chybov hlen. Za oblast se zkazem ten je navc povaovn pamov prostor obsazen ladcm systmem a zdrojovm textem. Vlastn definice tchto 'No read' oblast je stejn jako u DEFB oblast. Nastaven oblast, do nich se nesm zapisovat - klvesa 4 Dleitj, ne zjiovat, zda program nete data z mst v pamti, z nich by neml, je mt monost hldat program, aby nezapisoval do jinch ne povolench sek pamti. U kad instrukce, kter provd zpis do pamti (vetn instrukc CALL, RST, PUSH, EX (SP),HL) se provede kontrola jestli se nepep zakzan oblasti, pokud ano, simulace se neprovede a bude hlena chyba 'READ/WRITE Error'. Nastaven je obdobn jako u DEFB oblast. Oblast s ladcm systmem a zdrojovm textem je tak povaovna za oblast se zkazem zpisu - No write. Nastaven oblast se zkazem bhu - klvesa 5 Poslednm typem oblast, kde je monost nco zakzat, jsou oblasti se zkazem bhu. Jakmile by se po proveden njak instrukce ocitl program v oblasti se zakzanm bhem, instrukce se nevykon a ohls se chyba 'RUN Error'. Zadvn je stejn jako u vech pedchozch. Pouit snad ani nen poteba njak vysvtlovat - napklad kdy se program nevrac tam, kam by ml, zakate ve, krom vlastn oblasti s programem, jakmile se njak instrukce pi trasovn pokus o skok mimo povolenou oblast, bude hlena chyba - tyto problmy vyvolv nejastji chybn prce se zsobnkem nvratovch adres pomoc instrukc PUSH a POP - obvykle nco chyb nebo pebv. Definovn adres pro pm voln - klvesa 6 Vhodn zpsob, jak urychlit trasovn program, je provdt vybran pkazy CALL a RST pmo (nesimulovat kadou instrukci ve volanch podprogramech - volat cel podprogram najednou). K tomuto elu si mete zvolit celkem deset adres. Pokud nastavte reim voln definovanch podprogram (Call DEF) bude se kad pkaz CALL nebo RST, jeho adresn st je rovna nkter adrese ze seznamu definovanho tmto pkazem, nahrazovat zavolnm podprogramu na tto adrese. Pi ladn programu se tato monost vhodn pouv na ji odladn a dobe fungujc podprogramy (nehroz tu ji nebezpe ztrty kontroly, podprogram se vrac zpt tam, odkud byl zavoln) - tisk znaku, test klvesnice pokud nen pouvno peruen - a tak na podprogramy, jejich prci nen mono zpomalit - nahrvn a zvukov podprogramy. Ukzky pouit v ploze. Editace je podobn jako u definovn oblast, vymazn je mono navc provdt klvesami 0 a 9. Zmna reimu provdn instrukc CALL a RST - klvesa X Jak bylo dve uvedeno, mohou se instrukce CALL a RST provdt temi rznmi zpsoby, kter se li hlavn rychlost a bezpenost - bohuel nepmo mrn. Tyto reimy jsou indikovny v editanm dku (NON/DEF/ALL) a jejich vznam u byl popsn dve. Zapnut / vypnut kontroly instrukc - SYMBOL SHIFT + X Tmto pkazem lze najednou vypnout provdn vech kontrol, nejmn dvojnsobn to zv rychlost provdn trasovn. Tuto monost pouvejte uven. Editor elnho panelu Pechod do editoru elnho panelu - klvesy SYMBOL SHIFT + W Po pepnut do editoru elnho panelu se vymae obrazovka, obnov vpis elnho panelu a rozsvt se jedna z poloek v elnm panelu. Nyn je mono pro kadou poloku definovat jej umstn, zpsob vpisu a dal monosti - viz dle. Ovldn editoru elnho panelu CAPS SHIFT + 1 (EDIT) - oputn editoru elnho panelu 4 - pechod na nsledujc poloku v seznamu (viz dle) 3 - pechod na pedchoz poloku v seznamu 5 - posun poloky o jednu pozici doleva 6 - posun poloky o jednu pozici dol 7 - posun poloky o jednu pozici nahoru 8 - posun poloky o jednu pozici doprava A a Z - nastaven velikosti poloky (0 a 25), pro registry znamen, jestli se budou nebo nebudou vypisovat, pro pamov vpisy se takto mn poet adres, kter se vypisuj SYMBOL SHIFT + D - zapnut nebo vypnut vpisu tak v destkov soustav SYMBOL SHIFT + H - zapnut nebo vypnut vpisu tak v estnctkov soustav SYMBOL SHIFT + B - zapnut nebo vypnut vpisu tak ve dvojkov soustav SYMBOL SHIFT + C - zapnut nebo vypnut vpisu tak ve znakov form SYMBOL SHIFT + T - zmna typu vpisu u pamovch vpis - vypisuj se bu jednobyty nebo dvoubyty SYMBOL SHIFT + S - zmna smru vpisu u pamovch vpis - obsahy jednotlivch adres jsou vypisovny bu vedle sebe nebo pod sebe Seznam poloek, kter lze pouvat: Editan dek - lze ovlivnit pouze, kter dek bude pouvn pro tyto ely Vpisov okno - lze ovlivnit poet dk, kter budou pouity, lze tak zmnit polohu okna Vpisov okno disassembleru - pi obnovovn elnho panelu se vypisuje nkolik dk instrukc strojovho kdu od aktuln adresy, poet dk a polohu okna lze nastavit Stav peruen - vpis EI nebo DI Jednobytov registry - A,B,C,D,E,H,L,I,R,HX,LX,HY,LY a F - lze volit soustavy, ve kterch budou jejich hodnoty vypisovny - registry mohou bt vypisovny ve vech najednou, u registru F je mono volit (SYMBOL SHIFT + B) mezi binrnm vpisem a vpisem splnnch podmnek Dvoubytov registry - AF,BC,DE,HL,SP,IX,IY - podob se jednobytovm registrm Vpis potadla T-cykl - lze nastavit stejn jako dvojbytov registr Adresov vpisy od zadan adresy (ukazatele X,Y) u tchto vpis lze volit poet byt, kter budou vypisovny, lze mnit smr, kterm se jednotliv hodnoty vypisuj, lze mnit tak jestli se budou vypisovat jednobytov nebo dvoubytov hodnoty Adresov vpisy od adresy v dvojregistru - (BC),(DE),(HL),(SP),(IX), (IY) - nastavit lze stejn vlastnosti jako u pedchzejc poloky Nejjistj zpsob, jak si osvojit zpsob pouit editoru elnho panelu, je ho zkusit pout - nemete nic zkazit. V. Pklady prce s ladcm systmem 1. Pklad - zptn peklad Tento pklad Vm pome vyzkouet a pochopit zpsob jak lze pevst strojov kd do zdrojovho textu. Provdjte pesn popsan kony a sledujte vsledky. Nahrajte PROMTHEUS na adresu 24000 a instalujte ho vetn monitoru. V assembleru vlote pkaz MONITOR, objev se vpis elnho panelu, nyn stisknte klvesu SPACE, doln dek panelu zmiz a objev se kurzor, napite 'ldbytes equ #556' a stisknte ENTER. Nyn stisknte klvesu M a na dotaz 'Memory:' vlote text 'ldbytes'. Po odesln se obnov vpis elnho panelu a uvidte vpis obsahu pamti ROM od adresy 1366, msto sla 1366 vak bude vypsno LDBYTES. Nyn stisknte klvesy SYMBOL SHIFT (dle SS) a 4, objev se nkolik dk vpisu disassembleru, a se ve vpisu objev instrukce 'call 1511', perute vpis klvesou EDIT. Stisknte opt klvesu SPACE a vlote 'ldedge1 equ 1511'. Opakujete-li znovu disassemblovn naleznete dal adresu v instrukci 'jr nc,1387'. Vlote 'ldbreak equ 1387' a vylistujte si nkolik instrukc (SS + 4), nvt LDBREAK se objevilo na vech mstech, kde bylo dve slo 1387, podobn tak nvt LDEDGE1. Vypite si instrukce tak, aby nvt LDBREAK na zatku dku bylo v horn sti vpisu. Dal adresa je slo 1396, vlote 'ldwait equ 1396'. Obnovte vpis. Ve vpisu mete vidt instrukci 'jr nc,LDBREAK+1', toto je skok na druhou instrukci od adresy LDBREAK, pokud by se mezi tyto dv instrukce pozdji u ve zdrojovm textu vloila dal instrukce, nepracoval by program sprvn. Vlote tedy radji 'ldstart equ ldbreak+1', uvdomte si, e mete pouvat ji definovan nvt msto adres, snite si tak pravdpodobnost omylu pi vkldn. Abychom se nezdrovali vlote postupn tato nvt: ldedge2 equ 1507 ldleader equ 1408 ldsync equ 1423 ldmaker equ 1480 ldflag equ 1459 ldverify equ 1469 ldnext equ 1474 lddec equ 1476 ld8bits equ 1482 ldloop equ 1449 Prohldnte si disassemblerem pam, v hlavn sti programu je kad adresa nahrazena nvtm. Nyn se podvme na oba podprogramy: LDEDGE1 a LDEDGE2 nejprve LDEDGE2, nastavte aktuln adresu na LDEDGE2 (klvesa M) a pi disassemblovn naleznete adresy 1513 a 1517, vlote nvt LDDELAY a LDSAMPLE, pokud jste si dobe vimli, je nvt LDEDGE1 na tet instrukci za nvtm LDEDGE2 a tedy spolen st ji neobsahuje adresy, kter by nebyly nahrazeny nvtmi. Nyn provedeme zptn peklad: Stisknte SS a D, na dotaz 'First:' vlote 'ldbytes' a na dotaz 'Last:' vlote '1540+1'. Po odesln uvidte vpis disassemblovan sti pamti nyn bez adres ped instrukcemi, pouze s nvtmi. Po skonen stisknte klvesu C - opt se zapne vpis adres ped instrukcemi. Vrate se do assembleru stiskem klvesy Q. Pokud jste vechno provedli pesn podle pokyn, ml by zdrojov text konit na adrese 40607. Stisknte SS+K a dostanete se na zatek zdrojovho textu. Najdte instrukci 'ld hl,1343', je to sedm instrukce od zatku, nastavte do pstupovho dku nsledujc instrukci 'push hl' a stisknte dvakrt CAPS SHIFT + 9 a vymate tyto dva dky. Zatek programu bude po proveden zmn nsledujc: LDBYTES inc d ex af,af' dec d di ld a,15 out (254),a in a,(254) ... Zdrojov text bude konit na adrese 40598. V tomto okamiku je nejvy as pro uloen zdrojovho textu na kazetu. Stisknte SS+S a vlote ':loader', spuste volnou kazetu a stisknte njakou klvesu, po proveden stisknte SS+V (VERIFY) a po odesln vrate kazetu a zkontrolujte nahrvku, pokud bude chybn, opakujte VERIFY a kdy bude nespn, opakujte SAVE, nyn u mete odeslat jen SAVE bez nieho a jako jmno se vezme posledn zadan jmno. Nyn pipite ped program instrukce: org 60000 ent $ START ld ix,16384 ld de,6912 ld a,255 scf call LDBYTES ret Vezmte kazetu s libovolnou obrazovkou a nastavte ji ped blok dat (za hlaviku) a zadejte pkaz RUN (SS+R) a spuste magnetofon, po skonen nahrvn bude program ekat na stisk libovoln klvesy, aby se mohl vrtit do editoru. Vlote 'Find s:or 2', zmnte-li slo 2 na njak slo z rozsahu 0..7, zmn se barva pruh - zstanou zachovny dvojice: ern - bl modr - lut erven - svtle modr fialov - zelen Dal instrukce, kter mn barvy pruh je instrukce CPL, zmte ji za instrukci xor %11111111, zmnte-li jedniky na poslednch tech mstech za nuly (ne vechny, rzn zkouejte), mete zskat dal kombinace barev. Posledn instrukce mnc barvy je instrukce xor 3 za nvtm LDSYNC, kter mn barvy zavdcch pruh na barvy pi nahrvn. Vlote pkaz 'MONITOR a' (SS+M), provede se peklad a skok do monitoru. Nastavte aktuln adresu na LDEDGE1, stisknte SS+N a zadejte 't,0' - vynuluje se potadlo T-cykl. Stisknte SS+T a vlote 'ldsample-1' - trasovn do adresy LDSAMPLE-1. Po skonen ukazuje potadlo T-cykl hodnotu 354. Toto je poet cykl procesoru potebn na proveden tohoto programu: LDEDGE1 ld a,22 LDDELAY dec a jr nz,LDDELAY Tato st programu se provede dvakrt pi nahrn kadho bitu - tedy celkem 16 krt pi nahrn 1 bytu. Stisknte Q a vrate se do assembleru. Nahrate uveden ti dky takto: LDEDGE1 ld a,7 LDDELAY dec a set 3,a out (254),a res 3,a jr nz,LDDELAY Vlote 'MONITOR a', nastavte aktuln adresu na 'ldedge1', nastavte potadlo T-cykl na 0 a trasujte program a do adresy 'ldsample-1'. Potadlo T-cykl ukazuje hodnotu 346, tedy o 8 cykl mn, ne by mlo, pidejte dv instrukce NOP za instrukci 'jr nz,LDDELAY', zopakujte vpoet T-cykl, nyn je hodnota 354 a tedy stejn jako dve a loader bude pracovat opt bez chyb. Spuste program pkazem RUN a vyzkouejte nahrvn, vsledek uvidte sami. Vtina loader reaguje na stisk SPACE, pokud budete chtt tuto monost vylouit, nahrate instrukci 'ret nc' za nvtm LDSAMPLE instrukc 'nop'. Dal monosti u muste vymyslet a vyzkouet sami. 2. Pklad - monosti trasovn Vlote pkaz 'CLEAR y', napite tento krtk program: ent $ START xor a out (254),a FILL ld hl,16384 ld bc,6912 FILL2 ld a,r ld (hl),a inc hl dec bc ld a,b or c jr nz,FILL2 ret Provete RUN - vsledek nevypad patn, zkuste to znovu, je to jin, tak ne okliv (pokud nemte barevnou televizi, tak mte smlu). To, e po kadm sputn vypad obrzek jinak, m na svdom registr R. Vlote tedy za instrukci 'xor a' instrukci 'ld r,a', tentokrt bude vsledek vdy stejn, registr R m vdy pi sputn hodnotu nastavenou na nulu. Vlote 'MONITOR a' a pejdte do monitoru, nastavte aktuln adresu na nvt START, zjistte, na kter adrese je instrukce 'ret', vymate obrazovku (CS+0) a spuste rychl trasovn (SS+T), na dotaz 'Last' dejte adresu instrukce 'ret'. Po odesln uvidte znan zpomalen vechny akce, kter program provd - nyn mete: a) nedlat nic - pokat a to samo skon b) stisknout CAPS SHIFT a ENTER a sledovat co se dje s jednotlivmi registry, rychlost trasovn se znan zpomal c) stisknout CAPS SHIFT a SPACE a trasovn zastavit, ppadn opt spustit nebo krokovat jednotliv instrukce Chcete-li pi trasovn sledovat jednotliv registry, pouijte pomal trasovn (T), znovu mete: a) opt nedlat nic - tentokrt program pob tak dlouho, dokud nenaraz na instrukci, kter by provdla nebezpenou akci b) stisknout CAPS SHIFT + ENTER, te se program naopak zrychl, pestanou se vypisovat hodnoty registr c) stisknout CAPS SHIFT + SPACE a zastavit trasovn Nastavte opt aktuln adresu na nvt START, vymate obrazovku (SS+0) a vypnte provdn kontrol. Vyzkouejte opt rychl i pomal trasovn - u rychlho by mlo bt patrn zven rychlosti. A se do sytosti pesvdte o rozdlu v rychlostech, kontrolu opt zapnte (SS+X). Zrychlen trasovn vypnnm kontrol radji nepouvejte, a pokud ano, tak si dobe rozmyslete zda program nebude pchat njak nepstojnosti - pi prvnm sputn vdy s kontrolami. Nkolik sekund takto uetench Vs me stt spoustu asu ztracenho nahrvnm programu znovu do potae. Vrate se do assembleru a ped instrukci 'ld hl,16384' vlote tyto dky: LOOP push af call FILL pop af inc a cp 128 jr c,LOOP ret a takto upraven program spuste pkazem RUN. Po skonen se pepnte do monitoru (SS+M) a pepnte reim provdn instrukc 'call' a 'rst' na reim 'ALL' (X). Stisknte klvesu 3 a nastavte okno se zakzanm tenm na rozsah 0-1 (po vpisu przdnho seznamu stisknte I a zadejte ob sla), potom nastavte registr SP na 0. Aktuln adresu nastavte na START a nyn krokujte (SS+Z), pomalu (T) nebo rychle (SS+T) trasujte dan program (pozor na SP - vdy na 0). Instrukce 'call FILL' se provede najednou i s celm podprogramem. 3. Pklad - trasovn Instalujte PROMTHEUS na adresu 25000, pejdte do monitoru, nastavte aktuln adresu na #12a2, registry IY na hodnotu 23610 a SP na 0, povolte peruen (SS+M) a spuste rychl trasovn, jako posledn adresu uvete 0. - vymae se obrazovka (uvidte zpomalen CLS) - provede se automatick listing (pokud je co vypsat) - objev se kurzor v editan zn Stisknte klvesu Q, pomalu se vype pkaz PLOT, pipite jet '0,0' a stisknte ENTER. Po chvli se objev teka, stejn vlote pkaz 'DRAW 255,175', pi psan muste klvesu dret ponkud dle ne obvykle, pi psan '55' radji po napsn prvn slice klvesu na chvli puste a potom opt stisknte. Klvesu mete pustit v okamiku kdy se z potae ozve cvakn - zpomalen klvesnicov echo. Nastavte reim 'DEF' (X) a vlote jako 'Call' adresy hodnoty #F2C, 16 a #556 (klvesa 6 a I - podobn jako okna). Nastavte registry, aktuln adresu a peruen jako pedele a zkouejte vloit tyto pkazy: PLOT 0,0: DRAW 255,175 CIRCLE 127,87,87 - trplivost, chvli pokejte POKE 25000,0 - program se zastav na instrukci 'ld (bc),a', kter realizuje pkaz POKE LIST LOAD ""SCREEN$ - a samozejm tak puste kazetu FOR i=22528 TO 23295: POKE i,PEEK 23672: NEXT i CLS BEEP .05,40 RANDOMIZE USR 25000 - program se zastav na adrese 25000 a bude chtt trasovat assembler 4. Pklad - zdrojov text na ukzku Na kazet je tak hudebn rutina za hry SKATE CRAZY, vymate zdrojov text (CLEAR y) a nahrajte ho do pamti, chvli pokejte, ne se ulo a spuste jej pkazem RUN. OBSAH : I. Trochu sebechvly aneb odkud to pilo _____________ 1 II. Instalace ladcho sytmu __________________________ 4 III. Assembler PROMTHEUS _______________________________ 5 editor _____________________________________________ 5 magnetofonov operace ______________________________ 9 peklad ___________________________________________ 11 tabulka symbol ___________________________________ 15 ostatn pkazy a monosti ________________________ 18 formt zdrojovho textu a dal podrobnosti o assembleru ______________________________________ 20 IV. Monitor PROMTHEUS ________________________________ 24 pstup k pamti (aktuln adresa) a pomocn funkce __________________________________ 24 voln podprogram a pouit BREAKPOINTU __________ 25 pstup na magnetofon - LOAD a SAVE _______________ 26 pamov vpisy ___________________________________ 28 vyhledn posloupnosti byt v pamti ______________ 30 penos a plnn blok _____________________________ 30 editace pamti ____________________________________ 31 krokovn a trasovn program ____________________ 32 prce s registry __________________________________ 33 nastaven zakzanch oblast a jinch parametr ___ 34 editor elnho panelu _____________________________ 36 V. Pklady prce s ladcm systmem _________________ 38 1. pklad - zptn peklad _______________________ 38 2. pklad - monosti trasovn ___________________ 40 3. pklad - trasovn ____________________________ 41 4. pklad - zdrojov text na ukzku ______________ 42 www.3fcchina.com80bike.comwww.youthbuyingahouse.comchinajncj.comwww.lintonedu.orgwzxchina.orgwww.hongkunzhonggong.comdada800.comwww.fun4learning.comgjcwb.com