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