********************************** * * * Spectrum Master version 1.20 * * * ********************************** Spectrum Master je komfortní monitor/debugger s širokou paletou nejrůznějších povelů a rozsáhlým editorem,který zahrnuje i možnost definování 'makropovelů' pomocí funkčních kláves a ovládání tiskáren Centronics i Sharp. Spectrum Master je speciálně přizpůsobený pro práci s programy přejatými z počítače ZX-Spectrum.K tomu je vybaven mimo jiné : - volnou pamětí 4000-FFFF - kódováním znaků v Ascii kódu shodném se ZX-Spectrem - možností zobrazování Video Ram ZX-Spectra - možností zobrazování různých obrazců uložených v paměti - možností čtení originálních nahrávek ze ZX-Spectra - možností vypisování Basicu ze ZX-Spectra - disassemblerem zvládajícím všechny známé instrukce Tento návod je příručkou k práci s programem,nikoliv vyčerpávajícím popisem.Pro jeho pochopení se tudíž předpokládá zkušenost s programy podobného typu,znalost strojového kódu a hardwaru počítače MZ-800 resp. i ZX-Spectra. -------------------------------------------------------------------------------- 1. Nahrávání Po nahrání hlavního programu je možné přihrát blok pro nápovědu ( stisk klávesy ) a znakový generátor přejatý ze ZX-Spectra spolu s převodní tabulkou pro obracení pořadí bitů v bytu ( stisk klávesy ).Oba bloky je nutné samozřejmě nahrávat v pořadí,v jakém jsou na kazetě.Po stisku klávesy proveden studený start programu. -------------------------------------------------------------------------------- 2. Rozložení paměti (RAM) 0000-0FFF ... monitor 1000-11FF ... zápisník 1200-294C ... debugger 294D-2C09 ... nápověda/volná paměť 2C00-3BFF ... volná paměť 3C00-3CFF ... převodní tabulka/volná paměť 3D00-3FFF ... znakový generator/volná paměť 4000-5AFF ... Video Ram Spectra/volná paměť 5B00-FFFF ... volná paměť -------------------------------------------------------------------------------- 3. Ovládací klávesy Editor : Povely se zadávají v řádkách,jejichž délka je omezená pouze rozsahem obrazovky.Zpracovávat se bude vždy ten řádek,uvnitř kterého se kursor nachází, je jedno kde. - pohyb kursoru po obrazovce + - kursor na konec řádku + - kursor na začátek řádku + - kursor na začátek obrazovky + - kursor na konec obrazovky - vložení mezery pod kursor - smazání znaku před kursorem,posun kursoru vlevo + - smazání obrazovky + - smazání řádku od znaku pod kursorem do konce + - posun o slovo vlevo + - posun o slovo vpravo - zpracování řádku - zpracování řádku + výpis (viz.dále) - kursor na začátek následujícího řádku - kursor na pozici následujícího tabelátoru + - kursor na pozici předcházejícího tabelátoru ... - od pozice kursoru se vypíše obsah funkční + ... klávesy F1...F10 Řízení monitoru : +

- zapnutí/vypnutí tiskárny pro výpis - vkládání/přepisování znaků - zapnutí/vypnutí zámku Shift pro písmena + následný stisk ... - každá další stištěná klávesa se uloží do definice klíče,definování končí stiskem klávesy definovaného klíče.Pokud se ukládá klávesa nebo ,je zároveň zpracován aktuální řádek.Tomu lze zabránit současným stiskem klávesy . Nastavování tvaru výstupních ( resp. i vstupních ) údajů : + - binární výstup - osmičkový výstup - dekadický výstup - šestnáctkový výstup - výstupní čísla se vypisují po 8 bitech - výstupní čísla se vypisují po 16 bitech - výstupní čísla se vypisují bez znakové reprezentace - výstup znaků podle Ascii kódů - výstup znaků podle Video kódů Sharpa - zobrazení nastaveného tvaru -------------------------------------------------------------------------------- 4. Tvar údajů Parametry povelů lze zadávat ve všech zabudovaných číselných soustavách i ve znakové formě.Platí následující pravidla : Soustavu číselného údaje lze určit označením typu před číslem a to malým písmenem shodným s označením v předchozím odstavci.Zároveň lze určit rozsah čísla 8/16 bitů opět malým písmenem (podle předchozího odstavce) za označením soustavy.Takováto volba platí pouze pro číslo před nímž je uvedena.Pokud za označením soustavy resp.rozsahu následuje dvojtečka,platí volba jako implicitní i pro další čísla v řádku.Pokud není volba provedena vůbec,je implicitní typ dán buď povelem nebo je shodný s nastaveným výstupním typem.Jako číslo může vystupovat i znak v páru apostrofů (Ascii) nebo uvozovek (Video).Na místě čísla může vždy stát i výraz používající operátory +,-,*,/ a \ jako modulo. Unární mínus se považuje za součást čísla a pokud je použito,musí být těsně před jeho první číslicí. Pozn.: U aritmetických operací není priorita,výpočet probíhá zleva doprava. Mezery se ignorují,nesmějí být pouze mezi číslicemi čísla. Př. : h 12,d w 32000,bs110111,hs : FE,w:AB00,o - 37,d:12 *3+88, b 111 / hE,'>',"@",'''," ",8* 'G' +1000 apod. Význam označení parametrů v popisu povelů: Parametry je možné oddělovat čárkami nebo pouze mezerami. byte ... 8-mi bitové číslo,rozsah 8 bitů je implicitní. word ... 16-ti bitové číslo,rozsah 16 bitů je implicitní. addr ... 16-ti bitové číslo,rozsah 16 bitů je implicitní,implicitní soustava je 16. data ... posloupnost čísel libovolných soustav i rozsahů,lze zadávat i znakové řetězce v apostrofech nebo uvozovkách.Zvláštní význam zde mají tzv. prázdné byty,které se realizují mezi čísly dvěma nebo více za sebou jdoucíma čárkama,resp.speciálním znakem v řetězcích (stand. podtržítko). Tento znak se zároveň vypisuje na místě nezobrazitelných kódů. Rozsah dat je,až na vyjímky,libovolný od jednoho do 255 bytů. Parametry uzavřené do páru hranatých závorek jsou nepovinné. -------------------------------------------------------------------------------- 5. Popis povelů Pro všechny povely jsou společná tato pravidla : - Pokud povel může vypisovat více řádků,platí rozdíl mezi klávesami a . Při zpracování po se vypíše jeden řádek a činnost povelu končí, po výpis pokračuje až do : 1/ stisku ... ukončení povelu, 2/ stisku ... pozastavení výpisu až do uvolnění klávesy, 3/ stisku ... zastavení výpisu,lze však pokračovat opětovným odesláním řádku klávesou nebo . 4/ vyčerpání všech položek výpisu. - Všechny modifikační povely vypisují řádky tak,že je v nich přímo možné provádět úpravy a stiskem resp. je provést. - U těchto povelů je testován výskyt středníku za posledním platným znakem. Pokud tam středník je,vypíše se po provedení modifikace další položka, jinak se pouze provede modifikace a kursor se přemístí na další řádek. - V každém případě představuje středník logický konec řádku a znaky jdoucí za ním se ignorují. - Při zadávání oblastí označuje druhá adresa vždy 1. nezpracovávaný byte ! ------------------- A ... find in disAssembling ------------------------ syntaxe: A [ addr1 ][ ,addr2 ][ =data ] Ve zpětném překladu oblasti addr1-addr2 do mnemoniky Z80 hledá text zadaný v datové části povelu.Pokud není zadána addr1,hledá se od posledního výskytu,pokud není zadána addr2,hledá se do konce paměti.Nezadaná data se zachovávají z posledního povelu A,pokud nebyla zničena povely C,F,G,H,J nebo N.Je-li text nalezen,vypíše se řádek ve tvaru shodném s povelem D ( Disassembly ).Po stisku ,resp. hledání pokračuje,jakákoliv jiná klávesa hledání přeruší a je nutné znovu zadat povel A,ale už bez parametrů. Porovnávání se provádí vždy od prvního znaku instrukce a probíhá v Ascii kódech ! Pokud se v datech vyskytují prázdné byty,jsou jejich pozice při porovnávání přeskočeny. Př.: A 6000,8000='JP' A = 'LD A,_' A B000 ------------------- B ... dump/modify Breakpoints ---------------------- syntaxe: B [ byte ][ = addr ] BW [ byte ] Breakpoint,jehož číslo udává byte,je nastaven na addr.Platná čísla breakpointů jsou 1 až 8.Breakpointy nastavené na adresu 0 se považují za nenastavené,nuly se pak nevypisují.Pokud není zadaná druhá část povelu,provádí se výpis od daného čísla breakpointu,resp. implicitně od 1.Druhá forma povelu slouží k zápisu adres bez vypisování modifikovaných položek. Breakpointy se do paměti umisťují až povelem volání programu a to jako kódy RST 38H.Po návratu přes breakpoint i RET se opět všechny vymažou,nejsou ale zrušeny ! Navíc se po návratu zapříčiněném breakpointem simuluje stisk funkční klávesy F10.Pozor,breakpointy nesmí být umístěny v těch místech programu,kde je připojena VRAM v oblasti 1000-1FFF spolu s dolní ROM !!! Př.: B 1 = 5560 B 5 ------------------- C ... Call program --------------------------------- syntaxe: C [ addr ] Volání programu na adrese addr instrukcí CALL.Pokud není adresa zadána,použije se hodnota registru PC.Před voláním jsou nastaveny všechny registry a I/O brány A,B,C obvodu 8255 a A,B PIO,registry videoprocesoru CC,CD,CE,F0,přerušení a mapování paměti (viz.povel GM). Návrat do monitoru je signalizován blikajícím borderem,ale obrazovka bude inicializována až po stisku . Př.: C 5000 C ------------------- D ... Disassmebly ---------------------------------- syntaxe: D [ addr1 ][ ,addr2 ][ =data] Výpis oblasti addr1-addr2 v mnemonice Z80.Pokud není zadána první adresa,pokračuje výpis od poslední použité adresy,pokud není zadaná druhá adresa,vypisuje se až do konce paměti ( samozřejmě jen po ,jinak nemá addr2 význam ).Vypisovaná data lze rovněž modifikovat,i když jen pomocí kódů a ne v mnemonice. ------------------- E ... Exchange memory blocks ----------------------- syntaxe: E addr1,addr2,addr3 Zamění v paměti dva bloky délky addr2-addr1 na adresách addr1 a addr3.Oba bloky musí být disjunktní,jinak je hlášena chyba. Př.: E 4000,5000,F000 ------------------- F ... Find data ------------------------------------ syntaxe: F [ addr1 ][ ,addr2 ][ =data ] V oblasti addr1 až addr2 se hledá výskyt zadaných dat,jinak je činnost naprosto shodná s povelem A.Pro oba povely se používá stejná vyrovnávací paměť pro data, proto není možné zadávat po A povel F bez dat a naopak.Při výpisu je počet vypsaných bytů z místa nalezení ohraničen shora tvarem výpisu a zdola délkou dat.Proto mají význam prázdné byty před nebo za daty - způsobí výpis okolních bytů. Př.: F 4000,6000=12 13 wFF00 'XYZ' F 3000=dw:13456,22,,,30000 F = "???" 'abc__' ------------------- GS ... Graphic screen ------------------------------ syntaxe: G [ addr ] Vykreslí obsah VideoRam Spectra umístěné na addr,jejíž implicitní hodnota je 4000H.Zobrazení je 16-ti barevné s 32K VRAM nebo černobílé s 16K VRAM. Shora a zleva je doplněno znakové měřítko.Návrat do debuggeru se provede po stisku . Př.: G G 8000 ------------------- GP ... Graphic picture ----------------------------- syntaxe: GPH addr,byte1,byte2 GPV addr,byte1,byte2 Vykreslí obrazec z adresy addr,jehož šířka je byte1 bytů a výška byte2 bodů. Povel GPH vykresluje obrazec po řádcích,GPV po sloupcích. Př.: GPH 78F0,4,d32 ------------------- GT ... Graphic overturn --------------------------- syntaxe: GPT addr1,addr2 V dané oblasti provede stranové převrácení obrazových bytů,slouží pro převod grafických obrazců z formátu Spectra do formátu Sharpa. Př.: GT 8A90,8AA0 ------------------- GM ... Graphic mode -------------------------------- syntaxe: GM [data] Nastavuje systémové proměnné,kterými je řízena konfigurace systému po spuštění programu povelem C nebo J.Nejsou-li data uvedena,dojde k vypsání těchto proměnných ve tvaru : GM BB,BB,BB,BB,BB,BB,BB,BB,BB,BB,BB ; md wr rr p0 p1 p2 p3 p4 if m0 m1 Jednotlivé položky mají tento význam : md ... registr módu (CEh) p0-p4 ... registr palet (F0h) wr ... registr módu zápisu (CCh) if ... přerušení,0-povoleno,FFh-zakázáno rr ... registr módu čtení (CDh) m0 ... spodní ROM,0-odpojena,FFh-připojena m1 ... horní ROM,0-odpojena,FFh-připojena Př. : GM 8,1,1,,,,,,FF GM ------------------- H ... Help screen ---------------------------------- syntaxe: H Zobrazí stránku nápovědy,pokud je tato nahraná v paměti.Návrat se provede stiskem .Při použití nápovědy zůstává zachován původní obsah obrazovky. ------------------- I ... dump/modify Input/output --------------------- syntaxe: I [ addr ][ =data ] Pokud jsou zadaná data,zapíše postupně všechny byty na port dané adresy.Platné jsou adresy módu 800 a to i 16-ti bitové.Nemá význam zapisovat do portů,které jsou nastavovány monitorem : čítač 0 8253,PSG,porty 0CCH-0CEH,6CFH a 0F0H. Nejsou-li data zadaná,přečte se a vypíše 1 byte z dané adresy.Brány A,B,C 8255 a A,B PIO jsou sice používány monitorem,ale jejich obsah se uchovává podobně jako registry,tzn. i při volání a návratech z programů.Není-li zadaná adresa,použije se hodnota z posledního povelu I. Př.: I D0 = C0 I D1 ------------------- J ... Jump to program ------------------------------ syntaxe: J [ addr ][ ,data ] Činnost je zcela shodná s povelem C,až na to,že se program volá instrukcí JP a nelze tedy použít RET pro návrat. ------------------- K ... basic Keywords listing ------------------------ syntaxe: K [ addr1 ][ ,addr2 ] Vypisuje program v Basicu.Adresa addr1 musí udávat začátek řádku,addr2 byte za posledním znakem posledního vypisovaného řádku.Po prvním zadání obou adres se mohou dále používat impl.hodnoty,addr2 je stále stejná,addr1 je nastavena vždy tam,kde bylo vypisování přerušeno.Při výpisu jsou uváděny i adresy paměti, kde leží část řádku následovaná za adresou. Př.: K 5CCB,6000 K 5E34 K ------------------- L ... Load data from CMT -------------------------------- syntaxe: L [ addr1 [ ,addr2 ] ] Načte do paměti program z kazety a uloží ho od adresy addr1 nebo od adresy v hlavičce nahrávky,pokud není addr1 zadaná.Po nalezení hlavičky se vypíše ještě startovací adresa,typ a jméno programu.Je-li zadán rozsah addr1-addr2 ignoruje se hlavička záznamu a přečte se pouze tělo,jehož délka musí souhlasit s délkou zadaného rozsahu.Nahrávání lze přerušit klávesou . Př.: L L 6000 L 6000,6100 ------------------- M ... dump/modify Memory --------------------------- syntaxe: M [ addr1 ][ ,addr2 ][ =data ] MW [ addr ] Bez zadání dat se provádí výpis paměti v nastaveném tvaru,pokud jsou uvedena data,zapíší se od addr1 do paměti.I zde je možné v datech využívat prázdných bytů, příslušné buňky paměti si pak zachovají původní obsah.Počet vypsaných bytů na řádku závisí na tvaru a pohybuje se od 1 (binární byte) do 8 (šestnáctkový byte bez znakové reprezentace) u číselných tvarů a je roven 16 u znakových tvarů. Varianta MW slouží k zápisu bez vypisování modifikovaných dat. Povel M je jediným povelem,který umožní zásah do oblasti systému,proto pozor na omyly ! Př.: M 5000 = 12,,,15,'****',2378-236A M 3000 M MW 2000 ------------------- N ... return to moNitor ---------------------------- syntaxe: N Provede návrat do monitoru MZ-800 ( resp. do IPL ).Do debuggeru se lze vrátit současným stiskem a nebo z monitoru skokem J1200.Pozor,restart přes CTRL+RESET ničí několik bytů RAM v oblasti FFF0-FFF4 !!! ------------------- O ... load Original data --------------------------- syntaxe: O [ addr1 [ ,addr2 ] ] Nahrává přímo programy zapsané ZX-Spectrem.Činnost je zcela shodná s povelem L. ------------------- P ... Print text ---------------------------------- syntaxe: P [ data ] Na tiskárnu jsou vyslána data následující povel a znak nového řádku.Tisk nezávisí na zapnutí tiskárny klávesou CTRL P.Nejsou-li data zadána,provede se pouze odřádkování. Př.: P 'Vypis programu' P 0C,E P ------------------- Q ... Question ------------------------------------- syntaxe: Q [ word ] Vypíše hodnotu čísla resp. výrazu word v nastaveném výstupním tvaru. Není-li hodnota zadaná,je vypsána hodnota zpracovávaná posledním povelem Q, takže lze tento povel využít i jako paměť. Př.: Q d34567+FF8 Q '0'*8+1000 Q ------------------- R ... dump/modify Registers ------------------------ syntaxe: R [ reg ][ =data ] RW [ reg ] Provádí výpis nebo modifikaci všech registrů Z80.Adresuje se vždy celý registrový pár,takže na místě reg může být : AF,BC,DE,HL,IX,IY,SP,PC,IR,AF',BC',DE',HL'. Pokud nejsou uvedena data,provádí se výpis registrů od daného jména nebo od AF. Při modifikci lze na místě dat zadat 1 nebo 2 byty,i prázdné.První byte se vždy vztahuje k vyšší polovině páru (A,B,D ... ),při zadávání 16-ti bitových čísel ( tento rozsah je zde také implicitní ) se samozřejmě zapíše do vyššího registru páru významnější byte.Varianta RW slouží k zápisu bez vypisování modifikovaných dat. Př.: R HL=3400 R AF=s50 R BC='bc' R HL'=,bs1101 R SP RW BC ------------------- S ... Save data to CMT ----------------------------- syntaxe: S [ addr1,addr2, [ addr3 ],[ byte ] ,data ] Zapíše blok paměti addr1 až addr2 na kazetu,addr3 udává startovací adresu, implicitně 0000,byte typ souboru,impl. 01,data představují jméno.Pokud je při vynechání addr3 a byte zadání jednoznačné,není nutné uvádět oddělovací čárky. Pozor na používání malých písmen ve jménu,jejich kódy neodpovídají Sharpovi ( stejně jako u FETu ).Ve jménu také nesmějí být prázdné byty. Při zadání písmene S bez parametrů jsou zobrazeny parametry naposledy použité a řádek je možné odeslat ke zpracování. Př.: S 3000,5000,4FF0,'JMENO' S 6000,6700,,10,'JMENO2' S 8000,9000,'***' ------------------- T ... Transfer memory blocks ----------------------- syntaxe: T addr1,addr2,addr3 Přenese blok addr1 až addr2 na adresu addr3.V žádném případě nedojde ke zničení přenášených dat. Př.: T 5000,5020,5002 ------------------- U ... Unify memory blocks -------------------------- syntaxe: U addr1,addr2,addr3 Porovná obsah bloků o délce addr2-addr1 na adresách addr1 a addr3.Při neshodách vypisuje rozdílné byty z bloku addr1 až addr2.Ovládání výpisu je stejné jako u povelů A nebo F.Je-li nastaven 16-ti bitový výstupní tvar,probíhá porovnávaní ne po bytech,ale po slovech. Př.: U 5000,5040,6000 ------------------- V ... Verify data from CMT ------------------------- syntaxe: V Zkontroluje poslední provedený zápis na kazetu.Předpokládá se,že hlavička souboru uložená na běžném místě od 10F0h nebyla zničena,např. RESETem. ------------------- W ... Write to memory block ------------------------ syntaxe: W addr1,addr2 [ =data ] Do zadané oblasti addr1 až addr2 zapisuje opakovaně posloupnost bytů z dat. Pokud se v datech vyskytují prázdné byty,je na jejich místě zachován původní obsah paměti.Při opakovaném používání stejných dat je není nutné pokaždé znovu zadávat.Obsah vyrovnávací paměti pro data je však zničen povely C,G,H,J a N. Př.: W 4000,5000=0 W 4000,8000=1 2 3 4 W 7000,7030='abc_efg',0 W 3000,3100 ------------------- X ... set X-char ----------------------------------- syntaxe: X [ byte ] Tímto povelem se nastavuje speciální znak,sloužící k výpisu nezobrazitelných kódů a k zadávání prázdných bytů do řetězců.Není-li parametr zadán,vypíše se současné nastavení.Po nahrání by měl být nastaven prázdný znak na podtržítko. Př. X 40 X '.' X ------------------- Y ... switch on/off Yes questions ------------------ syntaxe: Y Zadání povelu zapne nebo vypne dotazování u povelů C,E,J,T,W a GT. Příslušný povel se pak provede pouze tehdy,je-li po dotaze stištěna klávesa Y. -------------------------------------------------------------------------------- 6. Nastavování některých parametrů programu V oblasti od adresy 1200 leží celá řada parametrů,ovlivňujících činnost programu,z nichž některé mají význam i pro běžného uživatele : 1208,1209 zpoždění autorepeatu 120A,120B rychlost autorepeatu,nelze však nastavovat plynule 120E-1217 8 pozic tabelátoru 1218,1219 čas čekání na tiskárnu 121A 00 tiskárny Centronics,FF tiskárny Sharp 121B počet kódů pro odřádkování na tiskárně 121C-122F kódy pro odřádkování (většinou 0D,0A nebo jen 0D) 1220 počet kódů pro inicializaci tiskárny 1221-1228 kódy pro inicializaci tiskárny (většinou 18) 122E,122F rychlost zápisu na magnetofon 1:1=0227,2:1=0113,3:1=00B7 1230,1231 rychlost čtení z magnetofonu 1:1=019D,2:1=00CE,3:1=0089 Následují inicializační hodnoty pro většinu implicitních parametrů povelů a oblast klíčů.Případným zájemcům odpovídající adresy sdělím ústně. Pozor při nastavovní např. pomocí Turbo Copy.Tato oblast leží před spuštěním progamu ne od adresy 1200,ale od 2200. -------------------------------------------------------------------------------- !!! Vše co bylo výše uvedeno je zcela bez jakékoliv záruky !!! Nelze vyloučit drobné odchylky ani případné chyby programu,proto bych byl rád,aby mi každý,kdo něco podobného zjistí,napsal nebo jiným způsobem oznámil,co je nutné opravit. Již předem děkuji za shovívavost při posuzování tohoto díla. Michal Kreidl Software Na křídle 13 160 00 Praha 6 --------------------------------------------------------------------------------