home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1988-01-24 | 7.8 KB | 420 lines | [TEXT/????] |
- IMPLEMENTATION MODULE MemoryManager;
- (* C.Pfister 11-Jan-87
- - MaxApplZone and MoveHHi only implemented for the 128K ROMs *)
-
- FROM OSUtilities IMPORT GetLong;
- FROM MacTypes IMPORT Ptr, Handle, ProcPtr, THz, Size, OSErr, Byte;
- FROM SYSTEM IMPORT INLINE, ADR, ADDRESS, SHORT, VAL, REG, SETREG, LONG;
-
- CONST
- D0 = 0;
- A0 = 8;
- A1 = 9;
-
- VAR err: INTEGER;
-
-
- PROCEDURE InitApplZone;
- BEGIN
- INLINE(0A02CH);
- err := SHORT(REG(D0))
- END InitApplZone;
-
- PROCEDURE SetApplBase(startPtr: Ptr);
- BEGIN
- SETREG(A0,startPtr);
- INLINE(0A057H);
- err := SHORT(REG(D0))
- END SetApplBase;
-
-
- PROCEDURE InitZone(pgrowZone: ProcPtr;
- cmoreMasters: INTEGER;
- limitPtr,
- startPtr : Ptr);
- BEGIN
- SETREG(A0,ADR(startPtr));
- INLINE(0A019H);
- err := SHORT(REG(D0))
- END InitZone;
-
- PROCEDURE GetApplLimit(): Ptr;
- VAR l: LONGINT;
- BEGIN
- RETURN GetLong(130H)
- END GetApplLimit;
-
- PROCEDURE SetApplLimit(zoneLimit: Ptr);
- BEGIN
- SETREG(A0,zoneLimit);
- INLINE(0A02DH);
- err := SHORT(REG(D0))
- END SetApplLimit;
-
- PROCEDURE MaxApplZone;
- BEGIN
- INLINE(0A063H);
- err := SHORT(REG(D0))
- END MaxApplZone;
-
- PROCEDURE MoreMasters;
- BEGIN
- INLINE(0A036H);
- err := SHORT(REG(D0))
- END MoreMasters;
-
-
- PROCEDURE GetZone(): THz;
- BEGIN
- INLINE(0A11AH);
- err := SHORT(REG(D0));
- RETURN VAL(THz,REG(A0))
- END GetZone;
-
- PROCEDURE SetZone(hz: THz);
- BEGIN
- SETREG(A0,hz);
- INLINE(0A01BH);
- err := SHORT(REG(D0))
- END SetZone;
-
- PROCEDURE ApplicZone(): THz;
- BEGIN
- RETURN GetLong(2AAH)
- END ApplicZone;
-
- PROCEDURE SystemZone(): THz;
- BEGIN
- RETURN GetLong(2A6H)
- END SystemZone;
-
-
- PROCEDURE NewHandle(byteCount: Size): ADDRESS;
- BEGIN
- SETREG(D0,byteCount);
- INLINE(0A122H);
- err := SHORT(REG(D0));
- RETURN REG(A0)
- END NewHandle;
-
- PROCEDURE DisposHandle(h: ADDRESS);
- BEGIN
- SETREG(A0,h);
- INLINE(0A023H);
- err := SHORT(REG(D0))
- END DisposHandle;
-
- PROCEDURE GetHandleSize(h: ADDRESS): Size;
- VAR Res: LONGINT;
- BEGIN
- SETREG(A0,h);
- INLINE(0A025H);
- Res := REG(D0);
- IF Res > 0D THEN
- err := 0; RETURN Res
- ELSE
- err := SHORT(Res); RETURN 0
- END
- END GetHandleSize;
-
- PROCEDURE SetHandleSize(h: ADDRESS; newSize: Size);
- BEGIN
- SETREG(A0,h);
- SETREG(D0,newSize);
- INLINE(0A024H);
- err := SHORT(REG(D0))
- END SetHandleSize;
-
- PROCEDURE HandleZone(h: ADDRESS): THz;
- BEGIN
- SETREG(A0,h);
- INLINE(0A126H);
- err := SHORT(REG(D0));
- RETURN VAL(THz,REG(A0))
- END HandleZone;
-
- PROCEDURE RecoverHandle(p: Ptr): ADDRESS;
- BEGIN
- SETREG(A0,p);
- INLINE(0A128H);
- err := 0;
- RETURN REG(A0)
- END RecoverHandle;
-
- PROCEDURE ReallocHandle(h: ADDRESS; byteCount: Size);
- BEGIN
- SETREG(A0,h);
- SETREG(D0,byteCount);
- INLINE(0A027H);
- err := SHORT(REG(D0))
- END ReallocHandle;
-
-
- PROCEDURE NewPtr(byteCount: Size): Ptr;
- BEGIN
- SETREG(D0,byteCount);
- INLINE(0A11EH);
- err := SHORT(REG(D0));
- RETURN REG(A0)
- END NewPtr;
-
- PROCEDURE DisposPtr(p: Ptr);
- BEGIN
- SETREG(A0,p);
- INLINE(0A01FH);
- err := SHORT(REG(D0))
- END DisposPtr;
-
- PROCEDURE GetPtrSize(p: Ptr): Size;
- VAR Res: LONGINT;
- BEGIN
- SETREG(A0,p);
- INLINE(0A021H);
- Res := REG(D0);
- IF Res > 0D THEN
- err := 0; RETURN VAL(Size,Res)
- ELSE
- err := SHORT(Res); RETURN 0
- END
- END GetPtrSize;
-
- PROCEDURE SetPtrSize(p: Ptr; newSize: Size);
- BEGIN
- SETREG(A0,p);
- SETREG(D0,newSize);
- INLINE(0A020H);
- err := SHORT(REG(D0))
- END SetPtrSize;
-
- PROCEDURE PtrZone(p: Ptr): THz;
- BEGIN
- SETREG(A0,p);
- INLINE(0A148H);
- err := SHORT(REG(D0));
- RETURN VAL(THz,REG(A0))
- END PtrZone;
-
-
- PROCEDURE FreeMem(): LONGINT;
- BEGIN
- INLINE(0A01CH);
- err := 0;
- RETURN REG(D0)
- END FreeMem;
-
- PROCEDURE MaxMem(VAR grow: Size): Size;
- BEGIN
- INLINE(0A11DH);
- err := 0;
- grow := VAL(Size,REG(A0));
- RETURN REG(D0)
- END MaxMem;
-
- PROCEDURE CompactMem(cbNeeded: Size): Size;
- BEGIN
- SETREG(D0,cbNeeded);
- INLINE(0A04CH);
- err := 0;
- RETURN REG(D0)
- END CompactMem;
-
- PROCEDURE ResrvMem(cbNeeded: Size);
- BEGIN
- SETREG(D0,cbNeeded);
- INLINE(0A040H);
- err := SHORT(REG(D0))
- END ResrvMem;
-
- PROCEDURE PurgeMem(cbNeeded: Size);
- BEGIN
- SETREG(D0,cbNeeded);
- INLINE(0A04DH);
- err := SHORT(REG(D0))
- END PurgeMem;
-
- PROCEDURE EmptyHandle(h: ADDRESS);
- BEGIN
- SETREG(A0,h);
- INLINE(0A02BH);
- err := SHORT(REG(D0))
- END EmptyHandle;
-
-
- PROCEDURE HLock(h: ADDRESS);
- BEGIN
- SETREG(A0,h);
- INLINE(0A029H);
- err := SHORT(REG(D0))
- END HLock;
-
- PROCEDURE HUnlock(h: ADDRESS);
- BEGIN
- SETREG(A0,h);
- INLINE(0A02AH);
- err := SHORT(REG(D0))
- END HUnlock;
-
- PROCEDURE HPurge(h: ADDRESS);
- BEGIN
- SETREG(A0,h);
- INLINE(0A049H);
- err := SHORT(REG(D0))
- END HPurge;
-
- PROCEDURE HNoPurge(h: ADDRESS);
- BEGIN
- SETREG(A0,h);
- INLINE(0A04AH);
- err := SHORT(REG(D0))
- END HNoPurge;
-
-
- PROCEDURE SetGrowZone(growZone: ProcPtr);
- BEGIN
- SETREG(A0,growZone);
- INLINE(0A04BH);
- err := SHORT(REG(D0))
- END SetGrowZone;
-
- PROCEDURE GZSaveHnd(): ADDRESS;
- BEGIN
- RETURN GetLong(328H)
- END GZSaveHnd;
-
-
- PROCEDURE BlockMove(srcPtr, destPtr: Ptr; byteCount: Size);
- BEGIN
- SETREG(A0,srcPtr);
- SETREG(A1,destPtr);
- SETREG(D0,byteCount);
- INLINE(0A02EH);
- err := SHORT(REG(D0))
- END BlockMove;
-
- PROCEDURE TopMem(): Ptr;
- BEGIN
- RETURN GetLong(108H)
- END TopMem;
-
- PROCEDURE MoveHHi(h: ADDRESS);
- BEGIN
- SETREG(A0,h);
- INLINE(0A064H);
- err := SHORT(REG(D0))
- END MoveHHi;
-
- PROCEDURE MemError(): OSErr;
- BEGIN
- RETURN err
- END MemError;
-
-
- PROCEDURE HandToHand(VAR theHndl: ADDRESS): OSErr;
- BEGIN
- SETREG(A0,theHndl);
- INLINE(0A9E1H);
- err := SHORT(REG(D0));
- theHndl := REG(A0);
- RETURN err
- END HandToHand;
-
- PROCEDURE PtrToHand(srcPtr: Ptr; VAR dstHndl: ADDRESS;
- size: LONGINT): OSErr;
- BEGIN
- SETREG(A0,srcPtr);
- SETREG(D0,size);
- INLINE(0A9E3H);
- err := SHORT(REG(D0));
- dstHndl := REG(A0);
- RETURN err
- END PtrToHand;
-
- PROCEDURE PtrToXHand(srcPtr: Ptr; dstHndl: ADDRESS;
- size: LONGINT): OSErr;
- BEGIN
- SETREG(A0,srcPtr);
- SETREG(A1,dstHndl);
- SETREG(D0,size);
- INLINE(0A9E2H);
- err := SHORT(REG(D0));
- RETURN err
- END PtrToXHand;
-
- PROCEDURE HandAndHand(hand1, hand2: ADDRESS): OSErr;
- BEGIN
- SETREG(A0,hand1);
- SETREG(A1,hand2);
- INLINE(0A9E4H);
- err := SHORT(REG(D0));
- RETURN err
- END HandAndHand;
-
- PROCEDURE PtrAndHand(ptr: Ptr; hand: ADDRESS;
- size: LONGINT): OSErr;
- BEGIN
- SETREG(A0,ptr);
- SETREG(A1,hand);
- INLINE(0A9EFH);
- err := SHORT(REG(D0));
- RETURN err
- END PtrAndHand;
-
-
- PROCEDURE MaxBlock(): LONGINT;
- BEGIN
- INLINE(0A061H);
- RETURN REG(D0)
- END MaxBlock;
-
- PROCEDURE PurgeSpace(VAR total, contig: LONGINT);
- BEGIN
- INLINE(0A062H);
- total := REG(D0);
- contig := REG(A0)
- END PurgeSpace;
-
- PROCEDURE StackSpace(): LONGINT;
- BEGIN
- INLINE(0A065H);
- RETURN REG(D0)
- END StackSpace;
-
- PROCEDURE NewEmptyHandle(): ADDRESS;
- BEGIN
- INLINE(0A166H); (* Error was 0A066H, = preserve A0 ! *)
- err := SHORT(REG(D0));
- RETURN REG(A0)
- END NewEmptyHandle;
-
- PROCEDURE HSetRBit(h: ADDRESS);
- BEGIN
- SETREG(A0,h);
- INLINE(0A067H);
- err := SHORT(REG(D0))
- END HSetRBit;
-
- PROCEDURE HClrRBit(h: ADDRESS);
- BEGIN
- SETREG(A0,h);
- INLINE(0A68H);
- err := SHORT(REG(D0))
- END HClrRBit;
-
- PROCEDURE HGetState(h: ADDRESS): Byte;
- BEGIN
- SETREG(A0,h);
- INLINE(0A069H);
- RETURN CHR(SHORT(REG(D0)))
- END HGetState;
-
- PROCEDURE HSetState(h: ADDRESS; flags: Byte);
- BEGIN
- SETREG(A0,h);
- SETREG(D0,LONG(ORD(flags)));
- INLINE(0A6AH);
- err := SHORT(REG(D0))
- END HSetState;
-
-
- END MemoryManager.
-