MEM Basic-bővítés
File-név: MEM.com Program neve: MEM Basic-bővítés |
HSoft - 1991 Memória-kezelő BASIC bővítés |
Közismert tény, hogy gépünk összesen 4 Mbyte címtartomány (RAM és ROM memória összesen) kezelésére képes. Az IS-BASIC azonban a gépünkben található memóriától függetlenül mindössze 64 KByte-ot használ BASIC programjaink és a tárolt változók számára. A fentmaradó szabad memóriát is kihasználhatjuk ugyan adattárolás céljára a POKE, PEEK; SPOKE, SPEEK függvények használatával, sajnos azonban a POKE , PEEK függvények használata esetén még a memórialapozást is nekünk kell végeznünk, a SPOKE, SPEEK függvények leveszik válunkról ugyan ezt a feladatot, de még ez sem nevezhető rugalmas megoldásnak. Ezen a "tarthatatlan" helyzeten igyekszik segíteni a MEM című BASIC bővítés. A program célja a BASIC tárkezelést kiterjeszteni memória műveletekkel. Segítségével a teljes 4 megabyte címtartomány, string-változókhoz hasonlóan kezelhető. Új területeket szerezhetünk pl. adatbázis tárolására.
Függvénybővítések:
IN$(C,N) |
|
C csatornáról N byte-ot olvas be. |
|
MEM$(C,N) |
|
C címtől kezdődően N byte-ot olvas be. |
|
SMEM$(S,C,N) |
|
S szegmens C címétől kezdődően N byte-ot olvas be. |
|
SEGSEIZE |
|
Megadja a felhasználói célokra lefoglalt szegmensek számát. Nem tartalmazza a BASIC számára foglalt szegmenseket. |
|
SEGFREE |
|
Megadja a szabad szegmensek számát. |
Kulcsszó bővítések:
STATUS STR$ |
|
A státuszsor közepére helyezi a string-kifejezést. 32-159 közé eső karakter nullás, a többi 2-es színt kap. 34 string-hosszúságot meghaladva csak az elejét fogja figyelembe venni.
Parancs módban nem használható az utasítás! A státusz sorba írt szöveg csak a program befejeztéig marad meg, a program végeztével a BASIC rendszer felülírja a státuszsort. |
|
MEM C,STR$ |
|
C címtől kezdődően a memóriába írja a string-kifejezést. |
|
SMEM S,C,STR$ |
|
S szegmens C címétől a memóriába írja a string-kifejezést. Az SMEM$-hoz hasonlóam a szegmenshatárok keresztezése után is csak a megadott szegmensre fog vonatkozni a művelet. |
|
SEIZE S1,S2,... |
|
S változóba helyezi az EXOS-tól igényelt szegmens számát. | |
VSEIZE S1,S2,... |
|
Ugyanaz, mint az előző, de videoszegmensre vonatkozik. Mindkét utasításra jellemző, hogy szabad szegmens hiányában nullát ad vissza, valamint tömbváltozót is képes kezelni. Az utasítással nem foglalható megosztott szegmens. |
|
FREE S1,S2... | |
S szegmens felszabadítása, ha már nincs rá szükségünk. Hiányában a többször futtatott programunk nem tudná újra szegmenseket igényelni. BASIC-ból való kilépés esetén a foglalt szegmensek automatikusan felszabadulnak. |
|
FREE ALL | |
Megszüntet valamennyi felhasználói szegmensfoglaltságot, beleértve a megosztott szegmenseket is. A BASIC számára kiutalt szegmensek megmaradnak. Mivel hibajelzést nem küld, célszerű a program elején elhelyezni, hogy az esetleg fel nem szabadított szegmenseket is használatba vehessük. |
A program megértését két példaprogram is segíti: a MEMDEMO.BAS egy egyszerűbb (látványos) bemutatóprogram. A könnyebb tanulmányozás érdekében íme a program teljes listája:
100 PROGRAM "mem.dem"
110 FREE ALL !szegmens felszabaditas
120 NUMERIC A(3)
130 STRING S$*254
140 LET S$=" BASIC MEM-bővités HSOFT 1991. Új kulcsszavak: STATUS, MEM, SMEM, SEIZE, VSEIZE, FREE, FREE ALL. Új függvények: IN$, MEM$, SMEM$, SEGSEIZE, SEGFREE. "
150 RANDOMIZE
160 LET B=SPEEK(255,14612)+SPEEK(255,14613)*256 !Vlap cim LPT-ből
170 LET S1=252+B/16384 !Vlap seg
180 VSEIZE S2 !Vseg foglalás
190 IF S2=0 THEN CAUSE 9246
200 LET N=(S2-252)*16384 !nick cím
210 LET A(0)=1:LET A(1)=40
220 LET A(2)=-1:LET A(3)=-40
230 ! új Vlap sorcímek az LPT-be
240 FOR I=14612 TO I+384 STEP 16
250 SMEM 255,I,WORD$(N):LET N=N+40
260 NEXT
270 !s1 memória másolasa s2-re
280 FOR DEM=1 TO 24
290 LET X=RND(4)
300 FOR B=B TO B+(RND(40)-20)*A(X) STEP A(X)
310 FOR I=0 TO 959 STEP 240
320 SMEM S2,I,SMEM$(S1,B+I,240)
330 NEXT
340 STATUS S$:LET S$=S$(2:)&S$(1)
350 NEXT
360 NEXT
370 STATUS ""
380 DISPLAY TEXT !LPT inic
390 FREE S2 !seg felszabadítás
A BASEMEM.BAS program egy összetettebb példaprogram, mely jó alapot ad saját BASIC adatbáziskezelő programunk elkészítéséhez, amely kihasználja gépünk teljes memóriáját.