BASIC Extensions
Andrew Richards itt bemutatásra kerülő programcsomagját hazánkban ugyan nem forgalmazták, ennek ellenére sokaknak ismerős lehet. Az 'a' Stúdió nevével fémjelzett Enterprise Plus ugyanis ennek továbbfejlesztése (erről a korabeli dokumentumokban nem volt említés). Nem tudni, mennyi volt a magyar fejlesztés ebből, de az tény, hogy az Enterprise Plus már egy kiforrottabb, jobban használható, szélesebb körű megoldás volt.
A BoxSoft féle verzióban, az elérhető BASIC bővítések 5 programba vannak bontva:
Ezen kívül a programcsomag része egy BASIC demó program is (BASX.BAS)
A programmodulokba bontás előnye, hogy csak azok a funkciók foglalják a memóriát, melyeket használni kívánunk, hátránya azonban, hogy körülményes az így készített programok futtatása. Először a programírás közben felhasznált modulokat kell betöltenünk, pontosan abban a sorrendben, ahogy a programkészítés közben a memóriában voltak!
Az egyes modulokat a BASIC LOAD "filenév.kit" paranccsal kell betölteni. A példaprogram futtatásához a modulokat a következő sorrendben kell betölteni: BASX_G, BASX_C, BASX_M, BASX_S.
BASIX_C - karakterkezelő funkciók
| CHRLET A$=B$ | |
|
A B$-ban lévő karakter képét az A$-ban lévő karakter képébe másolja. Pl: ha A$="#" és B$="Z", akkor az utasítás hatására a "#" karaktert "Z"-nek definiálja. A CHRLET "#"="Z" ugyanezt a hatást éri el. |
|
| CHRINV A$ | |
| Az A$-ban lévő karakter képét invertálja. A$ csak egy karaktert tartalmazhat. A CHRINV "a" alak is működik, akárcsak a további string-műveleteknél. | |
| STRINV A$ | |
| Ugyanaz mint CHRINV, azzal a különbséggel, hogy A$ több karakterből állhat. | |
| CHRFLP A$ | |
| Az A$-ban lévő karakter képét fejjel lefelé fordítja. A$ csak egy karaktert tartalmazhat. | |
| STRFLP A$ | |
| Ugyanaz mint CHRFLP, azzal a különbséggel, hogy A$ több karakterből állhat. | |
| CHRROR A$ | |
| Az A$-ban lévő karakter képét 90 fokkal jobbra fordítja. A$ csak egy karaktert tartalmazhat. | |
| STRROR A$ | |
| Ugyanaz mint CHRROR, azzal a különbséggel, hogy A$ több karakterből állhat. | |
| CHRROL A$ | |
| Az A$-ban lévő karakter képét 90 fokkal balra fordítja. A$ csak egy karaktert tartalmazhat. | |
| STRROL A$ | |
| Ugyanaz mint CHRROL, azzal a különbséggel, hogy A$ több karakterből állhat. | |
| CHRDEF A$ | |
| Az A$-ban adott karakter definiálásának kezdetét jelzi. Ezután kilenc, nem feltétlenül egymást követő CHRLIN utasítás kell, hogy kövesse. | |
| CHRLIN A$ | |
Meghatározza a CHRDEF utasítással megadott karakter egy sorát. A$ nyolc karakter, hosszú kell, hogy legyen, valamint kilenc ilyen utasításnak kell szerepelnie. A$ minden egyes karaktere egy bitet képvisel a karakter definícióban. Szóköz hatására a megfelelő bit törlődik, "." (pont) hatására megmarad az eredeti karakter pontja, minden más karakter pedig egybe állítja a bitet. Például:
CHRDEF "ö" |
|
Ez a modul változatlan formában van az EP Plus-ban is.
BASIX_G.COM - általános funkciók
| DOKE A,B | |
| A 16 bites "B" egész számot leteszi az "A" és "A"+1 címre (először a kisebb helyértékű byte-ot). | |
| SDOKE S,A,B | |
| Ugyanúgy mint a DOKE-nál, csak a "B"-t az 'S' szegmens 'A' címére teszi. | |
| CR [(CSAT)] | |
| Kiküld az adott csatornára egy "CR" Kódot. ("kocsi vissza".) | |
| LF [(CSAT)] | |
| Kiküld az adott csatornára egy "LF" kódot. ("soremelés".) | |
| CLS [(CSAT)] | |
| Kiküld az adott csatornára egy "CLS" kódot. ("Képernyő törlés".) | |
| VDU [CSAT,] [8 bites szám,] [16 bites szám;] [string] | |
Az adott csatornára kiküldi a megadott karaktersorozatot. A karaktersorozat állhat 8 bites, 16 bites vagy hexadecimális számokból, vagy karakter stringekből. Pl: VDU £101,27,"s",27,"A",500;500;"Sziasztok!" A "27" az ESC kódja, amely után a kis "s" kikapcsolja a rajzoló sugarat, a nagy "A"-t követő két szám pedig megadja annak az új pozíciónak a helyét, ahová a "Sziasztok!" üzenet kerül. |
|
| FIND változó | |
| Megkeresi a programban a "változó" első előfordulását. A "változó" egy függvény vagy egy változó lehet, de nem lehet utasítás. | |
| FNEXT változó | |
| Az előző, FIND-dal meghatározott helytől kezdve tovább keresi a "változót". | |
| DEFAULT A$ | |
| Beállítja a mentéshez / betöltéshez használt alapértelmezésű eszköz nevét. Nem kell Kettőspontot használni. Pl: DEFAULT "TAPE" vagy DEFAULT A$, ha A$="TAPE" |
|
| FILE [CSAT;] PTR=szám | |
Beállítja a meghatározott csatorna file-mutatóját. Ez az utasítás leltetővé teszi, hogy egy (szalagon vagy lemezen lévő) file adott számú karakterét átugorjuk, majd a file-mutatót a közvetlen követő byte olvasására állítsuk. Az alapértelmezésű csatorna a 106-os. Pl: FILE £10;PTR=20 Ha egy file az "ABCDEFGHIJKLM" Karakterekből áll, és kiadjuk a FILE PTR=10 utasítást, akkor a következő GET A$ utasítás a "K"-t olvassa be. Megjegyzés: a FILE utasítás csak lemezes rendszerben használható. |
|
| VPOKE cím, 8 bites érték | |
| A 8 bites értéket leteszi a cím által meghatározott videó byte-ba. | |
Függvények:
| VADDR1 [(CSAT)] | |
| Visszaadja az adott csatorna attribútum adatok címét. Az alapértelmezésű csatorna a 101-es. | |
| VADDR2 [(CSAT)] | |
| Visszaadja az adott csatorna képpont adatok címét. Az alapértelmezésű csatorna a 101-es. VADDR2 a csatorna bal felső képpontjának címét adja meg. | |
| BEAMX [(CSAT)] | |
| Visszaadja az adott videó csatorna rajzoló sugarának x koordinátáját. Alapértelmezésű csatorna a 101-es. | |
| BEAMY [(CSAT)] | |
| Mint a BEAMX, csak az y koordinátára. A BEAMX és BEAMY csak grafikus csatornán működik. | |
| CURX [(CSAT)] | |
| Visszaadja az adott videó csatorna kurzorának x koordinátáját. Alapértelmezésű csatorna a 102-es. | |
| CURY [(CSAT)] | |
| Mint a BEAMY, csak az y koordinátára. A BEAMX és BEAMY csak szöveges csatornán működik. | |
| IF (feltétel,(igaz),(hamis)) | |
Ha a "feltétel" igaz, akkor az "igaz", ha hamis, a "hamis" értéket adja vissza a függvény. Például a PRINT IF (A>0,(B),(C)) utasítás "A" pozitív értékére "B"-t, negatív értékre pedig "C"-t nyomtatja ki. |
|
| STRING$ (hossz,string) | |
Egy olyan "hossz" hosszúságú stringet ad vissza, amely a "string" többször egymás után írásából keletkezik. A függvény használatánál legyünk figyelemmel arra, hogy amennyiben a megadott stringet nem hosszának egész számú többszörösével kívánjuk megtöbbszörözni, a keletkezett strint eleje lesz csonkolva és nem a vége! Pl: PRINT STRING$(10,"ABC") a "CABCABCABC" stringet írja ki. |
|
| EOF [(CSAT)] | |
Visszaadja az adott csatorna állapotát. Az alapértelmezésű csatorna a billentyűzet (105). Ezzel megvizsgálhatjuk, hogy van-e lenyomott billentyű anélkül, hogy kivennénk a pufferből. |
|
| GET [(CSAT)] | |
| Beolvas egy karaktert az adott csatornáról, és visszaadja annak ASCII értékét. Az alapértelmezésű csatorna a 105-ös. Egy billentyű lenyomására is lehet várni vele. | |
| GET$ [(CSAT)] | |
| Mint az előbbi GET, azzal a különbséggel, hogy a karaktert string formában adja vissza. | |
| DEEK (cím) | |
| Visszaadja a "cím" és a "cím"+1-en lévő 2 byte-os szó értékét. | |
| SDEEK (szegm,cím) | |
| Beolvassa a "szegm" szegmensen lévő "cím" és "cím"+1-ről a két byte-os szót. | |
| VPEEK (cím) | |
| Visszaadja a " cím " videó címen lévő byte-ot. | |
| OPT (vált. szám) | |
| Visszaadja a "vált. szám"-mal megadott EXOS változó aktuális értékét. Hasonló az ASK-hoz. | |
Itt még hiányzik az EP Plus-ból ismert LOCK, LOCATE parancs, valamint a FILE, VIDX, VIDY, VIDMODE, XOR, IF$, HEX függvény. Ezen kívül a szintaktika is eltér néhány utasításnál.
BASIX_M.COM - menü funkció
Az ebben a modulban található utasítások és függvények egyetlen, - összetett és hasznos - funkciót hivatottak szolgálni.
| MENU A,B,C,A$,B$ [,C$] [,D$] ... | |
Az adott képernyőn megnyit egy belső- menü képernyőt. Ennek méretei: "A" széles, "B" magasságban kezdődik a "C" pozícióban. A fejlécébe "A$" kerül kiírásra, majd a választható pontok: "C$", "D$", stb. Az írás színe az INK 3. A MENU parancs csak TEXT 40 módban üzemel. A mező szélességét legalább egy karakterrel hosszabbra kell állítanunk, mint a leghosszabb menüpont hossza! Ellenkező esetben hibaüzenetet kapunk: "OVERFLOW IN STRING EXPRESSION". A használható sorok száma a sorok szélességétől függ, mivel csak korlátozott memória áll rendelkezésre. A "C" értékét 10-nél nagyobbra érdemes megválasztani, mivel ez a képernyő fizikai címét adja meg. A MENU utasítások nem ágyazhatók egymásba! |
|
| CLR_MENU | |
| Törli a képernyőről az előbbi MENU paranccsal létrehozott képernyőrészt, visszaállítja a MENU parancs meghívása előtti állapotot. | |
Függvények:
| MENU | |
Ezzel a függvénnyel tudunk választani a MEMU parancsnál megadott lehetőségekből. A választási állapotból a szóköz vagy az ESC lenyomásával léphetünk ki, a lehetőségek között a botkormánnyal mozoghatunk. A felső sorra 1-et, a második sorra kettőt ad, stb. Az ESC lenyomása esetén a függvény a -1 értéket adja vissza. |
|
A következőkben példát adunk a MENU használatára:
10 CLS
100 MENU 13,10,12,"Ujra fusson?","Igen","Nem"
110 SET L102: PALETTE BLACK, GREEN, BLACK,WHITE
120 DO
130 LET OKE=MENU
140 LOOP WHILE OKE=-1
150 CLR_MENU
160 IF OKE=1 THEN
170 RUN
180 ELSE
190 END
200 END IF
A fenti programban megjelenik egy menü az 'Ujra fusson?' fejléccel. Két választási lehetőség van: "Igen" vagy "Nem". Ha az "Igen"-t választjuk, a program újra indul, és ismét megjelenik ez a menü. "Nem" esetén megáll a program.
BASIX_S.COM - sprite-kezelő funkciók
Ez tűnik a legérdekesebb modulnak, már csak azért is, mert a hazai felhaználók által is ismert Entersprite elég gyenge megoldás. Sajnos azonban ez megoldást is csak nagyvonalú túlzással nevezhetjük sprite-kezelőnek... Valószínűleg ezért is marad ki teljes egészében az EP Plus-ból, helyet hagyva néhány rendszerbővítőnek.
A modul maximum 16 sprite-ot képes kezelni, melyek azonban egyetlen fázisból (!) állhatnak. Nagyfelbontású (HIRES) videólapon egy sprite 16 x 16 pixel, LORES és ATTRIBUTE módban ennek kétszerese.
| SPRX n | |
| A sprite pozíciójának x koordinátájának beállítása. Értéke a standard méretű grafikus lapon 0-tól 307-ig terjedhet, azaz sajnos más koordináta beosztás használ, mit az IS-BASIC. | |
| SPRY n | |
| A sprite pozíciójának x koordinátájának beállítása. Értéke a standard méretű grafikus lapon 0-tól 164-ig terjedhet. Az SPRX és az SPRY 0 értéke jelöli a képernyő bal felső sarkát. | |
| SPRCHAN | |
| A grafikus csatorna kiválasztása. A sprite-ok ezen a videolapon lesznek megjelenítve. Alapértelmezett csatorna a 101-es. | |
| SPRNUM n | |
| A sprite kiválasztása, menlyen műveletet szeretnénk végezni. A sprite-ok 0-tól 15-ig vannak számozva. | |
| SPDX n | |
| A vízszintes elmozdulás távolságát állíthatjuk be az MVSTICK, MVRT, MVLT parancsok használata előtt. Alapértelmezett érték: 4. | |
| SPDY n | |
| A függőleges elmozdulás távolságát állíthatjuk be az MVSTICK, MVUP, MVDN parancsok használata előtt. Alapértelmezett érték: 4. | |
| MVRT | |
Jobbra mozgatja a sprite-ot az SPDX-el megadott számú pixellel. |
|
| MVLT | |
Balra mozgatja a sprite-ot az SPDX-el megadott számú pixellel. |
|
| MVUP | |
Felfelé mozgatja a sprite-ot az SPDY-al megadott számú pixellel. |
|
| MVDN | |
| Lefelé mozgatja a sprite-ot az SPDY-al megadott számú pixellel. | |
| USESTICK n | |
| A sprite mozgatásához használt botkormányt választhatjuk ki. | |
| MVSTICK | |
| A megadott számú botkormánnyal mozgatható a kiválasztott sprite. Nem ellenőrzi a képernyőpozíciót, ha kimegyünk a képernyőről, INVALID BEAM POSITION hibaüzenetet kapunk! A sprite képernyőn tartását nekünk kell megoldani, pl. hibakezelő (HANDLER) eljárással. |
|
| PTBL | |
| Megjeleníti a kiválasztott sprite-ot az az SPRX és SPRY koordinátákban. | |
| PTXOR | |
| Megjeleníti a kiválasztott sprite-ot, a háttér képpontjaival XOR műveletet végezve. Letörölhetjük a sprite-ot, ha önmagára rakjuk ki így. | |
| PTAND | |
| Megjeleníti a kiválasztott sprite-ot, a háttér képpontjaival AND műveletet végezve. | |
| PTOR | |
| Megjeleníti a kiválasztott sprite-ot, a háttér képpontjaival OR műveletet végezve. | |
| SPRDEF | |
Sprite definiálása. A sprite-ot először meg kell rajzolni a kijelölt grafikus csatornán, majd az SPRX és SPRY parancsokkal ki kell jelölni a sprite jobb felső sarkát. Ezt követően az SPRDEF utasítással definiálhatjuk a kijelölt sprite-ot. |
|
| SPRINV | |
| Invertálja a sprite színeit. | |
Függvények:
| FRAME | |
| A képfrissítéshez időzíti a sprite kirakását. Ezt a sprite mozgató parancsok (MVLT, MVRT, MVUP, MVDN) is megteszik. | |
| SPRX | |
| A sprite x koordinátáját adja vissza. | |
| SPRY | |
| A sprite y koordinátáját adja vissza. | |
| SPRADDR | |
| A kiválasztott sprite memóriabeli kezdőcímét adja vissza. Ennek segítségével a sprite-ot POKE parancsokkal és a PEEK függvénnyel közvetlenül szerkeszthetjük. | |
| SPRHIT | |
Elvileg ütközésfigyelést lehet vele lekezelni, de még az eredeti dokumentáció szerint sem igazán alkalmas rá. "Elvileg" megoldható, de a demo sem mutat példát ütközés figyelésre... |
|
BASX_A.COM - assembler
Ez a modul az EP Plus-ból megismert szinte teljes értékű, BASIC-ből használható assembler korábbi változata. Ez még kevesebb mnemonikot ismer, sajnos nem a szabványos formában.
| BASX_A | Z80 |
BASX_A | Z80 |
|
| LDR A,B | LD A,B | CVC nn | CALL PE,nn | |
| LDN A,n | LD A,n | JMP nn | JP nn | |
| LDA nn | LD A,(nn) | JEQ nn | JP Z,nn | |
| TFR r,r | LD r,r | JNE nn | JP NZ,nn | |
| LDX rr,nn | LD rr,(nn) | JCS nn | JP C,nn | |
| STA nn | LD (nn),A | JCC nn | JP NC,nn | |
| ADD r | ADD A,r | JPL nn | JP P,nn | |
| SUB r | SUB r | JMI nn | JP M,nn | |
| ADC r | ADC A,r | JVS nn | JP PO,nn | |
| SBC r | SBC A,r | JVC nn | JP PE,nn | |
| XOR r | XOR r | BRA nn | JR nn | |
| IOR r | OR r | BEQ nn | JR Z,nn | |
| AND r | AND r | BNE nn | JR NZ,nn | |
| CMP r | CP r | BCS nn | JR C,nn | |
| LXN rr,nn | LD rr,nn | BCC nn | JR NC,nn | |
| LXA rr,nn | LD rr,(nn) | DBR nn | DJNZ,nn | |
| STX rr,nn | LD (nn),rr | ROR r | RR r | |
| ADX rr | ADD HL,rr | ROL r | RL r | |
| ACX rr | ADC HL,rr | RRC r | RRC r | |
| SXC rr | SBC HL,rr | RLC r | RLC r | |
| INC r | INC r | SLA r | SLA r | |
| DEC r | DEC r | SRA r | SRA r | |
| INX rr | INC rr | SRL r | SRL r | |
| DEX rr | DEC rr | SLL r | SLL r | |
| PSH rr | PUSH rr | RET | RET | |
| POP rr | POP rr | REQ | RET Z | |
| RST n | RST n | RNE | RET NZ | |
| JSR nn | CALL nn | RCS | RET C | |
| CEQ nn | CALL Z,nn | RCC | RET NC | |
| CNE nn | CALL NZ,nn | RPL | RET P | |
| CCS nn | CALL C,nn | RMI | RET M | |
| CCC nn | CALL NC,nn | RVS | RET PO | |
| CPL nn | CALL P,nn | RVC | RET PE | |
| CMI nn | CALL M,nn | OPT n | OUT (n),A | |
| CVS nn | CALL PO,nn | INP n | IN A,(n) |
Jelölések:
r - regiszter,
rr - regiszterpár,
n - 8 bites érték,
nn - 16 bites érték
Használható logikai műveletek:
NOT n
n AND n
n OR n
n XOR n
A használható direktívák:
Az assemblerrel kapcsolatos függvény:
| POINTER | |
| Visszaadja az assembler fordításnál az aktuális elhelyezés számláló értékét. Ennek segítségével átadhatjuk az értéket egy változónak. | |