EXTERNALROUTINE PRINT PHOTOGRAPH (INTEGER PHOTO ADDR, SLAVE ADDR, SEIP, C
OCP TYPE,ADATE, ATIME, MODE, INTEGERFN MAP FILE ADDRESS, ROUTINE SETLST)
!
! MODE = 0 IF CALLED FROM DUMP PROGRAM
! MODE = 1 IF CALLED FROM JOURNAL ANALYSIS
!
INTEGERFNSPEC MAP FILE ADDRESS (INTEGER VIRTUAL ADDRESS)
ROUTINESPEC SETLST (INTEGER OCP PORT)
ROUTINESPEC PRINT OCP PHOTO (INTEGER START ADDR)
ROUTINESPEC PRINT SAC PHOTO (INTEGER START ADDR,PORT)
ROUTINESPEC PRINT SMAC PHOTO (INTEGER START ADDR)
ROUTINESPEC PRINT REGISTERS (INTEGER START ADDR)
ROUTINESPEC ANALYSE SEIP (INTEGER START ADDR)
ROUTINESPEC PRINT SLAVES (INTEGER START ADDR, SLAVE ADDR)
ROUTINESPEC PRINT FRAME (INTEGER START ADDR)
STRING (22) FNSPEC UNDERLINE (INTEGER LEN)
INTEGERFNSPEC GET REGISTER (INTEGER FROM)
SYSTEMROUTINESPEC PHEX(INTEGER N)
!
INTEGER I,START,OCP,MULTISAC,HWPHOTO,HWFAIL,SETIMEOUT,RETRY
INTEGER RA0,PSTBA,LSTBA,MULTIOCP,PHOTOREGDUMP
!
CONSTINTEGER YES=1,NO=0
CONSTINTEGER TOP14BITS =X'FFFC0000'
CONSTINTEGER TOP17BITS = X'FFFF8000'
CONSTSTRING (17) VSN="PHOTO 4C 17/12/80"
CONSTSTRING (4) ARRAY OCP TYPES(1:6)=C
"2950","2960","2970","2980","2972","2976"
CONSTSTRING (11) ISONPORT=" IS ON PORT"
CONSTSTRING (10) PHOTO="PHOTOGRAPH"
!
SETIMEOUT=NO
PHOTOREGDUMP=NO
RETRY=-1
IF SEIP<0 THEN OCP=-SEIP AND HWFAIL=NO ELSE HWFAIL=SEIP>>27&3 C
AND OCP=SEIP>>29; ! FAILING OCP AND FAILURE CODE
!
IF OCP TYPE>3 START ; ! PHOTODUMP SUCCESSFUL?
PHOTOREGDUMP=SEIP>>17&1
HWPHOTO=YES
IF HWFAIL#NO START
IF SEIP>>3&3=3 THEN SETIMEOUT=YES; ! SYSTEM ERROR TIMEOUT?
IF HWFAIL=2 THEN RETRY=SEIP>>18&1; ! RETRY ATTEMPTED IF SET
FINISH
HWFAIL=(X'1320'>>(4*HWFAIL))&15
FINISHELSE HWPHOTO=SEIP>>18&1!!1
HWPHOTO=NO IF SEIP<0 OR (HWFAIL=NO AND SEIP>>7&1=1)
!
START=PHOTO ADDR; ! START OF PHOTOGRAPH
I=INTEGER(START+144)>>28; ! EXT INT PORTS (0-3) IN CONFIG REG
MULTIOCP=(I&1+I>>1&1)
I=I>>2
MULTISAC=(I&1+I>>1)-1
!
PRINTSTRING(OCP TYPES(OCP TYPE)." ".PHOTO." ANALYSIS")
SPACES(60)
PRINTSTRING(VSN.UNDERLINE(24))
!
ANALYSE SEIP (START)
!
UNLESS SEIP<0 OR OCP TYPE<4 START ; ! PHOTO ONLY CODED FOR P4'S
PRINT REGISTERS (START) UNLESS PHOTOREGDUMP=NO
NEWPAGE
UNLESS HWPHOTO=NO START
PRINT OCP PHOTO (START)
START=START+2048; ! OCP PHOTO SIZE
!
IF OCP TYPE=4 START ; ! 2980 ONLY
CYCLE I=0,1,MULTISAC
PRINT SAC PHOTO (START,I)
START=START+1024; ! SAC PHOTO SIZE
REPEAT
!
START=START+1024 UNLESS MULTISAC=YES
PRINT SMAC PHOTO (START)
FINISH
!
! PRINT CONTENTS OF SLAVES
!
IF MULTIOCP=YES THEN SETLST(OCP)
IF MODE=0 THEN RA0=X'81000000'
PRINT SLAVES (PHOTO ADDR, SLAVE ADDR)
NEWPAGE
!
FINISH
FINISH
!
!
ROUTINE ANALYSE SEIP (INTEGER START ADDR)
INTEGER I,J,TIMEOUT
OWNSTRING (22) ARRAY HWFAILS(0:3)="SOFTWARE ","IRRECOVERABLE ",""(2)
CONSTSTRING (10) REC="RECOVERED "
CONSTSTRING (7) FORCED="FORCED "
CONSTSTRING (8) RET="RETRIED "
CONSTSTRING (5) ERR="ERROR"
CONSTSTRING (12) SUC="SUCCESSFULLY"
CONSTSTRING (3) SNO="NO "
CONSTSTRING (5) ARRAY P2PHOTO(0:1)="MINI ","FULL "
CONSTSTRING (25) ARRAY SWERR(6:15)="ACS=0","SW GENERATED SYSTEM ERROR",
"SEG TABLE FORMAT ERROR","SSN ODD","MASKED EXTRACODE","MASKED OUT",
"MASKED SYSTEM CALL INT","MASKED PROGRAM ERROR INT",
"MASKED VIRTUAL STORE INT","ILLEGAL VIRTUAL STORE INT"
! THE FOLLOWING HW ERRORS ARE DIVIDED AMONGST THE MACHINE RANGE SUCH AS
! (2:15) = P4 , (16:29) = P3 , (30:34) = P2
CONSTSTRING (25) ARRAY HWERR(3:34)= C
"SYSTEM ERROR TIMEOUT","STORE TIMEOUT","WRITE BUFFER FAIL",
"STRING","ARITHMETIC","OPERAND","MODIFY","STACK","DISPLACEMENT",
"FETCH","TRANSLATOR","SMAC 0 FAIL","STORE FAIL",
"INSTRUCTION SLAVE FAIL","STACK SLAVE FAIL","AGU FUNCTION FAIL",
"INSTRUCTION BUFFER FAIL","ARU CONTROL SYSTEM","ARU DATA SYSTEM",
"AGU CONTROL SYSTEM","AGU DATA SYSTEM","PORT ACTIVATE TIMEOUT",
"ANY TIMEOUT","OCP TIMEOUT","SMAC IMAGE STORE TIMEOUT",
"SMAC SINGLE BIT FAIL","SMAC MULTIBIT FAIL","MICROPROGRAM DETECTED ERR",
"DATA PARITY","MICROPROGRAM PARITY","SAV PARITY","DECODER PARITY"
CONSTSTRING (10) UFAIL=" UNIT FAIL"
STRINGNAME DATE,TIME
!
HWFAILS(2)=REC
HWFAILS(3)="UN".REC
DATE==STRING(ADATE)
TIME==STRING(ATIME)
PRINTSTRING("
".OCP TYPES(OCP TYPE)." SYSTEM ".ERR)
SPACES(20)
PRINTSTRING("DATE ".DATE." TIME ".TIME.UNDERLINE(17)."PARAMETER = ")
IF SEIP<0 START ; ! SOFTWARE FORCED
WRITE(SEIP,1)
PRINTSTRING("
".FORCED.HWFAILS(0).ERR."
".SNO.PHOTO."
FAILING OCP".ISONPORT)
WRITE(OCP,1)
FINISHELSESTART ; ! SOFTWARE OR HARDWARE
PHEX(SEIP)
PRINTSTRING("
OCP DETECTED ")
PRINTSTRING(FORCED) IF HWFAIL=NO AND SEIP>>7&1=1
PRINTSTRING(HWFAILS(HWFAIL))
PRINTSTRING("HARDWARE ") IF HWFAIL#NO
PRINTSTRING(ERR.ISONPORT); ! FAILING PORT
WRITE(OCP,1)
PRINTSTRING(" AT ACR")
UNLESS SETIMEOUT=YES THEN I=SEIP ELSE I=INTEGER(START ADDR +X'48')
! IF SYSTEM ERROR TIMEOUT ON P4 - GET ACR FROM PHOTO
WRITE(I>>20&15,2); ! ACR LEVEL
!
! TYPE OF FAILURE
PRINTSTRING("
FAILURE CODE IS")
WRITE(HWFAIL,1)
PRINTSTRING(" - ")
HWFAILS(2)=RET.SUC
UNLESS RETRY=NO THEN HWFAILS(3)=RET."UN".SUC C
ELSE HWFAILS(3)="RETRY IS POSSIBLE"
PRINTSTRING(HWFAILS(HWFAIL))
IF RETRY=YES THEN PRINTSTRING(" (BIT 13 SET)")
!
! PHOTOGRAPH AREA
I=SEIP>>16&1
IF HWPHOTO=NO THEN PRINTSTRING("
".SNO) ELSESTART
NEWLINE
IF OCP TYPE=2 THEN PRINTSTRING(P2PHOTO(I)) ELSESTART
PRINTSTRING("SMAC")
IF OCP TYPE>3 AND PHOTOREGDUMP=NO THEN PRINTSTRING(" 0") ELSE WRITE(I,1)
SPACE
FINISH
FINISH
PRINTSTRING(PHOTO)
!
! REG DUMP AREA
UNLESS OCP TYPE>3 AND PHOTOREGDUMP=YES START
IF OCP TYPE<4 THEN I=SEIP>>17&1!!1
NEWLINE
PRINTSTRING(SNO) IF I=0
PRINTSTRING("SSN+1 DUMP")
FINISH
!
PRINTSTRING("
PC IN REG DUMP IS INVALID") IF OCP TYPE>3 AND SEIP>>19&1=1
!
TIMEOUT=NO
!
! REASON FOR FAIL
CYCLE I=15,-1,3
J=SEIP>>I&1; ! J=1 IF BIT SET FROM FAIL BITS 16-29
IF J=1 OR TIMEOUT=YES START
!
NEWLINE
IF HWFAIL=NO START ; ! SOFTWARE ERROR
EXITIF I<6; ! ONLY BITS 16-25 APPLY
PRINTSTRING(SWERR(I))
!
IF I=13 AND HWPHOTO=YES START ; ! PROGRAM ERROR - GET (CLASS,SUBCLASS) FROM PHOTO
J=INTEGER(START ADDR +X'440')>>22&X'FF'
PRINTSTRING(" PROGRAM ".ERR." IS (")
WRITE(J>>4&15,2)
PRINTSTRING(" ,")
WRITE(J&15,2)
PRINTSTRING(" )")
FINISH
!
FINISHELSESTART ; ! HARDWARE ERROR
!
UNLESS OCP TYPE>2 START ; ! P2 ONLY
EXITIF I<7; ! ONLY BITS 16-24 APPLY
IF I=14 OR I=15 THEN PRINTSTRING(HWERR(I+14))
UNLESS I=10 OR I=11 THEN PRINTSTRING(HWERR(I+23)) ELSESTART
IF I=11 THEN PRINTSTRING(HWERR(4)) ELSE PRINTSTRING(HWERR(26))
FINISH
!
FINISHELSESTART
IF OCP TYPE<4 THEN PRINTSTRING(HWERR(I+14)) ELSESTART ; ! P3 ONLY
!
! P4 ONLY
IF I=4 THEN TIMEOUT=YES ELSESTART ; ! TIMEOUT
IF I=3 AND J=0 THEN PRINTSTRING(HWERR(4)) ELSESTART ; ! STORE TIMEOUT
PRINTSTRING(HWERR(I)); ! SYSTEM ERROR TIMEOUT
PRINTSTRING(UFAIL) IF 6<=I<=13
FINISH
FINISH
FINISH
FINISH
FINISH
FINISH
REPEAT
FINISH
!
END ; ! OF ANALYSE SEIP
!
!
ROUTINE PRINT REGISTERS (INTEGER START ADDR)
INTEGERARRAYFORMAT RF(0:15)
INTEGERARRAYNAME VREGISTER
INTEGERARRAY REGISTER(0:15)
INTEGER I
CONSTINTEGERARRAY DISP(9:15)=X'108',X'138',X'140',X'700',X'708',X'710',X'718'
!
VREGISTER==ARRAY(START ADDR +X'580',RF); ! VISIBLE REGISTER DUMP IN FRAME 11
CYCLE I=0,1,15
REGISTER(I)=VREGISTER(I)
REPEAT
!
! OBTAIN REGISTERS FROM PHOTO DUMP AFTER TIMEOUT ON P4'S
!
IF SETIMEOUT=YES START
REGISTER(0)=GET REGISTER(START ADDR +X'200'); ! SSN/LNB
REGISTER(1)=REGISTER(1)!INTEGER(START ADDR +X'48'); ! PSR
REGISTER(2)=(INTEGER(START ADDR +X'248')&TOP17BITS)>>14!C
(INTEGER(START ADDR +X'250')&TOP14BITS); ! PC
REGISTER(3)=INTEGER(START ADDR +X'50'); ! SSR
REGISTER(4)=GET REGISTER(START ADDR +X'210'); ! SSN/SF
REGISTER(5)=INTEGER(START ADDR +X'80'); ! IT
REGISTER(6)=INTEGER(START ADDR +X'88'); ! IC
REGISTER(7)=GET REGISTER(START ADDR +X'218'); ! CTB
REGISTER(8)=GET REGISTER(START ADDR +X'208'); ! XNB
CYCLE I=9,1,15
REGISTER(I)=INTEGER(START ADDR +DISP(I)); ! B,DR0,DR1,A0-A3
REPEAT
FINISH
!
PRINTSTRING("
".OCP TYPES(OCP TYPE)." OCP REGISTERS (".PHOTO.")".UNDERLINE(18).C
"SSN/LNB PSR PC SSR SSN/SF IT IC".C
" CTB LSTB0 LSTB1
")
CYCLE I=0,1,7
PHEX(REGISTER(I))
SPACES(2)
REPEAT
SPACES(10)
PHEX(INTEGER(START ADDR +X'160')); ! LSTB0
SPACES(2)
LSTBA=INTEGER(START ADDR +X'150'); ! LSTB1
PHEX(LSTBA)
PRINTSTRING("
XNB B DR0 DR1 A0 A1 A2".C
" A3 PSTB0 PSTB1
")
CYCLE I=8,1,15
PHEX(REGISTER(I))
SPACES(2)
REPEAT
SPACES(10)
PHEX(INTEGER(START ADDR +X'158')); ! PSTB0
SPACES(2)
PSTBA=INTEGER(START ADDR +X'148'); ! PSTB1
PHEX(PSTBA)
END ; ! OF PRINT REGISTERS
!
!
ROUTINE PRINT OCP PHOTO (INTEGER START ADDR)
INTEGER I
CONSTSTRING (8) ARRAY OCP PHOTO FRAME TITLE(0:15)= C
"STACK SL","CRITIC ","MOD DATA","INST.SL.","DISPLAC.",
"TRANS. ","TRANS.EX","OP.SLAVE","OP.BUFF.","WR.BUFF.",
"MOD. MP.","NOT USED","AU MULT.","STRING U","AU DATA ","AU MPROG"
PRINTSTRING(OCP TYPES(OCP TYPE)." OCP ".PHOTO." OCP".ISONPORT)
WRITE(OCP,1)
PRINTSTRING(UNDERLINE(19))
CYCLE I=0,1,15
UNLESS I=11 START
PRINTSTRING(OCP PHOTO FRAME TITLE(I))
PRINT FRAME(START ADDR +I<<7); ! FRAME SIZE = 128
FINISH
REPEAT
END ; ! OF PRINT OCP PHOTO
!
!
ROUTINE PRINT SAC PHOTO (INTEGER START ADDR, PORT)
INTEGER I
CONSTSTRING (8) ARRAY SAC PHOTO FRAME TITLE(0:7)= C
"SAC 0 ","SAC 1 ","SAC 2 ","D.C.U. ",
"TRUNK AD","TRUNK EH","TRUNK JM","TRUNK NR"
PRINTSTRING("SAC ".PHOTO." SAC".ISONPORT)
WRITE(PORT,1)
PRINTSTRING(UNDERLINE(14))
CYCLE I=0,1,7
UNLESS I>3 AND INTEGER(START ADDR +I<<7)=-1 START
PRINTSTRING(SAC PHOTO FRAME TITLE(I))
PRINT FRAME(START ADDR +I<<7); ! FRAME SIZE = 128
FINISH
REPEAT
END ; ! OF PRINT SAC PHOTO
!
!
ROUTINE PRINT SMAC PHOTO (INTEGER START ADDR)
INTEGER I,J,START
OWNSTRING (1) SMAC ID="A"
CONSTSTRING (6) ARRAY SMAC PHOTO FRAME TITLE(0:1)="SMAC 0","SMAC 1"
IF SMAC ID="E" THEN SMAC ID="A"
START=START ADDR
CYCLE J=1,1,4; ! 4 SMACS
PRINTSTRING("SMAC ".SMAC ID." ".PHOTO)
PRINTSTRING(UNDERLINE(17))
CYCLE I=0,1,1
PRINTSTRING(SMAC PHOTO FRAME TITLE(I))
PRINT FRAME(START )
START=START+128; ! FRAME SIZE = 128
REPEAT
CHARNO(SMAC ID,1)=CHARNO(SMAC ID,1)+1
REPEAT
END ; ! OF PRINT SMAC PHOTO
!
!
ROUTINE PRINT SLAVES (INTEGER START ADDR, SLAVE ADDR)
INTEGERFNSPEC GET SLAVE (INTEGER FROM)
LONGINTEGERFNSPEC GET ATU SLAVE (INTEGER FROM)
STRING (47) FNSPEC SLAVE TITLE (INTEGER TYPE)
ROUTINESPEC PRINT BLOCK SLAVE (INTEGER TYPE)
ROUTINESPEC PHEX CONTENTS (INTEGER N)
ROUTINESPEC GET AGES
INTEGERNAME LW,RW
LONGINTEGER L
INTEGERARRAY STACK VALIDS,STACK CAMS(0:7)
INTEGERARRAY AGE(0:7)
INTEGER SEG,CAMAD,CAM,LINE,START,I,J,K,VALIDS,FLAG,POS,REJ
STRING (19) HEADING
!
CONSTINTEGER UNASSIGNED=X'80808080'
CONSTSTRING (8) ADDRESS="ADDRESS "
CONSTSTRING (6) SVALID="VALID "
CONSTSTRING (4) SAGE="AGE "
CONSTSTRING (5) SLINE="LINE "
CONSTSTRING (25) CONTENTS=" CONTENTS
"
CONSTSTRING (5) ARRAY VALID(0:1) =" N "," Y "
CONSTSTRING (11) STABLE=" TABLE ENTR"
CONSTSTRING (4) PAGE="PAGE"
CONSTSTRING (3) SEQ=" = "
CONSTSTRING (4) SP4=" "
!
HEADING=" CAM ".ADDRESS.SVALID
IF MODE=0 START
PSTBA=PSTBA+RA0; ! VA OF PSTB
LSTBA=LSTBA+RA0; ! VA OF LSTB
FINISHELSE POS=SLAVE ADDR; ! START OF SLAVES
I=ADDR(L)
LW==INTEGER(I)
RW==INTEGER(I+4)
!
! INSTRUCTION SLAVE
!
SEG=INTEGER(START ADDR +X'190')&TOP14BITS; ! PD SEG
START=START ADDR +X'1A0'; ! FRAME 3 (CAMS)
CYCLE CAM=0,1,3
EXITIF INTEGER(START +CAM<<3)&X'10000000'#0
REPEAT
CYCLE I=0,1,3
J=CAM-I
AGE(I)=J
IF J=0 THEN CAM=I+4
REPEAT
!
PRINT BLOCK SLAVE (0); ! INSTRUCTION SLAVE
!
! STACK SLAVE
!
PRINTSTRING("
".SLAVE TITLE(2)."LNB".SEQ)
I=GET REGISTER(START ADDR +X'200'); ! SSN/LNB
SEG=I&TOP14BITS
PHEX(I)
PRINTSTRING(" SF".SEQ)
PHEX(GET REGISTER(START ADDR +X'210')); ! SSN/SF
PRINTSTRING(SP4.SLINE.CONTENTS.HEADING."REJ ")
CYCLE LINE=0,1,3
PRINTSTRING(SP4.SVALID)
WRITE(LINE,2)
REPEAT
NEWLINES(2)
!
I=INTEGER(START ADDR +X'60'); ! CAM VALIDS/REJ PTR
J=I>>12&15; ! REJ PTR
START=START ADDR; ! FRAME 0
CYCLE K=0,1,7
L=LONGINTEGER(START)>>24; ! LNWN VALIDS/CAMS
STACK VALIDS(K)=LW
STACK CAMS(K)=RW
START=START+8
REPEAT
K=0
!
CYCLE CAM=0,1,15
WRITE(CAM,2)
SPACES(2)
IF CAM<8 START
VALIDS=STACK VALIDS(K)>>4
CAMAD=STACK CAMS(K)>>14
FINISHELSESTART
VALIDS=STACK VALIDS(K)&15
CAMAD=STACK CAMS(K)
FINISH
CAMAD=CAMAD&X'3FFF0'!SEG
PHEX(CAMAD)
PRINTSTRING(VALID(I>>(31-CAM)&1))
IF CAM=J THEN PRINTSTRING(" * ".SP4) ELSE SPACES(8)
CYCLE LINE=0,1,3
PRINTSTRING(VALID(VALIDS>>(3-LINE)&1))
PHEX CONTENTS(GET SLAVE(CAMAD))
CAMAD=CAMAD+4
REPEAT
NEWLINE
IF CAM=7 THEN K=0 ELSE K=K+1
REPEAT
!
! OPERAND SLAVE
!
NEWPAGE
START=START ADDR +X'380'; ! FRAME 7
I=INTEGER(START ADDR +X'3C8'); ! PEQ (CAM VALIDS)
SEG=INTEGER(START ADDR +X'3D0'); ! SHA/WPE
K=INTEGER(START ADDR +X'3D8'); ! LINE VALIDS
REJ=INTEGER(START ADDR +X'3E0')>>4; ! REJ PNTR STATS
GET AGES
!
PRINT BLOCK SLAVE (1); ! OPERAND SLAVE
!
! ATU SLAVE
!
NEWPAGE
PRINTSTRING(SLAVE TITLE(3).HEADING.PAGE."D ".SAGE.SP4." SEG.". C
STABLE."Y ".SP4.PAGE.STABLE."IES
")
CAM=0
START=START ADDR +X'288'; ! FRAME 5 (CAMS)
L=LONGINTEGER(START ADDR +X'2E0')<<4; ! REJ PNTR STATS CAMS 0-7
REJ=LW
GET AGES
WHILE CAM#16 CYCLE
VALIDS=INTEGER(START+8); ! CAM VALIDS
K=INTEGER(START+16); ! SEGS PAGED
CYCLE LINE=0,1,7
WRITE(CAM,2)
SPACES(2)
CAM=CAM+1
CAMAD=INTEGER(START)&X'FFFFF800'
PHEX(CAMAD)
I=7-LINE
J=K>>I&1; ! SEG PAGED IF SET
PRINTSTRING(VALID(VALIDS>>I&1)." ".VALID(J))
WRITE(AGE(LINE),2)
SPACES(6)
IF MODE=0 START
IF CAMAD&X'80000000'#0 THEN SEG=PSTBA ELSE SEG=LSTBA; ! PUBLIC OR LOCAL SEG
SEG=SEG+CAMAD>>15&X'FFF8'
FINISH
L=GET ATU SLAVE(SEG)
PHEX CONTENTS(LW); ! 1ST WORD SEGMENT TABLE ENTRY
SPACES(2)
PHEX CONTENTS(RW); ! 2ND WORD SEGMENT TABLE ENTRY
IF J=1 OR MODE=1 START ; ! GET PAGE TABLE ENTRIES IF SEGMENT PAGED
SPACES(4)
IF MODE=0 THEN I=RA0+RW&X'FFFFFF8'+CAMAD>>8&X'3F8'; ! EVEN/ODD PAIR OF PTE'S
L=GET ATU SLAVE(I)
PHEX CONTENTS(LW); ! EVEN PAGE TABLE ENTRY
SPACES(2)
PHEX CONTENTS(RW); ! ODD PAGE TABLE ENTRY
FINISH
NEWLINE
START=START+8
REPEAT
IF CAM=8 START
START=START ADDR +X'300'; ! FRAME 6
L=LONGINTEGER(START ADDR +X'2E8')<<4; ! REJ PNTR STATS CAMS 8-15
REJ=LW
GET AGES
FINISH
REPEAT
!
!
ROUTINE PHEX CONTENTS (INTEGER N)
IF FLAG=0 THEN PHEX(N) ELSE SPACES(8)
END ; ! OF PHEX CONTENTS
!
!
INTEGERFN GET SLAVE (INTEGER FROM)
INTEGER A
IF MODE=0 START
A=MAP FILE ADDRESS(FROM)
IF A=UNASSIGNED THEN FLAG=1 ANDRESULT =A ELSE FLAG=0 ANDRESULT =INTEGER(A)
FINISHELSESTART
A=INTEGER(POS)
POS=POS+4
IF A=UNASSIGNED THEN FLAG=1 ELSE FLAG=0
RESULT =A
FINISH
END ; ! OF GET SLAVE
!
!
LONGINTEGERFN GET ATU SLAVE (INTEGER FROM)
INTEGER A
IF MODE=0 START
A=MAP FILE ADDRESS(FROM)
IF A=UNASSIGNED THEN FLAG=1 ANDRESULT =A ELSE FLAG=0 ANDRESULT =LONGINTEGER(A)
FINISHELSESTART
A=INTEGER(POS)
POS=POS+8
IF A=UNASSIGNED THEN FLAG=1 ELSE FLAG=0
RESULT =LONGINTEGER(POS-8)
FINISH
END ; ! OF GET ATU SLAVE
!
!
STRING (47) FN SLAVE TITLE (INTEGER TYPE)
CONSTSTRING (12) ARRAY NAME(0:3)=" INSTRUCTION"," OPERAND"," STACK"," ATU"
RESULT =OCP TYPES(OCP TYPE).NAME(TYPE)." SLAVE". C
UNDERLINE(LENGTH(NAME(TYPE))+10)
END ; ! OF SLAVE TITLE
!
!
ROUTINE GET AGES
!
! EVALUATES REJECTION POINTER PRIORITY AGEING FOR OPERAND AND ATU SLAVES
!
INTEGER I,J,K
CONSTINTEGERARRAY PTR(1:28)= 21,22,23,24,25,26,27,
14,15,16,17,18,19,7,8,9,10,11,0,1,2,3,4,5,6,12,13,20
CONSTINTEGERARRAY BASE(0:6)= 0,6,11,15,18,20,21
!
REJ=REJ&X'FFFFFFF'
CYCLE I=0,1,7
AGE(I)=0
CYCLE J=0,1,7
IF I#J START
IF I<J THEN K=REJ>>PTR(BASE(I)+J)&1 ELSE K=¬REJ>>PTR(BASE(J)+I)&1
AGE(I)=AGE(I)+K
FINISH
REPEAT
REPEAT
END
!
!
ROUTINE PRINT BLOCK SLAVE (INTEGER TYPE)
INTEGER N,M,CAM,CAMAD,VALIDS,LINE,J
CONSTSTRING (20) ARRAY HDG(0:1)=""," SHA WPE PC RA "
!
PRINTSTRING(SLAVE TITLE(TYPE))
IF TYPE=0 START
PRINTSTRING("PI".SEQ)
PHEX((INTEGER(START ADDR +X'248')&TOP17BITS)>>14! C
(INTEGER(START ADDR +X'250')&TOP14BITS))
NEWLINES(2)
FINISH
PRINTSTRING(HEADING.SAGE.HDG(TYPE).SP4.SLINE.ADDRESS.SVALID.CONTENTS)
!
CYCLE CAM=0,1,3<<TYPE+TYPE
WRITE(CAM,2)
SPACES(2)
IF TYPE=0 START
I=INTEGER(START)
CAMAD=SEG!I&X'3FFC0'
N=18
M=I>>20; ! IV
FINISHELSESTART
L=LONGINTEGER(START)
CAMAD=LW
N=23-CAM
M=K>>(28-CAM<<2)
FINISH
PHEX(CAMAD)
PRINTSTRING(VALID(I>>N&1)); ! PEQ (CAM VALID)
WRITE(AGE(CAM),2)
SPACES(2)
IF TYPE=1 THEN PRINTSTRING(VALID(SEG>>(31-CAM)&1).VALID(SEG>>(23-CAM)&1). C
VALID(RW>>28&1).VALID(RW>>29&1)); ! SHA/WPE/PC/RA
VALIDS=M&15
CYCLE LINE=0,1,3
WRITE(LINE,5)
SPACES(3)
PHEX(CAMAD)
N=VALIDS>>(3-LINE)&1
PRINTSTRING(VALID(N)." ")
UNLESS TYPE=0 AND N=0 START ; ! DON'T PRINT INST. SLAVE IF NON VALID
CYCLE J=0,1,3
PHEX CONTENTS(GET SLAVE(CAMAD))
SPACES(2)
CAMAD=CAMAD+4
REPEAT
FINISHELSE CAMAD=CAMAD+16 AND POS=POS+16
NEWLINE
SPACES(20*TYPE+23)
REPEAT
NEWLINE
START=START+8
REPEAT
!
END ; ! OF PRINT BLOCK SLAVE
!
!
END ; ! OF PRINT SLAVES
!
!
ROUTINE PRINT FRAME (INTEGER START ADDR)
LONGINTEGERARRAYFORMAT FRAME(0:15)
LONGINTEGERARRAYNAME ROW
INTEGER I,J,K
LONGINTEGER L
STRING (133) BUFF
CONSTSTRING (16) HEXDS="0123456789ABCDEF"
CONSTSTRING (3) ARRAY SET(0:1)=" ."," 1"
CONSTSTRING (6) NL3SP3="
"
!
PRINTSTRING(NL3SP3." ")
CYCLE I=0,1,35
IF I&3=0 THEN WRITE(I,3) ELSE WRITE(I,2)
REPEAT
!
ROW==ARRAY(START ADDR,FRAME)
CYCLE J=0,1,15
BUFF=NL3SP3
CHARNO(BUFF,4)=CHARNO(HEXDS,J+1); ! INSERT ROW NO. IN HEX
K=6
L=ROW(J)
!
CYCLE I=60,-4,28
K=K+1
IF I=28 THEN CHARNO(BUFF,K)=' ' AND K=K+1
CHARNO(BUFF,K)=CHARNO(HEXDS,L>>I&15+1); ! INSERT CONTENTS IN HEX
REPEAT
LENGTH(BUFF)=K
!
CYCLE I=63,-1,28
BUFF=BUFF." " IF I&3=3
K=L>>I&1
BUFF=BUFF.SET(K); ! INSERT BIT PATTERN OF CONTENTS
REPEAT
!
PRINTSTRING(BUFF)
REPEAT
NEWPAGE
END ; ! OF PRINT FRAME
!
!
STRING (27) FN UNDERLINE (INTEGER LEN)
CONSTSTRING (25) DASH="
------------------------"
CONSTSTRING (2) LINES="
"
STRING (27) S
S=DASH
LENGTH(S)=LEN+1
RESULT =S.LINES
END ; ! OF UNDERLINE
!
!
INTEGERFN GET REGISTER (INTEGER FROM)
INTEGER I,J
I=INTEGER(FROM)<<1
J=I<<1&X'3FFFC'
RESULT =I&TOP14BITS!J
END ; ! OF GET REGISTER
!
!
END ; ! OF PRINT PHOTOGRAPH
!
ENDOFFILE