-- Copyright (C) 1983, 1985 by Xerox Corporation. All rights reserved.
-- RealMemoryImplDicentra.mesa, HGM, 3-Jul-85 3:35:39
DIRECTORY
Environment USING [bitsPerWord, PageCount, PageNumber],
PageMap USING [flagsVacant, GetState, RealPageNumber, State],
RealMemory USING [],
RealMemoryExtras USING [],
DicentraInputOutput USING [numberVirtualPages];
RealMemoryImplDicentra: PROGRAM
IMPORTS PageMap EXPORTS RealMemory, RealMemoryExtras SHARES PageMap =
BEGIN
maxDicentraRealPages: CARDINAL = 4096; -- More requires Map format changes
allocMap: PUBLIC DESCRIPTOR FOR ARRAY OF WORD ← DESCRIPTOR[allocMapArray];
allocMapArray: ARRAY [
0..(maxDicentraRealPages + Environment.bitsPerWord - 1)/Environment.bitsPerWord)
OF WORD; -- initial state not important
Bug: ERROR [type: BugType] = CODE;
BugType: TYPE = {allocMapTooSmall};
Initialize: PUBLIC PROCEDURE = {}; -- initializes exported array desc.
--RealMemory.--Count: PUBLIC PROCEDURE
RETURNS [
count: Environment.PageCount,
realPageMin, realPageMax: PageMap.RealPageNumber] =
BEGIN
virtual: Environment.PageNumber;
state: PageMap.State;
real: PageMap.RealPageNumber;
count ← 0;
realPageMin ← LAST[PageMap.RealPageNumber];
realPageMax ← FIRST[PageMap.RealPageNumber];
FOR virtual IN [0..DicentraInputOutput.numberVirtualPages) DO
[state, real] ← PageMap.GetState[virtual];
IF state.flags~=PageMap.flagsVacant THEN {
count ← SUCC[count];
realPageMin ← MIN[realPageMin, real];
realPageMax ← MAX[realPageMax, real] };
ENDLOOP;
IF realPageMax >= maxDicentraRealPages THEN Bug[allocMapTooSmall];
END;
FreeReservedMemory: PUBLIC PROCEDURE [
keep: Environment.PageCount, bufferPage: Environment.PageNumber] = {};
-- This procedure is a no-op on all processors other than the Dandelion.
MoveIntervalToDisplayMemory: PUBLIC PROCEDURE [
page: Environment.PageNumber, count: Environment.PageCount,
bufferPage: Environment.PageNumber] = {};
-- This procedure is a no-op on all processors other than the Dandelion.
SpecialResidentCodeHandle: PUBLIC PROCEDURE = {};
-- This procedure's only purpose is to provide a handle on the Heads CODE PACK
-- which contains resident code which may be moved to reserved memory.
PCBank: PUBLIC --RealMemoryExtras.-- PROC RETURNS [
firstPCBankPage: PageMap.RealPageNumber, lastPCBankPagePlusOne: PageMap.RealPageNumber] =
BEGIN
firstPCBankPage ← lastPCBankPagePlusOne ← 0;
END;
END.