Obsah této stránky: |
*************************
** **
** Vše o MZ - 800 **
** **
*************************
BASIC MZ-800
Tento BASIC je ve dvou verzích, pro Q-disk a pro CMT. Zásoba povelů obou verzí
BASICu je stejná. Ve verzi pro CMT jsou chyby, které byly ve verzi pro Q-disk
opraveny. Také kapacita paměti u obou verzí je stejná. Jestliže máte možnost se
dostat k verzi pro Q-disk, potom vám radím používat tuto verzi přetočenou na
kazetu. Proto již 100% nesouhlasí jednotlivé adresy programů. Jedině prvních 8 KB je
stejných. My se zde budeme zabývat hlavně Q-disk verzí.
Další povely BASICu
V BASICu MZ-800 jsou k dispozici další povely, které nejsou nikde uvedeny. Pro
přehlednost jsou zde vyjmenovány a krátce vysvětleny.
BEEP - písknutí (440 Hz)
EDIT - vypíše naposledy zpracovávané číslo řádky. Je také možno psát EDIT n
.
FRAC - vypíše desetinou část desetinného čísla A=FRAC (12.345) => PRINT A
=> .345
HEX$ (x) - převod dekadického čísla (x) na hexadecimální
MOD - modulo dělení. Vypíše celočíselný zbytek při dělení. B=11 MOD 3 =>
PRINT B => 2
SPÁCE$ - vytvoří prázdný řetězec znaků.
LOAD ALL - tento příkaz provede nahrátí všech programů na Q-disku do RAM-disku.
Tam se mohou snadno provést příkazy RENAME nebo DELETE.
SAVE ALL - teto příkaz provádí nahrátí všech programů z RAM na Q-disk.
Úprava klávesnice - psací stroj
MZ-800 nemá na klávesnici žádné zvláštní klávesy pro přehlásky a německé
znaky. to bude nepříjemné především pro ty uživatele, kteří často používají
mikropočítač pro zpracování textů a dat. Zvláštní znaky a přehlásky
jsou uloženy ve znakovém generátoru a nechají se nadefinovat místo funkčních
kláves F1 - F10.
10 DEF KEY (1) = CHR$ (187): REM ü
20 DEF KEY (2) = CHR$ (186): REM o
20 DEF KEY (3) = CHR$ (173): REM u
30 DEF KEY (4) = CHR$ (174): REM
40 DEF KEY (6) = CHR$ (185): REM A
50 DEF KEY (7) = CHR$ (168): REM O
60 DEF KEY (8) = CHR$ (178): REM U
Tímto krátkým programem se nadefinují přehlásky na funkční klávesy.
Ukládání programu v BASICu do paměti (TOKEN)
Program v BASICu se neukládá do paměti tak, jak je zobrazen
na obrazovce, nebo jak se vkládá, ale interpret BASICu má pro
každý příkaz číslo, kterému se říká kód. Podle tohoto kódu může
potom interpretr s pomocí tabulky zjistit, o jaký příkaz se jedná. Výhoda je jasná. Místo aby si např. pro příkaz -RESTORE-
pamatovat 7 naků, stačí aby si pamatovat pouze dva znaky (kod),
čímž je malá spotřeba paměti.
Příkazy BASICu MZ - 800
V této části si zopakujeme všechny příkazy BASICu, jejich
zápis v kódu, přípustné zkratky a začátek programů v paměti.
Koho by toto zajímalo, může si pomocí DISASSEMBLERu tyto programy
(tabulky) prohlédnout, nebo i pozměnit. Kódy se rozdělují do tří skupin. V jedné skupině jsou příkazy, které nepotřebují žádný před-byt. Ve zbývajících skupinách
jsou příkazy, které tento byt obsahují. Známe dva druhy 254 (FEh)
a 255 (FFh). Na druh příkazu to nemá vliv. Mezi příkazy se vyskytují kódy, které nejsou obsazeny. Tyto
jsou v naší tabulce označeny jako "frei" (volné) a způsobují
přímo skok do podprogramu, který vydává chybové hlášení "Syntax
Error. Tento program začíná u obou verzí BASICu na adrese 6364h.
příkaz zkratka TOKEN QD-BASIC CMT-BASIC
------------------------------------------------------------
GOTO G. 128 69AF 69AF
GOSUB GOS. 129 692A 692A
volný 130 6364 6364
RUN R. 131 606E 606E
RETURN RE. 132 68F9 68F9
RESTORE RES. 133 6E9E 6E9E
RESUME RESU. 134 64B6 64B6
LIST L. 135 6A9D 6A9D
volný 136 6364 6364
DELETE D. 137 620C 620C
RENUM REN. 138 62AB 62AB
AUTO A. 139 60CA 60CA
EDIT E. 140 6125 6125
FOR F. 141 6602 6602
NEXT N. 142 6609 6609
PRINT P. 143 6C9F 6C9F
volný 144 6364 6364
INPUT I. 145 6DD4 6DD4
volný 146 6364 6364
IF 147 69C2 69C2
DATA DA. 148 67FE 67FE
READ REA. 149 6DCD 6DCD
DIM DI. 150 8DCC 8D55
REM 151 67FE 67FE
END EN. 152 60B9 60B9
STOP S. 153 6468 6468
CONT C. 154 6499 6499
CLS CL. 155 7972 78FB
volný 156 6364 6364
ON. O. 157 6952 6952
LET LE. 158 650D 650D
NEW 159 618E 618E
POKE PO. 160 68A1 68A1
OFF OF. 161 6364 6364
PMODE PM. 162 A015 9F9E
PSKIP PS. 163 A07A A003
PLOT PL. 164 A428 A3B1
PLINE PLI. 165 A0BC A045
RLINE RL. 166 A0BE A048
PMOVE PMOV 167 A0C2 A04B
RMOVE RM. 168 A0C5 A04E
TRON T. 169 61CC 61CC
TROFF TROF. 170 61DF 61DF
INP 171 681F 681F
DEFAULT DEF. 172 6F41 6F41
GET GE. 173 686C 686C
PCOLOR PC. 174 A12A A0B3
PHOME PH. 175 A15F A0E8
HSET H. 176 A162 A0EB
GPRINT GP. 177 A16D A0F6
KEY K. 178 6B84 6B84
AXIS AX. 179 A1D5 A15E
LOAD LO. 180 6FFD 6FFD
SAVE SA. 181 73C0 733F
MERGE M. 182 7068 7068
CHAIN CH. 183 7053 7053
CONSOLE CONS. 184 6A61 6A61
SEARCH SE. 185 6A9B 6A9B
OUT OU. 186 6B0A 6B0A
PCIRCLE PCI. 187 A215 A19E
PTEST PT. 188 A3F3 A36C
PAGE PA. 189 A3F1 A37A
WAIT W. 190 67EE 67EE
SWAP SW. 191 74A6 7425
volný 192 6364 6364
EROR ER. 193 63F8 63F8
ELSE EL. 194 69E4 69E4
USR U. 195 67A4 67A4
BYE B. 196 6A59 6A59
volný 197 6364 6364
volný 198 6364 6364
DEF 199 6C31 6C31
volný 200 6364 6364
volný 201 6364 6364
LABEL LA. 202 67FE 67FE
volný 203 6364 6364
volný 204 6364 6364
volný 205 6364 6364
WOPEN WO. 206 6F59 6F59
CLOSE CLO. 207 6F8A 6F8A
ROPEN RO. 208 6F56 6F56
XOPEN X. 209 6F5C 6F5C
volný 210 6364 6364
volný 211 6364 6364
volný 212 6364 6364
DIR 213 742A 73A4
volný 214 6364 6364
volný 215 6364 6364
RENAME REN. 216 744B 73CA
KILL KI. 217 6F8B 6F8B
LOCK LOC. 218 7418 7397
UNLOCK UN. 219 7416 7395
INIT INI. 220 6F47 6F47
volný 221 6364 6364
volný 222 6364 6364
volný 223 6363 6364
volný 254 128 6364 6364
CSET CS. 254 129 6364 6364
CRESET CR. 254 130 6364 6363
CCOLOR CC. 254 131 6364 6364
volný 254 132 6364 6364
volný 254 133 6364 6364
volný 254 134 6364 6364
volný 254 135 6364 6364
volný 254 136 6364 6364
volný 254 137 6364 6364
SOUND SO. 254 138 9BAC 9B35
volný 254 139 6364 6364
NOISE NO. 254 140 9BE3 9B6C
BEEP BE. 254 141 6A56 6A56
volný 254 142 6364 6364
volný 254 143 6364 6364
COLOR COL. 254 144 7675 760B
volný 254 145 6364 6364
SET 254 146 7592 752B
RESET RESE. 254 147 7593 7529
LINE LIN. 254 148 75A1 7537
BLINE BL. 254 149 75A2 7538
PAL 254 150 7619 75AF
CIRCLE CI. 254 151 774C 76DE
BOX BO. 254 152 764B 75DE
PAINT PAI. 254 153 76FD 768F
POSITION POS. 254 154 75F5 758B
PATTERN PAT. 254 155 75C4 755A
HCOPY HC. 254 156 7968 78F1
volný 254 157 6364 6364
volný 254 158 6364 6364
volný 254 159 6364 6364
SYMBOL SY. 254 160 790F 78A1
volný 254 161 6364 6364
MUSIC MU. 254 162 9BE6 9B6F
TEMPO TE. 254 163 9BD9 9B62
CURSOR CU. 254 164 683B 683B
VERIFY V. 254 165 73A9 7328
CLR 254 166 619B 619B
LIMIT LIM. 254 167 68B5 68B5
volný 254 168 6364 6364
volný 254 169 6364 6364
volný 254 170 6364 6364
volný 254 171 6364 6364
volný 254 172 6364 6364
volný 254 173 6364 6364
BOOT BOO. 254 174 6A95 6A95
INT 255 128 95C2 954B
ABS AB. 255 129 95BD 9546
SIN SI. 255 130 9709 9692
COS 255 131 96F9 9682
TAN 255 132 97E8 9771
LN 255 133 9A4F 99D8
EXP EX. 255 134 992B 98B4
SQR SQ. 255 135 961F 95A8
RND RN. 255 136 98E6 986F
PEEK PE. 255 137 98DA 9863
ATN AT. 255 138 963D 95C6
SGN SG. 255 139 98A0 9829
LOG 255 140 9A43 99CC
FRAC FR. 255 141 7BC0 7B49
PAI 255 142 98B8 9841
RAD RA. 255 143 98B3 983C
volný 255 144 6364 6364
volný 255 145 6364 6364
volný 255 146 6364 6364
volný 255 147 6364 6364
volný 255 148 6364 6364
volný 255 149 6364 6364
volný 255 150 6364 6364
volný 255 151 6364 6364
volný 255 152 6364 6364
volný 255 153 6364 6364
volný 255 154 6364 6364
volný 255 155 6364 6364
STICK STI. 255 156 9060 8FE9
STRIG STR. 255 157 907F 9008
volný 255 158 6364 6364
volný 255 159 6364 6364
CHR$ CHR. 255 160 889F 88BA
STR$ 255 161 8931 8879
HEX$ HE. 255 162 88F0 88F0
volný 255 163 6364 6364
volný 255 164 6364 6364
volný 255 165 6364 6364
volný 255 166 6364 6364
volný 255 167 6364 6364
SPACE$ SPA. 255 168 8913 889C
volný 255 169 6364 6364
volný 255 170 6364 6364
ASC AS. 255 171 8992 891B
LEN 255 172 899C 8925
VAL VA. 255 173 89A4 892D
volný 255 174 6364 6364
volný 255 175 6364 6364
volný 255 176 6364 6364
volný 255 177 6364 6364
volný 255 178 6364 6364
ERN 255 179 887A 8803
ERL 255 180 8888 8811
SIZE 255 181 8852 87DB
CSRH CSR 255 182 8864 87ED
CSRV 255 183 8869 87F2
POSH 255 184 886E 87F7
POSV 255 185 8874 87FD
LEFT$ LEF. 255 186 89B6 893F
RIGHT$ RI. 255 187 89D3 895C
MID$ MI. 255 188 89F0 8979
volný 255 189 6364 6364
volný 255 190 6364 6364
volný 255 191 6364 6364
volný 255 192 6364 6364
volný 255 193 6364 6364
volný 255 194 6364 6364
volný 255 195 6364 6364
TI$ TI. 255 196 8A46 89CF
POINT POI. 255 197 896C 88F5
EOF EO. 255 198 893F 88C8
FN 255 199 8FBF 8F48
volný 255 200 6364 6364
volný 255 201 6364 6364
volný 255 202 6364 6364
volný 255 203 6364 6364
volný 255 204 6364 6364
volný 255 205 6364 6364
volný 255 206 6364 6364
Celkový přehled BASICu MZ - 800
Na následujících stránkách si popíšeme obě verze BASICu.
0000 - RAM - monitorová tabulka pro skok na 005A.
005B - Tabulka s počátečními adresami CTRL programy (řídící programy) až po 009A. Následuje příslušný program.
00DA - Zde začíná BASIC.
017C - Tabulka s počátečními adresami různých programů až do 022A.
0247 - Hexadecimální hodnota v registru HL se ukládá v decimálním ASCII formátu do registru DE.
02F8 - Zde se zkoumá, zda byla stisknuta prázdná klávesa (mezerník). Jestli-že ano, čeká se až bude stisknuta jiná klávesa.
0305 - Bude-li stisknuta klávesa BREAK, program bude přerušen.
0314 - Zde jsou krátké programy pro vedení ukazatelů pro proměnné a pro oblast řetězců.
0340 - Chybový text se zde převádí na srozumitelný text podle čísla chyby v akumulátoru.
03BE - Určuje způsob provozu obrazovky a zkoumá se připojení přídavné paměti VRAM.
0419 - Zde se nacházejí různé programy, které inicializují paletové registry a určují oblast přetáčení obrazu.
04EF - Až po 05AC jsou programy,které přestavují obrazovku na 40 nebo 80 znaků na řádek a mění ostatní programy odpovídajícím způsobem.
05AD - Tento program vypíše znak v akumulátoru na obrazovku.
0652 - Podprogram smaže celou obrazovku (CLS).
06CC - Podprogram maže znak na pozici kursoru.
0848 - Posouvá oblast přetáčení o jeden řádek nahoru.
0992 - Tento podprogram přemístní kursor do levého horního rohu obrazovky (HOME)
099B - Podprogram způsobí posun řádky, jestliže kursor nestojí na začátku řádky.
09AB - Podprogram způsobí v každém případě posun o řádek.
0A19 - Nastavení klávesnice - ALPHA mód.
0A1B - Nastavení klávesnice - psaní malých písmen.
0A1E - Nastavení klávesnice - GRAPH módu.
0A24 - Posun kursoru na pozici dalšího tabulátoru.
0AB4 - Program vyzvedne řádku z klávesnice a uloží ji od adresy DE.
0B21 - Program vyzvedne znak z klávesnice. Kursor přitom bliká. Znak se při skoku zpět nachází v akumulátoru.
0BF6 - Testuje se klávesnice. Není-li stisknuta žádná klávesa, v akumulátoru je nula (00), v opačném případě hodnota příslušné klávesy v ASCII kódu.
0C7C - Testuje se stisknutí funkčních kláves. V HL je uloženo která klávesa byla stisknuta.
0D22 - Testuje se klávesnice. Při stisknutí SHIFT+BREAK se nastaví přepínač na 0. Byl-li stisknut jen BREAK, čeká se tak dlouho dokud se opět nepustí.
0D47 - Zde začínají tabulky k přepočtu kódu kláves.
0D94 - Program vypisuje na obrazovku text, který je od adresy DE. Konečná značka textu musí být 0DH
0DC3 - Tabulka malých písmen ve video kódu
0E17 - Od této adresy jsou tiskové programy pro výpis na obrazovku nebo tiskárnu. Tyto programy sahají až po 0ED8.
0ED9 - V této tabulce se převádějí řídící znaky pro tiskárnu.
0EF9 - K této adrese přijdou skoky z ROM monitoru zpět do BASICu. Program, který je k dispozici se nesmaže.
0F4E - Program testuje, zda VRAM paměť obsahuje 32 Kb. Jestli-že ano, pak se na adrese 1D99 zapíše 01H
12B2 - Od této adresy leží text funkčních kláves.
13D2 - Tabulka, která přepočitává SHARP kód na ASCII a zpět.
15E0 - Tabulka udává povely monitoru a jejich počáteční adresy.
D DUMP 16C6
M MEMORY CORECTION 1738
P PRINTER 15FE
G GOTO 16C1
F FIND 175C
R RETURN (BASIC) 1644
S SAVE 1607
L LOAD 161E
V VERIFY 163B
T TRANSFER 17AC
2000 - Od této adresy až do 27D0 je celý obsah obrazovky. Při 40 znacích je potřeba jen polovina této paměti (23E7). Může být ale pouze čtena, například pro výpis na tiskárnu. Zápis do této oblasti nemá žádný vliv na obraz obrazovky.
Po těchto programech začíná vlastní BASIC, tj. všechny povely atd.
Protože BASIC je velmi rozsáhlý a podporuje různé podprogramy, nebudeme se jím zde zabývat, protože k tomuto účelu je podrobnější
literatura.
Rozšíření BASICu
V následující části vám chceme ukázat, jak můžete program
měnit. K tomuto účelu jsme napsali několik malých programů ve
strojovém jazyce, které BASIC modifikují. Protože existují dvě
verze BASICu, (kazetová a Q-disk verze), napsali jsme je pro obě
dvě. Rozšíření nepotřebuje žádné přídavné místo v paměti, protože
se používají oblasti, které jsou volné v samotném BASICu.
1. BORDER - barva okraje (BOR.)
Pomocí tohoto povelu si můžeme nadefinovat barvu okraje
obrazovky. Za povelem BOR. musí být konstanta, proměnná nebo
funkce. Konstanta barev nabývá hodnotu 0 - 15 , což odpovídá
tabulce v SHARP manuálu.
pro kazet. verzi BASICu (dále jen, pro CMT)
POKE 23017, 66,79,210
POKE 21936, 205,218,132,123,1,207,6,237,121,201
POKE 23709, 176,85
pro Q-disk verzi BASICu (dále jen, pro Q-disk)
POKE 23017, 66,79,210
POKE 21913, 205,81,133,123,1,207,6,237,121,201
POKE 23709, 153,85
2. SEARCH, LIST - s prázdnou řádkou
Tento povel přidá za každou řádku jednu řádku prázdnou. To
usnadňuje především u delších programů lepší přehlednost.
pro CMT
POKE 21946, 58,131,107,205,6,0,201
POKE 27424, 205,146,85
pro Q-disk
POKE 21906, 58,131,107,205,6,0,201
POKE 27424, 205,146,85
prázdná řádka se zapíná - POKE 21909, 205
vypíná - POKE 21909, 201
3. Pípnutí při READY
Podprogram vytvoří při každém zobrazení READY ještě krátké
pípnutí. Tím máte ještě akustickou kontrolu. To má smysl hlavně
při dlouhých programových výpočtech, nebo při nahrávání.
pro CMT
POKE 21953, 205,62,0,17,240,99,201
POKE 22650, 205,193,85
pro Q-disk
POKE 21899, 205,62,0,17,240,99,201
POKE 22650, 205,139,85
4. Zakázané zastavení pomocí BREAK
Tento POKE zakáže použití příkazu BREAK. Program se nedá
zastavit.
pro CMT + Q-disk
POKE 3368, 201
- zastavení je zakázané
POKE 3368, 200 - zastavení je povoleno
5. Zakázané přerušení pomocí SHIFT / BREAK
Tento POKE zakáže přerušení programu pomocí SHIFT / BREAK.
pro CMT + Q-disk
POKE 22754, 62 - přerušení je zakázané
POKE 22754, 202 - přerušení je povoleno
6. Změna kursoru v ALPHA módu
Pomocí tohoto POKE se může změnit zobrazení kursoru v ALPHA
módu. Může být též zabudován do vlastních programů.
pro CMT a Q-disk
POKE 5009, 255,255,255,255,255,255,255,255
Toto je normální kursor. Chcete-li ho změnit musíte zadat
vždy všech 8 bytů. Je tedy téměř neomezené množství změn kursorů.
Kursor se tvoří stejně jako PCG znak.
POKE 5009, 255,129,129,129,129,129,129,255
Zde je návrh nového kursoru, vytvoří krabici.
Pozn.: Za touto adresou následuje kursor v SHIFT / ALPHA a GRAPH módu.
7. Možnosti ochrany programů v BASICu
Tím že programy po nahrátí nejsou automaticky spuštěny,
není v BASICu žádná možnost programy 100% chránit proti nedovolenému kopírování. Přesto existuje možnost programy po spuštění
pomocí RUN chránit. Některé z těchto možností vám zde chceme krátce představit. Pomocí následujících POKE příkazů je BASIC
modifikován takovým způsobem, že některé příkazy nemůže provádět.
pro CMT
ochrana proti SAVE POKE 29503, 201
POKE 29503, 205 původ. nastav.
proti LIST POKE 27293, 201
POKE 27293, 62 původ. nastav.
proti PEEK POKE 39011, 201
POKE 39011, 229 původ. nastav.
proti BYE POKE 27228, 201
POKE 27228, 223 původ. nastav.
pro Q-disk
ochrana proti SAVE POKE 29632, 201
POKE 29632, 205 původ. nastav.
proti LIST POKE 27293, 201
POKE 27293, 62 původ. nastav.
proti PEEK POKE 39130, 201
POKE 39130, 229 původ. nastav.
proti BYE POKE 27228, 201
POKE 27228, 223 původ. nastav.
Pozn.: Tato ochrana je nedostačující. Jednoduší je chránit program proti zastavení, blokováním BREAK při běhu aINPUT, ošetření chyb a úpravou CTRL+RESET
8. Odstranění otazníku při INPUT
Především při obchodním použití bývá často otazník, který
se zobrazuje při příkazu INPUT X považován za rušivý.
pro CMT a Q-disk
POKE 28213, 0,0
POKE 28213, 63,32 - vymazání otazníku
POKE 28213, 32,58 - bude psát dvojtečku
Pozn.: Provedete-li INPUT "";X otazník tištěn není. Otazník se vytiskne pouze při neodeslání čísel.
9. CONSOLE bez mazání obrazovky
Jistě jste si všimli, že při provádění příkazu CONSOLE se
nejprve smaže obrazovka a pak se teprve provede CONSOLE. Často by bylo vhodné, aby zbytek obrazovky zůstal zachován.
Je možné provádět CONSOLE i bez předchozího smazání obrazovky. Ale pozor, musí se opatrně aby nebyl obraz na obrazovce
zničen. (Teto postup není příliš korektní, může dělat samovolné
přesuny na obrazovce.)
pro CMT a Q-disk
POKE 1257, 0,0,0 - bez smazání obrazovky
POKE 1257, 205,82,6 - obrazovka se smaže
Prakticky není výhodné v případě, že byl obraz ji SCROLLován.
10. Zrychlené SAVE a LOAD
Pomocí povelů POKE máte možnost zvýšit rychlost nahrávání
a přehrávání o více než dvojnásobnou rychlost. Naše pokusy prokázaly, že se zvýšenou rychlostí nezhoršila spolehlivost záznamu.
Také příkazy WOPEN a ROPEN jsou zrychleny. Samozřejmě je také možnost staré, pomalé nahrávky převzít
do nového formátu. K tomu potřebujete POKE aktivovat až po nahrátí. Nové rychlé nahrávky nemohou být náhrány bez rozšířeného
BASICu a naopak.
pro CMT a Q-disk
Rychlé SAVE, LOAD Normální SAVE, LOAD
----------------- -------------------
POKE 15249, 35 POKE 15249, 76
POKE 15255, 11 POKE 15255, 24
POKE 15259, 49 POKE 15259, 105
11. Zlepšený příkaz TRON
Jistě jste si již všimli, že povel tron je v BASICu 800
naprogramován poněkud nedostatečně. A tak je například těžké
hledat chybu v programu, když je obrazovka stále popsána čísly. My jsme povel TRON modifikovali tak, že je nyní možné zobrazovat
číslo řádky stále v levém horním rohu. Vlastní stavba obrazovky tím zůstává zachována a je jednoduší program sledovat.
Stisknutím BREAK můžeme být průběh programu ještě zpomalen.
por CMT
POKE 22400, 42,134,16,229,42,130,16,229,33
POKE 22409, 0,0,34,130,16,33,0,128,34,134
POKE 22421, 218,157,205,33,
POKE 22425, 121,223,11,6,5,62,32,205,18,0,16,249,225,34
POKE 22439, 130,16,225,34,134,16,195,6,98
Tento program je nový TRON program.
spustí se POKE 25078, 195,128,87,
starý TRON prog.(pro tisk) POKE 25078, 62,91,223
pro Q-disk
POKE 22421, 81,158,205,152