// // Print micro-PC histogram // last edited December 5, 1980 12:31 PM // // >pcprint (input file) (.MB file) (output file) // Local flags on input file: // input/l means input is in Lisp format // bank,addr/a means input is in XM get "streams.d" get "altodefs.d" // for bankRegs external [ // OS Closes DoubleAdd Endofs MoveBlock OpenFile ReadBlock dsp fpComCm // GP SetupReadParam; ReadParam; EvalParam // Template PutTemplate // PCHist ReadLispPCHist ScanMBForPCHist PrintPCHist ] manifest [ lHist = 10000b ] let PCPrint(nil, nil, nil) be [ let com = OpenFile(0, ksTypeReadOnly, charItem, 0, fpComCm) let nv, swv = vec 100, vec 100 SetupReadParam(nv, swv, com, swv) let dnv = vec 100 let mnv = vec 100 let lispf = false let hist = vec lHist*2 let xaddr = vec 2 xaddr!0 = -1 ReadParam($P, "Data input: ", dnv) switchon (swv!0 eq 0? 0, swv!1 & 137b) into [ case $A: getAddr(nv, xaddr) getXMHist(xaddr, hist) dnv!0 = 0 endcase case $L: lispf = true default: ] ReadParam($P, ".MB file: ", mnv) let lst = ReadParam($O, "Listing output file: ") let in = nil if dnv!0 ne 0 then [ [ in = OpenFile(dnv, ksTypeReadOnly, wordItem) if in ne 0 then [ let r = 0 test lispf ifso r = ReadLispPCHist(in, hist) ifnot [ if (ReadBlock(in, hist, lHist*2) ne (lHist*2)) % not Endofs(in) then r = "Incorrect file length" ] Closes(in) if r eq 0 break PutTemplate(dsp, "$S*N", r) ] ReadParam($P, "Data input file: ", dnv) ] repeat ] [ in = OpenFile(mnv, ksTypeReadOnly, wordItem) if in ne 0 then [ let r = ScanMBForPCHist(in) Closes(in) if r eq 0 break PutTemplate(dsp, "$S*N", r) ] ReadParam($P, ".MB file: ", mnv) ] repeat Closes(com) PutTemplate(lst, "Data from $S / $S*N*N", (dnv!0 eq 0? "XM", dnv), mnv) PrintPCHist(lst, hist) Closes(lst) ] and fail(str) be [ PutTemplate(dsp, "*N$S*N", str) finish ] and getAddr(argvec, xaddr) be [ let dgt = vec 2 dgt!0 = 0 xaddr!0, xaddr!1 = 0, 0 let xbank = 0 for i = 1 to argvec!0 do [ test argvec!i eq $, ifso [ xbank = xaddr!1; xaddr!1 = 0 ] ifnot [ xaddr!0 = (xaddr!0 lshift 3) + (xaddr!1 rshift 13) xaddr!1 = xaddr!1 lshift 3 dgt!1 = argvec!i-$0 DoubleAdd(xaddr, dgt) ] ] xaddr!0 = xaddr!0 + xbank ] and getXMHist(xaddr, hist) be [ if xaddr!0 eq -1 then fail("No XM address specified") let XMLDA = table[ 105000b // mov 0 1 61025b // xmlda 1401b // jmp 1,3 ] @bankRegs = xaddr!0 let addr = xaddr!1 for i = 0 to lHist*2-1 do hist!i = XMLDA(addr+i) ]