*************************************************** * * * E x t e n d e d B A S I C c o m p i l e r * * * *************************************************** Vážený uživateli , dostává se Ti do rukou dlouho očekávaný kompilátor grafického jazyka BASIC.Jedná se o BASIC kvalitativně vyšší úrovně,než byly prozatím všechny verze tohoto jazyka na počítačích Sharp.Pokud ho chceš efektivně používat,budeš si muset zvyknout na trochu jiný přístup k psaní programů, protože Extended BASIC obsahuje mnoho z filosofie PASCALU,od zápisu programu bez čísel řádků,přes proměnné různých typů až po strukturované příkazy. Než se pustíš do práce,prohlédni si dva krátké demo-prográmky,ukážou Ti, jak na to.První předvádí možnosti znakové 'grafiky' a použití zvukového generátoru ve formě hry.Druhý program využívá spojení jemné grafiky a stro- jového kódu k napodobení 'art studia' a je určen především pro uživatele ovládající alespoň základy strojového kódu.To samozřejmě neznamené,že by ho ostatní nemohli pochopit.Znovu upozorňuji,že oba programy mají posloužit k prvnímu seznámení s kompilátorem a nemají tedy žadný praktický význam. Stručný popis všech příkazů napsal podle mých strohých poznámek Josef Havlíček.Při zjišťování syntaxe a činnosti povelů mi pomáhal Jiří Kepka, na vychytávání much z kazetové verze se vydatně podílel Jaroslav Randa. Již předem se omlouvám za možnost výskytu nejrůznějších chybiček. Nad tímto výtvorem jsem strávil nejednu dlouhou noc a při existenci téměř stovky verzí,které na mé disketě za těch 14 dní vznikly,nemůžu vyloučit to, že jsem něco přehodil,vynechal nebo jinak zmotal.Zároveň bych rád odradil všechny,kteří by měli chuť program různě 'vylepšovat'.I mně trvalo za pomoci floppy disků a tiskárny několik desítek hodin,než jsem se v něm orientoval. Pokud by se přece jen našel nějaký zoufalec,který na to má čas,ať laskavě zanechá v programu mimo změn i své jméno. Nakonec bych rád upozornil na to,že nebudu písemně ani telefonicky podávat jakékoliv další informace o tomto programu.Vše je popsáno dále a pokud bude něco méně jasné,tak využij svého intelektu a zkus na to přijít sám. Já jsem také žádný manuál nedostal. Michal Kreidl P.S.: Touto cestou se také omlouvám všem,kteří mi psali a marně čekají na odpověď.Kdybych měl odepisovat na všechny dopisy,co dostávám,tak už bych nestihl nic jiného a to by asi byla škoda.Uvědomte si,že jsem jenom amatér,který musí také studovat a zároveň si vydělávat peníze na tuto neuvěřitelně drahou zábavu. P o p i s j a z y k a ( verze 25.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 : --------------------- | | Větvení v této formě nelze vnořovat ! | IF f THEN - :ELSE - | | | ----------------------------------- | | | Cykly : | FOR TO (STEP) | FOR DOWNTO (STEP) | Řídící proměnná může být | . | . | jen typu integer bez zn., | . | . | zrovna tak i výraz za STEP. | . | . | Při snižování hodnoty řídící | NEXT | NEXT | proměnné je nutné použít | | | cyklus s DOWNTO. ----------------------------------- | | | | Cyklus REPEAT-UNTIL se provádí | REPEAT | WHILE f | LOOP | až do splnění podmínky f. | . | . | . | WHILE-WEND se provádí,dokud je | . | . | . |--------- podmínka f splněna. | . | . | . | DO n | LOOP-END LOOP je | . | . | . | . | nekonečná smyčka. | UNTIL f | WEND | END LOOP | END DO | DO-END DO se provede | | | | | n-krát. --------------------------------------------- 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 Ekvivalentem GOSUB xxx je uvedení návěští jako povelu. Přepínač : ON n GTO seznam náv. ON n GSUB seznam náv. Povely : -------- 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 RETURN symbol - návrat lze nasměrovat jinam než za volání podprogramu ! 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 PRINT[n] ... - n: bit0=1: obrazovka bit1,bit2=1: tiskárny INPUT - zná i formu INPUT "text"; ... INPUT "text"(n); ... omezí délku vst.řádku,má význam hlavně při čtení znakových proměnných. 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,indexování od 0 DIM seznam x$[..],n,seznam y$[..],m ... - při deklaraci řetězců lze omezit max.délku READ DATA RESTORE - je vhodné používat i před čtením první položky,po překladu na kazetu to bez něj nefunguje ! CLR - nuluje proměnné LOAD name$ - nahraje soubor name$ LOAD name$,adr - nahraje soubor n$ od zadané adresy SAVE name$,typ#,from,size,exec,from1 - zapíše soubor name$, typu typ#, od adresy from, délky size, start. adresa exec, data k uložení se vybírají od adresy from1. DIR FORMAT f$ - "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 name$ - snaže soubor name$ RENAME name1$ TO name2$ DEFAULT device$ - device$ : 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 C4 CMT 3/2 pro CMT fungují jen příkazy SAVE,LOAD,LOADH,LOADD,EXEC,VERIFY,DIR. 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 n,x# - zapíše x# 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 RESUME NEXT - návrat po ON ERROR GOTO za příkaz,který vyvolal chybu 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í.Pozor !!! V tomto případě musí být chybový podprogram překládán s OPTION "B-",jinak dojde k zacyklení. OPTION o$ - o$:"A+","A-","B+","B-","O+","O-" - ovlivnění překladače B...break, O...přetečení, A...indexování pole "+" povoluje,"-" zakazuje Pozor !!! Při kontrole Break se zároveň testuje zaplnění strojového zásobníku.Přetečení zásobníku při vypnuté kontrole vede k okamžitému zřícení systému.Na druhé straně kontrolování čehokoliv brzdí běh programu,a to velice znatelně.Proto je vhodné používat kontroly při odlaďování a pak je vypnout. 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 - kursor na pozici 0,0 BELL - zvukový signál ML n1,n2 ... - zahrne kódy do překladu (inline stroják).Na místě n1,n2 ... mohou ležet konstanty <0,255>,jména proměnných (ne polí) nebo návěští.Jména proměnných kompilátor nahradí 2-bytovou adresou jejich uložení,návěští přímo jeho 2-bytovou adresou. INPH - | OUTPH - | jako INP, OUTP, ale adresa je 16-ti bitová TAB - tabelátor, ale jen uvnitř PRINT TEST - TEST BREAK provede se jednorázové otestování BREAKu (má význam je-li OPTION "B-"). TEST SP testuje jestli není plný zásobník (asi 500 položek) LENGTH n, seznam x$ - definuje max.počet znaků řetězců (šetří paměť). 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$ EDIT (n);x$ - editace řetězce s omezením délky vstupního řádku. CRT n - nastavuje zobrazovací režim ( 0 - 700, 1 až 4 - 800) PLOT n1,n2 - bod (PLOT FRAME n určí,do které obrazovky bude tisknout PLOT a LINE - graf.módy 2,4). LINE n1,n2 TO n3,n4 - čára z n1,n2 (nebo graf. ukazatel,je-li LINE TO n3,n4) 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,v 16-ti barevném módu se nastavuje blok palet takto: PAL 4*číslo bloku+paleta,barva 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 výměnu palet. PCG n,n1#..n8# - modifikuje znak n generátoru,obrazy řádků znaku 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> - frekvence, n2=<0,1> - typ šumu, n3=<0,15> - hlasitost šumu, platí pro PSG BORDER n - barva borderu 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 - přečte tělo souboru,jehož hlavička byla přečtena pomocí LOADH od adr,která může být dána i implicitné z hlavičky. FKEY n,string$ - definice klíčů F1 až F10 FREQ n - zapne tón 1.1 MHz/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 znaků na souřadnice n3,n4, barvy n6,n7 SHARP n - 0 = CENTRONICS, 1 = MZ Printer LOCK name$ - blokování proti zápisu UNLOCK name$ - odblokování proti zápisu EXEC name$ - nahraje soubor n$ a spustí ho (stroják, ne BASIC) Funkce: ------- 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 - čas v sekundách TI$ - čas ve tvaru "hhmmss" PI! - číslo pí TRUE# - | 255 FALSE# - | konstanty 0 ERRDEV# - číslo zařízení, které způsobilo chybu (5=F1/C1,6=F2/C2 ...,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 znaků počínaje n1 POS# (string1$,string2$,n) - hledá string1 ve stringu2 od znaku n, n je volitelné POINT# (n1,n2) - čtení VRAM,funguje v obou módech STRING$ (n,string$) - n-násobné opakování řetězce HEX$ - | BIN$ - | převod čísel na řetězce 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 0 (klávesnice),1,2, směr vpravo = 1 , 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) Zde i jinde lze používat místo čísla řádku znak "a"=řádek za řádkem naposledy editovaným,"l"=poslední řádek. Po chybě se za znak "a" dosadí číslo chybového řádku !!! D[n1[,n2]] - delete line (implicitně vše) F[n1[,n2]]"text" - find text I[n] - insert line (vkládá před n, implicitně za poslední řádek) L[n1[,n2]] - list (implicitně vše) N n - page len, n>10 (pro tiskárnu), n... dekadicky P+S n1,n2...n5 - nastavení kódů pro odstránkování, počet 0 až 5 v hexa P+B n1,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 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 tabulku symbolů ST n - nastaví počet bytů pro tabulku symbolů(n - hexa) T n1,n2,n3 - přesune n1-n2 před n3 V4 - 40 znaků na řádek V8 - 80 znaků na řádek Z - smazání obrazovky Q - opuštění BASICu,restart z monitoru G1200 J - přeloží a spustí přeložený program JT - přeloží a nespustí přeložený program JSR jm.zař."name" nahraje knihovnu (v paměti přitom nesmí být program) JS - nahraje vlastní odladěný strojový program za knihovnu !!! po tomto povelu je poničen vlastni editor) Xod - o operace d zařízení disková verze : d=R, F1, F2, F3, F4 operace pro R : S, D, K, R, X, L, F pro F : S, B, D, K, R, P, U, X, L, F kazetová verze : d=R, C1, C2, C3, C4 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 INST - mód insert/overwrite BLANK (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....kurzor vpravo 05....kurzor nahoru 07....BELL 09....TAB 0A....kurzor dolu 0C....CLS 0D....CR, LF 13....kursor vlevo 18....kurzor dolu 1A....CLS 1B....ESC 1D....HOME 1E....není-li kursor na 1. pozici řádku - CR, LF Pro kazetovou verzi platí u jmen souboru (monitor i BASIC): ---------------------------------------------------------- "?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í --------------- proměnná ERRDEV#: 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 20 = ??? proměnná ERRN#: 0 BRK break 1 S syntax error 2 V value error (chyba hodnoty) 3 SYMNE symbol not existing error 4 LNE line not existing error 5 MCAP memory capacity error 6 MPRO memory protection error 7 STRL string length error 8 SYMSTCAP symbol stack capacity error 9 LD loading error 10 SV saving error 11 VER verifying error 12 STYP file type error 13 SNE file not found error 14 SAE file already existing error 15 NSP no file space error 16 NE not existing error (u Ram Disku) 17 NFRM unformat error 18 WPRO write protection error 19 TMF too many files error 20 DVNE device name error 21 CHK check error (možná u Ram Disku) 22 HRD hardware error 23 NRED not ready error 24 MOD mode error (např. graf. operace v 700 režimu) 25 STO stack overflow error 26 CMSQ command sequence error (např. se přehází cykly) 27 STYP ??? 28 O overflow error 29 SYMDD double defined symbol error 30 NES structure error (jako chyba sekvence) 31 RD read error (u READ,DATA) 32 TYPM type mismatch error 33 A array error (přetečení indexu pole) 34 LCK lock error (vadný adresář u disků) 35 DSKTYP disk type error 36 NPRTN unpritable error (číslo chyby mimo výše uvedenou oblast 1 až 35) ------------------------------- konec ------------------------------------