DEFINITION MODULE Storage;
FROM SYSTEM IMPORT ADDRESS;
PROCEDURE ALLOCATE(VAR a:ADDRESS;size:CARDINAL);
PROCEDURE DEALLOCATE(a:ADDRESS;size:CARDINAL);
PROCEDURE MARK;
PROCEDURE RELEASE;
PROCEDURE Available(size:CARDINAL):BOOLEAN;
PROCEDURE SETHEAP(Start,End1:ADDRESS);
END Storage.
 
IMPLEMENTATION MODULE Storage;
VAR [0BD06H] PSTRT,HEAPST,HEAPTP,HEAPND:ADDRESS;
VAR [5CB2H] RAMTOP:ADDRESS;
VAR MARKPT:ADDRESS;
PROCEDURE ALLOCATE(VAR a:ADDRESS;size:CARDINAL);
HEX D1 C1 E1 E5 C5 D5 ED 5B (@HEAPTP) 73 23 72 EB 09 22
(@HEAPTP) EB 2A (@HEAPND) ED 52 D0 06 00 18 1F
END ALLOCATE;
PROCEDURE DEALLOCATE(a:ADDRESS;size:CARDINAL);HEX
D1 C1 E1 E5 C5 D5 E5 ED 5B (@HEAPST) ED 52 38 0E 19
09 ED 5B (@HEAPTP) ED 52 E1 D8 22 (@HEAPTP) C8 06 01 11
(@DEALLOCATE+24H) C3 (@77) 48 45 41 50 20 4F 56 45 52 46 4C
4F D7 44 45 41 4C 4C 4F 43 41 54 45 20 45 52 52 4F D2 END DEALLOCATE;
 
PROCEDURE MARK;
BEGIN
MARKPT:=HEAPTP;
END MARK;
 
PROCEDURE RELEASE;
BEGIN
HEAPTP:=MARKPT
END RELEASE;
 
PROCEDURE Available(size:CARDINAL):BOOLEAN;
BEGIN
RETURN size+HEAPTP<=HEAPND
END Available;
 
PROCEDURE SETHEAP(Start,End1:ADDRESS);
BEGIN
HEAPST:=Start;
HEAPTP:=Start;
HEAPND:=End1
END SETHEAP;
 
BEGIN
SETHEAP(RAMTOP,PSTRT)
END Storage.
