Text preview for : NonResident.mesa_Sep78.pdf part of xerox NonResident.mesa Sep78 xerox mesa 4.0_1978 listing Mesa_4_System NonResident.mesa_Sep78.pdf
Back to : NonResident.mesa_Sep78.pd | Home
NonResident.mesa 2-Sep-78 13:58:17 Page 1
-- NonResident.mesa; edited by Sandman, Jul 25, 1978 8:26 AM
DIRECTORY
AltoDefs: FROM "altodefs" USING [8YTE],
ControlDefs: FROM "controldefs" USING [
Alloc, ControlLink, EPRange, FrameCodeBase, FrameHandle, Free,
GetReturnFrame, GetReturnLink, GFT, GFTIndex, GFTItem, GlobalFrameHandle,
,InstWord, Lreg, MainBodyIndex, MaxAllocSlot, NullEpBase, NullFrame,
NullGlobalFrame, Port, PortHandle, SO, StateVector],
CoreSwapDefs: FROM "coreswapdefs",
FrameDefs: FROM "framedefs" USING [FrameSize, SwapInCode],
ImageDefs: FROM "imagedefs",
InlineDefs: FROM "inlinedefs" USING [
BITAND, BITNOT, BITSHIFT, BITXOR, COPY, DIVMOD, LDIVMOD, LongCARDINAL,
LongDiv, LongDivMod, LongMult],
LoadStateDefs: FROM "loadstatedefs" USING [
ConfigIndex, ConfigNull, EnterGfi, InputLoadState, MapRealToConfig,
ReleaseLoadState], .
MiscDefs: FROM "miscdefs",
Mopcodes: FROM "mopcodes" USING [zDADD, zDCOMP, zDSUB, zINC, zPORTI],
NucleusDefs: FROM "nucleusdefs",
ProcessDefs: FROM "processdefs" USING [DisableInterrupts, EnableInterrupts],
Resident: FROM "resident" USING [
AllocTrap, Break, CodeTrap, CSPort, level, MemorySwap, Restart, Start,
UnboundProcedureTrap, WBPort, WorryBreaker],
SDDefs: FROM "sddefs" USING [
sAllocTrap, sAlternateBreak, sBLTE, sBLTEC, sBreak, sBYTBLTE, sBYTBLTEC,
sControlFault, sCopy, sCoreSwap, SD, sDivSS, sError, sGFTLength,
sIOResetBits, sLongDiv, sLongDivMod, sLongMod, sLongMul, sRestart,
sStackError, sStart, sStringInit, sSwapTrap, sUnbound, sUnNew],
SegmentDefs: FROM "segmentdefs" USING [
AddressFromPage, DeleteFileSegment, FileSegmentHandle, SwapError, Unlock],
TrapDefs: FROM "trapdefs" USING [UnboundProcedure];
DEFINITIONS FROM ControlDefs;
NonResident: PROGRAM
IMPORTS FrameDefs, LoadStateDefs, ResidentPtr: Resident, SegmentDefs, TrapDefs
EXPORTS FrameDefs, ImageDefs, InlineDefs, MiscDefs, NucleusDefs, TrapDefs, CoreSwapDefs
SHARES ControlDefs, ImageDefs, Resident = BEGIN
-- Global Frame Table management
gftrover: CARDINAL ~ 0; -- okay to start at a because incremented before used
NoGlobalFrameSlots: PUBLIC SIGNAL [CARDINAL] CODE;
EnumerateGlobalFrames: PUBLIC PROCEDURE [
proc: PROCEDURE [GlobalFrameHandle] RETURNS [BOOLEAN]]
RETURNS [GlobalFrameHandle]
BEGIN
i: GFTIndex;
frame: GlobalFrameHandle;
gft: POINTER TO ARRAY [0 .. 0) OF GFTItem ~ GFT;
FOR i IN [0 .. SD[SDDefs.sGFTLength]) 00
frame ~ gft[i].frame;
IF frame # NullGlobalFrame AND gft[i].epbase = a
AND proc[frame] THEN RETURN[frame];
ENDLOOP;
RETURN[NullGlobalFrame]
END;
EnterGlobalFrame: PUBLIC PROCEDURE [frame: GlobalFrameHandle. nslots: CARDINAL]
RETURNS [entryindex: GFTIndexl