*DECK     PRNTMCG 
          SUBROUTINE PRNT MCG( TXT , INDX , LAB ) 
  
**        PRNT MCG - *MCG* DEBUGGING PRINT ROUTINES 
  
          IMPLICIT INTEGER(A-Z) 
          INTEGER TXT(1)
          COMMON/MCG/NINST,NSTORES,SEQTIME,ICL,RMR,DUMMY,PBI(2),DT,IWT
          COMMON/MCG/AXR,ALR,STL,RVT(24),DUM2,TRA(24),ARA(8),TFU(12)
          COMMON/MCG/LST(2),LXR,NGX,T,PC,TRS
          COMMON/MCG/ JLR,TLAB,TJP,EOQA,IIP(2),EIW,RBV(24)
  
          COMMON/LINE/LINECM(2) 
          INTEGER REGS(24),FUNITS(2,9),XREGT(2,8) 
          INTEGER SUBTTL(6) 
          DATA SUBTTL(1) /
     .58L  PC  LATE     T   TIS   TEX   TRA   TFU  USES  REG  INST     /
          DATA REGS / 2RB0,2RB1,2RB2,2RB3,2RB4,2RB5,2RB6,2RB7,
     .    2RA0,2RA1,2RA2,2RA3,2RA4,2RA5,2RA6,2RA7,2RX0,2RX1,2RX2,2RX3,
     .    2RX4,2RX5,2RX6,2RX7    /
          DATA (FUNITS(1,I),I=1,9) /5L BOOL , 5L SHFT , 5L IADD , 
     .    5L FADD , 5L MULT , 5L MUL2 , 5L DIV  , 5L INC1 , 5L INC2  /
  
          FIELD(X,P,L) = SHIFT(X,60-P).A. .N.MASK(60-L) 
  
          LINK(X) = FIELD(X,0,18) 
          RANK(X) = FIELD(X,18,15)
  
          OC(X) = FIELD(X,48,7) 
          RI(X) = FIELD(X,0,16) 
          TI(X) = FIELD(X,0,18) 
          TE(X) = FIELD(X,18,18)
          REG(X) = FIELD(X,48,6)
          FU(X)  = FIELD(X,48,6)
          LI(X) = FIELD(X,0,18) 
  
          USES(X) = FIELD(X,48,9) 
          FT(X) = FIELD(X,53,5) 
          SZ(X) = FIELD(X,23,2) 
  
          GO TO ( 1 , 100 , 200 , 300 , 400 , 500 ) INDX
  
**        PRINT OUT THE ISSUE CANIDATE LIST 
  
 1        IF( ICL .NE. 0 ) GO TO 10 
          PRINT 5,LAB 
 5        FORMAT(A6," ** ERROR **, ICL = 0"/) 
          EOQA = -EOQA
          RETURN
  
 10       LINECM = LINECM(2)
          PRINT 11,LAB,ICL
 11       FORMAT(/A6* ICL =*Z6) 
          J = 1 
*         RL,RT,RR = RANK LAST, RANK THIS, RANK REVERSAL FLAG (*ERROR*) 
          RL = RR = 0 
          K = ICL 
 20       K = LINK( TXT(K+4) )
          IF( K .EQ. 0 ) GO TO 30 
          RT = RANK( TXT(K+4) ) 
          IF( RT .LT. RL ) RR = K 
          RL = RT 
          PRINT 21,K
 21       FORMAT(Z6)
          J = J + 1 
          IF( J .LT. 15 ) GO TO 20
          J = 0 
          PRINT 22
 22       FORMAT(/12X)
          IF( RR .EQ. 0 ) GO TO 20
  
 30       IF( J .NE. 0 ) PRINT 31 
 31       FORMAT(/) 
          IF( RR .EQ. 0 ) GO TO 40
          PRINT 32,RR 
 32       FORMAT(6X,O6,* IS IN WRONG ORDER, RANK REVERSAL OR LOOP IN ICL
     .*/) 
          EOQA = -EOQA
          NRE = NRE + 1 
          IF( NRE .LE. 5 ) CALL REMARK(28L -RANK REVERSAL ERROR-       )
  
 40       LINECM = 0
          RETURN
  
**        PRINT THE ISSUED INSTRUCTION
  
 100      LIX = LI( PBI(2) )
          LIX = SHIFT( SHIFT(LIX,42) , -42) 
  
 101      OCV = OC( TXT(LIX+1) )
          U = USES( TXT(LIX+4) )
          OCV = OC( TXT(LIX+1) )
          IWD = 0 
          LINECM = LINECM(2)
          IF( OCV .GT. 7 ) GO TO 110
*                            PRINT OUT TIME FOR PSEUDO INSTRUCTION
          IF( HEADER .NE. 0  ) GO TO 104
          PRINT 111,PC,IWD,T
          PRINT 102 
 102      FORMAT(29X) 
          GO TO 120 
  
 104      PRINT 103,PC,T,U
 103      FORMAT(I4,6X,I6,24X,I6,5X)
          GO TO 120 
  
 110      TIS = TI(PBI) 
          TEX = TE(PBI) 
          FUO = FU(PBI(2))
          REGNO = REG(PBI)
          TRAT = TRA(REGNO+1) 
          TFUA = TFU(FUO+1) 
          REGNO = REGS(REGNO+1) 
          IWD = TIS - RANK( TXT(LIX+4) )
          MAXEST = MAX0( MAXEST , RANK(TXT(LIX+4))-T )
  
          IF( HEADER. EQ. 0 ) GO TO 115 
          PRINT 114,PC,IWD,T,TIS,TEX,TRAT,TFUA,U,REGNO
 114      FORMAT(I4,7I6,3X,R2)
          GO TO 120 
  
 115      PRINT 111,PC,IWD,T,TIS,TEX,TRAT,TFUA,U,REGNO
 111      FORMAT(I4,* T,TI,TE,TRA,TFU,USES *7I6,3X,R2)
  
 120      CALL PRNTRLI( TXT( LIX+1 ) )
          LINECM = 0
C         CHECK FOR XMT/SA WITH RI = 0 AND SKIP CHECK IF SO 
          IF( RI( TXT(LIX+1) ) .NE. 0 ) GO TO 240 
          IF( OCV .EQ. 10B ) RETURN 
          IF( OCV .NE. 60B ) GO TO 240
          RETURN
  
**        PRINT OUT REGISTER USEAGE INFO
 200      CONTINUE
          PRINT 201,REGS
 201      FORMAT(4X,24(3X,R2))
          LINECM = LINECM(2)
  
*         PRINT R-NUMBERS IN REGISTERS
  
          PRINT 202 
 202      FORMAT(*  RI*)
          DO 220 I = 1,24 
          IF( RVT(I) .NE. 0 ) GO TO 215 
          PRINT 211 
 211      FORMAT(5X)
          GO TO 220 
 215      PRINT 216,RVT(I)
 216      FORMAT(Z5)
 220      CONTINUE
  
*         PRINT REMAINING USES OF RI IN REG 
  
          PRINT 221 
 221      FORMAT(/*  USES D *)
          DO 230 I = 2,24 
          IF( RVT(I) .NE. 0 ) GO TO 225 
          PRINT 222 
 222      FORMAT(5X)
          GO TO 230 
  
 225      U = USES( TXT( RVT(I) + 4 ) ) 
          PRINT 226,U 
 226      FORMAT(I5)
 230      CONTINUE
          PRINT 31
 240      LINECM = 0
  
*         NOW RUN SOME CONSISENCY CHECKS
*         REG( TXT(RVT(I))) = I - 1 
  
          RUSE = 0
          DO 250 I = 2,24 
          IF( RVT(I) .EQ. 0 ) GO TO 250 
          REGNO = LINK( TXT( RVT(I) + 4 ) ) 
          IF( REGNO.EQ. I - 1 ) GO TO 250 
          IF( REGNO .EQ. 10B ) GO TO 250
          K = RVT(I)
          PRINT 246,I-1,REGNO,TXT(K+4),K
 246      FORMAT("  ERROR, REG IN RVT("O2") IS "O2,2O22)
          RUSE = 1
 250      CONTINUE
  
  
*         MAKE SURE THAT *AXR* IS CORRECT 
  
          DO 260 I = 2,24 
          IF( RBV(I) .EQ. 0 ) GO TO 260 
          BIT = AXR .A. RBV(I)
          IF( RVT(I) .NE. 0 ) GO TO 255 
          IF( BIT .NE. 0 ) GO TO 260
          PRINT 251,I-1 
 251      FORMAT(" ** ERROR **, RVT("O2") = 0 AND REG NOT AVAIL") 
          RUSE = 1
          GO TO 260 
  
 255      IF( BIT .EQ. 0 ) GO TO 260
          PRINT 256,I-1 
 256      FORMAT(" **ERROR **, RVT("O2*) " 0 AND REG IS AVAIL*) 
          RUSE = 1
 260      CONTINUE
          IF( RUSE .EQ. 0 ) RETURN
          NRUSEE = NRUSEE + 1 
          IF( NRUSEE .LE. 5 ) CALL REMARK( 22L -REG USEAGE ERROR-      )
          RETURN
  
**        PRINT FUNIT AND X-REG AVAIL TIMES 
  
 300      DO 310 I = 1,9
 310      FUNITS(2,I) = TFU(I+2)
          DO 320 I = 1,8
          XREGT(1,I) = REGS(I+16) 
 320      XREGT(2,I) = TRA(I+16)
          PRINT 321,LAB,FUNITS,XREGT,LST
 321      FORMAT(A6, 9(A5,I5)/6X,8(2X,R2,I6)," LST "I5," LLT"I6)
          RETURN
  
**        FINAL CHECK 
*         ENSURE JLR,LXR,NSTORES = 0 AND RVT(I) = 0 FOR I = 0 TO 23 
*         PRINT OUT SEQTIME AND MCG TIME
  
 400      LINECM = LINECM(2)
          CALL SETST( 0 ) 
          PRINT 401,MAXEST,DT 
 401      FORMAT(/* MCG SUMMARY, MAX(EST),DELTA T =*2I4,2X) 
  
          IF( NSTORES .GE. 0 ) GO TO 403
          PRINT 402,"N.ST = ", -NSTORES 
 402      FORMAT(A10,O20) 
 403      IF( JLR .EQ. 0 ) GO TO 404
          PRINT 402, "  JLR = ",JLR 
 404      IF( LXR .EQ. 0 ) GO TO 405
          PRINT 402, "  LXR = ",LXR 
 405      IF( (AXR.A.377777B) .EQ. 377777B ) GO TO 410
          PRINT 402 , "  AXR = " , AXR
  
 410      RVTE = 0
          DO 415 I = 1,24 
 415      RVTE = RVTE + RVT(I)
          IF( RVTE .EQ. 0 ) GO TO 420 
          PRINT 411 
 411      FORMAT(*  RVT " 0 *)
  
*                COMPUTE TIME FOR A SEQUENTIAL MACHINE
 420      T64 = -1
          DO 425 I = 2,NINST
 425      T64 = T64 + FT( TXT(4*I-1) )
  
 430      PRINT 426, SEQTIME,T64,T
 426      FORMAT(/" *********"," PERT TIME, T(6400), T = ",3I6/)
          LINECM = 0
          HEADER = 0
          RETURN
  
**        HEAD OPTION - SET LISTING HEADER FLAG AND SUB TITLE 
  
 500      HEADER = 1
          CALL SETST( 6 , SUBTTL )
          LIX = 0 
          MAXEST = 0
          GO TO 101 
  
          END 
*ENDIF
