-- SORD m.5 ------------------------------------------------------------------
1. Uvod
*************
Tato prirucka obsahuje seznam prikazu a funkci jazyka BASIC-I s jejich blizsim
vysvetlenim. BASIC-I je dlouhy 8kB a muze byt obsazen v pameti PROM nebo EPROM
osazene v modulu BASIC-I nebo na desce pocitace, nebo muze byt zaveden do pa-
meti RAM ( v modulu 64kB RAM ). Jazyk BASIC-I sestava z programu ve strojovem
kodu od adresy &2000 do adresy &3FFF.
2. Specifikace jazyka
***************************
Programovaci jazyk BASIC-I je urcen pro zacatecniky. Seznamuje se zakladnimi
vlastnostmi jazyka BASIC a naznacuje dalsi moznosti pocitace. Lze vyuzivat
celociselnou aritmetiku, sprajty ( nepohyblive ), hudebni generator i vsechny
dalsi funkce, ktere maji jazyky BASIC-G a BASIC-F, je vsak nutne pouzivat pri-
kazy POKE, CALL a OUT, to znamena vedet, kde se v systemu co nachazi ( nejlepe
je mit prirucky SYSVAR a SYSSUB ).Oproti jazykum BASIC-G a BASIC-F je treba si
uvedomit, ze pri vykonavani prikazu INPUT nemuze nastat chyba "Err 25 in xxx".
Prikaz INPUT si pri odeslani prazdne polozky nebo pri chybnem zadani dat data
opetovne vyzada ( zobrazi "??" ).
3. Prikazy jazyka
***********************
$<label name>
Prirazuje radce jmeno. Delka navesti muze byt maximalne 32 znaku.
AUTO [<first line number>][,<increment>]
Automaticke cislovani redek pri tvorbe programu od cisla zvoleneho 1 para-
metrem, s krokem urcenym druhym parametrem. Neuvedeny parametr = 10. Zrusit
prikaz lze bud odeslanim prazdneho radku nebo stiskem <SHIFT>+<RESET>.
CALL <assembler program address>
Provede skok na urcenou adresu do programu ve strojovem kodu.
CLEAR [<work field>][,<last user field>]
a) bez parametru smaze obsah vsech promennych
b) prvni prarametr vyhrazuje uzivatelsky prostor pro provadeni nekterych
basickych operaci, jehoz velikost musi byt alespon 256. Stavajici velikost
lze zjistit funkci FRE(0).
c) druhy parametr urcuje nejvyssi adresu RAM, dosazitelnou pro basic. Od na-
sledujici adresy lze ulozit data nebo program ve strojovem kodu, aniz by
hrozilo jejich poskozeni cinnosti systemu ( viz FRE(4) ).
Je nutne zadat prikaz bud bez parametru nebo s obema parametry.
CLS [<initialize code>]
Provede smazani obrazovky. Uvede-li se za prikazem cislo v rozsahu 0 - 255,
zaplni se obrazovka znaky, jejichz ASCII kod odpovida danemu cislu.
CONT
Pokracovani behu programu, byl-li pred tim zastaven pomoci prikazu STOP
v programu, nebo stiskem <CTRL>+<RESET>.
DATA <constant>[,..]
Ciselna i retezcova data ulozena v programu. Viz READ, RESTORE.
DEL [<line number 1>][,<line number 2>]
Prikaz smaze programove radky v uvedenem rozsahu.
DIM <array name>(<array size>[,..])[,..]
Provadi dimenzovani ciselneho nebo retezcoveho pole ( nebo matice ). Jmeno
pole je uvedeno primo, pocet dimenzi nesmi byt vetsi nez 255, maximalni
velikost jednoho rozmeru je 65 535. Rozmery zacinaji od 0.
END
Ukoncuje beh programu a maze jeho promenne.
FOR <control variable>=<initial value> TO <final value> [STEP <step value>]
Provadi postupne prirazovani hodnoty od pocatecni ( <initial> ) do koncove
( <final> ) se zvolenym krokem prirustkem hodnot ( <step> ) do promenne uve-
dene za FOR. Kazdy FOR musi mit odpovidajici NEXT. Cykly do sebe lze vnorit,
avsak nesmeji se krizit. Pri vypoctu se porovnavaji hodnoty v desitkove sou-
stave, nelze tedy pouzit cykl FOR I=&7FF0 TO &8010 .. NEXT I, protoze deka-
dicky je &7FF0 vetsi nez &8010.
GOSUB { <line>/<destination> }
Skok do podprogramu. Misto skoku je urceno bud primo cislem radku, kde pod-
program zacina, nebo navestim ( $ ), pro navrat do hlavniho programu slouzi
prikaz RETURN.
GOTO { <line>/<destination> }
Prikaz skoku. Vykonavani programu pokracuje na uvedene radce.
CHAIN [<file name>]
Nahraje program v jazyce BASIC-I jako pri OLD a spusti jej jako po RUN.
IF <conditional expression> THEN <statement>[:..][ ELSE <statement>[:..]]
Podminka. Prikazy za THEN se provedou pouze tehdy, je-li logicky vyraz mezi
IF a THEN pravdivy. V opacnem pripade se provedou prikazy za ELSE a pokud
nejsou uvedeny ( bez ELSE ) pokracuje beh programu na dalsi radce. V zadnem
pripade nemohou byt oboje prikazy provedeny zaroven. Jako relacni operatory
( porovnavaci ) lze pouzit: '<' '>' '<=' '>=' '=' '<>'
INPUT [<text>]{,/; }<variable>[,..]
Prikaz pro vstup dat z klavesnice. Je-li za textem pouzita jako oddelovac me-
zera vytiskne se za text otaznik a na obrazovce se objevi kurzor. V jednom
prikazu INPUT lze naplnit nekolik promennych. Pri psani z klavesnice se hod-
noty naplnovanych promennych oddeluji carkami. Data navic se ignoruji, naopak
pri jejich nedostatku je prikaz zopakovan. K nacteni dat dojde po stisku exe-
kucni klavesy <RETURN>.
LET <variable>[,..]=<expression>
Prikaz prirazeni. Prikaz vypocte dany vyraz a jeho hodnotu zapise do promenne
pred rovnitkem. Prikaz LET se nemusi vypisovat ( prikaz A=B+C je ekvivalentni
prikazu LET A=B+C ) ve vypisu je vsude doplnen automaticky.
LIST [<line number 1>][,<line number 2>]
Prikaz k vypsani programu v BASICu na obrazovku. Nepouzita cisla radek jsou
dosazena jako 0 a 32767. Vypis programu na obrazovku lze zastavovat stiskem
<SPACE> a po zastaveni prerusit stiskem <SHIFT>+<RESET>. Prikaz LIST #2 pro-
vede vypis na pripojenou tiskarnu.
LOC <sprite number> TO <GR coordinates x>,<GR coordinates y>
Umisteni spritu na zadane souradnice.
MAG [<sprite modifier>]
Urceni velikosti vsech spritu. Parametr udava:
0 - 8*8 bodu ( normalni velikost jako znaky )
1 - 8*8 bodu dvakrat zvetseno ( jeden bod spritu prekryva 4 body znaku )
2 - 16*16 bodu ( predloha je ulozena ve ctyrech po sobe jdoucich spritech )
3 - 16*16 bodu dvakrat zvetseno
NEW
Provede smazani programu z pameti pocitace. ( Fyzicky prikaz nuluje jenom
prvni dva byte programu a v systemovych promennych nastavi konec programu
a konec promennych na hodnotu zacatku programu. Po omylem zadanem NEW staci
dosadit pomoci prikazu POKE &7383,1 prvni byte a program je mozne listovat
a nekdy i spustit. Editovat jej lze pouze tehdy, obnovime-li puvodni hodnoty
uvedenych systemovych promennych. )
NEXT [<control variable>[,..]]
Uzavreni cyklu FOR .. TO .. . Viz FOR .. .
OLD [<file name>]
Nahraje program nebo data z magnetofonu. Neni-li uvedeno jmeno, nahraje prvni
nalezeny program. Prikaz nahrava jakykoliv spojity soubor typu DATA, tedy i
.VM, .BG, .BF a .FC ( nikoli tedy FILE ).
OUT <port number>,[<output data>[,..]]
Posila data na urceny osmibitovy port. Port je urcen adresou ( 0 - 255 ),
neuvedena data ( z rozsahu 0 - 255 ) se dosazuji jako 0.
POKE <memory address>,<output data>
Uklada do RAM od zadane adresy ciselna data v rozsahu 0 - 255.
PRINT [<expression>[{,/;/ }..]]
Zobrazi data, text, hodnoty promennych a vyrazu na obrazovce. <expression>
muze byt:
text - PRINT "Ahoj!"
cislo - PRINT 54
promenna - PRINT A;A$
vyraz - PRINT 1+7/B-C*LEN(A$)
funkce - PRINT CURSOR(3,4); nebo - PRINT TAB(18);
slozeny - PRINT CURSOR(1,10);"Vysledek nasobeni";A;"*";B;"=";A*B
Oddelovace ";" a "," slouzi k rizeni tisteneho textu. Prikaz PRINT #2 provede
vypis radku na pripojenou tiskarnu.
RANDOMIZE [<numeric value>]
Inicializuje generator nahodnych cisel.
READ <variable list>
Cte ze seznamu data, ktera jsou ulozena na radcich za prikazem DATA. Ukazatel
odkud se maji data zacit cist je urcem prikazem RESTORE nebo po RUN nalezenim
prvnich dat v programu.
REM <character string>
Oddeluje komentare v programu od vlastnich prikazu. Program komentar nijak
nezpracovava.
RESTORE [<line number>]
Prikaz souvisejici s DATA a READ. Pri cteni dat z programu existuje ukazatel,
ktery urcuje, odkud se data prave ctou a timto prikazem lze tento ukazatel
posunout na zacatek jineho radku. Vynechanim parametru se ukazatel umisti
na prvni data v programu.
RETURN [<line number>]
Navrat do vyssi urovne programu z podprogramu. Viz GOSUB.
RUN [<destination>]
Spusti program v BASICu od uvedeneho radku nebo od prvniho radku programu.
SAVE <file name>[,<first address>,<last address>[,<mode>]]
Zaznamena data nebo program na magnetofon. Pouzije-li se SAVE "123456789",
nahraje se program v BASICu s nazvem 123456789. V maximalne devitiznakovem
jmenu programu nebo dat se mohou vyskytovat i ridici kody, ktere se pri zpet-
nem nahravani provadeji. Ostatni parametry se pouziji v pripade zaznamenavani
dat video RAM nebo RAM CPU:
<first> - pocatecni adresa nahravani
<last> - koncova adresa nahravani
<mode> - 0 - .CM
1 - .VM
SCOD <sprite number>,<numeric code>
Definuje tvar spritu podle zadanych parametru:
<number> - cislo spritu 0 az 31
<numeric> - kod predlohy 0 az 255 ( urcuje, kde je v setu 0 nadefinovany za-
dany tvar )
SCOL <sprite number>,<color>
Urcuje barvu spritu. Je-li barva vetsi nez 128, provede se zmena rohove sou-
radnice spritu z leveho horniho rohu na pravy horni roh.
STCHR <pattern code> TO <character code>[,<chracter set number>
Definuje tvar znaku a spritu nebo barev znaku v GII. Parametry:
<pattern code> - retezec hexadecimalnich kodu vyjadrujicich tvar nebo barvu
<character code> - predstavuje cislo znaku kam se ma predloha zapsat
<set> - jeden ze sedmi moznych generatoru tvaru ( a barev ) znaku:
0 - vyhrazen pro predlohy spritu
1 - v GI a T - tvar znaku, v GII - tvar znaku pro horni tretinu obrazovky
2 - v GII - tvar znaku pro stredni tretinu obrazovky
3 - v GII - tvar znaku pro dolni tretinu obrazovky
4 - v GII - barva znaku pro horni tretinu obrazovky
5 - v GII - barva znaku pro stredni tretinu obrazovky
6 - v GII - barva znaku pro dolni tretinu obrazovky
7 - v GII - tvar znaku pro vsechny tretiny obrazovky
8 - v GII - barva znaku pro vsechny tretiny obrazovky.
Nepouzity <set> se dasazuje jako 0.
STOP
Zastaveni behu programu. Pokracovani od mista zastaveni je mozne prikazem
CONT. Po zastaveni se vypise hlaska STOP AT xxx, kde xxx je cislo radku,
na kterem se beh programu zastavil.
TAPE
Nahraje a spusti program ve strojovem kodu.Jmeno lze uvest ale je ignorovano.
Prikaz TAPE neni mozne zrusit.
VERIFY [<file name>]
Kontroluje program zaznamenany na magnetofonu s programem ulozenym v pameti
pocitace. Neni-li uvedeno jmeno, kontroluje prvni nalezeny program. Kontrola
se neprovadi, je-li program typu FILE.
VIEW [<X0>,<Y0>,<X1>,<Y1>]
Nastavi rozmer aktivni casti obrazovky.Po zapnuti je VIEW 0,0,31,23, po prep-
nuti do rezimu TEXT je VIEW 0,0,39,23. Bez parametru nastavi maximalni okno.
VPOKE <memory address>,<output data>
Obdoba prikazu POKE, ale operuje s pameti VRAM. Adresa 0 - &3FFF urcuje misto
ulozeni dat, ktere jsou z rozsahu 0 - 255.
4. Funkce jazyka
**********************
ABS(X)
Vraci absolutni hodnotu cisla ( vyrazu, funkce ) X.
ASCII(X$)
Vraci ASCII kod prvniho znaku retezce X$.
CURSOR(X,Y)
Umisti kurzor na souradnice X,Y. Funkce je soucasti prikazu PRINT.
ERR
Vraci cislo posledni vyskytnute chyby. Nebyla-li, vraci 0.
ERRL
Vraci cislo radku, kde nastala posledni chyba. Nebyla-li, vraci -1.
ERRL$
Vraci navesti radku, kde nastala posledni chyba. Nebylo-li zadne navesti po-
uzito, vraci znak, jehoz kod je 00.
FRE(X)
Vraci informaci o obhospodareni pameti. Parametr X urcuje:
0 - maximalni volno pro uzivatelsky prostor
1 - volno pro program a promenne
2 - volno pro zasobnik a operacni prostor
3 - FRE 1 + 2
4 - posledni adresa dosazitelna systemem BASIC
HEX$(X)
Vraci ctyrznakovy retezec odpovidajici v hexadecimalni soustave cislu X.
CHR$(X)
Opak ASCII. Vraci znak, jehoz kod je hodnota parametru X.
INKEY$
Vraci znak odpovidajici stiskle klavese. Nereaguje na stisk samotne klavesy
FUNC, CTRL, SHIFT a ignoruje RESET. Je-li povolena funkce FUNC vraci pri
stisku <FUNC>+<neco> postupne vsechny znaky dane funkce ci prikazu.
INP(X)
Vraci hodnotu ( 0 - 255 ) ze vstupniho osmibitoveho portu na adrese X.
LEFT$(X$,Y)
Vraci X znaku zleva z retezce X$.
LEN(X$)
Vraci delku retezce X$.
MID$(X$,Y[,Z])
Vraci Z znaku od Y-te pozice z retezce X$. Neuvedene Z je dosazeno jako 1.
NUM$(X)
Vraci retezec odpovidajici obsahem cislu X. Prevadi tak cislo na retezec.
PEEK(X)
Vraci hodnotu odpovidajici obsahu bytu v pameti na adrese X.
RIGHT$(X$,Y)
Obdoba LEFT$, vraci Y znaku zprava z retezce X$.
RND(X)
Vraci nahodne cislo, z intervalu <0,X>, pricemz musi platit X>0.
RPT$(X,Y$)
Vraci X krat retezec Y$.
SGN(X)
Vraci informaci o znamenku cisla X: -1 pro X<0, 0 pro X=0 a +1 pro X>0.
TAB(X)
Lze pouzit v prikazu PRINT. Provede posunuti kurzoru na Xtou pozici od zacat-
ku radku, nelze-li, provede odradkovani.
TIME
Vraci cas ( v sekundach ), ktery uplynul od zapnuti pocitace. Tento cas nelze
zmenit jinak, nez "pouky" do systemovych promennych.
VAL(X$)
Vraci hodnotu prvni konstanty v retezci X$. Napriklad: VAL("18*5") vrati 18.
VPEEK(X)
Vraci obsah bytu pameti VRAM na adrese X.
Poznamka:
---------
Jazyk BASIC-I nema nektere uzitecne prikazy a funkce.Nektere z nich lze nahra-
dit kratkymi podprogramy, napriklad:
GINIT - pro inicializaci jemne grafiky. Je-li potreba obrazovku zaplnit znaky
vsech tri generatoru ( napriklad pro nahrani nejakeho obrazku ) lze prikaz
nahradit:
FOR I=0 TO 767:VPOKE A-I,I MOD 256:NEXT I:FOR I=0 TO &37FF:VPOKE I,0:NEXT I
pricemz pro obrazovku 0 je A=&3AFF a pro obrazovku 1 je A=&3EFF. Prvni cykl
zaplni obrazovku znaky, druhy jim pak priradi prazdny tvar.
RDCHR$ - pro precteni predlohy daneho znaku. Nahradit lze:
10 CLS:INPUT "RDCHR$ ZNAKU" A$:B$=CHR$(34):B=ASCII(A$):A=&2800+8*B
20 PRINT "STCHR ";B$;:FOR I=A TO A+7:PRINT RIGHT$(HEX$(VPEEK(I)),2);:NEXT:
PRINT B$;" TO";B;",1"
pricemz cislo &2800 udava adresu zadaneho generatoru tvaru znaku ( v tomto
pripade generator tvaru znaku obrazovky 0, na ktere je rezim TEXT nebo GI,
nebo generator tvaru znaku stredni tretiny obrazovky, na ktere je GII - viz
kapitola 12. )
LEN X - pro urceni delky retezcovych promennych
POKE &71D7,X , kde X udava maximalni delku retezce. ( X max. 156 )
5. Programovani zvukoveho generatoru
******************************************
5.1. Tonove kanaly
======================
Frekvence kanalu: f=111860/N , kde N je cislo z rozsahu 1 az 1023.
N - delici pomer ( 1 -1023 )
Z - zeslabeni ( 0 - 15 )
K - cislo kanalu ( 0 - 2 )
OUT 32,128+32*K+(N MOD 16)
OUT 32,N/16
OUT 32,144+32*K+Z
5.2. Sumovy kanal
=====================
Pro frekvenci plati:
F = 0 - fo/512
1 - fo/1024
2 - fo/2048
3 - frekvence je odvozena z frekvence druheho kanalu
Z = zeslabeni ( 0 - 15 )
R = rezim 0 - periodicky sum
1 - bily sum
fo = 3,579545 MHz
OUT 32,228+4*R+F
OUT 32,240+Z
6. Pouziti tiskarny
*************************
Prikazy LIST #2 a PRINT #2 provedou tisk na pripojenou tiskarnu. Pocet znaku
ktery se ma vytisknout na jeden radek je dan obsahem systemove promenne
PMXCLM na adrese &705B. Systemova promenna POUTFG na adrese &705C urcuje,
budou-li po prekroceni tohoto cisla vyslany na tiskarnu znaky CR a LF
( carriage return - navrat voziku; line feed - odradkovani ) a ma-li za znakem
CR automaticky nasledovat i LF. ( Podrobneji viz prirucka SYSVAR )
7. Chybova hlaseni jazyka
*******************************
ERR Vyznam Blizsi specifikace
-----------------------------------------------------------------------------
1 FOR - NEXT nespravne razeni NEXTu ve FORech
2 syntaxe neznamy prikaz nebo spatne parametry
3 chyba v rutine CLEAR, GOTO, GOSUB, RETURN
4 chyba pri cteni dat READ, DATA
5 pletete si promenne nevhodna promenna
6 preteceni moc velke cislo
7 neni pamet moc dlouhy program, mnoho promennych, CLEAR
8 neexistujici cislo radku GOTO, GOSUB, RESUME, RESTORE, ( RETURN )
9 chyba v promennych pole mimo rozsah DIM ( 0>X>DIM )
10 chyba poli druhe DIM na teze jmeno
11 deleni nulou
12 chybne pouziti prikazu CONT, poskozeny program, prilis dlouhy radek
13 chybna data zamena ciselne promenne za retezcovou
14 preteceni zasobniku maly pracovni prostor pri operacich s retezci
15 moc dlouhy retezec vice nez 18 znaku, vice nez 256 $
16 chyba poli neexistujici pole
17 dvakrat stejne navesti
18 chyba pri praci s magnetofonem
19 nespravny rezim obrazovky
------------------------------------------------------------------------------
Podle ruznych materialu a
na zaklade vlastnich zku-
senosti sestavil a napsal
LZR Soft. V Kladne 1988.
Vydani druhe,pocet vytisku
dle potreby. Vytisteno na
tiskarne LA120 firmy DEC.
-------------------------------------------------------- pro WWW upravil K5 --