-- 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 --