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