//D0prin0.bcpl Procedures to prettyprint various registers and memories
// Last edited: 20 October 1981
get "d0.d"
manifest [ get "d0regmem.d" ]
external
[
// MASM
@WssCSS; PutsCSS; WssCS1; GetField
// MPATTERN
@PATTERN
// MIOC
Wns; DWns
// MSYM
SearchBlocks
// MRGN
CharInputRoutine
// MTXTBUF
ClearInText
// MCMD
WnsCSS; WnsCSSD; WnsCS1; WnsCS1D; CmdCommentStream
// MPRINS
NWss
// D0ASM
stNotInVM
// D0GO
PrCCV
// D0VM
LookUpAA; @VirtualP
// D0PRIN0ASM
SALUFtab
//Defined here
PrinCYCLECONTROL; PrinParity; PrinBootReason; PrinTask
PrinALUResult; PrinSALUF; PrinAATOVA
PrinMNBR; PrinIMAddr; PrintWrdByt; PrintMADDR; PrintMAP
]
let PrinIMAddr(X,DVec,AVec,ExtRadix) be
[ let Val = DVec!0 rshift 4
//Prevent crashing in PrCCV routine due to attempting to prettyprint a
//value in virtual mode which is not in VM.
if Val eq #7777 then Val = -1
PrCCV((lv Val)-1,VirtualP ? IMx,IMXx)
for N = 4 to 13 by 3 do CharInputRoutine(GetField(N,3,lv Val)+60B)
ClearInText()
]
and PrinAATOVA(X,DVec,AVec,ExtRadix) be
[ test DVec!0 ge 0
ifso
[ let AVec1 = vec 1; AVec1!0 = 0; AVec1!1 = DVec!0 & #7777
SearchBlocks(CmdCommentStream,IMx,AVec1,-1,0)
WssCSS(" = abs. "); WnsCSS(LookUpAA(AVec1!1))
]
ifnot WssCSS(stNotInVM)
]
and PrinCYCLECONTROL(X,DVec,AVec,ExtRadix) be
[ let MaskT1 =
table [ #1; #3; #7; #17; #37; #77; #177; #377;
#777; #1777; #3777; #7777; #17777; #37777; #77777; #177777 ]
let DBX,MWX = DVec!0 rshift 12,(DVec!0 rshift 8) & #17
let Mask0 = MaskT1!MWX
let Mask1 = MaskT1!(#17-DBX) & not MaskT1!((#17-DBX-MWX) & #17)
WssCSS("DBX[2:5]="); WnsCSS(DBX)
WssCSS(", MWX[0:3]="); WnsCSS(MWX)
WssCSS(". On RF: A←LCy[R,"); WnsCSS((DBX+MWX+1) & #17)
WssCSS("] and "); WnsCSS(Mask0)
WssCS1("On WFA: A←LCy[R,"); WnsCS1((#17-DBX-MWX) & #17)
WssCS1("] and "); WnsCS1(Mask1)
WssCS1(". On WFB: A←R and not "); WnsCS1(Mask1)
]
//***Should define a TaskN memory and print task numbers symbolically.
and PrinTask(X,DVec,AVec,ExtRadix) be
[ Wns(CmdCommentStream,DVec!0 rshift 12,0,ExtRadix)
]
and PrinParity(X,DVec,AVec,ExtRadix) be
[ PATTERN = DVec!0
NWss("StackOverflow ",#100000)
NWss("ControlStore PE ")
NWss("R Bus PE ")
NWss("Memory Error ")
]
and PrinBootReason(X,DVec,AVec,ExtRadix) be
[ PATTERN = DVec!0
NWss("Tester Boot ",#20000)
NWss("Maintenance Panel Boot ")
NWss("WatchDogTimer Boot ")
NWss("Boot F ")
NWss("Power Restore Boot ")
NWss("Parity Error Boot ")
]
and PrinALUResult(X,DVec,AVec,ExtRadix) be
[ PATTERN = DVec!0
NWss("ALU>=0 ",#100000)
NWss("CARRY' ")
NWss("ALU=0 ")
NWss("OVERFLOW ")
PATTERN = DVec!0 xor #177777
NWss("ALU<0 ",#100000)
NWss("Carry ")
NWss("ALU#0 ")
NWss("OVERFLOW' ")
]
and PrinSALUF(X,DVec,AVec,ExtRadix) be
[ let Str = SALUFtab+((DVec!0 rshift 8) & #77)
Str = Str + Str!0
WssCSS(Str)
]
and PrinMNBR(X,DVec,AVec,ExtRadix) be
[ PrintWrdByt(X,DVec,AVec,ExtRadix)
WssCSS(" = "); PutsCSS($-); WnsCSS(-(DVec!0))
]
and PrintWrdByt(X,DVec,AVec,ExtRadix) be
[ Wns(CmdCommentStream,DVec!0,0,ExtRadix); WssCSS(" = ")
Wns(CmdCommentStream,DVec!0 rshift 8,0,ExtRadix); WssCSS(",,")
Wns(CmdCommentStream,DVec!0 & #377,0,ExtRadix)
]
and PrintMADDR(X,DVec,AVec,ExtRadix) be
[ switchon AVec!1 into
[
case 2B: WssCSS("No. test iterations="); endcase
case 6B: WssCSS("address bits always 1 on failures="); endcase
case 7B: WssCSS("Union of address bits that were 1 on failures=")
endcase
case 11B: DblCntPrint(DVec,
"D0 hung in recvbyte ",
"D0 hung at onset of sendbyte "); return
case 12B: DblCntPrint(DVec,
"D0 failed to ack sendbyte ",
"D0 never removed ack "); return
case 13B: DblCntPrint(DVec,
"CheckStopped glitched ",
"STACK0 to 3 inconsistent "); return
case 14B: test DVec!1 eq 0
ifso WssCSS("KERNEL was transmitted OK")
ifnot
[ if DVec!1 ne 0 do
[ WssCSS("Last boot failure error at word ")
WnsCSS(DVec!0)
WssCSS(" of KERNEL transmission; retried because:")
]
let T0,T1 = DVec!1 rshift 12,(DVec!1 rshift 8) & #17
let T2,T3 = (DVec!1 rshift 4) & #17,DVec!1 & #17
if T0 ne 0 do
[ WssCS1("Direction incorrect "); PrinOccurrence(T0)
]
if T1 ne 0 do
[ WssCS1("Write ack not 0 initially "); PrinOccurrence(T1)
]
if T2 ne 0 do
[ WssCS1("Write ack not received "); PrinOccurrence(T2)
]
if T3 ne 0 do
[ WssCS1("Write ack did not drop "); PrinOccurrence(T3)
]
]
return
default: endcase
]
DWns(CmdCommentStream,DVec,32,0,ExtRadix)
]
and DblCntPrint(DVec,S1,S2) be
[ WssCSS(S1); WnsCSSD(DVec!0); WssCSS(" times")
WssCS1(S2); WnsCS1D(DVec!1); WssCS1(" times")
]
and PrinOccurrence(N) be
[ switchon N into
[
case 1: WssCS1("once"); return
case 2: WssCS1("twice"); return
default: WnsCS1D(N); WssCS1(" times"); return
]
]
and PrintMAP(X,DVec,AVec,ExtRadix) be
[ PATTERN = DVec!0
NWss("LogSE ",#100000)
NWss("WP ")
NWss("Dirty ")
NWss("Ref ")
WssCSS("Real page = "); WnsCSS(PATTERN & #7777)
]