//D1Prin3X.bcpl Procedures to prettyprint ALUFM and DMux signals in
//the range 20B to 37B. The signals from ProcH are printed on
//CmdCS1; ProcL on CmdCommentStream.
// Last edited: 13 July 1979
get "d1.d"
manifest [ get "d1dmux.d" ]
external [
// OS
Puts
// MIOC
Wns
// MASM
Wss; @WssCSS; PutsCSS; WssCS1; PutsCS1
// MCMD
CmdCommentStream; CmdCS1; WnsCSS; WnsCS1; WnsCS1D
// MPRINS
PrinV0; PrinV1; NWss; NWss1
// MPATTERN
@PATTERN
// D1PRIN2
PrintWrdByt
// Defined here
PrintDMXx; PrintALUFM
]
let PrintALUFM(X,DVec,AVec,ExtRadix) be
[ let Val = DVec>>lh & ((DVec!0 & 400B) ne 0 ? 37B,237B)
WssCSS("Alu function = ")
WssCSS(selecton Val into
[
case 0: case 37B: case 236B: "A"
case 1: "not A"
case 3: "(not A) or (not B)"
case 5: "(not A) or B"
case 6: "2**A"
case 7: "All1's"
case 11B: "(not A) and (not B)"
case 13B: "not B"
case 14B: "A+B"
case 15B: "A xnor B"
case 17B: "A or (not B)"
case 21B: "(not A) and B"
case 22B: "A-B-1"
case 23B: "A xor B"
case 25B: "B"
case 27B: "A or B"
case 31B: "all0's"
case 33B: "A and (not B)"
case 35B: "A and B"
case 36B: "A-1"
case 200B: "A+1"
case 206B: "2**A+1"
case 214B: "A+B+1"
case 222B: "A-B"
default: "undefined arithmetic op"
] )
]
and PrintDMXx(Addr) be
[ let DV2 = vec 1
switchon Addr into
[
case dALUB: WssCSS("Alub"); endcase
case dALUA: WssCSS("Alua"); endcase
case dSHMV: WssCSS("shmv"); endcase
case dMAR: WssCSS("MAR"); endcase
default:
WssCSS("ProcL:"); WssCS1("ProcH:")
switchon Addr into
[
case dABCON:
NWssBoth(" MarMuxAEn",100200B)
NWssBoth(" AmuxEn",40100B)
PrinBothPHL(" Amux",(PATTERN rshift 4) & 1403B)
NWssBoth(" IOBout",4010B)
NWssBoth(" BmuxEn",2004B)
PrinBothPHL(" Bmux",PATTERN & 1403B); return
case dPERR:
NWssBoth(" IOPerr",4010B)
NWssBoth(" MdPerr",2004B)
NWssBoth(" RmPerr",1002B)
NWssBoth(" TmPerr",401B)
NWss1(" EMU",#100000)
NWss1(" CkMdParity")
NWss(" StkSela",#200)
NWss(" StkSelSaved")
NWss(" IOBoutSaved")
NWss(" ←MDSaved"); return
case dPRFA:
NWssBoth(" Last=Curr",100200B)
NWssBoth(" Curr=Next",40100B)
NWssBoth(" Shift",20040B)
NWssBoth(" IOBin",10020B)
PrintFA(CmdCommentStream,PATTERN & 17B)
PrintFA(CmdCS1,(PATTERN rshift 8) & 17B)
return
case dSCCON:
NWssBoth(" RepeatCurrC",40100B)
NWssBoth(" Holda",20040B)
NWss1(" LdTaskSim",#10000)
NWss(" LdHoldSim",#20)
NWssBoth(" FFshift",4010B)
NWssBoth(" ShcWriteEn",2004B)
NWssBoth(" LoadCnt",1002B)
NWss1(" PropCnt",#400)
NWss(" DecCnt",#1); return
case dQPDCON:
NWssBoth(" QshiftL",100200B)
NWssBoth(" QshiftR",40100B)
NWssBoth(" RmaskEn",20040B)
NWssBoth(" LmaskEn",10020B)
NWss1(" ShiftBitsEn",#4000)
NWss(" ALUFWriteEn",#10)
PrinBothPHL(" Pmux",PATTERN & 3407B); return
case dALUCON:
DV2!0 = PATTERN lshift 8
NWss1(" Pdata.00",#100000)
NWss1(" Pdata.04")
NWss1(" TIOAWriteEn")
NWss1(" TIOABypass")
NWss1(" MBWriteEn")
NWss1(" MBBypass")
PrinV1(" MBMux",(PATTERN rshift 8) & 3B)
NWss(" Pdata.08",#100)
NWss(" Pdata.12")
PutsCSS($ )
PrintALUFM(nil,DV2,nil,8); return
case dNEXTCL:
PrinBothPHL(" LastNext",(PATTERN rshift 4) & 7417B)
PrinBothPHL(" CurrLast",PATTERN & 7417B); return
case dRADDR:
PrinV1(" Task2Bk",PATTERN<<nib0)
PrinV1(" Task3Bk",PATTERN<<nib1)
PrinV0(" RbWadr",PATTERN<<rh)
return
case dSTKRB:
NWss1(" BCWriteEn",#100000)
NWss1(" Cnt=Zero")
NWss1(" IOatta")
NWss1(" ResEqZero")
NWss1(" ResLtZero")
NWss1(" ALUCarry")
NWss1(" Overflow")
NWss1(" RmLtZero")
NWss(" RBaseBypass")
NWss(" SelRBaseWadr")
NWss(" RBaseWriteEn")
NWss(" BumpRBase")
NWss(" BumpRStk")
NWss(" StkPMux1")
NWss(" StkPWriteEn")
NWss(" RmOdd"); return
case dRTSB:
NWss1(" ReSchedWrEn",#100000)
NWss1(" NextMacro")
NWss(" StkPSaveEn",#200)
NWss(" StkError")
NWssBoth(" RbWriteEn",20040B)
NWssBoth(" RbSelMd",10020B)
NWssBoth(" RbBypassDly",4010B)
NWssBoth(" TbWriteEn",2004B)
NWssBoth(" TbSelMd",1002B)
NWssBoth(" TbBypass",401B); return
case dPJUNK:
NWssBoth(" FFok",100200B)
NWssBoth(" B←Ext",10020B)
NWssBoth(" RisIFdata",1002B)
NWssBoth(" TisIFdata",401B)
NWss1(" NextData",#20000)
NWss1(" FF.0mem",#4000)
NWss1(" FF.1mem")
NWss(" ←MD",#100)
NWss(" ←MDI")
PrinV0(" SbTskDly",(PATTERN rshift 2) & 3B)
return
]
]
WssCSS(" = "); PrintWrdByt(nil,lv PATTERN,nil,8)
]
and PrinBothPHL(Str,ValHlf) be
[ PrinV1(Str,ValHlf<<lh)
PrinV0(Str,ValHlf<<rh)
]
and NWssBoth(Str,ValHlf) be
[ NWss(Str,ValHlf<<rh); NWss1(Str,ValHlf & 177400B)
]
and PrintFA(S,Val) be
[ test Val eq 0
ifso Wss(S," FA is 0 (no fn)")
ifnot test (Val & -Val) eq Val //Just one bit?
ifso
[ Wss(S," FA=")
Wns(S,selecton Val into
[
case 1: 3
case 2: 2
case 4: 1
case 8: 0
] ,0,8)
]
ifnot
[ Wss(S," ?FA is "); Wns(S,Val,0,8); Wss(S,"?")
]
]