MZ-1Z016 - systémové služby monitoru ==================================== BASIC obsahuje dva funkčně značně nezávislé celky a) monitor,který kromě základních monitorových povelů popsaných v manuálu (D,M,P,F,...) obsahuje sluzby užívané in- terpretem BASIC b) vlastní interpret. Monitorové služby obsahují podprogramy pro vstup a výstup z klávesnice a na obrazovku,řízení LPT:,CMT:,podprogramy pro práci se soubory (otevírání,zavírání,čtení,zápis ap.).Tato část je umístěna na adresách 0000H-57FFH. V oblasti nad 5800H je in- terpret povelů BASIC. Systémové sluzby se obecně volají inst- rukcí RST 18H, která má na návratové adrese uloženu hodnotu 0 až 57H, která určuje službu. Tedy např. služba 10H se volá posloupností instrukcí RST 18H DEFB 10H. V dalším textu budou popsány některé z těchto restartů se stručným popisem činnosti. Přitom některé z těchto podprogramů lze volat i přes vektor skoků na adresách 0000 až 0058H. ----------------------------------------------------------------- Č. Adr. Název Popis (I:vstup O:výstup Z:zachované registry PP primární páry, PP-AF - prim.páry bez AF ----------------------------------------------------------------- 00 1587 @MONOP Startuje RAM monitor I:0 O:0 Z:0 01 09AB @CR1 Přechod na nový řádek na CRT:,při LPCO=1 i na LPT:. I:0 O:0 Z:PP 02 099B @CR2 Není-li kursor na začátku řádku přechod na nový řádek na CRT:,při LPCO=1 i na LPT:. I:0 O:0 Z:PP 03 0E61 @CRT1C Výstup znaku na CRT:, při LPCO=1 i LPT:.řídící kódy se provedou. I:A=MZ-ASCII O:0 Z:PP 04 0EA2 @CRT1X Výstup znaku na CRT:, při LPCO=1 i LPT:, řídící kódy zobrazí v inverzním zobrazení. I:A=MZ-ASCII O:0 Z:PP 05 0D94 @CRTMS Výstup řetězce od (DE) ukončeného na CRT: při LPCO=1 i LPT:. Řídící kódy provede. I:DE= adresa 1. znaku O:0 Z:PP 06 14F0 @LPTOT Výstup znaku na LPT: bez konverze kódů I:A=MZ-ASCII O:0 Z:PP 07 14B9 @LPT1C Výstup znaku na LPT: s konverzí podle typu tiskárny z povelu INIT (užívá PRINT/P). I:A=MZ-ASCII O:0 Z:PP 08 0E2A @CR Přechod na nový řádek na CRT: při FILOUT=0 nebo LPT: při jiném FILOUT. I:0 O:0 Z:PP 09 0E2C @1C Výstup znaku na CRT: při FILOUT=0, na LPT: při jiném FILOUT. Řídící znaky na CRT: pro- vede, na LPT: jako @LPT1C. I:A=MZ-ASCII O:0 Z:PP 0A 0E3A @1CX Výstup znaku na CRT: pro FILOUT=0, nebo LPT: při jiném FILOUT. Řídící kódy na CRT: v in- verzním zobrazení, na LPT: <.> 0B 0E48 @MSG Výstup řetězce znaků od (DE) do na CRT: pro LPCO=0 nebo i na LPT: pomocí @CRT1C resp. @LPT1C, řídící kódy provede. I:DE= adr, 1. znaku O:0 Z:PP 0C 0A84 @GETL Vstup řetězce MZ-ASCII znaků z klávesnice na adresy od (DE), max.255 znaků. Při ukončení klávesou uloží za vstoupené kódy , při ukončení + návrat s CY=1. I:DE=počáteční adr. pro ukládání O:CY=1 při BREAK Z:PP-AF 0D 0B1A @INKEY Vstup MZ-ASCII z klávesnice podle A při volání. I:A=FFH sejme klávesnici,vrátí znak při změně proti předchozímu čtení, jinak A=0 nečeká, není klávesa A=1 čeká na klávesu s blikajícím kursorem O:A=MZ-ASCII Z:PP-AF 0E 0D22 @BREAK test stisknutí + I:0 O:Z=1 je-li BREAK Z:PP-AF 0F 02F8 @HALT Je-li stisknuta čeká na její puštění, testuje +, jsou-li stisknuty skok na ERRORP. I:0 O:0 Z:PP-AF 10 00A8 @DI Zastaví spooling,stop PSG, zákaz přerušení. I:0 O:0 Z:PP 11 00B3 @EI Obnoví spooling, povolí přerušení. I:0 O:0 Z:PP 12 094D @CSSET Nastaví ukazatele cursoru CRSCOL,CRSED,CRSVIR na řádek H a sloupec L. I:L=řádek H=sloupec O:0 Z:PP-AF 13 029E @ASCNO Řetězec od (HL) interpretuje jako integer číslo, je-li první znak <$> hexadecimálně, jinak dekadicky. Při přetečení návrat na ERRORP. I:HL=adresa 1. znaku O:DE=binární hodnota čísla Z:BC 14 02CE @HEXNO řetězec od (HL) interpretuje jako hexadeci- mální číslo do DE. Při přetečení na ERRORP. I:HL=adr. prvního znaku O:DE=binární hodnota čísla Z:BC 15 02E9 @ASHEX Testuje je-li v A ASCII hexaecimální číslice, není-li, nastaví CY=1, jinak v A vrátí její hodnotu. I:A=ASCII O:A=hexadecimální hodnota CY=1 není-li hexa číslice Z:PP-AF 16 025E @HLDEC Převwde HL na dekadickou hodnotu,kterou u- loží jako řetězec ASCII číslic od (DE) a u- končí . Je-li při volání B=0, potlačí ú- vodní nuly. I:HL=binární číslo DE=ukládací adresa znaků B=0 potlačení úvodních nul O:DE ukazuje na zakončovací řetězce číslic Z:0 17 00F6 @COUNT Do B spočítá znaky řetězce od (DE) po . I:DE=adr.1.znaku řetězce O:B=počet znaků různých od Z:DE,HL 18 031C SHPTRS Posuv ukazatelů BASIC od FILES výše o DE I:DE=posunutí O:0 Z:BC 19 0323 SHVARS Posuv ukazatelů BASIC od VARS výše o DE I:DE=posunutí O:0 Z:BC 1A 032A SHSTR Posuv ukazatelů BASIC od STRING výše o DE I:DE=posunutí O:0 Z:BC 1B 0340 @ERRX Výpis chybového hlášení z tabulky v ROM, je- li BIT 7,A=1 i s názvem periferie. I:A=kód chyby O:0 Z:0 1C 3C1C @DISAS Převede dispkód na MZ-ASCII pomocí ROM pod- programu. I:A=dispkód O:A=MZ-ASCII Z:PP-AF 1D 3C00 @ASDIS Převede MZ-ASCII na dispkód pomocí podprogra- mu v ROM. I:A=MZ-ASCII O:A=dispkód Z:PP-AF 1E 14A6 @JOYS vzorkuje joystick podprogramem v ROM I:A=1,3 čte JOY1 A=2,4 čte JOY2 A>80H čte kurzorové klávesy O:A=kód směru (viz manuál) Z:PP 1F 14AA @STRIG Vzorkuje TRIG nebo klávesu podprogramem v ROM. I:A=1,3 na JOY1 A=2,4 na JOY2 A>80H 20 44E3 @BEEP 21 4422 @INISG Inicializace kanálu PSG,přehraje data. I:A=kanál PSG (0-3,0FFH všechny DE=adresa datového řetžce O:0 Z:0 22 437A ??? 23 44AF @SOUND Zpracování poveklu pro PSG I:B=povel:0 - init 1 - start melodie podle aktuálních dat 2 - stop 3 - wait 24 0104 @OUTBL Blokový OUT dle tabulky od (HL),v níž je vždy hodnota a I/O adresa. I:HL=adresa bloku dat B=počet dvojic hodnot v tabulce O:0 Z:DE 25 14A2 @TMGET Čtení systémových hodin podprogramem v ROM. I:0 O:DE=počet sekund A=příznak AM/PM Z:BC,HL 26 149E @TMSET Nastavení systémových hodin podprogramem v ROM. I:DE=počet sekund A=příznak AM/PM O:0 Z:PP 27 1989 @GTFIL Čte znak z bufferu souboru otevřeného pro čtení (RAM:,CMT:). I:0 O:A=znak CY=1 narazilo na Z:PP 28 1BFA @CLALL Uzavření všech souborů. I:0 O:0 Z:PP 29 1EF0 @FILFN Hledá pole souboru daného logického čísla ve FILES I:A=log. číslo souboru O:HL=adresa 1. bytu za ofsetem v poli FILES CY=1 soubor nenalezen Z:BC,DE 2A 1F32 @NEWFI Uvolní DE byte na konci FILES, uloží sem logické číslo souboru,uvolněný blok vynuluje. I:DE=požadovaný prostor A=log.číslo souboru O:HL=první adresa uvolněného prostoru,není-li v paměti místo skok na chybu OUT of memory. Z:BC,DE,AF 2B 1F06 @KILFI Zruší pole příslušného souboru ve FILES. I:A=log.číslo souboru O:CY=1 soubor nenalezen Z:PP-AF 2C 1A45 @DEVNM Specifikuje jméno zařízení, jeho tabulku pře- nese do bloku aktivního souboru. I:DE=adresa 1. znaku řetězce specifikace B=délka řetězce O:HL=adr. v řetězci specifikací za jménm zařízení DE=adr. tabulky zařízení A=číslo zařízení Z:0 2D 1AC0 @DEVFN Vytvoří blok aktivního souboru,uloží jeho jméno od FILNAM. I:DE=adr. řetězce specifikací souboru B=délka řetězce O:0 Z:PP-AF 2E 19E8 @LUCHK Testuje je-li otevřen soubor daného log.čísla, když ano vrátí typ otevření. I:A=log.číslo O:A=1 otevřen pro čtení A=2 otevřen pro zápis A=3 otevřen pro čtení/zápis CY=1 není otevřen Z:PP-AF 2F 1B83 @LOPEN Otevře soubor s log. číslem 0 pro čtení (natažení .OBJ souboru), jméno předem specifi- kováno @DEVFN. I:0 O:IY=1000H - báze bloku parametrů aktivního souboru Z:PP-AF 30 1CC6 @LOADF Uloží do paměti soubor typu .OBJ od (HL) délky (LENGTH). Musí být předem otevřen @DEVFN a @LOPEN. I:HL=ukládací adresa O:0 Z:HL,DE 31 1CEA @SAVEF Odešle blok dat od (DE) do souboru specifiko- vaného v HEAD pomocí @DEVFN. I:DE=počáteční adr. bloku (LENGTH)=délka (STADR)=ukládací adresa pro čtení (EXCADR)=startovací adresa O:0 Z:0 32 1CDB @VRFYF Verifikuje soubor typu .OBJ vytvořený na CMT:, musí být otevřen @DEVFN,@LOPEN. I:HL=počáteční adresa O:0 Z:HL 33 1AE9 @RWOPN Otevře pro čtení nebo zápis soubor dělený na bloky (ASCII-file) specifikovaný @DEVFN, vytvo ří pro tento soubor oblast parametrů a případně buffer ve FILES, při otevření pro čtení do buf- feru načte první blok dat. I:(OPETYP)=1 pro čtení 2 pro zápis O:0 Z:PP-AF 34 18D0 @GLCON Do LINBUF zadá řádek jako @GETL, ale na (CHRADR) uloží adresu prvního nově zadaného znaku (užívá INPUT s tiskem řetězce) I:0 O:0 Z:PP-AF 35 18E4 @INMSG Čteni řádku dat ze souboru otevřeného @RWOPN na adresy od (DE),ukončí znakem . Ze souboru čte po nebo . I:DE=ukládací adresa O:B=délka vstoupeného řádku CY=1 dosaženo Z:DE,HL 36 194C @XFDAT Přenos řetězce od (HL) po ukončovací znak do oblasti od (DE). Začíná-li řetězec <">, přene- sou se znaky po ukončovací uvozovky (přenesena data bez uvozovek). Ukončovací znak <,>,, obsah registru C. I:HL=počáteční adresa dat DE=počáteční adresa oblast pro ukládání C=ASCII ukončov`#ího znaku O:B=počet přenesených znaků Z:0 37 180F @PRSTR Zápis řetězce dat do souboru otevřeného pro zápis @RWOPN (max 255 byte).  I:DE=adr. počátku dap  B=počet byte O:0 Z:PP-AF 38 1BB9 @ALKL Uzavření nebo zrušefí otevřeného souboru. I:A=log. číslo,při 0 všechny soubory B=0 zrušení 1 uzavření O:0 Z:PP-AF 39 1D2D @DIR Výpis adresáře zařízení. Soubor do nějž se má provést nutno specifikovat @DEVNM. I:A=0 výpis do DIRBUF od 27D0H 88H na CRT: 89H na LPT: nebo jiné logické číslo O:0 Z:PP-AF 3A 0314 @SETDF Nastaví default zařízení. I:DE=adresa tabulky parametrů A=číslo zařízení O:0 Z:PP 3B 34DE @SALOA SAVE ALL,LOAD ALL pro QD: 3C 1E6D @FINIT Volá inicializační podprogram z tabulky za- řízení specifikovaného @DEVNM (užívá INIT povel) I:HL=adr. v inicializačním řetězci za jménem zařízení O:HL=adr. za řetězcem INIT Z:HL,DE 3D 3BA6 ??? 3E 3BBD ??? 3F 3BA3 CNTEX skok na chybu Can't execute. I:0 O:0 Z:0 40 3BA1 ORRET Pouze instrukce OR A. 41 3BA1 ORRET 42 3BA1 ORRET 43 1FC0 @ERCUR Zprac/vání chyby: uzavře aktivní soubor, zastaví QD:. I:0 O:0 Z:0 44 3BA3 CNTEX Skok na chybu Can't execute. I:0 O:0 Z:0 45 0652 @CLRSC Maže stínítko, editační stránku od 2000H a pole spojování řádků od 13A9H. I:0 O:0 Z:PP 46 4D08 @GFTST Testuje je-li bod (DE',HL') v grafickém poli (DE 0-319,HL 0-199), není-li, chyba Illegal data error. I:DE'=souřadnice x HL'=souřadnice y O:0 Z:všechno kromě AF' 47 4D13 @POIST Nastaví XCOOR a YCOOR na souřadnice DE',HL'. I:DE'=souřadnice x HL'=souřadnice y O:0 Z:všechno 48 4694 @SETP Podle aktuálních parametrů zobrazí nebo vymaže bod grafické oblast o daných souřadnicích. I:DE=souřadnice x HL=souřadnice y A=0 SET 1 RESET O:0 Z:0 49 46CE @LINE Zobrazení čáry mezi body o grafických souřad- nicích [DE,HL],[DE',HL']. I:DE=x souřadnice koncového bodu HL=y DE'=x souřadnice počátečního bodu HL'=y A=0 maže, <>0 zobrazuje O:DE'=x koncového bodu HL'=y koncového bodu Z:0 4A 4F51 @PATTR Kreslení grafického znaku podle bitového vzoru I:H=směr: 0 - nahoru 1 - dolů A=měřítko B=délka datového stringu DE=adresa datového stringu O:0 Z:0 4B 4BE9 @BOX Zobrazí obdélník o vrcholech [DE,HL],[DE',HL'] I:DE=x 1. vrcholu HL=y 1. vrcho;u DE'=x 2. vrcholu HL'=y 2. vrcholu A=barva pro vybarvení O:0 Z:0 4C 5035 @PAINT Vybarvení oblasti I:DE'=x výchzího bodu HL'=y výchzího bodu HL=adresa pole,kde jsou uloženy kódy barev hranic 4D 47E7 @CIRCL Kreslí oblouk z bodu o relativních souřadnicích [DE',HL'] do bodu o rel. souřadnicích [DE,HL] o poloměru IX. Relativní souřadnice jsou vztaženy proti středu. Poměr měřítek os (aspect) v BC. I:DE'=x rel. souřadnice počátečního bodu HL'=y DE=x relativní souřadnice koncového bodu HL=y B'= hodnota aspect (1-0FFH) c'= rozsah aspect: 0 x=y 1 aspect v intervalu (0;1) 2 aspect v intervalu (1;oo) O:0 Z:0 4E 4629 @POINT Vrátí v A kod barvy bodu [DE,HL]. I:DE=x souřadnice HL=y souřadnice O:a=kód barvy Z:0 4F 14AE @HCROM Volá podprogram HCOPY v ROM, povelem INIT musí být inicializován typ tiskárny,která hard- copy umožňuje,jinak hlásí chybu. 50 03BE @INICI Inicializuje GDG, registry palet a jejich kopie v RAM, modifikuje podprogramy podle modu CRT:. I:A=1 320x200,40 znaků,4 barvy 2 320x200,40 znaků,16 barev 3 640x200,80 znaků, 2 barvy jiné 640x200,80 znaků,4 barvy O:0 Z:PP-AF 51 044F @PALI1 Inicializuje palet-registry podle kódu bloku palety (viz manuál, APPENDIX A). I:A=0-3 číslo bloku palety O:0 Z:PP-AF 52 0476 @PALWR Zápis do registru palet-write. I:A=číslo palety B=kód barvy O:0 Z:PP-AF 53 04AE @WNSET Podle aktuálních hodnot ROWMIN,ROWMAX nastaví registry pro scrollování, maže okno, cursor HOME. I:L=číslo horního řádku okna H=číslo dolního řádku okna O:0 Z:PP-AF 54 048A @COLS Nastaví COLOR na zadanou barvu. I:a=kód palety O:0 Z:PP 55 0493 @COLS2 Nastaví COLOR2 na zadanou barvu I:A=kód palety O:0 Z:PP 56 458E @DFINI inicializace CRT: na mod dříve nastavený v CRTM, kód palety 0. I:0 O:0 Z:0 57 4D2D @SYMB Zobrazení symbolu podle dat. I:B=délka datového stringu DE=adresa dat A=úhel natočení: 0 - 0 stupňů 1 - 90 2 - 180 3 - 270 H=zvětšení ve směru y L=zvětšení ve směru x O:0 Z:0 (C) B.Votava,8.3.1988