<> <> <> <> <> <> DIRECTORY PrincOps USING [aGETF, aINPUT, aOUTPUT, InterimPageState, PageCount, PageNumber, RealPageNumber, wordsPerPage, zMISC], PrincOpsUtils USING [AddressForPageNumber, PageNumberForAddress]; DLionInputOutput: DEFINITIONS IMPORTS PrincOpsUtils = BEGIN <<>> <> <<>> IOPage: READONLY LONG POINTER; <> RegNum: TYPE = CARDINAL; -- used to index the I/O registers <<>> Input: PROC[RegNum] RETURNS[WORD] = MACHINE CODE { <> PrincOps.zMISC, PrincOps.aINPUT; }; Output: PROC[datum: WORD, register: RegNum] = MACHINE CODE { <> PrincOps.zMISC, PrincOps.aOUTPUT; }; GetRealPage: PROC[page: PrincOps.PageNumber] RETURNS[PrincOps.RealPageNumber] = INLINE { <> GetPageValue: PROC [virtual: CARDINAL] RETURNS [state: PrincOps.InterimPageState] = MACHINE CODE { PrincOps.zMISC, PrincOps.aGETF; }; RETURN[GetPageValue[page].realPage] }; GetRealAddress: PROC[p: LONG POINTER] RETURNS[rp: LONG POINTER] = INLINE { longPtr: TYPE = MACHINE DEPENDENT RECORD [lo, hi: CARDINAL]; RETURN[ LOOPHOLE[p, longPtr].lo MOD PrincOps.wordsPerPage + PrincOpsUtils.AddressForPageNumber[ GetRealPage[PrincOpsUtils.PageNumberForAddress[p]]]]; <> }; <> firstReservedPage: PrincOps.RealPageNumber = 0; -- special display/raven memory reservedPageCount: PrincOps.PageCount = 256; <<= [0..377B) = [0..100x) = [0..256D)>> firstMapPage: PrincOps.RealPageNumber = 256; -- real memory reserved for map mapPagesCount: PrincOps.PageCount = 64; <<= [0..500B) = [0..140x) = [0..320D)>> ioPageNumber: PrincOps.RealPageNumber = 320; -- = 140x = 500B ioPageRealAddr: LONG POINTER = LOOPHOLE[240000B]; <<= 240000B = 14000x = 81920D>> ioPageRealAddrLow: WORD = 40000B; -- low half of ioPageRealAddr numberVirtualPages: PrincOps.PageCount = 40000B; -- = 16384D = 4000x ReservedMemoryUse: TYPE = {notBusy, Raven, Display}; <> <<>> SetReservedMemoryUse: PROC[use: ReservedMemoryUse, pagesNeeded: PrincOps.PageCount _ 0]; DonateReservedMemory: PROC[pagesToKeep: PrincOps.PageCount]; <> END. LOG Time: June 10, 1980 1:51 PM By: Davies Action: Create from D0InputOutput of May 15, 1980 10:54 AM. Time: June 17, 1980 11:53 AM By: McJones Action: Add GetRealPage Time: June 19, 1980 1:22 PM By: Forrest Action: reformat. Time: June 23, 1980 12:09 PM By: Forrest Action: Page<=>LongPointer, GetRealAddress. Time: July 28, 1980 11:27 AM By: Forrest Action: Upgrade to 5.0c build. Time: July 31, 1980 11:16 PM By: Forrest Action: Fix GetRealAddress. Time: November 10, 1980 2:23 PM By: Forrest Action: Add memory configuration code AND DonateReservedMemory. Time: January 22, 1981 11:25 AM By: Gobbel Action: Move DonateReservedMemory to RealMemoryImplDLion. Time: January 20, 1984 2:37 pm By: Andrew Birrell Action: Convert to Cedar 5.1.