P O P I S P Ř Í K A Z Ů P R O G R A M U ------------------------------------------- B.800 Compiler Zapsal Havlíček Josef podle podkladů od Michala Kreidla. (11.1988) Proměnné typů : integer, 16 bitů, bez znaménka (bez označení) integer, 16 bitů, se znaménkem % integer, 8 bitů, bez znaménka # real, 32 bitů ! string $ Větvení programu : --------------------- | | | IF f THEN - ELSE - | | | ----------------------------------- | | | Cykly : | FOR TO (STEP) | FOR DOWNTO (STEP) | řídící proměnná | . | . | může být jen | . | . | typu integer bez | . | . | zn., STEP musí | NEXT | NEXT | být > 0 | | | ----------------------------------- | | | | | REPEAT | WHILE f | LOOP | | . | . | . | | . | . | . |--------- | . | . | . | DO n | | . | . | . | . | | UNTIL f | WEND | END LOOP | END DO | | | | | | --------------------------------------------- Rozšířené | | | IF : | IF f | IF f | | . | . | | . | . | | END IF | ELSE | | | . | | | . | | | END IF | | | | ------------------- Skoky : Návěští se definuje jako xxx:: Při volání se používá GOTO xxx GOSUB xxx Ekvivalentní je uvedené xxx jako u povelu Přepínač : ON n GOTO seznam náv. ON n GOSUB seznam náv. Vady ? : Nehlídá zásobník při vnořování GOSUB Divně reaguje na funkční klávesy. AND OR XOR NOT THEN TO DOWNTO - jako TO s krokem -1 resp. -n, je-li STEP n STEP GTO - ON n GTO; lze použít i GOTO, ale není to hezké GSUB - ON n GSUB; lze použít i GOSUB, ale není to hezké END RUN BOOT - návrat do monitoru WAIT n - čeká n milisekund GOTO GOSUB RETURN [symbol] FOR NEXT REPEAT - | UNTIL - | podmínka na konci | WHILE - | | cykly WEND - | podmínka na začátku | LOOP - nekonečná smyčka LOOP - END LOOP IF ELSE ON - přepínač nebo ON ERROR GOTO CLS - [ CLS FRAME n v módu 800 2,4 maže obrazovku 0,1] COLOR - n1,n2 v módu 700 barva tisku n1, pozadí n2; v módu 800 tisk n1 (n2 nepřípustné) PRINT[n] - n: bo: obrazovka b1,b2 tiskárna INPUT - zná i formu INPUT "text"; ..."text";...omezení počtu znaků CURSOR - n1,n2 pozice kursoru nastavená na n1,n2 GET - x# test klávesnice, vrací ASCII klávesy nebo 0 GETC - x# test klávesnice, čeká na stisk klávesy, zahrnuje autorepeat LET DIM - deklarace polí, používají se hranaté závorky READ DATA RESTORE CLR - nuluje proměnné LOAD - n$ nahraje soubor n$ LOAD - n$,adr nahraje soubor n$ od zadané adresy SAVE - n$,t#,from,size,exec,from1 zapíše soubor n$, typu t#, od adresy from, délky size, start. adresa exec, do hlavičky uloží ukládací adresu from1 DIR FORMAT - "4 znakový řetězec" určuje jak se budou tisknout čísla při povelu PRINT 1. znak řetězce - udává typ čísla (viz začátek náv.) 2. znak řetězce - SP (mezera) .. tiskne se před každé číslo mezera - - (mínus) .. netiskne nic před č. 3. znak řetězce - SP .. tiskne jen záporná znaménka a místo kladného znaménka je SP - + .. tiskne vždy obě znaménka - - .. tiskne jen znaménka u záporných čísel 4. znak řetězce - SP .. jako 2. znak, ale za číslem - - .. jako 2. znak, ale za číslem DELETE - n$ snaže soubor n$ RENAME - "name1" TO "name2" DEFAULT - "zařízení" v diskové verzi zařízení : R, F1, F2, F3, F4 v připravované kazetové verzi : R - RAM DISK C1 CMT 1/1 C2 CMT 2/1 C3 CMT 3/1 existují jen příkazy SAVE, LOAD, EXEC, DEFAULT a snad se podaří vyrobit i VERIFY POKE# - | POKE - | POKE% - | ukládá čísla jako 1, 2 nebo 4 bytová POKE! - | POKE$ - uloží řetězec, 1. byte = délka INP - n,x# přečte x z portu n | OUTP - n1,n2 zapíše n2 na port n | pro 8255 a 8253 funguje jen v módu 800, n=<0,255> CALL - n volání strojáku na adrese n ERROR - ON ERROR RESUME - label návrat po ON ERROR GOTO DO - DO n - END DO cyklus, daný počtem opakování BREAK - ON BREAK ERROR | ON BREAK BREAK | přepínají se dva režimy 1) při stisknutí BREAKu se program zastaví je-li použito ON BREAK BREAK 2) při stisknutí BREAKu se hlásí BREAK ERROR, ale pokud je ošetřeno pomocí ON ERROR GOTO tak se nezastaví Pokud je nastaven OPTION B-, tak uvedené režimy nefungují, BREAK musí být povolen OPTION - "A+-" | "B+-" | "O+-" B... break, O...overf. RESET - RND! | SP | FORMAT RESET SP vyčistí zásobník RESET RND! nastaví pokaždé stejnou posloupnost náhodného čísla RESET FORMAT nastaví standartní formát pro tisk HOME - =cursor na pozici 0,0 BELL - zvukový signál ML - n1,n2 zahrne kódy do překladu (inline stroják) INPH - | OUTPH - | jako INP, OUTP, ale adresa je 16-ti bitová TAB - tabelátor, ale jen uvnitř PRINT TEST - TEST BREAK pokud je nastaven OPTION B- , provede se jednorázové otestování BREAKu TEST SP testuje jestli není plný zásobník (asi 500 položek) LENGTH - n, seznam x$ RANDOM - nastaví náhodnou posloupnost náhodného čísla INIT - načte soubor FORMAT a spustí ho (v RAM DISKU asi smaže vše a připraví adresář) EDIT - x$ editace řetězce x$ CRT - n nastavuje zobrazovací režim ( 0 - 700, 1:4 - 800) PLOT - n1,n2 bod (PLOT FRAME n) LINE - [n1,n2] TO n3,n4 čára z n1,n2 (nebo graf. ukazat.) na n3,n4 GMOVE - n1,n2 grafický ukazatel na souřadnice n1, n2 SETORG - n1,n2 střed souřadnic do n1, n2 (vzhledem k dolnímu levému rohu) PAL - n1,n2 palety GMODE - n grafický mód (0 - replace, 1 - reset, 2 - or, 3 - xor) SYNC - n n=0 synchronizace vypnutá, n=1 synchronizace VBLK funguje pro přepínání borderu, změny obrazovky a pro palety PCG - n,n1..n8 modifikuje znak n generátoru, kódy n1...n8 n=<0,511> VPOKE - n1,n2,n3,n4,n5 v módy 700 uložení videokódu n3 na na souřadnice n1, n2, barva n4, pozadí n5, n=<0,511> SOUND - n1,n2,n3 n1=<0,1,2> - zvukový kanál, n2=<0,1023> - frekvence, n3=<0,15> - hlasitost, platí pro PSG SSOUND - n1,n2,n3 n1=<0,3> - frkvence, n2=<0,1> - typ šumu, n3=<0,15> - hlasitost šumu, platí pro PSG BORDER - n barva borderu FRAME - x SHOW - FRAME n n=0,1 nastavení zobrazované obrazovky LOADH - "name" přečte hlavičku do paměti, naství funkce FADR, FSIZE, FNAME..atd. LOADD - adr (adr. je nepovinná) přečte tělo souboru jehož hlavička byla přečtena pomocí LOADH ABORT - nemá praktický význam FKEY - n,string definice klíčů F1:F10 FREQ - n zapne tón f~n, n=0 vypíná, jen v módu 700 BVPOKE - n1,n2,n3,n4,n5,n6,n7 přenos ze znakového generátoru od kódu n5 do čtverce n1xn2 na na souřadnice n3,n4, barvy n6,n7 SHARP - n 0 - CENTRONIX, 1 - MZ Printer LOCK - n$ blokování proti zápisu UNLOCK - n$ odblokování proti zápisu EXEC - n$ nahraje soubor n$ a spustí ho (stroják, ne BASIC) CURX# - | CURY# - | vrací pozici kursoru ERRN# - číslo chyby při běhu programu ERRADR - adresa chyby při běhu programu MAXADR - adresa posledního bytu programu +1 SIZE - velikost volné paměti RND! - náhodná čísla <0,1> TIME - časv sekundách TI$ - čas v hhmmss PI! - číslo pí TRUE# - | 255 FALSE# - | konstanty 0 ERRDEV# - číslo zařízení, které způsobilo chybu (5 - F1, 6 - - F", 15 - R) MZ800# - test, zda se jedná o počítač MZ 800 KEYP# - test stisku klávesy (0 - není, 255 - je) FADR - | FSIZE - | FEXADR - | údaje o souboru FTYPE# - | FNAME# - | VR32# - test, je-li připojená VRAM 32K LEFT$ - (string,n) RIGHT$ - (string,n) MID$ - (string,n1,n2) n2 znaku počínaje n1 POS# - (string1,string2,n) hledá string1 ve stringu2 od znaku n, n je volitelné POINT# - (n1,n2) opak PLOT, funguje v obou módech STRING$ - (n,string) n-násobné opakování řetězce HEX$ - | BIN$ - | převod čísel na stringy DEC$ - | MOD% - | MOD! - | MOD (a,b) počítá a mod b MOD - | ODD# - test na lichost parametru STR$ SPC$ - mezery, počet daný parametrem VAL# VAL% VAL! VAL PEEK# PEEK% PEEK! PEEK$ - viz POKE$ PEEK CONV# - | CONV% - | CONV! - | konverze CONV$ - | CONV - | CHR$ ADRS - (prom) vrací adresu proměnné HB# - vyšší byte 16-ti bitového čísla bez znaménka LB# - nižší byte 16-ti bitového čísla bez znaménka LEN# ASC# ADRSL - vrací adresu návěští VPEEK - n1,n2 udává videokód na n1, n2 (jen v módu 700) SGN# MULT2# - n*2 DIV2# - n/2 JOY# - čtení směru joysticku 1,2, směr 1 vpravo, dále proti směru hodin FIRE# - čtení firu joysticku SGN SQR MULT2 DIV2 SGN% ABS% SQR% MULT2% DIV2% SGN! ABS! INT! - nejmenší celé číslo CUT! - odřízne desetinnou část SQR! - 2. mocnina SQRT! - 2. odmocnina LN! LOG! EXP! SIN! DSIN! - počítá ve stupních COS! DCOS! - počítá ve stupních TAN! DTAN! - počítá ve stupních ATN! DATN! - počítá ve stupních ROUND! - zaokrouhlí na celé číslo POW10! - mocnina 10 RAD! - převod stupňů na rad DEG! - převod rad na stupně MULT2! DIV2! UP$ - převede text na velká písmena LOW$ - převede text na malá písmena Povely monitoru ---------------- C[n] - change line (implicitně 1) D[n1[,n2]] - delete line F[n1,n2]"text" - find text I[n] - insert line (vkládá před n, implicitně 29 poslední řádek) L[n1[,n2]] - list Nn - page len, n>10 (pro tiskárnu), n... dekadicky P+Sn1,n2...n5 - nastavení kódů pro odstránkování, počet 0 až 5 v hexa P+Bn1,n2...nj - vysílá kódy přímo na tiskárnu P+X - typ tiskárny CENTRONIX P+P - typ tiskárny MZ P:povel - výstup povelu na tiskárnu Q - quit S - status list - vypisuje - volnou paměť pro BASIC program (zdroják) - page len (viz povel N) - skip kódy (odstránkování viz P+S) - počet bytů vyhrazených pro zásobník ST n - nastaví počet bytů pro zásobník (n - hexa) Tn1,n2,n3 - přesune n1-n2 před n3 V4 - 40 znaků na řádek V8 - 80 znaků na řádek J - přeloží a spustí přeložený program JT - přeloží a nespustí přeložený program JSRjm.zař."name" nahraje knihovnu (!!v paměti nesmí být program) JS - nahraje vlastní odladěný strojový program !!! po tomto povelu je poničen vlastni editor) Xod - o operace d zařízení disková verze : d=R, F1, F2, F3, F4 pro R : S, D, K, R, X, L, F pro F : S, B, D, K, R, P, U, X, L, F kazetová verzr : d=R, C1, C2, C3 pro R : stejně jako u diskové verze pro C : S, V, L, X, D S....save [n1[,n2]]"name" B....save [n1[,n2]]"name", pokud existuje, přepíše (S hlásí chybu) D....directory K....kill "name" smazání souboru R....rename "staré jméno"="nové jméno" P....protect "name" blokování proti zápisu U....unprotect "name" odblokování proti zápisu X...."name" spustí program OBJ L...."name" LOAD F....format, viz povel INIT v BASICu V....verify (jen pro kazetovou verzi) Ovládací klávesy (jen pro kazetovou verzi) ------------------------------------------ šipka vpravo, vlevo - posun kursoru SHIFT šipka vpravo, vlevo - posun kursoru na konec, začátek řádky šipka nahoru - o 4 znaky vpřed šipka dolu - o 4 znaky vzad SHIFT šipka nahoru - výmaz do konce řádky SHIFT šipka dolu - výmaz celé řádky TAB - tabelátor INST - mód insert/overwrite (na začátku editace je overwrite) NIC (nad CR) - výmaz znaku před kursorem, posun kursoru vlevo DEL - výmaz znaku pod kursorem F1 až F5, SHIFT F1 až F5 - funkční klíče 1 až 10 ESC - ESCAPE Řídící kódy (pro print, nebo i z klávesnice) -------------------------------------------- ESC R0....US ASCII ESC R1....US ASCII ESC R2....Deutsch. ESC R3....UK ASCII ESC lomená závorka....Normal ESC vlnovka....Inverse ESC E ....zvýrazněné písmo (jen v módu 800) ESC F ....normální písmo (jen v módu 800) ESC-0 ....nepodtrhává (jen v módu 800) ESC-1 ....podtrhává (jen v módu 800) 03....CR, LF 04....šipka vpravo 05....šipka nahoru 07....BELL 09....TAB 0A....šipka dolu 0C....CLS 0D....CR, LF 13....= 18....šipka dolu 1A....CLS 1B....ESC 1D....HOME 1E....není-li kursor na 1. pozici řádku - CR, LF Pro kazetovou verzi platí : --------------------------- "?name" prohlíží kazetu, vypíše jména nalezených prog. na obrazovku a pokud souhlasí jméno programu, tak jej nahraje "*name" to samé, ale nevypisuje nic na obrazovku "?" nebo "*" nahraje první co najde na kazetě "name" nahraje program uvedeného jména, ale hlásí chybu, že soubor nebyl nalezen, pokud nesouhlasí název u 1. nalezeného programu Kódy čtené z klávesnice ----------------------- (GET v BASICu) TAB....09 NIC....11 CR ....0D ESC....1B INS....16 DEL....07 CLR....0C BRK....03 HOME...1D šipka vlevo....13 šipka vpravo...04 šipka nahoru...06 šipka dolu.....01 SHIFT šipka vlevo....05 SHIFT šipka vpravo...18 SHIFT šipka nahoru...17 SHIFT šipka dolu.....1A Chybová hlášení --------------- (z proměnné ERRDEF*) 1) Editor 2) Compiler 3) Tiskárna 6 až 9 Disky nebo Kazety (čtyři) 15)RAM DISK 18)??? (vadná grafická operace) 19)Chyba ve strojáku (přetečení) 20)??? (z proměnné ERRN*) 0 BRK break 1 S syntax error 2 V value error (chyba hodnoty) 3 SYMNE symbol not existing 4 LNE line not existing 5 MCAP memory capacity 6 MPRO memory protection 7 STRL chyba v délce stringu 8 SYMSTCAP plná tabulka symbolů 9 LD load error 10 SV save error 11 VER verify error 12 STYP file typ error 13 SNE file not found 14 SAE file už existuje 15 NSP není místo na FD 16 NE not existing u Ram Disku 17 NFRM není naformátováno 18 WPRO write protection 19 TMF plný adresář 20 DVNE chybné zařízení 21 CHK check error (možná u Ram Disku) 22 HRD hardware error 23 NRED not ready 24 MOD chyba módu (např. graf. mód u 700 režimu) 25 STO stack overflow 26 CMSQ command sequence (např. se přehází cykly) 27 STYP ??? 28 O overflow 29 SYMDD druhá definice symbolu 30 NES neexistující struktura (jako chyba sekvence) 31 RD ??? 32 TYPM type mismatch 33 A přetečení indexu polí 34 LCK vadný adresář u disků 35 DSKTYP disk typ error (kontroluje jestli je 1. soubor BASIC) 36 NPRTN číslo chyby mimo výše uvedenou oblast (1 až 35)