-- IntVMDefs.mesa -- Derived from JaMVMDefs -- Last changed by MN, 3-Aug-81 17:15:35 DIRECTORY Inline USING [LongCOPY]; IntVMDefs: DEFINITIONS IMPORTS Inline = { VMBase: TYPE = LONG BASE POINTER; VMAddr: TYPE = VMBase RELATIVE LONG POINTER; VMOffs: TYPE = [0..1]; vmNIL: VMAddr = LOOPHOLE[LONG[0]]; NilVMAddr: VMAddr = vmNIL; InitVM: PROCEDURE RETURNS [BOOLEAN]; FinishVM: PROCEDURE RETURNS [BOOLEAN]; AllocateBlock: PROCEDURE [size: CARDINAL] RETURNS [VMAddr]; -- Allocate size words in Virtual memory -- Generates VMFull: FreeBlock: PROCEDURE [block: VMAddr] = INLINE {NULL}; LPWord: TYPE = LONG POINTER TO WORD; PutWord: PROC[where: VMAddr, val: UNSPECIFIED] = INLINE {vmbase[where] _ val }; GetWord: PROC[where: VMAddr] RETURNS[value: WORD] = INLINE {RETURN[vmbase[where]] }; -- Get a word from VM address vmaddr -- Put and Get long quantities from VM. PutLong: PROCEDURE [where: VMAddr, val: LONG UNSPECIFIED] = INLINE { PutBlock[@val, where, 2]}; GetLong: PROCEDURE [where: VMAddr] RETURNS [LONG UNSPECIFIED] = INLINE { v: LONG UNSPECIFIED; GetBlock[where, @v, 2]; RETURN[v]}; PutBlock: PROCEDURE[src: POINTER TO UNSPECIFIED, dest: VMAddr, size: CARDINAL] = INLINE { Inline.LongCOPY[src, size, @vmbase[dest]] }; GetBlock: PROCEDURE[src: VMAddr, dest: POINTER TO UNSPECIFIED, size: CARDINAL] = INLINE {Inline.LongCOPY[@vmbase[src], size, dest] }; -- Copy nwords words from VM address vmaddr to actual memory address realAddr -- Virtual memory base pointer vmbase: READONLY VMBase; -- SIGNALS VMBadPointer: ERROR; VMFull: ERROR; VMFileProblem: ERROR; }.