// // VMEMINIT -- initialize VMEM // last edited August 1, 1977 1:48 PM // // Copyright Xerox Corporation 1979 get "vmem.d" external // entry procedures [ InitializeVmem // (hashmap, hashmapsize, Bptab, lclist, llclist[, statbase, statproc, nobufsproc]) ] external // procedures [ // O.S. DefaultArgs FalsePredicate TruePredicate CallSwat SetBlock; Zero // VMEM defaultNoBufsProc LockOnly; LockZero // VMEMA REHASHMAP ] external // statics [ // VMEM @HASHMAP; @HASHMAPSIZE; @HASHMAPMASK @HASHMAPSIZE2 @HASHMAP1 @HASHMAPTOP MAPSTATBASE @MapStatPtr MapStatProc NoBufsProc @Bpt; @BptLast EMPTYXX NAXX LockedCells; EndLockedCells; LastLockedCell ] let InitializeVmem(HM, HMSIZE, BPTAB, LCL, LLCL, MSBASE, MSPROC, NBPROC; numargs n) be [ DefaultArgs(lv n, -5, 0, FalsePredicate, defaultNoBufsProc) if (HMSIZE & (HMSIZE-1)) ne 0 then CallSwat("Bad HMAPSIZE -- InitializeVmem") HASHMAP, HASHMAPSIZE = HM+(HM&1), HMSIZE HASHMAPMASK = HASHMAPSIZE-2 HASHMAPSIZE2 = HMSIZE rshift 1 HASHMAP1 = HASHMAP+HMflagOffset HASHMAPTOP = HASHMAP+HASHMAPSIZE MAPSTATBASE = MSBASE+(MSBASE&1) MapStatPtr = MAPSTATBASE MapStatProc = MSPROC NoBufsProc = NBPROC Bpt, LockedCells, EndLockedCells = BPTAB, LCL, LCL+(LLCL & not 1)-LCsize LastLockedCell = LCL Zero(HASHMAP, HASHMAPSIZE) let dummypage(vp, bits) = valof [ let hp = REHASHMAP(vp) hp>>HM.NKEY = not vp hp>>HM.FLAGWD = bits resultis (hp-HASHMAP) lshift 7 ] EMPTYXX = dummypage(EmptyVP, CLEANbit+NOTREFbit+DUMMYbit) NAXX = dummypage(NaVP, CLEANbit+NOTREFbit+DUMMYbit) SetBlock(Bpt, NAXX, BptSize) @Bpt = 0 LockOnly = FalsePredicate LockZero = TruePredicate ]