DIRECTORY Dragon USING [Word], IO USING [STREAM], Rope USING [ROPE]; CacheOps: CEDAR DEFINITIONS = BEGIN PageSize: NAT = 256; StdLinesPerCache: NAT = 64; WordsPerLine: NAT = 4; PreFetchAdrCmd: TYPE = MACHINE DEPENDENT {VictimReal(0), RefRealMap(1), RefRealAssemble(2), RefVirtual(3)}; VirtualMemory: TYPE = REF; defaultVM, lastVM: VirtualMemory; NewVirtualMemory: PROC RETURNS [ m: VirtualMemory ]; VMFileFormat: ERROR; VirtualMemoryFromFile: PROC [ m: VirtualMemory, fileName: Rope.ROPE ]; NewVirtualMemoryFromFile: PROC [ fileName: Rope.ROPE ] RETURNS [ m: VirtualMemory ]; VirtualMemoryToStream: PROC [ m: VirtualMemory, s: IO.STREAM ]; EnumerateVirtualMemory: PROC [ m: VirtualMemory, wdProc: PROC [ addr, data: Dragon.Word, readOnly, dirty: BOOL _ FALSE, privateData: REF _ NIL ], privateData: REF _ NIL ]; Cache: TYPE = REF; lastCache: Cache; NewCache: PROC [ mem: REF ANY _ NIL, nLines: NAT _ StdLinesPerCache ] RETURNS [ c: Cache ]; AccessPurpose: TYPE = {read, write}; Access: PROC [ c: Cache, address: Dragon.Word, purpose: AccessPurpose _ read, cycleNow: INT _ 0 ] RETURNS [ data: Dragon.Word, rejectCycles: NAT, mapFault, memAccessProtect: BOOL ]; Write: PROC [ c: Cache, address, data: Dragon.Word ]; IORead: PROC [ c: Cache, address: Dragon.Word, cycleNow: INT _ 0 ] RETURNS [ data: Dragon.Word, rejectCycles: NAT ]; IOWrite: PROC [ c: Cache, address, data: Dragon.Word, cycleNow: INT _ 0 ] RETURNS [ rejectCycles: NAT ]; SetFlags: PROC [ c: Cache, address: Dragon.Word, memAccessProtect, dirty, mapped: BOOL ]; SetIntervalFlags: PROC [ c: Cache, startAddress, endAddress -- [startAddress..endAddress] -- : Dragon.Word, memAccessProtect, dirty, mapped: BOOL ]; GetFlags: PROC [ c: Cache, address: Dragon.Word ] RETURNS [ memAccessProtect, dirty, mapped: BOOL ]; Parity32: PROC [ w: Dragon.Word ] RETURNS [ odd: BOOL ]; Parity16: PROC [ n: CARDINAL ] RETURNS [ odd: BOOL ]; END.  CacheOps.mesa .. functions for Dragon Cache Rosemary simulations. For now it assumes that there is only virtual memory. Mapping and map operations are not yet implemented. Modified for Rosemary5. McCreight, March 5, 1986 9:40:14 am PST Last Edited by: Barth, July 3, 1984 4:04:51 pm PDT Last Edited by: Louis Monier April 2, 1987 5:11:11 pm PST Don Curry May 1, 1987 2:41:08 pm PDT VirtualMemoryFromStream: PROC [ m: VirtualMemory, s: IO.STREAM ]; = {m _ NewVirtualMemory[]; VirtualMemoryFromFile[m, fileName]}; ΚΞ˜™ J™ŸJ™Icode™'J™2K™9K™$—J˜šΟk ˜ Jšœœ˜Jšœœœ˜Jšœœœ˜J˜—šœ œ œ˜Jš˜J˜Jšœ œ˜Jšœœ˜Jšœœ˜J˜Jšœœœ œC˜kJ˜Jšœœœ˜Jšœ!˜!J˜JšΟnœœœ˜4J˜Jšœ˜šžœœ$œ˜FJ˜—Jšžœœœœ™AJ˜šžœœœœ˜TJšœ@™@J™—Jšžœœœœ˜@J˜Jšžœœœ-œœœœœœ˜«J˜J˜Jšœœœ˜J˜J˜Jšžœœœœœ œœ˜[J˜J˜Jšœœ˜$J˜Jš žœœLœœ$œœ˜΅J˜šžœœ*˜5J˜—Jš žœ-œœ$œ˜uJ˜š žœœ3œœœ˜hJ˜—šžœœDœ˜YJ˜—šžœœ&Οc œ1œ˜”J˜—šžœœ$œ$œ˜dJ˜—Jšžœœœœ˜8J˜Jš žœœœœœ˜5J˜Jšœ˜J˜—J˜—…—„ \