// VMemExtra.bcpl. virtual memory package debugging
// Last modified March 20, 1985 10:27 AM by Bill van Melle
// Last modified May 25, 1983 11:21 AM by Bill van Melle
// Last modified June 25, 1982 2:42 PM by Bill van Melle
// Last modified March 29, 1982 2:56 PM by Bill van Melle
get "LispBcpl.decl"
get "VMem.decl"
external [ // defined here
PrintPageTable
// Other procs used
@BGetBase
// Raid procs
Ws; Wo; Wn; Wc; CRLF; RaidReset; PrintPtr; RAIDCode; GetFXP
// Statics
LastRealPageNo; @RMSK
// Other external VMem procs (from VmemA.asm)
ReadFlags // (VP) -> oldflags
]
let PrintPageTable() be
[
let oldstate, start = 0, 0
let n = RPoffset
let bp = Bpt+1 // start of page table: dummy entry
Ws ("Real pg virtual page flags")
CRLF()
[
n = n+1
bp = bp+3 // 3 words per entry
let vp = BGetBase(BptSegment, bp)
if oldstate & ((vp ne oldstate) % (n ge LastRealPageNo))
then [
Wo (start) // show range of pages
if start ne n-1
then [ Ws(" thru "); Wo(n-1) ]
Ws (oldstate eq EMPTY? " empty", " unavailable")
CRLF()
oldstate, start = 0, 0
]
if n ge LastRealPageNo
then break
test (vp eq EMPTY) % (vp eq UNAVAIL)
ifso [ // no vp here, collapse maybe
if oldstate eq 0
then [ oldstate = vp; start = n ]
]
ifnot [
Wo(n); Wc($*S)
Wo(vp); Ws (" (");
Wo(vp rshift 8, true); Wc($,) // translate to seg, page#
Wo(vp & RMSK, true); Ws (") "); Wc(9)
if BGetBase(BptSegment, bp-1) ls 0
then Ws (" locked")
let flags = ReadFlags(vp)
if (flags & REFbit) ne 0
then Ws (" ref")
if (flags & DIRTYbit) ne 0
then Ws (" dirty")
CRLF()
]
] repeat
]