// // Test program for VMEM // last edited August 1, 1977 4:08 PM // // Copyright Xerox Corporation 1979 get "streams.d" get "altofilesys.d" external [ // O.S. CreateDisplayStream; ShowDisplayStream OpenFile Closes; Gets; Puts; Wos; Ws; Wss Zero Timer dsp; keys // STANDARDRAM StandardRAM // Template PutTemplate // Trace Trace; ProcTrace; UnTrace TraceIndent TraceStream; TraceOuts; TraceLines // VMEM VmemSoft InitializeVmem AddBuffers; SnarfBuffer; UnsnarfBuffer MAPTRAP; LockCell; UnlockCell FlushBuffers // PRINTVMEMSTATE PrintVmemState // SOFTMAP NPROBE // ASMAP @VRR1; @VWR1; @VRR2; @VWR2 ] external // entries for VMEM [ CleanupLocks PageType PageGroupSize PageGroupBase PageGroupAlign DOPAGEIO ] external // links to ISF [ InitFmap IndexedPageIO ] manifest [ dsize = 25000 npages = #20 maps = #1000 dbs = #3000 ] static [ pbase = 4 pgmsk pstrm dbufs dhm ds fmap ] let dmap() be [ StandardRAM() let dd = vec dsize ds = CreateDisplayStream(40, dd, dsize) ShowDisplayStream(ds) TraceLines = 6 TraceStream = ds Trace(MAPTRAP, "MAPTRAP") Trace(vwrite, "VWRITE") let dbpt = vec #400 let dhmap = vec maps+3 if (dhmap&1) ne 0 then dhmap = dhmap+1 dhm = dhmap+2 let db = vec dbs dbufs = db Zero(dbufs, dbs) let dcells = vec 5 let davec = vec npages*2+1 let fp = vec lFP Zero(fp, lFP) pstrm = OpenFile("TEST.VMEM.", ksTypeReadWrite, wordItem, 0, fp) Closes(pstrm) pgmsk = 0 VmemSoft() InitializeVmem(dhmap+2, maps, dbpt, dcells, 5, dhmap, pmstat) InitFmap(davec, npages*2, fp, true) fmap = davec AddBuffers(dbufs, dbufs+dbs) pause("Initialized ...") for j = 0 to 6 do [ vwrite(testaddr(j))!0 = testvalue(j); nzscan() ] for j = 0 to 6 do [ let val = vwrite(testaddr(j))!0 Wos(ds, val) if val ne testvalue(j) then Wss(TraceOuts, " ??????????") Puts(TraceOuts, $*N) nzscan() ] FlushBuffers() PrintVmemState(ds) Wss(TraceOuts, "Done*N") pause("Done ...") ] and testaddr(j) = pbase lshift 8 + (table[ #444;#1111;#1555;#2222;#2666;#3333;#3777 ])!j and testvalue(j) = #111000+j and pause(s) be [ Ws(s) Gets(keys) Puts(dsp, $*N) ] and nzscan() be [ for p = dbufs to dbufs+dbs-1 do if @p ne 0 then PutTemplate(TraceOuts, "...$7UO:$7UO*N", p, @p) for p = dhm by 2 to dhm+maps-2 do if @p ne 0 then PutTemplate(TraceOuts, "$3UO:$7UO$7UO*N", p-dhm, @p, p!1) ] and vwrite(addr) = VWR1(addr) and CleanupLocks() be [ ] and PageType(vp) = valof [ let pn = vp-pbase if (pn & #177770) ne 0 then pause("Bad vp") let mask = 1 lshift pn if (pgmsk & mask) ne 0 resultis 1 pgmsk = pgmsk + mask resultis -1 ] and PageGroupSize(vp) = 1 and PageGroupBase(vp) = vp and PageGroupAlign(vp) = 0 and DOPAGEIO(vp, core, np, wflag) be [ let t = vec 1 let it = Timer(t) IndexedPageIO(fmap, 3*vp+2, core, np, wflag) PutTemplate(TraceOuts, "$S vp $UO, $UO page(s), core $UO: $UD ms*N", (wflag? "Write", "Read"), vp, np, core, Timer(t)-it) ] and pmstat(ptr, n) be [ PutTemplate(TraceOuts, "MSPROC called with$7UO$7UO*N", ptr, n) if n ge 0 then for p = ptr by 2 to ptr+n-2 do PutTemplate(TraceOuts, "$9UO$7UO*N", p!0, p!1) ]