IHFU
          IDENT  IHFU,FWA 
          ABS 
          ENTRY  IHFU 
          BASE   D
          SYSCOM B1 
          TITLE  IHFU - INJECT HARDWARE FAULT UTILITY.
*COMMENT  IHFU - INJECT HARDWARE FAULT UTILITY. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
IHFU      SPACE  4,10 
***       IHFU - INJECT HARDWARE FAULT UTILITY. 
*         D. A. HENSELER.    79/04/25.
*         P. C. SMITH.       88/06/16.
IHFU      SPACE  4,30 
***       IHFU - INJECT HARDWARE FAULT UTILITY. 
* 
*         THIS UTILITY IS PROVIDED TO FORCE HARDWARE ERRORS FOR 
*         *DFT* CHECKOUT. 
* 
*         IHFU,FAULT,MODE,TRAPS,RMA.
* 
*                FAULT - FAULT KIND.  ALLOWABLE VALUES ARE *RETRY*, 
*                        *EXCHANG*, *TRAP*, *HALT*, *PDMHALT* 
*                        OR *SOFTERR*.
*                MODE -  ALLOWABLE VALUES ARE *JOB* OR *MONITOR*. 
*                TRAPS - TRAPS ENABLED.  ALLOWABLE VALUES ARE *TRUE*
*                        OR *FALSE*.
*                RMA -   REAL MEMORY ADDRESS PARITY ERROR.  MUST BE 
*                        AN OCTAL NUMBER DIVIDED BY 1000(8).
* 
*         EXAMPLE - 
* 
*                IHFU(RETRY,JOB,FALSE,60000)
* 
*         NOTE - THIS UTILITY REQUIRES SPECIAL PRIVILEGES IN ORDER TO 
*                ISSUE THE 017 INSTRUCTIONS THAT REQUEST *EI* TO INJECT 
*                THE HARDWARE FAULT.
* 
*                THESE PRIVILEGES MAY BE OBTAINED EITHER BY RUNNING 
*                THIS UTILITY AS THE *NVE* SUBSYSTEM, OR BY USING THE 
*                *IPRDECK* ENTRY *ENABLE, HARDWARE FAULT INJECTION*.
* 
*                THERE IS A FAULT INJECTION UTILITY THAT IS ACTIVATED 
*                FROM THE SYSTEM CORE DEBUGGER FOR INJECTING FAULTS ON
*                THE 180 SIDE.  ANY CHANGES MADE TO INJECT ERRORS HERE
*                SHOULD ALSO BE ADDED THERE IF IT IS APPLICABLE.  THE 
*                180 FAULT INJECTION IS IN DECK 
*                *SYM$INJECT_HARDWARE_FAULTS*.
* 
*                SPECIAL MICROCODE IS ALSO REQUIRED TO INJECT HARDWARE
*                FAULTS.
* 
          TITLE  MACRO DEFINITIONS. 
*         MACRO DEFINITIONS.
 RT       SPACE  4,10 
**        RT - DEFINE THE RT INSTRUCTION. 
* 
 RTX,X,Q  OPDEF  P1,P2,K
+         VFD    9/017B,3/P1,3/P2,15/K,30/0 
          ENDM
          TITLE  COMMON DECKS.
*CALL     COMCMAC 
          LIST   X
*CALL     COMSCVS 
          LIST   *
          TITLE  MAIN PROGRAM.
          ORG    110B 
 FWA      BSS    0
 IHFU     SPACE  4,10 
**        IHFU - MAIN PROGRAM.
  
  
 IHFU     BSS    0           ENTRY
          SB1    1
          SA1    B1+B1       FAULT KIND PARAMETER 
          SB2    HFK         VERIFY HARDWARE FAULT KIND PARAMETER 
          SB3    HFKL 
          RJ     VIP
          NG     X6,IHFU3    IF ERROR IN HARDWARE FAULT KIND
          BX7    X6          FAULT KIND 
          SA1    A1+B1       MODE PARAMETER 
          SB2    MODE        VERIFY MODE PARAMETER
          SB3    MODEL
          RJ     VIP
          NG     X6,IHFU3    IF ERROR IN MODE FLAG
          LX6    8+8
          SA1    A1+B1       TRAPS ENABLED PARAMETER
          BX7    X7+X6       COMBINE FAULT KIND AND MODE
          SB2    TE          VERIFY TRAPS ENABLED PARAMETER 
          SB3    TEL
          RJ     VIP
          NG     X6,IHFU3    IF ERROR IN TRAPS ENABLED FLAG 
          LX6    8
          SA1    A1+B1       RMA/1000(8) OF PARITY ERROR PARAMETER
          BX7    X7+X6       COMBINE TRAPS ENABLED, MODE AND FAULT KIND 
          RJ     CDB         CONVERT DISPLAY CODE TO BINARY 
          ZR     X6,IHFU3    IF ERROR IN RMA OF PARITY ERROR
          BX2    X6          (RMA OF PARITY ERROR)/1000(8)
          BX1    X7 
          LX2    9
  
*         ISSUE *017* INSTRUCTION TO INJECT SPECIFIED FAULT.
*         (X1) = 36/0 
*                8/MODE 
*                8/TRAPS ENABLED
*                8/FAULT KIND 
*         (X2) = RMA OF PARITY ERROR. 
  
          RT     X1,X2,CVSIHF  INJECT ERROR 
          MX6    30 
          BX1    -X6*X1      ERROR CODE 
          BX2    X6*X0       NOS/VE DOWN FLAG 
          ZR     X1,IHFU1    IF NO ERROR
          MESSAGE  IHFUB,5,R *EI DID NOT RECOGNIZE FAULT KIND.* 
          EQ     IHFU4       ABORT THE JOB
  
 IHFU1    NZ     X2,IHFU2    IF NOS/VE DOWN 
          MESSAGE  IHFUC,5,R *NOS/VE UP, NEED EI.*
          EQ     IHFU4       ABORT THE JOB
  
 IHFU2    ENDRUN
  
 IHFU3    MESSAGE  IHFUA,5,R  *ERROR IN PARAMETER.* 
 IHFU4    ABORT 
  
  
 IHFUA    DATA   C*ERROR IN PARAMETER.* 
 IHFUB    DATA   C*EI DID NOT RECOGNIZE FAULT KIND.*
 IHFUC    DATA   C*NOS/VE UP, NEED EI.* 
          TITLE  PARAMETER TABLES.
 HFK      SPACE  4,10 
*         HFK - TABLE OF HARDWARE FAULT KIND VALUES.  THE VALUES
*         MUST MATCH VALUES DEFINED FOR THE 180 SIDE AND THE EI CODE. 
  
 HFK      BSS    0
          VFD    42/5LRETRY,18/0
          VFD    42/7LEXCHANG,18/1
          VFD    42/4LTRAP,18/2 
          VFD    42/4LHALT,18/3 
          VFD    42/7LPDMHALT,18/4
          VFD    42/7LSOFTERR,18/5
 HFKL     EQU    *-HFK       LENGTH OF TABLE
 MODE     SPACE  4,10 
*         MODE - TABLE OF MODE VALUES.
  
 MODE     BSS    0
          VFD    42/3LJOB,18/0
          VFD    42/7LMONITOR,18/1
 MODEL    EQU    *-MODE      LENGTH OF TABLE
 TE       SPACE  4,10 
*         TE - TABLE OF TRAP ENABLED VALUES.
  
 TE       BSS    0
          VFD    42/5LFALSE,18/0
          VFD    42/4LTRUE,18/1 
 TEL      EQU    *-TE        LENGTH OF TABLE
          TITLE  SUBROUTINES. 
 CDB      SPACE  4,10 
**        CDB - CONVERT DISPLAY CODE TO BINARY. 
* 
*         *CDB* CONVERTS AN OCTAL DISPLAY CODE NUMBER TO ITS
*         BINARY VALUE. 
* 
*         ENTRY  (X1) = OCTAL NUMBER TO CONVERT, LEFT JUSTIFIED WITH
*                       ZERO FILL.  LOW ORDER 18 BITS ARE NOT CHECKED.
* 
*         EXIT   (X6) = BINARY VALUE. 
*                (X6) = 0 IF (X1) WAS NOT OCTAL DISPLAY CODE VALUE. 
* 
*         USES   X - 0, 1, 3, 4, 6. 
*                B - 2. 
  
  
 CDB2     SX6    B0          RETURN WITH ERROR
  
 CDB      SUBR               ENTRY/EXIT 
          MX0    60-6 
          LX1    6
          SX6    B0          INITIALIZE RESULT BINARY VALUE 
          SB2    7
 CDB1     BX2    -X0*X1      DISPLAY CODE CHARACTER 
          SB2    B2-B1       DECREMENT CHARACTER COUNT
          ZR     X2,CDBX     IF ALL CHARACTERS CONVERTED, RETURN
          SX3    X2-1R0      SUBTRACT DISPLAY CODE BIAS 
          SX4    X2-1R8 
          LX6    3
          NG     X3,CDB2     IF NOT AN OCTAL NUMBER 
          PL     X4,CDB2     IF NOT AN OCTAL NUMBER 
          LX1    6           POSITION NEXT CHARACTER
          BX6    X6+X3       ADD NEXT BINARY DIGIT TO BINARY NUMBER 
          GE     B2,B0,CDB1  IF MORE CHARACTERS TO CONVERT
          EQ     CDBX        RETURN 
 VIP      SPACE  4,20 
**        VIP - VERIFY INPUT PARAMETER. 
* 
*         *VIP* CHECKS SPECIFIED PARAMETER TABLE FOR A MATCH
*         AND RETURNS A PARAMETER VALUE.
* 
*         ENTRY  (B2) = ADDRESS OF PARAMETER TABLE. 
*                (B3) = LENGTH OF PARAMETER TABLE.
*                (X1) = PARAMETER CHECKING FOR, LEFT JUSTIFIED WITH 
*                       ZERO FILL.  LOW ORDER 18 BITS ARE NOT CHECKED.
* 
*         EXIT   (X6) = PARAMETER VALUE.
*                (X6) .LT. 0 IF PARAMETER NOT FOUND.
* 
*         USES   X - 0, 2, 5, 6.
*                A - 2. 
*                B - 3. 
  
  
 VIP      SUBR               ENTRY/EXIT 
          SA2    B2          INITIAL ENTRY IN PARAMETER TABLE 
          MX0    60-18
 VIP1     BX5    X1-X2
          BX6    -X0*X2      PARAMETER VALUE
          SA2    A2+B1       NEXT ENTRY IN PARAMETER TABLE
          BX5    X0*X5
          SB3    B3-B1       DECREMENT TABLE LENGTH 
          ZR     X5,VIPX     IF MATCHING PARAMETER
          GT     B3,B0,VIP1  IF MORE ENTRIES IN PARAMETER TABLE 
          SX6    -B1         SET NO MATCHING PARAMETER FOUND
          EQ     VIPX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMCSYS 
  
  
          END 
