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.