
        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)
