          IDENT  IHFU
          ENTRY  IHFU

*copyc comscvs

 RT       SPACE  3,15
*         RT - DEFINE THE RT INSTRUCTION.
*
 RTX,X,Q  OPDEF  P1,P2,K
+         VFD    9/017B,3/P1,3/P2,15/K,30/0
          ENDM
          SPACE  4,11
**        IHFU - UTILITY PROGRAM TO INJECT HARDWARE FAULTS.
*                THIS UTILITY IS PROVIDED TO FORCE HARDWARE ERRORS FOR
*                *DFT* CHECKOUT.
*
*         INPUT: THIS PROGRAM IS CALLED WITH THE FOLLOWING 4 PARAMETERS:
*                     FAULT KIND.
*                     MODE.
*                     TRAPS ENABLED.
*                     RMA OF PARITY ERROR DIVIDED BY 1000(8).
*
*                ALLOWABLE VALUES FOR FAULT KIND ARE *RETRY*, *EXCHANG*,
*                *TRAP*, *HALT*, *PDMHALT* OR *SOFTERR*.
*                ALLOWABLE VALUES FOR *MODE* ARE *JOB* OR *MONITOR*.
*                ALLOWABLE VALUES FOR *TRAPS ENABLED* ARE *TRUE* OR
*                *FALSE*.
*                THE *RMA* MUST BE SPECIFIED AS AN OCTAL NUMBER DIVIDED
*                BY 1000(8).
*                AN EXAMPLE OF A CALL:
*                     IHFU(RETRY,JOB,FALSE,60000)
*
*         OUTPUT:
*                THE SPECIFIED FAULT IS INJECTED.
*
*
*         CALLS: CDB, VIP.
*
*         USES:  A1, A6,   B1 - B3,   X1, X2, X6, X7.
*
*         NOTE:  THIS UTILITY REQUIRES SPECIAL PRIVILEGES IN ORDER TO
*                ISSUE THE 017 INSTRUCTIONS THAT REQUEST *EI* TO INJECT
*                THE HARDWARE FAULT.
*
*                THE EASIEST WAY TO RUN THIS JOB WITH THE REQUIRED
*                PRIVILEGE IS TO MODIFY AN EXISTING NVEXXXX FILE IN
*                THE LIBRARY CATALOG BY DELETING ALL COMMANDS AFTER
*                THE *USER* COMMAND AND INSERTING THE FOLLOWING:
*                     GET,IHFU/UN=XXX.
*                     DIS.
*                THIS WILL INITIATE A JOB AND BRING UP *DIS*, AT THIS
*                TIME TYPE IN THE DESIRED *IHFU* COMMAND.
*                THE *IHFU BINARY HAD TO BE PREVIOUSLY LOADED.
*
*                THIS MODULE WAS PUT ON THE SOURCE LIBRARY WITHOUT A
*                DESTINATION FILE SO THAT IT WOULD NOT GET IN THE WAY OF
*                INTEGRATION BUILDS.  WHEN COMPILING MODULE TO GENERATE
*                A BINARY THE *OL* PARAMETER MUST BE SPECIFIED ON THE
*                *COMPILE_SOURCE* COMMAND.
*
*                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.
*

 IHFU     BSS    0           ENTRY
          SB1    1           B1 = 1 THROUGH OUT PROGRAM
          SA1    B1+B1       FAULT KIND PARAMETER
          SB2    HFK         ADDRESS OF HARDWARE FAULT KIND TABLE
          SB3    HFKL        LENGTH OF HARDWARE FAULT KIND TABLE
          RJ     VIP         VERIFY HARDWARE FAULT KIND PARAMETER
          NG     X6,IHFU15   IF ERROR IN HARDWARE FAULT KIND
          BX7    X6          FAULT KIND
          SA1    A1+B1       MODE PARAMETER
          SB2    MODE        ADDRESS OF MODE TABLE
          SB3    MODEL       LENGTH OF MODE TABLE
          RJ     VIP         VERIFY MODE PARAMETER
          NG     X6,IHFU15   IF ERROR IN MODE FLAG
          LX6    8+8
          SA1    A1+B1       TRAPS ENABLED PARAMETER
          BX7    X7+X6       ADD MODE
          SB2    TE          ADDRESS OF TRAPS ENABLED TABLE
          SB3    TEL         LENGTH OF TRAPS ENABLED TABLE
          RJ     VIP         VERIFY TRAPS ENABLED PARAMETER
          NG     X6,IHFU15   IF ERROR IN TRAPS ENABLED FLAG
          LX6    8
          SA1    A1+B1       RMA/1000(8) OF PARITY ERROR PARAMETER
          BX7    X7+X6       ADD TRAPS ENABLED FLAG
          RJ     CDB         CONVERT DISPLAY CODE TO BINARY
          ZR     X6,IHFU15   IF ERROR IN RMA OF PARITY ERROR
          BX2    X6          (RMA OF PARITY ERROR)/1000(8)
          BX1    X7
          LX2    9           RMA OF PARITY ERROR

*
*         ISSUE 017 INSTRUCTION TO INJECT SPECIFIED FAULT.
*         X1 = 36/0
*              8/MODE
*              8/TRAPS ENABLED
*              8/FUALT 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,IHFU5    IF NO ERROR
          MESSAGE IHFUB,5,R
          JP     IHFU20      ABORT THE JOB

 IHFU5    BSS    0
          NZ     X2,IHFU10   IF NOS/VE DOWN
          MESSAGE IHFUC,5,R
          JP     IHFU20      ABORT THE JOB

 IHFU10   BSS    0
          SX6    3REND
          LX6    59-17
          SA6    B1
          JP     *           LOOP

*         ERROR IN PARAMETER VERIFICATION, DISPLAY MESSAGE AND ABORT
*         THE JOB.

 IHFU15   BSS    0
          MESSAGE IHFUA,5,R
 IHFU20   BSS    0
          SX6    3RABT
          LX6    59-17
          SA6    B1
          JP     *           LOOP

 IHFUA    DIS    ,*ERROR IN PARAMETER.*
 IHFUB    DIS    ,*EI DID NOT RECOGNIZE FAULT KIND.*
 IHFUC    DIS    ,*NOS/VE UP, NEED EI.*

*         ALLOWABLE HARDWARE FAULT KIND VALUES.  THE PARAMETER 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

*         ALLOWABLE MODE VALUES.

 MODE     BSS    0
          VFD    42/3LJOB,18/0
          VFD    42/7LMONITOR,18/1
 MODEL    EQU    *-MODE      LENGTH OF TABLE

*         ALLOWABLE TRAP ENABLED VALUES.

 TE       BSS    0
          VFD    42/5LFALSE,18/0
          VFD    42/4LTRUE,18/1
 TEL      EQU    *-TE        LENGTH OF TABLE
          SPACE  4,10
**        VIP - VERIFY INPUT PARAMETER.
*                CHECKS SPECIFIED PARAMETER TABLE FOR A MATCH
*                AND RETURNS A PARAMETER VALUE.
*
*         ENTRY:
*                (B1) = 1.
*                (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.  NEGATIVE VALUE IF NOT FOUND.
*
*         CALLS: NONE.
*
*         USES: A2,   B3,   X0, X2, X5, X6.
*
          SPACE  2
 VIP      DATA   0           ENTRY/EXIT
          SA2    B2          INITIAL ENTRY IN PARAMETER TABLE
          MX0    60-18
 VIP5     BSS    0
          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,VIP      IF MATCHING PARAMETER
          GT     B3,B0,VIP5  IF MORE ENTRIES IN PARAMETER TABLE
          SX6    -B1         SET NO MATCHING PARAMETER FOUND
          JP     VIP         RETURN
          SPACE  4,10
**        CDB - CONVERT DISPLAY CODE TO BINARY.
*                CONVERTS AN OCTAL DISPLAY CODE NUMBER TO ITS
*                BINARY VALUE.
*
*         ENTRY:
*                (B1) = 1.
*                (X1) = OCTAL NUMBER TO CONVERT, LEFT JUSTIFIED WITH
*                       ZERO FILL.  LOW ORDER 18 BITS ARE NOT CHECKED.
*
*         EXIT:
*                (X6) = BINARY VALUE.  ZERO IF NOT OCTAL DISPLAY
*                       CODE VALUE.
*
*         CALLS: NONE.
*
*         USES: B2,   X0, X1, X3, X4, X6.
*
          SPACE  2
 CDB10    BSS    0
          SX6    B0          RETURN WITH ERROR

 CDB      DATA   0           ENTRY/EXIT
          MX0    60-6
          LX1    6
          SX6    B0          INITIALIZE RESULT BINARY VALUE
          SB2    7
 CDB5     BSS    0
          BX2    -X0*X1      DISPLAY CODE CHARACTER
          SB2    B2-B1       DECREMENT CHARACTER COUNT
          ZR     X2,CDB      IF ALL CHARACTERS CONVERTED, RETURN
          SX3    X2-1R0      SUBTRACT DISPLAY CODE BIAS
          SX4    X2-1R8
          LX6    3
          NG     X3,CDB10    IF NOT AN OCTAL NUMBER
          PL     X4,CDB10    IF NOT AN OCTAL NUMBER
          LX1    6           POSITION NEXT CHARACTER
          BX6    X6+X3       ADD NEXT BINARY DIGIT TO BINARY NUMBER
          GE     B2,B0,CDB5  IF MORE CHARACTERS TO CONVERT
          JP     CDB         RETURN

          END    IHFU
