          IDENT  DFT4,70B
          CIPPU  J
          MEMSEL 16
          BASE   MIXED
          TITLE  CTM$DFT 990 CLASS (DFT4).
          COMMENT *SMD* LVL=11
          COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992
 DFT      SPACE  4,10
***       DFT - DEDICATED FAULT TOLERANCE.
*         B. R. HANSON.      82/06/21. (PRECURSOR KNOWN AS SMU)
*         G. J. FALCONER.    85/08/05. (DFT V1.0)
*         L. K. SCHENECKER.  85/08/05. (CYBER 990 OVERLAY)
*         G. J. FALCONER.    86/02/27. (DFT V2.0)
*         L. K. SCHENECKER.  86/02/27. (CYBER 990 OVERLAY ENHANCEMENTS)
 DFT      SPACE  4,10
***       DFT PERFORMS:
*
*         1) CAPTURING THE CONTENT OF MAINFRAME MAINTENANCE REGISTERS
*         FOR ERROR LOGGING, AND CLEARING HARDWARE ELEMENT ERRORS.
*
*         2) ON CERTAIN MODELS (990) RESTARTING PROCESSOR AFTER CONTROL
*         MEMORY PARITY ERRORS.
*
*         3) THE ACTUAL SEQUENCE OF STEPS TO DEADSTART THE SYSTEM FROM
*         C170 STATE OPERATION TO DUAL-STATE OPERATION OR TO RETURN IT TO
*         STANDALONE C170 OPERATION.  THIS IS PERFORMED UPON THE REQUEST
*         OF THE PP BOOT (*VPB* STATE OF *SCI*).
*
*         4) PROVIDING EXTERNALIZATIONS OF *2AP* FUNCTIONS TO NOS/VE,
*         NOS, AND NOS/BE.
 CONTROL  SPACE  4,10
**        ASSEMBLY PARAMETERS.


 PRGM     SET    2           SET *OVERLAY* MACRO TO *DFT* NAMES
 PPTYPE   EQU    0           TURN ON TRACKING OF UPPER/LOWER PP
 MCH$     EQU    0           DEFINE *MCH* ROUTINE IN DSI$DUMP LOAD IDLE PP
*STEP$    SET    1           ASSEMBLE *STEP* CODE IF SYMBOL DEFINED

          LIST   X
*COPY     CTP$DFT_RELEASE_HISTORY
*COPY     CTH$DEDICATED_FAULT_TOLERANCE
          LIST   *
 COMMON   SPACE  4,10
**        COMMON DECKS.


*COPYC DSI$PP_MACROS
*COPYC DSI$MAINTENANCE_REGISTER_MACROS
*COPYC CTI$COMPASS_OS_LEVELS
*COPYC CTC$DFT_MACROS
*COPY CTP$DFT_SPECIAL_MAC_ACCESS

*COPYC CTC$DFT_DIRECT_CELLS

 COMMON   SPACE  4,10
*         COMMON DECKS.


          LIST   X
*COPYC CTI$CONSOLE_PACKET_DEFINITIONS
*COPYC CTI$DFT_ANALYSIS_CODES
*COPYC DSC$PP_MR_AND_TPM_CONSTANTS
*COPYC CTC$DFT_CONSTANTS

          EJECT
*         VERSION 4 MODEL DEPENDENT EQUATES.

*         MDB SUB HEADER ID EQUATES.

 SH.MR1   EQU    1           SIXTH MRB GROUP
 SH.CB    EQU    2           CAPTURE BUFFER
 SH.HF    EQU    3           HISTORY FILE
 SH.EP    EQU    4           EXCHANGE PACKAGE
 SH.PI    EQU    5           INSTRUCTION AT P AND SURROUNDING INSTRUCTIONS
 SH.EW    EQU    6           EXECUTING WORDS OF SCM
 SH.MR2   EQU    7           LAST 2 WORDS OF SIXTH MRB GROUP

*         MDB SUB HEADER LENGTH OF DATA EQUATES.

 LOD.MR1  EQU    3           SIXTH MRB GROUP
 LOD.MR2  EQU    2           LAST WORDS OF SIXTH MRB GROUP
 LOD.CB   EQU    512D        CAPTURE BUFFER
 LOD.HF   EQU    64D         HISTORY FILE
 LOD.EP   EQU    52D         EXCHANGE PACKAGE
 LOD.PI   EQU    14D         INSTRUCTION AT P AND SURROUNDING INSTRUCTIONS
 LOD.EW   EQU    23D         EXECUTING WORDS OF SCM
 LOD.MR2  EQU    2           LAST 2 WORDS OF SIXTH MRB GROUP

*         MDB SUB HEADER PFS ID EQUATES.

 PFID.EW  EQU    0#8B21      PFS REGISTER 8B BIT 21

*         MDB SUB HEADER EQUATES.

 V4SHLOD  EQU    0           LENGTH OF DATA OFFSET
 V4SHPFS  EQU    2           PFS ERROR ID OFFSET
 V4SHHID  EQU    3           DATA HEADER ID OFFSET

*COPYC CTC$DFT_ACTION_OVERFLOW
*COPYC DSA$HARDWARE_TABLE_DEFINITIONS
*COPYC DSA$VE_REQUESTS_TO_DFT
          LIST   *
*COPYC DSI$PP_INSTRUCTION_MNEMONICS
          LIST   X
*COPYC CTC$EI_CONTROL_BLOCK
          LIST   *

**        START DEFINITION OF THE MAIN LOOP OF DFT.
*
*         BECAUSE CYBER 990 HAS AN I4 THE MAIN LOOP WILL DEFINE
*         DUAL I4 CODE, AND PACKETS. SINCE AN I4 HAS A CLOCK CHIP
*         THE EICB UPDATE TIME CODE IS ALSO INCLUDED.
*         RELOCATION CHECKS ARE STUBBED OFF AS THEY ARE NOT VALID ON CYBER 990.

*COPYC CTP$DFT_MAIN_LOOP
 CRN      SPACE  4,10
**        CRN - CHECK RELOCATION NECESSARY.
*
*         NOTE ON CYBER 990 THIS IS A NO OP.

 CRN      SUBR               ENTRY/EXIT
          UJN    CRNX

*COPYC CTP$DFT_MAIN_LOOP_UPDATE_TIME
*COPYC CTP$DFT_MAIN_LOOP_DUAL_STATE
*COPYC CTP$DFT_MAIN_LOOP_PACKETS

**        END OF DFT MAIN LOOP DEFINITIONS

**        START DEFINITION OF THE GLOBAL DATA COMMON TO ALL DFTS

*COPYC CTC$DFT_GLOBAL_DATA
*COPYC CTC$DFT_GLOBAL_DATA_NON_S0
**        END DEFINITION OF THE GLOBAL DATA COMMON TO ALL DFTS

**        START MODEL DEPENDENT REGION OF GLOBAL DATA

*         MAINTENANCE REGISTER BUFFER ADDRESSES.

 MRBA     CON    0,0,0,0
          CON    0,0,0,0
          CON    0,0,0

 RBUF     BSSZ   10          CYBER 990 REGISTER SAVE AREA
 TRSP     BSSZ   4           CYBER 990 RETRY SAVED P - CP0
 TRSP1    BSSZ   4           CYBER 990 RETRY SAVED P - CP1
 TRCP     BSSZ   4           CYBER 990 RETRY CURRENT P - CP0
 TRCP1    BSSZ   4           CYBER 990 RETRY CURRENT P - CP1
 TRPC     BSSZ   2           CYBER 990 RETRY P CTR - CP0, CP1
 TRHC     BSSZ   2           CYBER 990 RETRY HOURLY CTR, CP0, CP1
 MICL     CON    0           CYBER 990 UCODE LEVEL FLAG
 TRMF     CON    0           CYBER 990 RETRY MULTIPLE FLAG
 HTFL     CON    0           CYBER 990 HALT TIMING FLAG
 SCPM     CON    0           CYBER 990 SOFT CONTROL PARITY MASK
 C9EF     CON    0           CYBER 990 HALF EXCHANGE ERROR FLAG
 HLTE     CON    0           HALT ON ERROR FLAG
 FAIL     CON    0           FAILING ADDRESS
 FLPE     CON    0           PARITY ERROR = 1
 HALT     CON    0           HALT ON ERROR FLAG
 RMCF     CON    0           REFRESH SCM THIS PASS FLAG

*         THE FOLLOWING CELLS HOLD INFORMATION NECESSARY FOR VERSION 4 DFT.

 CEWF     CON    0           FLAG IF EMV CALLED BY CEW
 E6AD     CON    0,0,0       ADJUSTED MDB ADDRESS AFTER ERROR ID 6
 CSAA     CON    0           CSA ADDRESS FOR DFT RETRY

**        END MODEL DEPENDENT REGION OF GLOBAL DATA

*COPYC CTC$DFT_MDB_LOGGING_CONSTANTS

**        START MAINTENANCE REGISTER ACCESS ROUTINES.
*         SINCE CYBER 990 HAS NO SPECIAL MAINTENANCE ACCESS
*         REQUIREMENTS THE STANDARD 3 ACCESS COMMON DECKS ARE USED.

*COPYC CTP$MR_PROTOCOL_PREPROCESS
*COPYC CTP$MR_RETRY_OPERATION_FOR_DFT
*COPYC CTP$MR_PROTOCOL_PROCESS
*COPYC CTP$MR_PROTOCOL_POSTPROCESS

**        END MAINTENANCE REGISTER ACCESS ROUTINES

**        START THE DFT RESIDENT ROUTINES COMMON TO ALL DFTS.

*COPYC CTP$DFT_RESIDENT_COMMON
*COPYC CTP$DFT_RESIDENT_ECM_NON_S0
          LIST   X
*copy dsi$find_cip_module
*copy dsi$get_hardware_element
*copy DSI$PP_UTILITY_SUBROUTINES
          LIST   *

**        END THE DFT RESIDENT ROUTINES COMMON TO ALL DFTS

**        START THE PRESET AREA OF DFT
*         SINCE CYBER 990 USES AN I4, PACKET PRESET CODE WILL BE INCLUDED.

          USE    PRESET
          QUAL   PRESET
*COPYC CTP$DFT_PRESET
*COPYC CTP$DFT_PRESET_DUAL_I4
*COPY CTP$DFT_RETURN_ERROR_CODE
 SPO      SPACE  4,10
**        SPO - SETUP MEMORY PORT OFFSET.
*
*         EXIT   PO IS SET TO THE MODEL DEPENDENT PORT OFFSET.
*
*         USES   PO.


 SPO      SUBR               ENTRY/EXIT
          LDN    4           SETUP MEMORY PORT OFFSET
          STD    PO
          UJN    SPOX        RETURN

          USE    *
          QUAL   *
          OVERLAY  (RESIDENT PART II),R2ORG

**        START OF DFT RESIDENT II COMMON AREA.
*         CYBER 990 REQUIRES AN ADDITION TO THE COMMON CODE
*         TO PROVIDE A DELAY ROUTINE FOR CPU HALTS.

*COPYC CTP$DFT_RESIDENT_II_COMMON
 HTO      SPACE  4,10
**        HTO - HALT TIME OUT.
*
*         ENTRY  WHEN 105 MILLISEC HAVE PASSED.
*
*         USES   *TFLG*.


 HTO      SUBR               ENTRY/EXIT
          LDN    1
          STML   TFLG        SET TIMING FLAG
          UJN    HTOX        RETURN

*COPYC CTP$DFT_NON_930_RESIDENT_II
*COPYC DSI$PACK_UNPACK_REGISTERS
*COPYC DSI$VALIDATE_PP_BOUNDS
 DLY      SPACE  4,10
**        DLY  - DELAY 100 MILLISECONDS.
*
*         CALLS  TIM.


 DLY      SUBR               ENTRY/EXIT
          LDN    0
          STML   ACTB1+2
          STML   TFLG        TIMER FLAG
 DLY0     RJM    TIM         TIMER
          LDM    TFLG
          ZJP    DLY0        IF NOT DONE TIMING
          UJP    DLYX

**        END OF RESIDENT II COMMON AREA

          ERRNG  10000-*     RESIDENT II OVERFLOWS PP MEMORY

**        START OF DFT PRESET OVERLAY AREA. THE OVERLAYS START AT 4300(8).
*         THESE OVERLAYS ARE PRESENTLY USED FOR INITIALZING DUAL I4 MACHINES

*COPYC CTP$DFT_PRESET_DUAL_I4_OVL
*COPYC CTP$DFT_PRESET_BUILD_STRUCTURE
          OVERLAY (STANDARD PRESET OVERLAY ROUTINES)

*COPYC CTP$DFT_PRESET_STANDARD_OVL
*COPY CTP$DFT_RETURN_ERROR_CODE
 CCL      SPACE  4,10
**        CCL - CHECK CONSOLE LOGGING.
*
*         NON-OPERATIONAL ROUTINE ON THE CYBER 990.


 CCL      SUBR               ENTRY/EXIT
          UJN    CCLX        RETURN
 SSO      SPACE  4,10
**        SSO - SETUP SPECIAL OVERLAY
*
*         EXIT   OVERLAY TO HANDLE BIT 57 ERRORS ON A MODEL 43(16) OR 44(16)
*                IOU.  LOADED AT LOCATION 10000(8) OF THE PP.

 SSO      SUBR               ENTRY
          LDM    IOUM
          LMC    0#43
          ZJN    SSO1        IF MODEL 43(16)
          LMC    0#44&0#43
          ZJN    SSO1        IF MODEL 44(16)
          UJN    SSOX        RETURN

 SSO1     LDC    SCO_O
          RJM    LOV         LOAD SPECIAL OVERLAY
          UJN    SSOX        RETURN


 SMV      SPACE  4,10
**        SMV - SETUP MODEL DEPENDENT VALUES
*
*         *SMV* WILL SET UP REGISTER LIST ADDRESSES ON A MODEL DEPENDENT BASIS
*         FOR CYBER 990 THE PROCESSOR LISTS ARE THPA FOR BOTH CORRECTED AND UNCORRECTED
*         ERRORS. THE IOU USED WILL BE AN I4 IN EITHER I4 OR I2 MODE. MEMORY USED WILL
*         BE CYBER 990 MODEL MEMORY.


 SMV      SUBR               ENTRY/EXIT
          LDC    DGCP        SET THE TASK LIST ADDRESS FOR DEGRADING A CPU
          STM    DTLA
          LDN    0
          STM    HALT        CLEAR HALT ON ERROR
          LDC    THPA
          STM    CP0U
          STM    CP0C
          LDM    CPU1M
          ZJN    SMV1        IF PROCESSOR 1 NOT DEFINED
          LDC    THPA
          STM    CP1U
          STM    CP1C
 SMV1     LDC    I4IU
          STM    IO0U        UNCORRECTED REGISTER LIST
          LDC    I4IC
          STM    IO0C        CORRECTED REGISTER LIST
          LDML   IOUM
          LMC    0#44
          ZJN    SMV2        IF MODEL 44
          READMR RDATA,I0CC,OIMR  I4 PROCESSOR
          LDM    RDATA+7
          SHN    10D         CHECK BIT 56 FOR CIO PP PRESENT
          MJN    SMV3        IF CIO PPS PRESENT
 SMV2     LDC    SXIU        SET UP REGISTERS FOR I4 IN I2 MODE
          STM    IO0U        UNCORRECTED REGISTER LIST
          STM    IO0C        CORRECTED REGISTER LIST

 SMV3     BSS    0           DO MEMORY PROCESSING
          LDC    THMA        COMPLETE REGISTER LIST FOR MEMORY ERRORS
          STM    ME0U        UNCORRECTED MEMORY ERROR
          STM    ME0C        CORRECTED MEMORY ERROR

*         DETERMINE THE MICROCODE LEVEL ON THE 990.  IF THE LEVEL
*         IS NOT AT LEAST 18, THEN SET A FLAG TO DISABLE THE DFT
*         FEATURES USING LEVEL 18 MICROCODE.

 SMV9     LDN    PROCID
          RJM    FHE         FIND HARDWARE ELEMENT
          MJP    SMV20       IF NOT FOUND, TERMINATE
          LDML   HBUF+CPRUNAM+CPRMLX1  MICROCODE NAME
          LPN    0#3F
          SHN    6
          STDL   T6          SAVE 1ST DIGIT OF LEVEL NUMBER
          LDML   HBUF+CPRUNAM+CPRMLX2  MICROCODE NAME
          SHN    -6
          LMDL   T6
          STML   MICL        MICROCODE LEVEL (DISPLAY CODE)
          ADC    -MICLEV
          MJN    SMV10       IF UCODE LEVEL < *MICLEV*
          LDN    1
          STML   MICL        STORE FLAG
          UJN    SMV11       CONTINUE PROCESSING

 SMV10    LDN    0
          STML   MICL        STORE FLAG

*         INITIALIZE THE FIRST WORD OF EACH MODEL DEPENDENT
*         BUFFER THAT IS PRESENT.  THIS INITIALIZES/CLEARS
*         THE INTERLOCK FLAGS STORED IN BYTE 0 OF WORD 0,
*         ALLOWING THE NEXT MODEL DEPENDENT BUFFER TO GET
*         LOGGED.

 SMV11    LDN    VER4        LOAD VERSION
          RJM    VCK         CHECK VERSION
          PJP    SMVX        IF VERSION 4 OR GREATER
          LDN    MDLP        MODEL DEPENDENT BUFFER POINTER
          RJM    IDA
          CRDL   RS          R-REGISTER FOR MDB
          LRD    RS+1
          RJM    SPB         SET PP BOUNDS
          LDD    RS          R-REGISTER OFFSET
          ADC    RR
          CWML   SMVA,ON     WRITE ZEROS TO FIRST WORD OF MDB FOR CPU0
          LDML   CPU1M
          ZJP    SMVX        IF SINGLE CPU EXIT
          LDDL   RS+3        MDB LENGTH
          SHN    -1          DIVIDE LENGTH BY 2
          RAD    RS          ADD LENGTH OF 1 MDB TO OFFSET
          ADC    RR
          CWML   SMVA,ON     WRITE ZEROS TO FIRST WORD OF MDB FOR 2ND CPU
          LJM    SMVX

 SMV20    SETDAN (EPUN,DAME)
          LDC    DAME+TDFT   613 - DFT NO DESC IN MRT
          STML   RTP1
          CALL   ERRH

 SMVA     BSSZ   4           CM WORD OF ZEROS
*COPY     CTP$DFT_CLEAR_PACKETS_I4

**        END OF DFT PRESET OVERLAY AREA.
          OVERLAY  (MAIN NON RESIDENT ROUTINES)
**        START OF THE MAIN NON RESIDENT ROUTINES OVERLAY. ON CYBER 990
*         THIS OVERLAY DEFINES ROUTINES FOR DUAL STATE, DUAL I4,
*         HALT ON ERROR PROCESSING, EICB TIME UPDATE, AND PACKET COMMUNICATION.


*COPYC CTP$DFT_MAIN_NON_RES_RTNS
*COPY CTP$DFT_SET_SS_DUAL_I4
*COPYC CTP$DFT_MAIN_NON_RES_DUAL_STATE
*COPYC CTP$DFT_MAIN_NON_RES_DUAL_I4
*COPYC CTP$DFT_MAIN_NON_RES_EICB_TIME
*COPYC CTP$DFT_HALT_ON_ERROR_990
 ERR      CALL   ROS         REPORT OS ERROR

          OVERFLOW R2ORG     CHECK FOR OVERFLOW

**        END OF DFT MAIN NON RESIDENT ROUTINES.

          OVERFLOW R2ORG     CHECK FOR OVERFLOW

          OVERLAY  (AUX MAIN NON RESIDENT ROUTINES)
*COPYC CTP$DFT_CPU_HANDSHAKER
*COPYC CTP$DFT_MANAGE_PACKET_TRAFFIC
*COPYC CTP$DFT_LOG_PACKET_TIMEOUT
*COPY CTP$DFT_CHECK_TPM_PKT_RESPONSE
          ROUTINE ROS
          LJM    ERR
*COPY CTP$DFT_PREPARE_FOR_CIP_CALL
*COPY CTP$DFT_RETURN_ERROR_CODE

 RED      SPACE  4,10
**        RED - READ 960 POWER MONITOR.
*
*         ON ANY MACHINE OTHER THAN THE 960 THIS ROUTINE IS
*         NON FUNCTIONAL.


          ROUTINE RED
          LJM    REDX

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (DO DFT ACTIONS)

**        START OF DFT ACTION LISTS. A COMMON SET OF DFT ACTIONS IS PROVIDED
*         ALONG WITH CYBER 990 SPECIFIC ONES RELATING TO CLEARING PROCESSOR ERRORS
*         AND MEMORY ERRORS.

*COPYC CTP$DFT_ACTION_LIST
*COPYC CTP$DFT_ACTION_LIST_DUAL_I4
*COPYC CTP$DFT_ACTION_LIST_DUAL_STATE


 CETH     BSS    0           CLEAR CYBER 990 ERRORS
          TASK   (LOG,MCP,CLE,CCR,HEO,CCA,MCP,RCM,IBP,CLE,CCR,THE)

 DDCM     BSS    0           CLEAR CM ERROR
          TASK   (CME)

 SDCP     BSS    0
          TASK   (SER,DIP)

 DGCP     BSS    0           DEGRADE CPU MEMORY PORT
          TASK   (SCW,SER,DIP)

 THUN     BSS    0           RELOAD CONTROL MEMORIES
          TASK   (RCM,LMB,IBP,LOG,SCW,CRR,CLE,SDB,THE,SER)

 THCE     BSS    0           CYBER 990 CATASTROPHIC ERROR
          TASK   (LMB,DID,LOG,SCW,DIP,WM7,SER,IFM)

 THFE     BSS    0           CYBER 990 FATAL ERROR
          TASK   (HEO,MCP,LMB,DID,LOG,SCW,DIP,WM7,SER,IFM)

 TREX     BSS    0           CYBER 990 RETRY EXHAUSTED
          TASK   (RCM,LMB,IBP,LOG,SCW,CLE,SDB,THE,SER)

 TRTY     BSS    0           CYBER 990 RETRY
          TASK   (RCM,LMB,IBP,LOG,SCW,CRR,CLE,SDB,THE,SER)

 TFEC     BSS    0           CYBER 990 FALSE ERROR CONDITION
          TASK   (CLE,THE,SER)
          QUAL   *

          OVERFLOW  R2ORG    CHECK FOR OVERFLOW
          OVERLAY  (DO ADDITIONAL DFT ACTIONS)

**        START OF DFT ACTION LISTS OVERFLOW.  THIS IS AN EXTENSION OF THE COMMON
*         DFT ACTIONS.

          QUAL

*COPYC CTP$DFT_ACTION_LIST_OVERFLOW
*COPYC CTP$DFT_RETURN_TASK_ERROR
          QUAL   *
          QUAL   ABC
*COPY CTP$DFT_RETURN_ERROR_CODE
          QUAL   *

          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (DFT SEND PACKETS OVERLAY)
*COPYC CTP$DFT_CHECK_PKTS_FOR_NON_S0
*COPYC CTP$DFT_CHECK_PKT_STATUS_NON_S0
*COPYC CTP$DFT_SEND_PACKET_ALL
*COPY  CTP$DFT_SEND_PACKET_FOR_NON_S0
*COPY  CTP$DFT_CLEAR_PACKETS_I4

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY (SAVE PP REGISTERS IN CENTRAL MEMORY)
*COPYC CTP$DFT_SAVE_PP_REGISTERS
*COPY  CTP$DFT_DUMP_PP_REGISTERS
 QUAL$    EQU    1
*COPY  DSI$DUMP_LOAD_IDLE_PP
          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (DFT ERROR CONTROL OVERLAY)


*COPYC CTP$DFT_ERROR_CONTROL

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (LOG TOP OF HOUR COUNTERS)

*COPYC CTP$DFT_LOG_COUNTERS
 RMC      SPACE  4,10
**        RMC - RESET MODEL DEPENDENT COUNTERS
*                IF VERSION 4 OR GREATER, CHECK FOR MIDNIGHT.
*                IF SO, CLEAR THE LONGTERM INTERLOCK FLAG IN
*                THE MAIN CPU MODEL DEPENDENT BUFFER HEADER WORD.
*
*         USES   RS-RS+2, CM-CM+3
*
*         CALLS  VCK, IIB, SPB, IDA, CLR.
*

          ROUTINE RMC        ENTRY/EXIT
          LDN    1
          STM    RMCF
          LDN    VER4        VERSION NUMBER
          RJM    VCK
          MJP    RMC1        IF VERSION 3 OR LESS
          LDN    DFCM+7
          RJM    IIB
          CRML   RMCA,ON     GET TIME (TOP OF HOUR)
          LDML   RMCA+2
          LPC    0#FF00
          NJP    RMC1        IF NOT MIDNIGHT
          LRD    DP+1
          RJM    SPB         SET PP BOUNDS
          LDN    MDLP        MDB PTR OFFSET
          RJM    IDA
          CRDL   RS          READ MDB PTR
          LRD    RS+1        LOAD INTO R-REGISTER
          LDD    RS
          ADC    RR
          CRDL   RS          READ CPU0 MDB PTR
          LRD    RS+1        LOAD INTO R-REGISTER
          LDD    RS
          ADC    RR
          CRDL   CM          READ MDB HEADER WORD
          LDDL   CM          BITS 0-16
          LPC    0#F0FF      CLEAR BITS 4-7 (LONGTERM INTERLOCK)
          STDL   CM          RESTORE
          LDD    RS          R-REGISTER OFFSET
          ADC    RR          ACITIVATE R-REGISTER
          CWDL   CM          WRITE TO MDB
 RMC1     LDN    0           RESET COUNTERS
          STML   TRHC        RETRY HOUR COUNTER
          STML   TRHC+1      RETRY HOUR CNTR, CP 1
          STML   TRPC        RETRY P COUNTER
          STML   TRPC+1      RETRY P COUNTER, CP 1
          LDC    TRSP        RETRY P SAVE AREA
          RJM    CLR         INITIALIZE SAVED P AREA
          LDC    TRSP1
          RJM    CLR         INITIALIZE SAVED P AREA, CP 1

*         EVERY HOUR RELOAD 990 SCM USING 2AP FUNCTION 25(8).
*         IF AN ERROR OCCURS THE RELOAD WILL BE TRIED ONCE MORE. IF THE RELOAD
*         FAILS AGAIN AN ANALYSIS CODE WILL BE GENERATED AND EITHER A CPU WILL
*         BE RECONFIGURED OR THE SYSTEM WILL HALT. THIS IS ONLY DONE IF THE
*         DISABLE REFRESH OF 990 SCMS IS NOT SET IN THE DFT CONTROL WORD.

          LDN    HDRP
          RJM    IDA
          CRDL   CM
          LDDL   CM+3
          SHN    21-14
          MJP    RMCX        IF DISABLE SET QUIT
          LDN    0
          STM    CPUO
          LDN    PROCID
 RMC2     RJM    FHE
          MJP    RMCX        IF CPU NOT PRESENT
          LDN    ECMR        CM DEC REGISTER
          STDL   RN
          LDM    CMCC
          RJM    RMR         READ MEMORY DEC REGISTER
          RJM    CMP         CHECK MEMORY PORT
          NJP    RMC7        IF MEMORY PORT DISABLED

*         PROCESS THIS CPU.

          LDN    10B
          STD    T2
          LDM    HBUF+CPRPC
          STD    EC
 RMC3     READMR RDATA,,SSMR
          LDM    RDATA+7
          LPN    0#F
          NJP    RMCX        IF PROCESSOR HALTED OR HAS ERROR

          FUNCMR ,MRHP       HALT THE PROCESSOR
 RMC3.1   LDN    SSMR        SET REGISTER NUMBER
          STD    RN
          LDD    EC
          RJM    RMR         READ MAINTENANCE REGISTER
          SHN    21-SSPH
          PJN    RMC3.1      IF PROCESSOR NOT HALTED
          SHN    21-SSMM-21+SSPH+22
          PJN    RMC4        IF IN JOB MODE
          FUNCMR ,MRSP       START THE PROCESSOR
          SOD    T2
          PJP    RMC3
          UJP    RMC7        GO TO NEXT CPU

 RMC4     RJM    CCT         CLEAR CAPTURE BUFFER TRIGGER
          FUNCMR HBUF+CPRPC,MRCE  CLEAR ERRORS
          CALL   DMP         DISABLE MEMORY PORT
          CALL   EMP         ENABLE MEMORY PORT
          CALL   HEO         HALF EXCHANGE OUT
          FUNCMR HBUF+CPRPC,MRMC  MASTER CLEAR PROCESSOR
          LDN    SSMR
          STDL   RN
          LDML   HBUF+CPRPC
          RJM    RMR         READ STATUS,SUMMARY
          LPN    4
          ZJP    RMC5        IF NO CATASTROPHIC ERROR
          LRD    DP+1
          RJM    SPB
          LDN    BC
          RJM    CLR
          LDN    PROCID
          STD    ET

          SETDAN (EPCH,DARCE)
          SETFLG (BC.FL,BC.FV8)
          LDN    NRSBL-1
          STM    LLOG
          LDN    1
          STM    RTP1
          CALL   DID         DISABLE CPU
          LDM    TERT
          NJN    RMC4.4      IF DEGRADABLE CPU
          CALL   LOG
          SETDAC (DDDC)
          UJN    RMC4.5      DO DFT ACTION FOR SINGLE CPU

 RMC4.4   LDC    SDCP
          STM    DFTA        SET SPECIAL DFT ACTION
 RMC4.5   LDN    0
          STM    TERT
          CALL   DDA
          UJP    RMC7        DO NEXT CPU

 RMC5     LDN    25B
          STML   CALB
          LDML   CPUO
          STML   CALB+1
          LDC    0#180       RELOAD CONTROL STORE AND CONTROL WORD
          STML   CALB+2
          RJM    ECM         EXECUTE CIP MODULE
          RJM    RPW         RESTORE POINTER WORD
          LDML   CALB+2
          ZJP    RMC6        IF NO ERROR HEI AND PROCESS NEXT CPU

*         IF ERROR TRY RELOAD ONCE MORE AFTER MASTER CLEARING CPU.

          FUNCMR HBUF+HDRPC,MRMC

          LDN    25B
          STML   CALB
          LDML   CPUO
          STML   CALB+1
          LDC    0#180       RELOAD CONTROL STORE AND CONTROL WORD
          STML   CALB+2
          RJM    ECM         EXECUTE CIP MODULE
          RJM    RPW         RESTORE POINTER WORD
          LDML   CALB+2
          ZJP    RMC6        IF NO ERROR HEI AND PROCESS NEXT CPU
          LRD    DP+1
          RJM    SPB
          LDN    BC
          RJM    CLR
          LDN    PROCID
          STD    ET

          SETDAN (EPCH,DARME)
          SETFLG (BC.FL,BC.FV8)
          LDN    NRSBL-1
          STM    LLOG
          LDN    1
          STM    RTP1
          CALL   DID         DISABLE CPU
          LDM    TERT
          NJN    RMC5.4      IF DEGRADABLE CPU
          CALL   LOG
          SETDAC (DDDC)
          UJN    RMC5.5      DO DFT ACTION FOR SINGLE CPU

 RMC5.4   LDC    SDCP
          STM    DFTA        SET SPECIAL ACTION LIST
 RMC5.5   LDN    0
          STM    TERT
          CALL   DDA
          UJP    RMC7        DO NEXT CPU

 RMC6     CALL   IBP         INITIALIZE BDP SEQUENCE
          CALL   CLE         CLEAR ERRORS
          CALL   SDB         SET DEC BIT 18
          CALL   THE         THETA HALF EXCHANGE IN

 RMC7     LDN    0
          STM    TERT
          AOML   CPUO
          SBN    2
          PJP    RMCX        IF DONE WITH ALL CPUS
          LDC    PROCID1
          UJP    RMC2        PROCESS NEXT CPU


 RMCA     BSS    4           TIME STAMP FROM EICB
          SPACE  4,10
**        CCT - CLEAR CAPTURE BUFFER TRIGGER
*
*         CLEAR DEC BIT 18
*
*         USES   RDATA


 CCT      SUBR               ENTRY/EXIT
          READMR RDATA,HBUF+HDRPC,DEMR
          LDML   RDATA+2
          LPC    0#DF        CLEAR DEC BIT 18
          STML   RDATA+2
          WRITMR RDATA,HBUF+HDRPC,DEMR
          UJP    CCTX
*COPY     CTP$DFT_RESET_PIT
*COPY     CTP$DFT_RESTORE_POINTER_WORD
*COPY     CTP$DFT_TEST_DLD_PATH

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (ENVIRONMENT/SHORT WARNING PROCESSORS)

**        THIS OVERLAY HAS A STUBBED REFERENCE TO CHECK IF THE CONSOLE IS ALIVE.
*         ON CYBER 990 THIS MECHANISM IS NOT USED. THE STUB REPORTS THE CONSOLE IS ALIVE.

*COPYC CTP$DFT_ENVIRONMENT_RTNS
*COPY  CTP$DFT_FIND_WARNING_IN_NRSB
 CCA      SUBR
          LDN    1
          UJN    CCAX        REPORT CONSOLE ALIVE ON NON S0 MACH.
          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY (ANALYSE CYBER 990 CPU ERRORS)
 APE      SPACE  4,10
**        APE - ANALYSE CYBER 990 PROCESSOR ERRORS.
*
*         CALLS  CLR, FMB, SPB, *ATE*, *CFF*, *LOG*, *STP*, *SWP*.


          ROUTINE APE

          LDN    0
          STM    NERR        SET NO ERROR FLAG FALSE
          STD    TF          TEMPORARY FLAGS
          STD    FE

*         IT IS NECESSARY TO SAVE THE PREHALT STATUS SUMMARY BECAUSE
*         HALTING THE PROCESSOR WILL SET THIS BIT.

          LDN    SSMR
          STD    RN
          LDM    HBUF+CPRPC
          RJM    RMR         READ MAINTENANCE REGISTER
          STM    SUMS
          STM    OLSS
          SHN    21-SSSW     SHORT WARNING
          PJN    APE1        IF NO SHORT WARNING
          CALL   SWP         CALL SHORT WARNING PROCESSOR
          LJM    APEX        RETURN

 APE1     RJM    CTE         CHECK THRESHOLD EXCEEDED
          NJP    APEX        IF THRESHOLD EXCEEDED IGNORE ERROR
          LDM    HALT
          ZJP    APE3        IF NOT HALT ON ERROR
          LDM    SUMS
          SHN    21-SSUE
          PJN    APE3        IF NOT (UNCORRECTED ERROR)
          LDN    0
          STML   HTFL        HALT TIMING FLAG
          RJM    DLY         DELAY 100 MILLISEC
          LDM    SUMS
          SHN    21-SSPH
          MJN    APE4        IF CP HALTED BEFORE DELAY
          LDN    SSMR        READ SUMMARY STATUS
          STD    RN
          LDM    HBUF+CPRPC
          RJM    RMR         READ MAINTENANCE REGISTER
          STML   OLSS
          LPN    8D
          ZJN    APE2        IF NOT HALTED
          LDN    1
          STML   HTFL        CP HALTED AFTER DELAY
          UJN    APE4

 APE2     LDN    2
          STML   HTFL
 APE3     LDN    0
          RJM    SCS         SAVE PRE-HALT CONTROL STORE ADDRESS
          CALL   STP         CALL STOP PROCESSOR
 APE4     LDN    1
          RJM    SCS         SAVE AFTER HALT CONTROL STORE ADDRESS
          LDM    CPUO
          STM    CPUH        HALTED CPU ORDINAL

*         DISABLE *PFS* AND BLOCK EXCHANGE REQUEST BITS SET IN *DEC*.

          LDN    BC
          RJM    CLR
          LDM    OLSS
          SHN    21-SSPH     PROCESSOR HALT IN SUMMARY STATUS
          PJP    APE7        IF PROCESSOR NOT HALTED
          LDM    HALT        GET HALT ON ERROR FLAG
          NJP    APE7        IF HALT ON ERROR SET

*         SET UP SCRATCH BUFFER CONTROL WORD.
*
*         DFT ANALYSIS - ANALYSIS = PROCESSOR HALT.
*         DFT ANALYSIS - DFT ACTION = DISABLE CPU.
*         DFT ANALYSIS - ERROR PRIORITY = UNCORRECTED ERROR.
*         DFT ANALYSIS - FLAGS = VALID 170, VALID 180, LOG (OS).

          SETDAC DDDC
          SETDAN (EPUN,DAPH)
          SETFLG (BC.FV7,BC.FV8,BC.FL)
          LDM    CPUH        GET ORDINAL OF CPU BEING PROCESSED
          NJN    APE5
          LDM    CP0U        GET UNCORRECTED REGISTER LIST FOR CPU0
          UJN    APE6        CONTINUE

 APE5     LDM    CP1U        GET UNCORRECTED REGISTER LIST FOR CPU1
 APE6     RJM    BRL         BUILD REGISTER LIST
          CALL   RMR         READ REGISTERS
          LJM    APE16       CONTINUE PROCESSING

 APE7     LDM    SUMS        SUMMARY STATUS
          SHN    21-SSUE     UNCORRECTED ERROR
          PJP    APE10       IF NOT UNCORRECTED ERROR

*         SET UP SCRATCH BUFFER CONTROL WORD.
*
*         DFT ANALYSIS - ANALYSIS = UNCORRECTED PROCESSOR ERROR.
*         DFT ANALYSIS - ERROR PRIORITY = UNCORRECTED ERROR.
*         DFT ANALYSIS - FLAGS = LOG (OS).
*         DFT ANALYSIS - OS ACTION = UNCORRECTED PROCESSOR ERROR.
*                                  = NO OS ACTION (VERSION 4).

          SETDAN (EPUN,DAUPE)
          SETFLG (BC.FL)
          SETOSA OSUPE,OSNA
          LDM    CPUH        GET ORDINAL OF CPU BEING PROCESSED
          NJN    APE8
          LDM    CP0U        GET UNCORRECTED REGISTER LIST FOR CPU0
          UJN    APE9        CONTINUE

 APE8     LDM    CP1U        GET UNCORRECTED REGISTER LIST FOR CPU1
 APE9     RJM    BRL         BUILD REGISTER LIST
          CALL   RMR         READ REGISTERS
          LJM    APE16       CONTINUE PROCESSING

 APE10    LDM    SUMS        SUMMARY STATUS
          SHN    21-SSCE     CORRECTED ERROR
          PJP    APE13       IF NOT CORRECTED ERROR
          LDM    OLSS        GET SAVED STATUS SUMMARY
          SHN    21-SSPH
          MJP    APE13       IF PROCESSOR HALT

*         SET UP SCRATCH BUFFER CONTROL WORD.
*
*         DFT ANALYSIS - ANALYSIS = CORRECTED PROCESSOR ERROR.
*         DFT ANALYSIS - ERROR PRIORITY = CORRECTED ERROR.
*         DFT ANALYSIS - FLAGS = LOG (OS).

          SETDAN (EPCO,DACPE)
          SETFLG (BC.FL)
          LDM    CPUH        GET ORDINAL OF CPU BEING PROCESSED
          NJN    APE11
          LDM    CP0C        GET CORRECTED REGISTER LIST FOR CPU0
          UJN    APE12       CONTINUE

 APE11    LDM    CP1C        GET CORRECTED REGISTER LIST FOR CPU1
 APE12    RJM    BRL         BUILD REGISTER LIST
          CALL   RMR         READ REGISTERS
          LJM    APE16       CONTINUE PROCESSING

 APE13    LDM    HALT        HALT ON ERROR FLAG
          ZJP    APE16       IF NO HALT ON ERROR

*         SET UP SCRATCH BUFFER CONTROL WORD.
*
*         DFT ANALYSIS - ANALYSIS = UNCORRECTED PROCESSOR ERROR.
*         DFT ANALYSIS - ERROR PRIORITY = UNCORRECTED ERROR.
*         DFT ANALYSIS - FLAGS = LOG (OS).
*         DFT ANALYSIS - OS ACTION = UNCORRECTED PROCESSOR ERROR.
*                                  = NO OS ACTION (VERSION 4).

          SETDAN (EPUN,DAUPE)
          SETFLG (BC.FL)
          SETOSA OSUPE,OSNA
          LDM    CPUH        GET ORDINAL OF CPU BEING PROCESSED
          NJN    APE14       IF CPU1
          LDM    CP0U        GET UNCORRECTED REGISTER LIST FOR CPU0
          UJN    APE15       CONTINUE

 APE14    LDM    CP1U        GET UNCORRECTED REGISTER LIST FOR CPU1
 APE15    RJM    BRL         BUILD REGISTER LIST
          CALL   RMR         READ REGISTERS
 APE16    CALL   CFF         CHECK FOR FREEZE
          SETDAC (CETH)
          CALL   ATE         CALL THETA OVERLAY

          LDM    CPUO
          RJM    SSE         SET SECONDARY ELEMENT IDENTIFIER
          LDN    0
          STDL   TF          CLEAR FLAG
          LJM    APEX        RETURN
          QUAL   *

*COPY     CTP$DFT_SAVE_CONTROL_STORE
*COPY CTP$DFT_CHECK_CPU_THRESHOLD
*COPY     CTP$DFT_990_960_DEGRADE_CPU

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (CYBER 990 OVERLAY)
          SPACE  4,10
**        ATE -  ANALYSE THETA ERRORS.
*
*         *ATE* IS CALLED BY GENERIC *APE* TO ANALYSE THETA ERRORS.
*
*         ENTRY  (BC+BCDA) = ANALYSIS CODE FROM ATE.
*                *MICL*      MICROCODE LEVEL FLAG 0 INDICATES THAT THE LEVEL OF MICROCODE
*                            THAT IS RUNNING IS LSS THAN *MICLEV*.  A 1 INDICATES THAT THE
*                            LEVEL IS GREATER THAN *MICLEV*.
*
*         CALLS  ARC, CEW, CIT, SPP, LFA, THO, CCT, RCP, PAC, PEP.


          ROUTINE ATE        ENTRY/EXIT

*         CHECK -  PROCESSOR HALT, CLASS II

          LDN    0
          STML   MRBA        CLEAR SCM PE COUNTER
          STDL   TF          CLEAR TEMPORARY FLAG
          STDL   FE          CLEAR FALSE ERROR FLAG
          LDML   CPUO
          STDL   SN
          READMR RDATA,HBUF+HDRPC,PCSA  READ CSA
          RJM    PAC         MRVAL=CSA
          LDML   MRVAL+3
          LPC    0#7FE
          STML   ATEA        ATEA=CSA
          STML   CSAA        SAVE FOR DFT V4
          SBN    CSHA        CS HALT ADDR
          NJP    ATE1        IF CSA NOT 24/25
          READMR RDATA,HBUF+CPRPC,PMCR
          LDML   RDATA+6
          LPC    0#80
          NJP    ATE2        IF DUE, PROC HALT CLASS I
          SETDAN (EPCH,DASWH) ANALYSIS=FATAL, PROC.HALT CLASS II
          SETDAC THFE        ACTION=THETA FATAL ERROR
          SETFLG (BC.FV7,BC.FV8,BC.FL)  LOGGING FLAGS
          CALL   CEW
          LJM    ATEX        RETURN

*         CHECK - PROCESSOR HALT, CLASS I

 ATE1     LDML   MICL        MICROCODE LEVEL
          ZJP    ATE3        IF MIC LEVEL <= 16
          LDML   ATEA
          ADC    -CSHHA
          NJN    ATE3        IF CSA =/= 92
 ATE2     SETDAN (EPCH,DAPH)  ANAL=FATAL, PROC.HALT CLASS I
          SETDAC THFE        ACTION=THETA FATAL ERROR
          SETFLG (BC.FV7,BC.FV8,BC.FL)  LOGGING FLAGS
          CALL   CEW
          LJM    ATEX        RETURN

*         CHECK - RETRY IN PROGRESS.

 ATE3     LDML   HALT
          ZJN    ATE4        IF NOT HALT ON ERROR
          LDML   MICL        MICROCODE LEVEL
          ZJN    ATE4        IF MIC REV < MICLEV
          LDML   MRVAL+3     CSA
          LPC    0#FE
          ADC    -CSRA       CS RETRY ADDR
          NJN    ATE4        IF NOT RETRY IN PROGRESS
          CALL   CEW         CAPTURE EXECUTING WORDS
          RJM    CCT         CLEAR CAP BUF TRIGGER
          CALL   ARC         ANALYZE RETRY CONDITION
          LDML   C9EF
          NJP    ATE12       IF CATASTROPHIC ERROR
          LJM    ATEX        RETURN

*         CHECK - CORRECTED PROCESSOR ERROR.

 ATE4     LDDL   BC+BCDA     LOAD CURRENT DFT.ANALYSIS CODE
          LPC    0#FF        MASK ERROR CODE
          SBN    DACPE       CORRECTED PROCESSOR ERROR CODE
          NJN    ATE5        IF NOT CORRECTED
          RJM    SPP         SCAN PFS
          LDML   CTIB
          ZJP    ATE4.5      IF NO PARITY ERROR
          SETDAN (EPCO,DARES)
          SETDAC (CETH)
          UJP    ATE11.1

 ATE4.5   RJM    RCP         READ CACHE *PFS*
          LJM    ATEX        RETURN, CORRECTED PROCESSOR ERROR

*         DEFAULT - UNCORRECTED PROCESSOR ERROR.

 ATE5     BSS    0
          LDC    PPFS+6
          RJM    FMB
          CRDL   CM          READ PFS 86 FROM SCRATCH BUFFER
          LDDL   CM+1
          LPC    PFPW        MASK PARTIAL WRITE PE BIT
          NJP    ATE10.5     IF BIT 27 SET
          LDN    HDRP
          RJM    IDA
          CRDL   CM
          LDDL   CM+DHFLG
          SHN    21-DH.FD
          MJP    ATE11       IF NON-DEDICATED

          LDML   OLSS        SAVED SS
          SHN    21-SSUE
          PJP    ATE11       IF NOT UNCORRECTED
          RJM    CIT         CHECK FOR ISSUE TIMEOUT
          ZJP    ATE8        IF NOT ISSUE TIMEOUT
          LDML   ATEA
          SBN    CSAH        CSA HALT ADDRESS
          LPC    0#FFFD      MASK LOWER BIT
          NJP    ATE8        IF NOT CSA = 21/22
          RJM    SOE         SCAN FOR OTHER ERRORS
          NJP    ATE8        IF OTHER CONDITIONS PRESENT
          LDC    IDU.CIR+1
          STDL   RN

          EXITMR ATE6

          LDM    HBUF+HDRPC  FORM FUNCTION WORD
          ADC    MRRD        ADD FUNCTION
          ADC    TC.IDU      ADD TYPE CODE
          RJM    AMR         ACCESS MAINTENANCE CHANNEL
          LDN    10
          IAM    RDATA,MR
          RJM    CMI         CLEAR MAINTENANCE INTERLOCK

 ATE6     EXITMR FMR

          LDML   RDATA+3
          LPC    VMID
          NJP    ATE8        IF VMID=170

*         ANALYSIS = THETA FALSE ERROR

          SETDAC TFEC        ACTION = THETA FALSE ERROR
          LDN    1
          STDL   FE
          CALL   THO         HALF EXCHANGE OUT
          LDML   C9EF
          ZJN    ATE7        IF NO ERROR ON HEO

          CALL   CEW         CAPTURE EXECUTING WORDS
          UJP    ATE13       HANDLE CATASTROPHIC ERROR

 ATE7     CALL   APC         ANALYZE P CONDITION
          CALL   PEP         PATCH EXCHANGE PACKAGE
          LDN    1
          STDL   TF          SET FLAG = NO LOGGING
          UJP    ATEX        RETURN

 ATE8     LDML   HTFL        HALT TIMING FLAG
          ZJP    ATE11       IF CODE = 0, CPU HALTED
          SBN    1
          ZJN    ATE9        IF CODE = 1
          SBN    1
          ZJN    ATE10       IF CODE = 2, FATAL
 ATE9     RJM    CIT         CHECK FOR ISSUE TIMEOUT
          NJP    ATE11       IF ISSUE TIMEOUT


 ATE10    CALL   CEW         WRITE EXECUTING SCM WORDS TO MDB
          SETDAN (EPCH,DAFUE)
          SETDAC THCE
          SETFLG (BC.FV7,BC.FV8)
          LJM    ATEX

 ATE10.5  CALL   CEW         WRITE EXECUTING SCM WORDS TO MDB
          SETDAN (EPCH,DAPWE)
          SETDAC THUN
          SETOSA (OSMOB,OSSS) MULTIPLE ODD BIT-STEP SYSTEM
          UJN    ATE11.0

 ATE11    CALL   CEW         WRITE EXECUTING SCM WORDS TO MDB
          SETDAN (EPUN,DAUPE)
          SETDAC THUN        ACTION=THETA UNCORRECTED
 ATE11.0  RJM    CCT         CLEAR CAP BUF TRIGGER
          CALL   CRR         CLEAR DEC BIT 42
          CALL   THO         THETA HALF EXCHANGE OUT
          LDML   C9EF
          NJP    ATE12       IF CATASTROPHIC ERROR
          CALL   PEP         PATCH XCHG PKG (MCR)
          RJM    SPP         SCAN PFS BITS, SET UP CTIB
          LDML   CTIB        LOAD CTI BUFFER
          ZJP    ATEX        IF NO PE'S, EXIT

*         ANALYSIS = REPAIRABLE ERROR

          LDDL   BC+BCDA     CURRENT ANALYSIS CODE
          SBN    DAPWE       CHECK IF PARTIAL WRITE PE
          ZJN    ATE11.5     IF SO, LEAVE ANALYSIS
          SETDAN (EPUN,DARES) ANALYSIS CODE = REPAIRABLE ERROR SUCCESSFUL
 ATE11.1  LDDL   BC+BCOA
          LPC    0#FF00      CLEAR PREVIOUS OS ACTION CODE
          STDL   BC+BCOA
 ATE11.5  CALL   LFA         SWEEP MEMORIES, LOG FAILING ADDR & CONTENTS
          LJM    ATEX        RETURN

*         ANALYSIS = CATASTROPHIC ERROR

 ATE12    CALL   LOG         LOG PREVIOUS ERROR
          LDN    1
          RJM    SCS         SAVE CONTROL STORE ADDRESS

*         SET UP BUFFER CONTROL WORD
*         DFT.ANALYSIS - ERROR PRIORITY = UNCORRECTED ERROR
*         DFT.ANALYSIS - CODE = CATASTROPHIC ERROR
*         DFT ACTION CODE = THETA CATASTROPHIC ERROR
*         FLAGS = VALID 170, LOGGING FLAG

 ATE13    SETDAN (EPCH,DACRE)
          SETDAC THCE
          SETFLG (BC.FV7,BC.FV8,BC.FL)
          LDM    CPUH        GET ORDINAL OF CPU BEING PROCESSED
          NJN    ATE14       IF NOT CPU0
          LDM    CP0U        GET UNCORRECTED ERROR LIST FOR CPU0
          UJN    ATE15

 ATE14    LDM    CP1U        GET UNCORRECTED ERROR LIST FOR CPU1
 ATE15    RJM    BRL         BUILD REGISTER LIST
          CALL   RMR         READ MAINTENANCE REGISTERS

          LJM    ATEX


 ATEA     CON    0

*COPY CTP$DFT_SAVE_CONTROL_STORE

          EJECT
**        CEW - CAPTURE EXECUTING WORDS OF SCM'S
*
*         METHOD             IF VERSION 4, DO NOT EXECUTE.  IF VERSION 4
*                            AND AN ISSUE TIME OUT IS PRESENT, CALL AND
*                            EXECUTE THE ROUTINE EMV.  IF NOT VERSION 4
*                            READ EXECUTING WORDS OF RESPECTIVE SOFT
*                            CONTROL MEMORIES AND WRITE TO THE BEGINNING
*                            OF THE MODEL DEPENDENT BUFFER.
*                            THIS STEP IS PERFORMED HERE TO CAPTURE THE
*                            DATA BEFORE A MASTER CLEAR.
*
*         CALLED BY          ATE, ARC.
*
*         CALLS              BMP,SPB,IDA,CIT,AMP,RMR,PAC,CMI,AMR, EMV, CIT.
*
*         USES               W6, W7, RS - RS+3, CM, MRVAL, CEWF.
*
*         MACROS             EXITMR.
*
*
*         THE FOLLOWING IS TRUE ONLY IF NOT VERSION 4.
*
*         BEFORE WRITING THE MODEL DEPENDENT BUFFER, THE INTERLOCK
*         CODE MUST BE CHECKED TO ENSURE THAT A HIGHER PRIORITY
*         ERROR HAS OCCURRED.  BITS 14-15 IN THE FIRST WORD OF THE
*         MDB CONTAIN THIS PRIORITY CODE.  THE CODES ARE DEFINED
*         AS FOLLOWS:     0 - MDB HAS NOT BEEN LOGGED
*                         1 - NON ISSUE TIMEOUT ERROR HAS BEEN LOGGED
*                         2 - ISSUE TIMEOUT ERROR HAS BEEN LOGGED
*         IF THE CURRENT CONDITION HAS A HIGHER PRIORITY THAN WHAT
*         IS CURRENTLY LOGGED, THEN THE MDB IS OVERWRITTEN.  IF IT
*         CANNOT BE OVERWRITTEN, BIT 0 IS SET IN THE FIRST WORD AS
*         A FLAG FOR ROUTINE LMB.

          ROUTINE CEW

          LDN    VER4        VERSION NUMBER
          RJM    VCK         CHECK VERSION
          MJN    CEW1        IF NOT VERSION 4
          LDN    0
          STML   CEWF        INITIALIZE CEW FLAG

          RJM    CIT         CHECK FOR ISSUE TIME OUT
          ZJN    CEW0        IF VERSION 4 AND NO ISSUE TIMEOUT

*         VERSION 4 AND ISSUE TIME OUT.

          LDN    1
          STML   CEWF        SET CALLED FROM CEW FLAG
          CALL   EMV         VERSION 4 DFT MAIN

          LDN    0
          STML   CEWF        CLEAR CALLED FROM CEW FLAG
 CEW0     UJP    CEWX        EXIT

 CEW1     RJM    CIT         CHECK FOR ISSUE TIMEOUT
          ZJP    CEW2        IF NO ISSUE TIMEOUT
          LDN    MDB.IT      ISSUE TIMEOUT INTERLOCK CODE
          UJP    CEW3

 CEW2     LDN    MDB.NIT     CODE FOR NO ISSUE TIMEOUT
 CEW3     STDL   W6          (W6) = CODE FOR CURRENT ERROR CONDITION
          CALL   BMP         BUILD MDB POINTER
          LRD    RS+1
          RJM    SPB         SET PP BOUNDS
          LDD    RS
          ADC    RR
          CRDL   CM          (CM - CM+3) = FIRST WORD OF MDB
          LDDL   CM
          LPN    MDB.IC      MASK MDB INTERLOCK CODE
          STDL   W7          (W7) = MDB INTERLOCK CODE
          SBDL   W6
          PJP    CEW4        IF MDB INTERLOCK >= CURRENT ERROR CONDITION, DON'T LOG
          LDN    PCSA        CONTROL STORE ADDRESS REGISTER
          STDL   RN
          LDM    HBUF+CPRPC
          RJM    RMR         READ CONTENTS OF CSA
          RJM    PAC         PACK DATA INTO MRVAL
          LDDL   W6
          STML   MRVAL       SET NEW MDB INTERLOCK CONDITION
          LDD    RS
          ADC    RR
          CWML   MRVAL,ON    WRITE NEW INTERLOCK CODE AND CSA TO MDB

          CALL   RWE         READ/WRITE  EXECUTING WORDS OF SCM'S

 CEW4     LDDL   CM
          LPC    MDB.IM      FORCE INTERLOCK FLAG CLEAR
          LMC    MDB.IF      SET INTERLOCK FLAG
          STDL   CM
          LRD    RS+1
          RJM    SBP
          LDD    RS
          ADC    RR
          CWDL   CM          WRITE BACK TO MDB
          UJP    CEWX
          EJECT
*COPY  CTP$DFT_990_SCAN_PFS_BITS
          EJECT
**        RCP - READ CACHE PFS BITS
*
*         METHOD             READ CACHE PFS BITS (PFS RGTR 8F) TO CHECK
*                            FOR STALE DATA.  IF STALE DATA FOUND, THEN
*                            CHANGE DFT ACTION TO RELOAD CACHE.  SET BIT
*                            5 IN WORD 25 OF SCRATCH BUFFER TO DESIGNATE
*                            CACHE RELOAD
*
*         CALLED             BY ATE
*
*         CALLS              FMB


 RCP      SUBR               ENTRY/EXIT
          LDC    0#8F
          RJM    FMB
          CRDL   CM          READ RGTR 8F FROM SCRATCH BUF
          LDDL   CM
          LPN    0#F         MASK BITS 12-15
          NJP    RCP1        IF STALE DATA
          LDDL   CM+1
          LPN    0#20        MASK BIT 26
          ZJP    RCPX        IF NO STALE DATA
 RCP1     SETDAC CETH        DFT ACTION = THETA CACHE RELOAD
          SETDAN (EPCO,DACCR)
          UJP    RCPX
          EJECT
**        LFA - LOG FAILING ADDRESS
*
*         METHOD             READ CTIB.  IF BIT IS SET THAT INDICATES
*                            A PARITY ERROR IN A CONTROL MEMORY, THEN
*                            LOCATE THE FAILING ADDRESS.  ISOLATE BIT
*                            IN CTIB AND LOG THIS PE INDICATOR ALONG WITH
*                            THE FAILING ADDRESS AND CONTENTS IN WORDS 25-26
*                            OF SCRACH MRB.  IF MORE THAN 1 MEMORY HAS A
*                            PE, LOG THE CURRENT SCRACH BUFFER, SAVING
*                            THE OFFSET OF WHERE IT WAS LOGGED IN THE
*                            MRBA TABLE. OFFSET ZERO OF THE MRBA TABLE
*                            CONTAINS THE NUMBER OF ELEMENTS IN TABLE.
*                            ENTRIES 1..N HOLD OFFSETS OF MRB'S IN THE
*                            ORDER THEY WERE LOGGED.
*
*         CALLED             BY ATE
*
*         ENTRY              CTIB CONTAINS BITS DEFINING WHICH CONTROL
*                            MEMORIES NEED TO BE SWEEPED AND RELOADED.
*
*         CALLS              SBP, IMB, CRB, LOG


          ROUTINE LFA

          LDN    0
          STML   FLPE        INITIALIZE FLAG, 0 OR 1 PE
          LDN    11D
          STDL   T1
 LFA0     LDN    0           INITIALIZE MRBA
          STML   MRBA,T1
          SODL   T1
          PJP    LFA0        IF NOT DONE
          LDN    0
          STDL   SN          UNIQUE MEMORY OFFSET
          LDN    1
          STML   SCPM        SHIFT TO MASK CTIB BITS
 LFA1     LDML   CTIB
          LPML   SCPM        MASK BIT
          ZJP    LFA9        IF NO PE, DO NOT SWEEP MEMORY
          RJM    CRB         INITIALIZE RBUF TO ZEROS
          LDM    HBUF+CPRPC
          STDL   EC
          FUNCMR ,MRCE       CLEAR ERRORS (CPU)
          LDDL   SN
          SBN    9D
          ZJP    LFA5        IF MEMORY = BP3
          LDN    0
          STML   FAIL        INITIALIZE ADDRESS OFFSET
 LFA2     LDML   LFAA,SN     LOAD STARTING ADDRESS
          ADML   FAIL        ADD OFFSET
          STDL   RN

          EXITMR LFA2.5

          LDM    HBUF+HDRPC  FORM FUNCTION WORD
          ADC    MRRD
          ADML   LFAB,SN     ADD TYPE CODE
          RJM    AMR         ACCESS MNTCE CHANNEL
          LDN    7           BYTE COUNT
          IAM    RBUF,MR     BLOCK INPUT
          RJM    CMI         CLEAR MNTCE INTERLOCK

 LFA2.5   EXITMR FMR

          READMR RDATA,HBUF+HDRPC,PFS0  READ PFS 80
          LDML   RDATA
          LPN    0#10        MASK READ DATA PE
          NJP    LFA3        IF FAILING ADDRESS FOUND
          AOML   FAIL        UPDATE ADDRESS OFFSET
          SBML   LFAF,SN     SUBTRACT (LENGTH+1)
          MJP    LFA2        IF NOT DONE SWEEPING
          LDC    0#FFFF
          STML   FAIL        ADDRESS NOT FOUND
          RJM    CRB         CLR RBUF
          UJP    LFA6.5

 LFA3     LDDL   SN
          SBN    5
          ZJP    LFA4        IF IMAP
          SBN    3
          NJP    LFA6        IF NOT CONTROL STORE

          EXITMR LFA3.5

          RDMEM  IDU.CSMM,FAIL,RBUF,,8,TC.IDU

 LFA3.5   EXITMR FMR

          UJP    LFA6

 LFA4     EXITMR LFA4.5

          RDMEM  INU.IMAP,FAIL,RBUF,,8,TC.IDU

 LFA4.5   EXITMR FMR

          UJP    LFA6

 LFA5     RJM    SBP         SWEEP BP3

*         LOG CTIB, TYPE CODE AND FAILING ADDR IN MRB

 LFA6     LDML   LFAA,SN
          RAML   FAIL
 LFA6.5   LDML   FLPE        CHECK IF 2ND OR GREATER PE
          ZJP    LFA7        IF 1ST PE, DO NOT LOG MRB
          CALL   LOG         LOG CURRENT MRB
          LDML   FREE
          ZJP    LFA9        IF NO ENTRY FOUND, SKIP
          AOML   MRBA        ADD ENTRY TO TABLE
          STDL   T2
          LDML   FREE
          STML   MRBA,T2
 LFA7     LDN    1
          STML   FLPE        SET FLAG
          LDN    2
          STDL   T7          # OF WORDS TO TRANSFER
          LDN    25D
          RJM    IMB         GET R-RGTR
          CRML   LFAC,T7     READ 2 CM WORDS

*         MODIFY CONTENTS

          LDML   CTIB
          LPML   SCPM        MASK OUT OTHER BITS
          STML   LFAC        STORE PE INDICATOR
          LDN    0
          STML   LFAC+1      TO BE MODIFIED BY ACTION
          LDML   LFAB,SN
          STML   LFAC+2      STORE TYPE CODE
          LDML   FAIL
          STML   LFAC+3      STORE FAILING ADDR
          LDN    0           PACK RBUF INTO LFAC
          STDL   W3
          STDL   W4
 LFA8     LDML   RBUF,W3    STORE UPPER BYTE
          LPC    377
          SHN    10
          ADM    RBUF+1,W3  ADD LOWER BYTE
          STML   LFAC+4,W4
          LDN    2
          RADL   W3
          AODL   W4
          SBN    4           LOOP 4 TIMES
          NJP    LFA8        IF NOT DONE
          LDN    25D
          RJM    IMB         GET R-RGTR
          CWML   LFAC,T7     WRITE BACK TO MEMORY
 LFA9     AODL   SN          UPDATE
          ADC    -10D
          ZJP    LFAX        IF DONE, RETURN
          LDML   SCPM
          SHN    1
          STML   SCPM
          LJM    LFA1        CHECK NEXT MEMORY


*         EQUATES TO STARTING MEMORY ADDRESSES
*         (ORDER MEMORIES ARE DEFINED IN CTIB)

 LFAA     BSS    0
          CON    ACU.M2
          CON    ACU.M3
          CON    ACU.M4
          CON    BDP.SCM
          CON    EPN.SCM
          CON    INU.IMAP
          CON    LSU.SCM
          CON    IDU.CW
          CON    IDU.CSMM
          CON    BP3.FWA

*         APPROPRIATE TYPE CODES

 LFAB     BSS    0
          CON    TC.ACU
          CON    TC.ACU
          CON    TC.ACU
          CON    TC.BDP
          CON    TC.EPN
          CON    TC.IDU
          CON    TC.LSU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.BDP

*         TEMP STORAGE LOCATION

 LFAC     CON    0,0,0,0
          CON    0,0,0,0

*         ADDRESS REPORTED IF FAILING ADDR NOT FOUND

 LFAD     BSS    0
          CON    0#900
          CON    0#A00
          CON    0#B00
          CON    0#E00
          CON    0#20
          CON    0#2400
          CON    0#20
          CON    0#6300
          CON    0#5400

*         MEMORY SIZE - (64 BIT LENGTH +1)

 LFAF     BSS    0
          CON    0#100
          CON    0#100
          CON    0#100
          CON    0#200
          CON    0#20
          CON    0#400
          CON    0#20
          CON    0#C00       300H * 4
          CON    0#1400      500H * 4
          EJECT
 CRB      SPACE  4,10
**        CRB - CLEAR RBUF BUFFER.
*
*         METHOD             WRITE 8 PP WORDS, AT ADDRESS RBUF, WITH ZEROS.
*
*         CALLED             BY CALL TO CRB


 CRB      SUBR               ENTRY/EXIT
          LDN    7
          STDL   T4
 CRB0     LDN    0
          STML   RBUF,T4
          SODL   T4
          PJN    CRB0        IF NOT DONE, CLEAR NEXT BYTE
          LJM    CRBX
          EJECT
**        SBP - SWEEP BP3 SOFT CONTROL MEMORIES
*
*         METHOD             RELEASE LATCH ON FIRST WORD OF EACH BP3 MEMORY
*                            READ BP3 CONTROL MEMORY 1 WORD AT A TIME AND CHECK
*                            APPROPRIATE PFS BITS UNTIL FAILING ADDRESS
*                            IS FOUND.  IF ALL ADDRESSES ARE READ AND
*                            THE FAILING ADDRESS IS NOT DETECTED, C00 (16) WILL
*                            BE REPORTED FOR THE FAILING ADDRESS.  THE CONTENTS
*                            WILL ALWAYS BE REPORTED AS ZEROS, SINCE THIS
*                            MEMORY CANNOT BE READ.
*
*         CALLED             BY RJM TO SBP
*
*         EXIT               (FAIL) = FAILING ADDRESS
*                            (RBUF) =  ZEROS
*
*         CALLS              CRB, PAC
*
*         MACROS EXITMR.


 SBP      SUBR               ENTRY/EXIT
          LDC    0#100
          STML   FAIL        ADDRESS OFFSET
          STDL   T4
          LDN    0
          STDL   T3          WORD COUNTER
          LDM    HBUF+CPRPC
          STDL   EC

 SBP0     EXITMR SBP0.5

          RDMEM  BP3.FWA,T4,,,,TC.BDP    RELEASE LATCH

 SBP0.5   EXITMR FMR

          LDC    0#200
          RADL   T4
          ADC    -0#D00
          NJP    SBP0
          FUNCMR ,MRCE

 SBP1     EXITMR SBP1.5

          RDMEM  BP3.FWA,FAIL,,,,TC.BDP    READ BYTE 0

 SBP1.5   EXITMR FMR

          READMR RDATA,HBUF+HDRPC,PFS6
          RJM    PAC         RESULT NOW IN MRVAL -  PACKED
          LDML   MRVAL       MASK PFS BITS
          LPN    0#23
          NJP    SBP2        IF FAILING ADDR FND
          LDML   MRVAL+1
          LPC    0#02C0
          NJP    SBP2        IF FAILING ADDR FOUND
          AOML   FAIL        UPDATE ADDRESS OFFSET
          AODL   T3          UPDATE WORD COUNTER
          SHN    9D
          PJP    SBP1        IF NOT DONE, READ NEXT LOCATION
          LDN    0
          STDL   T3          RESET WORD COUNT
          LDML   FAIL
          ADC    0#100       ADDRESS TO NEXT BP3 MEMORY
          STML   FAIL
          ADC    -0#D00      CHECK IF DONE
          NJP    SBP1        IF NOT DONE, READ NEXT LOC
          LDC    0#C00
          STML   FAIL        ADDRESS NOT FOUND
 SBP2     RJM    CRB         CLEAR RBUF
          LJM    SBPX
          EJECT

          SPACE  4,10

**        CCT - CLEAR CAPTURE BUFFER TRIGGER
*
*         METHOD             CLEAR DEC BIT 18
*
*         USES               RDATA


 CCT      SUBR               ENTRY/EXIT
          READMR RDATA,HBUF+HDRPC,DEMR
          LDML   RDATA+2
          LPC    0#DF        CLEAR DEC BIT 18
          STML   RDATA+2
          WRITMR RDATA,HBUF+HDRPC,DEMR
          UJP    CCTX

          SPACE  4,10
**        CIT - CHECK FOR ISSUE TIMEOUT
*
*         METHOD             READ PFS REGISTER 8B AND MASK BIT 21
*                            TO DETERMINE IF AN ISSUE TIMEOUT IS
*                            PRESENT.
*
*         EXIT               (A) = NONZERO, IF AN ISSUE TIMEOUT IS PRESENT
*                                  ZERO, IF NO ISSUE TIMEOUT IS PRESENT
*
*         USES               *CM*
*
*         CALLS              FMB


 CIT      SUBR               ENTRY/EXIT
          LDC    PFSB
          RJM    FMB
          CRDL   CM          READ PFS 8B FROM SCRATCH BUFFER
          LDDL   CM+1
          LPC    PFIT        MASK ISSUE TIMEOUT BIT
          UJP    CITX
          EJECT
 SOE      SPACE  4,10
**        SOE - SCAN FOR OTHER ERRORS.
*
*         METHOD CHECK IF THE ONLY PFS BITS THAT ARE SET ARE
*                REGISTER 80, BIT 0 AND REGISTER 8B, BIT 21.
*
*         ENTRY  REGISTERS ARE LOGGED IN MRB.
*                REGISTER 8B, BIT 21 IS SET.
*
*         EXIT   (A) = NON-ZERO IF OTHER ERROR CONDITIONS ARE SET.
*
*         USES   T2, W0-W3
*
*         CALLS  FMB.
*
*         MACROS NONE.


 SOE0     LDN    1

 SOE      SUBR               ENTRY/EXIT
          LDC    PPFS
          STDL   T2          (T2) = STARTING REGISTER ADDRESS
 SOE1     LDDL   T2
          RJM    FMB         FORM POINTER TO REGISTER
          CRDL   W0          (W0-W3) = REGISTER CONTENTS
          LDDL   T2
          LMC    PPFS
          NJN    SOE2        IF NOT REGISTER 80
          LDDL   W0
          SHN    2
          PJP    SOE0        IF REGISTER 80 BIT 0 NOT SET
          LDDL   W0
          LPC    0#7FFF
          NJP    SOEX        IF ANY OTHER BITS SET, EXIT
          LDN    0
          UJN    SOE4        CHECK REMAINING BYTES

 SOE2     LDDL   T2
          LMC    PPFS+0#B
          NJN    SOE3        IF NOT REGISTER 8B
          LDDL   W1
          LPC    0#FBFF
          STDL   W1          CLEAR BIT 21
 SOE3     LDN    0
          ADDL   W0
 SOE4     ADDL   W1
          ADDL   W2
          ADDL   W3
          NJP    SOEX        RETURN, IF ANY OTHER ERROR CONDITION
          AODL   T2          INCREMENT REGISTER ADDRESS
          ADC    -PPFS-0#10
          ZJP    SOEX        IF DONE PROCESSING
          UJP    SOE1        CONTINUE PROCESSING
          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (CYBER 990 OVERLAY II)
**        ARC -  ANALYSE RETRY CONDITION.
*
*         ENTRY  (SN) = CPUO
*
*         CALLS  PEP
*
*         EXIT   (W7) = 1 IF CATASTROPHIC ERROR OCCURRED


          ROUTINE ARC


          LDML   CPUO
          STDL   SN
          NJP    ARC1        IF CPU1
          LDC    TRCP
          STML   ARCA        MODIFY
          STML   ARCB
          LDC    TRSP
          UJP    ARC2
 ARC1     LDC    TRCP1
          STML   ARCA        MODIFY
          STML   ARCB
          LDC    TRSP1
 ARC2     STML   ARCC        PLUG ADDRESSES
          STML   ARCD
          STML   ARCF

*         CHECK MCR FOR P+ ERROR NOT STACKED

          SETFLG (BC.FV7,BC.FV8,BC.FL)  LOGGING FLAGS
          READMR RDATA,HBUF+CPRPC,PMCR
          RJM    PLB         (A)=MCR
          STDL   T7          T7=MCR
          LPC    0#8000
          NJP    ARC6        IF DUE, NON-RETRYABLE
          LDDL   T7
          LPN    8D
          ZJP    ARC4        IF BIT 60 NOT SET
          READMR RDATA,HBUF+CPRPC,PUPR
          RJM    PAC         MRVAL=UTP
          LDN    3
          STDL   T2
 ARC3     LDML   MRVAL,T2
          NJP    ARC4        IF UTP NON ZERO
          SODL   T2
          NJP    ARC3        IF NOT DONE CHECKING UTP
          UJP    ARC6        UTP=0, P+ ERROR PRESENT

*         CHECK UCR FOR P+ ERROR NOT STACKED

 ARC4     READMR RDATA,HBUF+CPRPC,PUCR
          RJM    PLB         (A)=UCR
          LPC    0#38
          ZJP    ARC5        IF NO UCR P+ ERRORS
          STDL   T7          T7=UCR, P+ ERRORS MASKED
          READMR RDATA,HBUF+CPRPC,PUSM
          RJM    PLB         (A)=USM
          LPDL   T7          MASK WITH UCR P+ ERROR
          ZJP    ARC5        IF NOT(UCR P+ ERROR AND U.M. BIT)
          RJM    RTE         READ TRAPS ENABLED
          NJP    ARC6        IF TRAPS ENABLED, NON-RETRYABLE

*         ANALYSIS = RETRY IN PROGRESS

 ARC5     SETDAN (EPRT,DARP) ANALYSIS CODE = 0205
          SETDAC TRTY        RETRY IN PROGRESS
          UJP    ARC7

*         ANALYSIS = NON-RETRYABLE ERROR

 ARC6     SETDAN (EPUN,DARCU)  ANALYSIS CODE = 321B
          SETDAC TRTY        RETRY IN PROGRESS
          SETOSA OSUPE,OSNA  OS ACTION CODE
 ARC7     AOML   TRHC,SN     INCREMENT HOUR COUNTER
          ADC    -TRHC.TH    HOURLY THRESHHOLD
          MJP    ARC8        IF NOT THRESHHOLD

*         ANALYSIS = HOURLY THRESHHOLD EXCEEDED

          SETDAN (EPCO,DATHT)  ANALYSIS CODE = 221D
          SETOSA OSUPE,OSNA  OS ACTION CODE
          SETDAC TREX        THETA RETRY EXHAUSTED
          LDC    TRHC.TH
          STML   TRHC,SN     RESET HOUR COUNTER
          LDN    0
          STML   TRPC,SN     REINITIALIZE P CTR
          CALL   THO         THETA HALF EXCHANGE OUT
          LDML   C9EF
          NJP    ARCX        IF CATASTROPHIC
          UJP    ARC12

 ARC8     CALL   THO         THETA HALF EXCHANGE OUT
          LDML   C9EF
          NJP    ARCX        IF CATASTROPHIC
          LDD    W6          EXCHANGE PACKAGE
          LRD    W4
          ADC    RR
          CRML   TRCP,ON     SAVE P
 ARCA     EQU    *-1

*         COMPARE CURRENT P AND PREVIOUS P

          LDN    3
          STDL   T2
 ARC9     LDML   TRCP,T2
 ARCB     EQU    *-1         PLUG CORRECT CPU VALUE
          SBML   TRSP,T2
 ARCC     EQU    *-1
          NJP    ARC11       IF P =/= PREVIOUS P
          SODL   T2
          PJP    ARC9        IF MORE TO COMPARE
          AOML   TRPC,SN     INC P COUNTER, SAME P
          SBN    TRPC.TH     P COUNTER THRESHHOLD
          PJP    ARC10       IF THRESHHOLD

*         SET A FLAG (TRMF) TO INDICATE THAT A COMPARE FOR
*         A MULTIPLE OCCURENCE SHOULD NOT LOOK AT THE LAST
*         WORD OF THE MRB.  IT CONTAINS COUNTER INFORMATION
*         WHICH WILL NOT COMPARE, EVEN THOUGH THE ERROR IS
*         THE SAME.

          LDN    1
          STML   TRMF        RETRY MULTIPLE FLAG
          UJP    ARC13

*         ANALYSIS = RETRY EXHAUSTED

 ARC10    SETDAN (EPCO,DATRE)  ANALYSIS CODE = 221C
          SETOSA OSUPE,OSNA  OS ACTION CODE
          SETDAC TREX        THETA RETRY EXHAUSTED
          LDN    0
          STML   TRPC,SN     RESET P COUNTER
          UJP    ARC12

 ARC11    LDN    1
          STML   TRPC,SN     RE-INITIALIZE P COUNTER
          LDDL   BC+BCDA     DFT ANALYSIS
          LPC    0#FF
          SBN    DARP
          NJP    ARC12       IF NOT RETRY IN PROGRESS
          LDDL   BC+BCDA
          LMC    EPCO*0#1000 CHANGE TO ERR PRIORITY - CORR
          STDL   BC+BCDA
 ARC12    LRD    W4
          LDD    W6
          ADC    RR
          CRML   TRSP,ON     SAVE CURRENT P
 ARCD     EQU    *-1
 ARC13    CALL   PEP         PATCH EXCHANGE PACKAGE
          LDN    TRPO        THETA RETRY P OFFSET
          RJM    IMB
          CWML   TRSP,ON     WRITE P TO 6TH BUFFER
 ARCF     EQU    *-1
          LDML   TRHC,SN     STORE RETRY COUNTERS
          STML   ARCG+1
          LDML   TRPC,SN
          STML   ARCG+3
          LDN    TRCO        THETA RETRY COUNTER OFFSET
          RJM    IMB
          CWML   ARCG,ON     WRITE CTRS TO 6TH ENTRY
          RJM    SPP         SCAN PFS PARITY
          LDML   CTIB        CTI BUFFER
          ZJP    ARCX        IF NO SCM PE'S
          CALL   LOG         LOG RETRY ERROR

*         ANALYSIS = REPAIRABLE ERROR

          SETDAN (EPCO,DARES) ANALYSIS CODE = REPAIRABLE ERROR SUCCESSFUL
          LDDL   BC+BCOA
          LPC    0#FF00      CLEAR PREVIOUS OS ACTION CODE
          STDL   BC+BCOA
          CALL   LFA         SWEEP MEMORIES, LOG FAILING ADDR & CONTENTS
          UJP    ARCX        RETURN


 ARCG     BSS    4
          EJECT
**        PLB - PACK LAST BYTE
*
*         METHOD             PACK LAST TWO BYTES OF RDATA INTO THE
*                            R REGISTER.
*
*         EXIT               (A) : LAST TWO BYTES OF RDATA IN PACKED
*                                    FORMAT.


 PLB      SUBR               ENTRY/EXIT
          LDML   RDATA+6
          SHN    8D
          LMML   RDATA+7
          UJN    PLBX
          SPACE  4,10
**        RTE - READ TRAPS ENABLED
*
*         METHOD             READS REGISTER C0, TRAPS ENABLED
*
*         USES               RDATA
*
*         EXIT               (A) : 1 IF TRAPS ARE ENABLED
*                                  0 IF TRAPS ARE DISABLED


 RTE      SUBR               ENTRY/EXIT
          READMR RDATA,HBUF+CPRPC,PTPE
          LDML   RDATA+7
          LPN    2
          UJP    RTEX

*COPY CTP$DFT_990_SCAN_PFS_BITS
          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (CYBER 990 ACTIONS)
 CRR      SPACE  4,10
**        CRR - CLEAR RETRY DECREMENTED (ACTION)
*
*         METHOD             CLEAR, SET DEC BIT 42
*
*         CALLED             BY TASK
*
*         USES               RDATA


           ROUTINE CRR


          READMR RDATA,HBUF+CPRPC,DEMR
          LDML   RDATA+5
          LPC    0#DF        CLEAR DEC BIT 42
          STML   RDATA+5
          WRITMR RDATA,HBUF+CPRPC,DEMR
          LDML   RDATA+5
          LMN    0#20        SET DEC BIT 42
          STML   RDATA+5
          WRITMR RDATA,HBUF+CPRPC,DEMR
          UJP    CRRX

          EJECT
**        SER - SET ERROR FLAG (ACTION)
*
*         METHOD             SET FLAG IN RESIDENT TO INDICATE THAT
*                            A CHANNEL 17 ERROR IS EXPECTED, DUE TO
*                            DFT RECOVERY ON AN UNCORRECTED PROC
*                            ERROR.  PARITY IS NOT RE-GENERATED.
*
*         CALLED             BY TASK
*
*         USES               EIEF
*
*         EXIT               EIEF = 1


           ROUTINE SER
          LDN    1
          STML   EIEF        EXPCTD IOU ERROR FLAG
          UJP    SERX
          EJECT
**        MCP - MASTER CLEAR PROCESSOR (ACTION)
*
*         CALLED             BY TASK


          ROUTINE MCP

          FUNCMR HBUF+CPRPC,MRMC
          UJP    MCPX
          EJECT
**        CCA - CHECK CATASTROPHIC ERROR (ACTION)
*
*         CALLED             BY TASK.
*
*         USES               RBUF, TERT
*
*         CALLS              RMR, CEW, LOG.
*
*         ENTRY              (RBUF) - MCR (UNPACKED).


          ROUTINE CCA
          LDN    SSMR
          STD    RN
          LDN    SSMR
          STD    RN
          LDML   HBUF+CPRPC
          RJM    RMR         READ STATUS SUMMARY
          LPN    4
          ZJP    CCAX        IF NOT UNCORRECTED
          LDN    1
          STM    TERT        SET FLAG - EXIT ACTION LIST
          SETDAN (EPCH,DACRE)
          SETFLG (BC.FV7,BC.FV8,BC.FL)
          SETDAC THCE        DISABLE CPU
          LDM    CPUH        GET ORDINAL OF CPU BEING PROCESSED
          NJN    CCA1
          LDM    CP0U        GET UNCORR REGISTER LIST FOR CPU0
          UJN    CCA2
 CCA1     LDM    CP1U        GET UNCORR REGISTER LIST FOR CPU1
 CCA2     RJM    BRL         BUILD REGISTER LIST
          CALL   RMR         READ REGISTERS

          CALL   SAC
          CALL   CEW
          UJP    CCAX
          EJECT
**        THO - THETA HALF EXCHANGE OUT
*
*         CALLED             BY ATE, ARC
*
*         USES               RDATA,  W4 - W6, RBUF, RN
*
*         CALLS              FEP, SRA, RMR, DMP, EMP, HEO
*
*         EXIT               (C9EF) - NON-ZERO = CATASTROPHIC ERROR ON HEO
*                            (RBUF) = MCR
*                            (W6) = PARTIAL ADDRESS TO EXCHANGE PACKAGE
*                            (W4 - W5) PARTIAL ADDRESS TO EXCHANGE PACKAGE

           ROUTINE THO


          READMR RBUF,HBUF+CPRPC,PMCR  SAVE MCR
          WRITMR THOA,HBUF+CPRPC,PMCR  WRITE ZEROS
          FUNCMR HBUF+CPRPC,MRCE  CLEAR ERRORS
          CALL   DMP         DISABLE MEMORY PORT
          CALL   EMP         ENABLE MEMORY PORT
          CALL   HEO         HALF EXCHANGE OUT
          FUNCMR HBUF+CPRPC,MRMC  MASTER CLEAR PROCESSOR
          LDN    SSMR
          STDL   RN
          LDML   HBUF+CPRPC
          RJM    RMR         READ STATUS,SUMMARY
          LPN    4
          STML   C9EF
          NJP    THOX        IF CATASTROPHIC ERROR ON HEO
          RJM    FEP         FIND XCHG PKGE
          CALL   SRA         CONVERT ADDR TO R FORMAT
          UJP    THOX

 THOA     BSSZ   10

          EJECT
**        FEP - FIND EXCHANGE PACKAGE
*
*         CALLED             BY PEP, LMB
*
*         USES               RDATA,  W4 - W6
*
*         CALLS              PAC
*
*         EXIT               (MRVAL) = ADDR OF XCHG PKG


 FEP      SUBR               ENTRY/EXIT
          READMR RDATA,HBUF+CPRPC,SSMR
          LDML   RDATA+7
          LPN    0#20        CHECK MONITOR MODE
          ZJP    FEP0        IF JOB MODE
          READMR RDATA,HBUF+HDRPC,PMPS  ADDR OF XP AT MPS
          UJP    FEP1

 FEP0     READMR RDATA,HBUF+HDRPC,PJPS  ADDR OF XP AT JPS
 FEP1     RJM    PAC         ADDR IN MRVAL
          UJP    FEPX
          EJECT
**        BMP - BUILD MODEL DEPENDENT BUFFER POINTER.
*
*         ENTRY  N/A
*
*         EXIT   (RS+1) - (RS+2) = PARTIAL ADDRESS TO MODEL DEPENDENT BUFFER.
*                RS = PARTIAL ADDRESS TO MODEL DEPENDENT BUFFER.
*
*         USES   RS.
*
*         CALLS  SPB, VCK.
*
*         MACROS NONE.


          ROUTINE BMP        ENTRY/EXIT

          LRD    DP+1
          RJM    SPB         SET PP BOUNDS
          LDN    MDLP        LOAD PTR TO MODEL DEPENDENT BUFFER
          RJM    IDA
          CRDL   RS          SET UP R-RGTR
          LDN    VER2
          RJM    VCK         VERSION CHECK
          MJP    BMPX        IF VERSION 1

          LDN    VER4
          RJM    VCK         VERSION CHECK
          PJP    BMP1        IF VERSION 4 OR GREATER

          LDML   CPUO
          ZJP    BMPX        IF CPU0
          LDC    MDBL
          RAD    RS
 BMP0     UJP    BMPX        RETURN

 BMP1     LRD    RS+1        DECODE NEXT POINTER
          LDD    RS
          ADML   CPUO
          ADC    RR
          CRDL   RS
          UJN    BMP0

          EJECT
**        LMB - LOAD MODEL DEPENDENT BUFFER (ACTION)
*
*         METHOD             IF RUNNING VERSION 4, CALL THE VERSION 4 PROGRAM.
*                            ELSE, CAPTURE DATA FROM MAINTENANCE REGISTER BUFFER,
*                            HISTORY FILE, EXCHANGE PACKAGE, CURRENT PROGRAM
*                            ADDRESS AND 5 INSTRUCTIONS ON EACH SIDE, AND
*                            THE CAPTURE BUFFER AND WRITE TO THE MODEL
*                            DEPENDENT BUFFER.
*
*         CALLED             BY TASK.
*
*         USES               RS, CM, MRVAL, W2, W4, W5, W6, T3, RN.
*
*         CALLS              AMR, PAC, IMB, SRA, BMP, WMB, FEP, WPC, VCK, EMV.
*
*         MACROS             EXITMR, READMR, FUNCMR, CALL.


           ROUTINE LMB

          LDN    VER4        LOAD VERSION
          RJM    VCK         CHECK VERSION
          MJN    LMB0        IF VERSION 3 OR BELOW
          CALL   EMV         VERSION 4 MAIN PROGRAM
          UJP    LMBX        EXIT

 LMB0     CALL   BMP         BUILD MODEL-DEPENDENT-BUFFER POINTER
          LRD    RS+1
          LDD    RS
          ADC    RR
          CRDL   CM          READ FIRST WORD OF MDB
          LDDL   CM
          SHN    2           MASK INTERLOCK FLAG
          MJP    LMBX        IF INTERLOCK FLAG SET, DON'T LOG MDB

*         READ CSA AFTER MASTER CLEAR

          READMR RDATA,HBUF+HDRPC,PCSA  READ CSA
          RJM    PAC         PACK DATA INTO MRVAL
          LDN    24D
          RAD    RS          START AT MDB WORD 24
          ADC    RR          RELOCATION BIT
          CWML   MRVAL,ON    WRITE TO MDB

*         COPY MRB INTO MODEL DEPENDENT BUFFER

          LDN    0
          STDL   W5
 LMB1     LDDL   W5          LOAD OFFSET
          RJM    IMB         GET R-RGTR
          CRML   MRVAL,ON    READ OUT OF CM
          LDDL   W5
          ADC    -25D
          NJN    LMB2        IF NOT WORD 25
          LDML   CTIB
          STML   MRVAL
          LDML   CTIBR       ALL RELOADED MEMORIES
          STML   MRVAL+1     ALL UNSUCCESSFUL RELOADED MEMORIES
 LMB2     RJM    WMB         WRITE TO MOD DEP BUFFER
          AODL   W5
          ADC    -30D
          NJP    LMB1        IF NOT DONE WITH MRB

*         WRITE HISTORY FILE TO MEMORY

          FUNCMR HBUF+CPRPC,MRMC  MASTER CLEAR THE PROCESSOR
          LDN    0
          STDL   W5

          EXITMR LMB4

 LMB3     RDMEM  RGU.HF,W5,,,8,TC.RGU


          RJM    PAC         PACKED RESULT NOW IN MRVAL
          RJM    WMB         WRITE MODEL DEP BUFFER
          AODL   W5
          ADC    -64D
          NJP    LMB3        IF NOT DONE WITH HISTORY FILE

 LMB4     EXITMR FMR

*         WRITE EXCHANGE PACKAGE TO MEMORY

          LDC    52D         SIZE (WORDS) OF XP
          STDL   T3
          RJM    FEP         FIND XCHG PKG
          CALL   SRA         SET R RGTR
          LDD    W6
          STD    W2          SAVE OFFSET FOR WPC
          LRD    W4
          ADC    RR
          CRML   MRVAL,ON    READ 1ST WORD FROM XP
          UJN    LMB6
 LMB5     AOD    W6          INCREMENT XP CM ADDRESS
          LRD    W4
          ADC    RR
          CRML   MRVAL,ON    READ WORD FROM XP
 LMB6     RJM    WMB         WRITE MODEL DEP BUFFER
          SODL   T3
          NJP    LMB5        IF NOT DONE WITH XP

*         WRITE P AND SURROUNDING INSTR'S

          RJM    WPC         WRITE PROGRAM CONTENTS

*         WRITE CAPTURE BUFFER TO MEMORY

          EXITMR LMB14

          LDK    PMF1        LOAD ADDR OF CAPTURE BUFFER
          STDL   RN
          LDC    MRRD        LOAD FUNCTION
          ADML   HBUF+HDRPC

*         SET CHANNEL INTERLOCK, LOAD FUNCTION, OUTPUT ADDRESS

          RJM    AMR         ACCESS MNTNCE RGTR
          LDN    1
          STML   RMEA
          LDC    512D
          STDL   W5          WORD COUNTER FOR CAPTURE BUFFER
 LMB7     LDN    10
          IAM    RDATA,MR    READ 1 WORD
          ZJN    LMB9        IF NO ERROR
          LDN    0           DEPLETE 512 WORD CTR
          STDL   W5          MCH MUST HAVE DISCONNECTED
 LMB8     LDC    0#FFFF
          STML   MRVAL,W5    STORE ALL 1'S TO DENOTE ERROR
          AODL   W5
          SBN    4
          NJN    LMB8        IF NOT DONE
          LDN    1
          STDL   W5          DEPLETE COUNTER
          UJN    LMB11

 LMB9     LDN    VER2
          RJM    VCK
          PJP    LMB10       IF NOT OS VERSION 1
          LDDL   W5
          ADC    -474D
          PJP    LMB12

 LMB10    RJM    PAC         PACKED DATA NOW IN MRVAL
 LMB11    RJM    WMB         WRITE TO MODEL DEP BUFFERS
 LMB12    SODL   W5          DECREMENT 512 WORD CTR
          ZJN    LMB13       IF DONE
          LJM    LMB7        PROCESS NEXT WORD

 LMB13    RJM    CMI         DEACTIVATE CHANNEL, CLR INTRLK

 LMB14    EXITMR FMR

          LJM    LMBX
          EJECT
**        SDB - SET DEC BIT 18 (ACTION)
*
*         CALLED             BY TASK


          ROUTINE SDB       ENTRY/EXIT
          READMR RDATA,HBUF+HDRPC,DEMR
          LDML   RDATA+2
          LMN    0#20        SET DEC BIT 18
          STML   RDATA+2
          WRITMR RDATA,HBUF+HDRPC,DEMR
          UJP    SDBX
          EJECT
**        RCM - RELOAD CONTROL MEMORIES
*
*         METHOD             READ IN 2AP (CTI) TO RELOAD CONTROL MEMORIES.
*                            CHECK SUCCESS OF RELOAD.  CALL 2AP TO RELOAD
*                            MEMORIES.  AFTER RETURN FROM 2AP, READ CONTENTS
*                            OF PREVIOUSLY FAILING ADDRESSES AND REPORT
*                            DATA IN WORD 27 OF THE RESPECTIVE MRB.   IF
*                            FAILING ADDRESSES WAS NEVER ISOLATED, REPORT
*                            ZEROS.  IF THE RELOAD WAS UNSUCCESSFUL,
*                            CHANGE THE CTI RESULT WORD IN THE MRB AND
*                            THE ANALYSIS CODE IN THE BUFFER CONTROL
*                            WORD TO UNREPAIRABLE ERROR.  IF SUCCESSFUL,
*                            NOTHING NEED BE DONE, BECAUSE DEFAULTS ARE
*                            SET TO REPAIRABLE ERROR.
*
*         CALLED             BY TASK
*
*         ENTRY              CTIB  SET BIT DESIGNATES MEMORY TO RELOAD. CACHE
*                            IS ALWAYS RELOADED.
*
*         CALLS              MMA
*
*         MACROS EXITMR.


          ROUTINE RCM       ENTRY/EXIT
*         SET UP CALL BLOCK FOR CTI

          LDN    25B
          STML   CALB        CTI FUNCTION
          LDML   CPUO
          STML   CALB+1      CPU ORDINAL
          LDML   CTIB
          STML   CALB+2      BITS SPECIFYING MEMORIES

*         READ IN 2AP AND EXECUTE

          RJM    ECM         EXECUTE CIP MODULE
          RJM    RPW         RESTORE POINTER WORD
          LDML   CALB+2
          STML   CTIBR       SAVED RETURNED RESULTS

          LDML   CTIB
          ZJP    RCMX        IF NO SCM RELOADS WERE DONE

*         ADD LAST LOGGED TO MRBA TABLE

          AOML   MRBA        INCREMENT ENTRY CTR
          STDL   T1
          LDN    0           SCRATCH BUFFER
          STML   MRBA,T1     ADD OFFSET OF LAST LOGGED
          LDN    1
          STDL   T7          OFFSET TO MRBA TABLE
          LDML   MRBA
          STML   RCMB        SAVE CRITICAL MRBA

*         READ CONTENTS OF FAILING ADDRESS

 RCM0     LDML   MRBA,T7
          STDL   W4          SAVE OFFSET
          RJM    IBW
          CRDL   CM          READ BUFFER CONTROL WORD
          LDDL   CM+3        OFFSET TO MRB
          ADN    25D
          STDL   W5          SAVE OFFSET
          RJM    IMB
          CRML   RCMA,ON     READ WORD 25
          LDML   RCMA+3
          STDL   RN          FAILING ADDR
          ADC    -0#FFFF
          ZJP    RCM1        IF FAILING ADDR NEVER ISOLATED

          EXITMR RCM0.05

          LDM    HBUF+HDRPC  FORM FUNCTION WORD
          ADC    MRRD
          ADML   RCMA+2      ADD TYPE CODE
          RJM    AMR         ACCESS MNTCE CHANNEL
          LDN    8D          BYTE COUNT
          IAM    RDATA,MR    READ FAILING ADDR
          RJM    PAC         PACK DATA INTO MRVAL
          RJM    CMI         CLEAR MNTCE INTERLOCK

 RCM0.05  EXITMR FMR

          LDN    2
          ADDL   W5          FORM OFFSET OF WORD 27
          RJM    IMB
          CWML   MRVAL,ON    WRITE NEW CONTENTS TO CM
          LDN    27D
          RJM    IMB
          CWML   MRVAL,ON    WRITE TO SCRATCH BUF

*         CHECK SUCCESS OF RELOADS

 RCM1     LDML   RCMA
          LPML   CTIBR
          ZJP    RCM2        IF RELOAD SUCCESSFUL

          STML   RCMA+1
          LDDL   W5          RELOAD OFFSET
          RJM    IMB
          CWML   RCMA,ON     WRITE WORD BACK TO CM

*         CHANGE ANAYSIS CODE IN CONTROL WORD

          LDDL   CM
          LPC    0#FF00      CLEAR PREVIOUS OS ACTION CODE
          STDL   CM
          LDDL   CM+1
          LPC    0#F00
          STDL   CM+1
          LDC    EPUN*10000+DAREU
          LMDL   CM+1
          STDL   CM+1
          LDDL   W4          RELOAD OFFSET
          ZJP    RCM4        IF CHANGE TO BC
          RJM    IBW
          CWDL   CM          WRITE MODIFIED CONTROL WORD TO CM

 RCM2     SOML   MRBA        DECREMENT ENTRY CTR
          ZJP    RCM3

          AODL   T7
          LJM    RCM0

 RCM3     LDML   RCMB
          STML   MRBA        RESTORE MRBA
          LJM    RCMX

*         CHANGE ANAYSIS CODE IN CONTROL WORD BC

 RCM4     LDDL   BC
          LPC    0#FF00      CLEAR PREVIOUS OS ACTION CODE
          STDL   BC
          LDDL   BC+1
          LPC    0#F00
          STDL   BC+1
          LDC    EPUN*10000+DAREU
          LMDL   BC+1
          STDL   BC+1
          UJP    RCM2


*         TEMP LOCATIONS

 RCMA     CON    0,0,0,0
 RCMB     CON 0



          EJECT
**        MSA - MAKE SYSTEM VIRTUAL ADDRESS.
*
*         ENTRY  (W4 - W5) = PARTIAL ADDRESS TO EXCHANGE PACKAGE.
*                (W6) =  R-RGTR OFFSET TO EXCHANGE PACKAGE.
*
*         EXIT   (CM - CM+2) = SYSTEM VIRTUAL ADDRESS.
*                (W0 - W3) = SEGMENT TABLE ENTRY.
*
*         USES   W0-W6, T1-T4, CM.
*
*         CALLS  LWA.
*
*         MACROS NONE.


 MSA1     LDN    0           FLAG INVALID/MISSING SEGMENT

 MSA      SUBR               ENTRY/EXIT
          LRD    W4
          LDD    W6
          ADC    RR
          CRML   MSAA,ON     (MSAA) = P FROM EXCHANGE PACKAGE
          LDML   MSAA+1
          LPC    0#FFF       ZERO OUT RING NUMBER
          STML   MSAA+1
          LDML   MSAA+3
          LPN    BOB         BYTE OFFSET BITS
          STML   MSAB        (MSAB) = BYTE OFFSET
          LDML   MSAA+3
          SCN    BOB
          STML   MSAA+3      CHANGE TO WORD BOUNDARY
          LDD    W6          LOAD BYTE ADDRESS
          ADN    16D         SEGMENT TABLE LENGTH OFFSET
          ADC    RR
          CRDL   T1          GET SEGMENT TABLE LENGTH
          ADN    18D         SEGMENT TABLE ADDRESS OFFSET
          CRDL   T2          GET SEGMENT TABLE ADDRESS
          ADN    1
          CRDL   T3
          LDDL   T1
          SBML   MSAA+1
          MJP    MSA1        IF NOT A VALID SEGMENT
          LDDL   T3          FORM WORD ADDRESS FOR LWA
          SHN    -3
          STDL   T3
          LDD    T2
          LPN    7
          SHN    13D
          RADL   T3
          LDDL   T2
          SHN    -3
          STDL   T2
          LDN    T2
          RJM    LWA         LOAD ADDRESS OF SEGMENT TABLE
          ADML   MSAA+1      ADD SEGMENT OF INTEREST
          CRDL   W0          FETCH ASID
          LDDL   W0
          LPC    0#8000
          ZJP    MSA1        IF INVALID
          LDDL   W1
          ZJP    MSA1        IF NOT A VALID ASID
          STDL   CM          SAVE ASID
          LDML   MSAA+2      COPY REMAINDER OF PVA
          STDL   CM+1
          LDML   MSAA+3
          STDL   CM+2
          LDN    1
          UJP    MSAX        RETURN

 MSAA     BSSZ   4
 MSAB     CON    0

*COPY CTP$DFT_PVA_TO_RMA_ROUTINES
          EJECT
**        WPC - WRITE PROGRAM CONTENTS
*
*         METHOD             TRANSLATE P FROM A PVA TO AN RMA.
*                            WRITE RESPECTIVE PTE TO MDB.  ADD
*                            AND SUBTRACT 5 WORDS ON EACH SIDE OF
*                            P.  IF A PAGE BOUNDARY IS CROSSED, THE
*                            APPROPRIATE ROUTINE IS CALLED.  OTHERWISE,
*                            LOG THE 5 INSTRUCTIONS ON EACH SIDE OF
*                            P (INCLUDING P) TO THE MDB.
*
*         CALLED             BY LMB
*
*         ENTRY              (W2)   - R RGTR OFFSET TO XCHG PKG
*                            (W4-W5) -R RGTR ADDRESS TO XCHG PKG
*
*         USES               LMBA, T1-T4, PSMV, W0-W3, W6, MRVAL
*
*         CALLS              PVC, MSA, SPT, GPP, GNP, RWP, WRZ

+
 WPC      SUBR               ENTRY/EXIT
          RJM    PVC         PRESET VIRTUAL CONSTANTS
          LDDL   W2
          STDL   W6          RESTORE R-RGTR TO XCHG PKG
          RJM    MSA         MAKE SYSTEM VIRTUAL ADDRESS
          ZJP    WPC3        IF NOT VALID
          AOML   LTOL        INCREMENT LENGTH TO LOG COUNTER
          AOD    RS
          LRD    RS+1
          ADC    RR
          CWDL   W0          WRITE SEG TABLE ENTRY
          RJM    SPT         SEARCH PAGE TABLE
          ZJP    WPC2        IF PAGE MISS

*         SAVE RMA

          STDL   T3
          SRD    T1
          LDDL   T1
          STML   WPCA        SAVE UPPER 10 BITS
          LDDL   T2
          STML   WPCA+1      SAVE MID 12 BITS

*         WRITE PTE TO MDB

          AOML   LTOL        INCREMENT LENGTH TO LOG COUNT
          AOD    RS          INCREMENT MDB ADDRESS
          LRD    RS+1
          ADC    RR
          CWML   SPTJ,ON     WRITE PTE TO MDB

*         CHECK PAGE BOUNDARIES.

          LDML   PSMV
          LMC    0#7F
          SHN    9D
          LMC    0#FFFF
          LPML   MSAA+3
          SHN    -3
          STML   WPCB        PAGE OFFSET (IN WORDS)
          SBN    5
          MJN    WPC0        IF CROSSING TOP PAGE BDRY
          ADN    11D
          STDL   T4          PG OFFSET + 6 WORDS
          LDML   PSMV
          LMC    0#7F
          SHN    6
          LPML   T4          MASK FOR OVERFLOW
          NJN    WPC1        IF CROSSING BOTTOM PAGE BDRY

*         WRITE 11 WORDS FROM 1 PAGE TO MDB

          LDN    1
          RJM    WRZ         WRITE ZEROS TO 2ND PTE
          LDN    11D         # WORDS TO READ, WRITE
          STDL   W4
          LDDL   T3
          SBN    5
          RJM    RWP         WRITE PROGRAM CONTENTS TO MDB
          LJM    WPCX

 WPC0     RJM    GPP         GET PREV PAGE
          LJM    WPCX

 WPC1     LDDL   T4          PO + 6
          LPN    0#3F
          STDL   T4          # WORDS TO READ FROM NEXT PAGE
          RJM    GNP         GET NEXT PAGE
          LJM    WPCX

 WPC2     LDN    12D
          STDL   T2
          UJP    WPC4

 WPC3     LDN    13D
          STDL   T2
 WPC4     LDC    0#FFFF
          STML   MRVAL
          STML   MRVAL+1
          STML   MRVAL+2
          STML   MRVAL+3
          RJM    WMB         WRITE ALL F'S TO MDB
          LDDL   T2

          RJM    WRZ         WRITE ALL ZEROS
          LJM    WPCX

 WPCA     CON    0,0,0       STORES RMA FOR P
 WPCB     CON    0           PAGE OFFSET FOR P
          EJECT
**        APC - ANALYZE P CONDITION.
*
*         ENTRY  (W4-W5) = PARTIAL ADDRESS TO EXCHANGE PACKAGE.
*                (W6) = OFFSET TO EXCHANGE PACKAGE.
*
*         EXIT   (W4-W5) = PARTIAL ADDRESS TO EXCHANGE PACKAGE.
*                (W6) = OFFSET TO EXCHANGE PACKAGE.
*                TF = 1 IF VECTOR GATHER/SCATTER OPCODE WAS NOT FOUND.
*
*         USES   MSAB, T4, W4-46.
*
*         CALLS  PVC, MSA, SPT, FEP, SRA, BMP.


          ROUTINE APC

          LDN    0
          STDL   TF          CLEAR TEMPORARY FLAG
          RJM    PVC         PRESET VIRTUAL CONSTANTS
          RJM    MSA         MAKE SYSTEM VIRTUAL ADDRESS
          ZJN    APC1        IF NOT VALID
          RJM    SPT         SEARCH PAGE TABLE
          ZJN    APC1        IF NOT VALID
          CRML   APCA,ON     (APCA) = WORD POINTED TO BY P
          LDML   MSAB        BYTE OFFSET
          SHN    -1
          STDL   T4          (T4) = RMA BYTE OFFSET
          LDML   APCA,T4     CURRENT OPCODE
          SHN    -10
          ADC    -VGAT
          ZJN    APC2        IF OPCODE FOUND
          LDML   APCA,T4
          SHN    -10
          ADC    -VSCA
          ZJN    APC2        IF OPCODE FOUND
 APC1     BSS    0
          CALL   BMP         BUILD MODEL-DEPENDENT-BUFFER POINTER
          RJM    GML         GET MDB LENGTH  (GMLA)
          LDD    RS
          ADML   GMLA        MDB LENGTH - 1
          ADC    RR
          CRML   APCB,ON     READ WORD WITH FALSE ERROR COUNTERS
          AOML   APCB+2      INCREMENT NOT VERIFIED COUNTER
          LDN    1
          STDL   TF          SET TEMPORARY FLAG
          UJN    APC3        WRITE WORD BACK TO MEMORY

 APC2     BSS    0
          CALL   BMP         BUILD MODEL-DEPENDENT-BUFFER POINTER
          RJM    GML         GET MDB LENGTH  (GMLA)
          LDD    RS
          ADML   GMLA        MDB LENGTH - 1
          ADC    RR
          CRML   APCB,ON     READ WORD WITH FALSE ERROR COUNTERS
          AOML   APCB+3      INCREMENT VERIFIED COUNTER
 APC3     LDD    RS
          ADML   GMLA        MDB LENGTH - 1
          ADC    RR
          CWML   APCB,ON     WRITE WORD BACK TO MEMORY
          RJM    FEP         FIND EXCHANGE PACKAGE
          CALL   SRA         SET R-REGISTER
          UJP    APCX        RETURN
 APCA     BSSZ   4
 APCB     BSSZ   4
          EJECT
**        GML - GET MODEL-DEPENDENT-BUFFER LENGTH.
*
*         ENTRY  RS+3 = ENTIRE MODEL DEPENDENT BUFFER LENGTH.
*
*         EXIT   GMLA = LENGTH OF ONE CPU'S MODEL DEPENDENT BUFFER.
*
*         CALLS  SPB.


 GML      SUBR
          LRD    RS+1
          RJM    SPB         SET PP BOUNDS
          LDN    VER4
          RJM    VCK         VERSION CHECK
          PJP    GML0        IF VERSION 4 OR GREATER
          LDML   CPU1M
          ZJP    GML0        IF SINGLE CPU
          LDDL   RS+3
          SHN    -1
          SBN    1
          STML   GMLA        SAVE DUAL LENGTH/2
          UJN    GMLX        RETURN

 GML0     LDDL   RS+3
          SBN    1
          STML   GMLA
          UJN    GMLX

 GMLA     CON    0
 SAVE     BSSZ   10
*COPY     CTP$DFT_RESTORE_POINTER_WORD
          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW

          OVERLAY  (CYBER 990 ACTIONS II)
 PEP      SPACE  4,10
**        PEP - PATCH EXCHANGE PACKAGE.
*
*         ENTRY              (RBUF) - MCR (UNPACKED).
*                            (W4-W5) = R REGISTER - EXCHANGE PACKAGE.
*                            (W6) = R REGISTER OFFSET - EXCHANGE PACKAGE.
*                            TF = 1 IF NO VECTOR GATHER/SCATTER OPCODE FOUND IN APC.
*                            FE = 1 IF ANALYSIS IS A FALSE ERROR CONDITION
*
*         USES               W0, RDATA,  W4 - W6, RBUF, CM.
*
*         CALLS              SPB, RMR.


           ROUTINE PEP

          LDML   RBUF+6
          SHN    10
          LMML   RBUF+7
          STML   PEPC        SAVE PACKED MCR
          LRD    W4          LOAD R REGISTER - ADDR EXG PKG
          RJM    SPB         SET PP BOUNDS
          LDN    MBRG
          STDL   RN
          LDML   CMCC
          RJM    RMR         READ MEMORY BOUNDS REGISTER
          LDML   RDATA
          STML   PEPA        (PEPA) = MEMORY BOUNDS, BYTE 0
          LPC    0#BF        DISABLE MEM BOUNDS
          STML   RDATA
          WRITMR RDATA,CMCC,MBRG

*         READ MCR FROM EXCHANGE PACKAGE

          LDD    W6
          ADN    6
          ADC    RR
          CRDL   CM          READ WORD WITH MCR

          LDDL   BC+BCDA
          LPC    0#FF
          STDL   W0          (W0)=CURRENT ANALYSIS CODE
          SBN    DARP
          ZJP    PEP1        IF ANALYSIS = RETRY IN PROGRESS

          LDDL   FE          FALSE ERROR FLAG
          ZJP    PEP0        IF NOT(ANALYSIS = FALSE ERROR)
          LDML   PEPC
          LPC    NDUE
          STML   PEPC        CLEAR DUE IN SAVED MCR
          LDDL   TF
          NJP    PEP2        IF OPCODE WAS NOT FOUND
          LDML   PEPC
          LPC    ISE+ASE+ACV+ESE+PWF+SYC+ISR+OUC+TRE
          NJP    PEP2        IF MCR CONDITION OTHER THAN ASYNC OR DUE

*         INCREMENT PROGRAM ADDRESS IN EXCHANGE PACKAGE

          LDD    W6
          ADC    RR
          CRML   PEPB,ON     (PEPB) = EXCHANGE PACKAGE PROGRAM ADDRESS
          LDN    4
          RAML   PEPB+3
          SHN    -20         SAVE POSSIBLE CARRY BIT
          RAML   PEPB+2
          LDD    W6
          ADC    RR
          CWML   PEPB,ON     WRITE MODIFIED P EXCHANGE PACKAGE
          UJP    PEP2

 PEP0     LDML   PEPC
          LPC    DUE
          NJP    PEP1        IF DUE SET
          LDML   HALT
          ZJP    PEP1        IF NOT(HALT ON ERROR)
          LDML   PEPC
          LMC    DUE
          STML   PEPC        FORCE DUE
          LDDL   W0
          SBN    DAUPE
          NJN    PEP1        IF NOT(ANALYSIS = UNCORRECTED ERROR)

*         ANALYSIS = THETA FORCED UNCORRECTED ERROR

          SETDAN (EPUN,DATFU)
          SETOSA OSUPE,OSNA

 PEP1     LDML   PEPC
          LPC    NSEL
          STML   PEPC        CLEAR SOFT ERROR

*         WRITE MODIFIED MCR TO EXCHANGE PACKAGE, MCR

 PEP2     LDML   PEPC
          STDL   CM          RESTORE MCR
          LDD    W6
          ADN    6
          ADC    RR
          CWDL   CM          WRITE MCR WORD TO XP
          LDML   PEPC
          SHN    -10         POSITION
          STML   RBUF+6      RESTORE MCR
          LDML   PEPC
          LPC    0#FF
          STML   RBUF+7      RESTORE MCR
          WRITMR RBUF,HBUF+CPRPC,PMCR  RESTORE MCR
          LDML   PEPA
          STML   RDATA
          WRITMR RDATA,CMCC,MBRG
          LDN    D8ST
          RJM    IIB
          CRDL   CM          GET FLAG FOR OS TRACKING OF TRAP ENABLES
          LDDL   CM
          SHN    21-11       GET TO BIT 57
          PJN    PEP3        IF NOT SET
          LDML   OLSS
          SHN    21-SSMM
          PJN    PEP3        IF IN JOB MODE
          LDD    W6
          ADC    2+RR
          CRDL   CM          GET TRAP ENABLES WORD
          LDDL   CM
          LPC    0#FD        CLEAR TE
          ADN    2           SET TE
          LDD    W6
          ADC    2+RR
          CWDL   CM          REWRITE TRAP ENABLES WORD
 PEP3     LRD    DP+1
          RJM    SPB         RE-STORE PP BOUNDS
          UJP    PEPX

 PEPA     CON    0
 PEPB     BSSZ   4
 PEPC     CON    0

**        IBP - INITIALIZE BDP.
*
*         ENTRY              (CSAR) = CPU *CSA* REGISTER #.
*                            (HBUF) = PROCESSOR MRT ENTRY.
*
*         EXIT               PROCESSOR HAS BEEN MASTER CLEARED.
*                            BDP HAS BEEN INITIALIZED.
*
*         MACROS             FUNCMR, WRITMR.


           ROUTINE IBP       ENTRY/EXIT

          LDC    CSBDPI      CS BDP INIT ADDR
          STM    IBPA+7
          SHN    -10
          STM    IBPA+6      STORE UNPACKED BDP INIT ADDR
          FUNCMR HBUF+CPRPC,MRMC  MASTER CLEAR THE CPU
          LDM    CSAR
          STD    RN
          WRITMR IBPA,HBUF+CPRPC
          FUNCMR HBUF+CPRPC,MRSP  START PROCESSOR AT BDP INIT
          LDN    0#20        DELAY TO ALLOW SEQUENCE TO COMPLETE
 IBP1     SBN    1
          NJN    IBP1        IF TIMER NOT EXPIRED
          FUNCMR HBUF+CPRPC,MRMC  MASTER CLEAR THE CPU
          LJM    IBPX        RETURN

 IBPA     BSSZ   10B

          OVERFLOW R2ORG     CHECK FOR OVERFLOW

          OVERLAY  (SAVE CONTROL STORE)
 SAC      SPACE  4,10
**        SAC - SAVE CONTROL STORE.

          ROUTINE SAC        ENTRY/EXIT

          LDN    1
          RJM    SCS
          UJP    SACX        EXIT

*COPY     CTP$DFT_SAVE_CONTROL_STORE

          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW


          OVERLAY  (VERSION 4 DFT MDB LOGGING PART I)
 EMV      SPACE  4,10
**        EMV - EXECUTE MAIN PROGRAM FOR VERSION 4 MDB LOGGING.
*
*         METHOD             UPON CPU ERROR, LOG NECESSARY ERROR INFORMATION
*                            IN THE MODEL DEPENDENT BUFFER, OR THE OVERFLOW
*                            BUFFER.  IF THIS INFORMATION IS OVERWRITTEN OR
*                            CANNOT BE LOGGED SET THE NECESSARY FLAGS TO
*                            SIGNAL THE OS THAT THIS SITUATION IS PRESENT.
*
*         ENTRY              IF VERSION 4 MDB LOGGING.
*
*         USES               BCWF, CEPR, CEWF, E6AD - E6AD+2,
*                            HDAD -HDAD+2, LTOL, MRBA, MRVAL+3,
*                            RS - RS+2, SHWD.
*
*                            BCWF = 0 IF LOGGABLE DATA.
*                                 = 1 IF OVERWRITE DATA.
*                                 = 2 IF UNLOGGABLE DATA.
*
*         CALLS              DEP, DLC, ITUF, PAC, SPB, WCB, WEP, WEW,
*                            WHF, WLR, WMR, WPC, WSH.
*
*         EXIT               ALL MODEL DEPENDENT ERROR INFORMATION LOGGED,
*                            OR THE OS IS FLAGGED THAT THE INFORMATION IS
*                            UNLOGGABLE.
*

          ROUTINE EMV        ENTRY/EXIT

          LRD    DP+1        SET R REGISTER
          RJM    SPB         SET PP BOUNDS
          RJM    DEP         DETERMINE ERROR PRIORITY

*         IF ISSUE TIME OUT AND CALL FROM CEW SUB HEADER ID = 6.

          LDML   CEWF        CALLED FROM CEW FLAG
          NJN    EMV0        IF CALLED FROM CEW (IF V4 AND ISSUE TIME OUT)

          LDML   CEPR        ERROR PRIORITY
          SBN    3
          MJN    EMV0        IF NOT ISSUE TIME OUT

*         ISSUE TIME OUT ERROR ID = 3,4,5.

          LDML   ITUF        UNLOGGABLE ISSUE TIME OUT FLAG
          SBN    2
          ZJP    EMVX        IF UNLOGGABLE, EXIT

          LDM    E6AD        LOAD ADJUSTED LOWER MDB ADDRESS FROM ERROR ID 6
          STD    RS
          LDM    E6AD+1      LOAD ADJUSTED UPPER MDB ADDRESS FROM ERROR ID 6
          STD    RS+1
          LDM    E6AD+2      LOAD ADJUSTED UPPER MDB ADDRESS FROM ERROR ID 6
          STD    RS+2
          LJM    EMV7        ISSUE TIME OUT, ERROR ID 3, 4, 5

 EMV0     CALL   DLC         DETERMINE LOGGING CONDITIONS

          LDML   BCWF        BUFFER CONTROL WORD WRITE FLAG
          SBN    2           UNLOGGABLE ERROR
          MJN    EMV1        IF LOGGABLE ERROR
          UJP    EMVX        UNLOGGABLE ERROR, EXIT

*         READ CSA ADDRESS.

 EMV1     READMR RDATA,HBUF+HDRPC,PCSA  READ CSA
          RJM    PAC         PAC CSA IN MRVAL

          LDML   CEPR        ERROR PRIORITY
          SBN    2
          ZJN    EMV3        IF ERROR PRIORITY 2  (OTHER)
          MJN    EMV2        IF ERROR PRIORITY 1  (RETRY)
          LJM    EMV8        ERROR PRIORITY 3  (ISSUE TIMEOUT)
 EMV2     LJM    EMV9        ERROR PRIORITY 1  (RETRY)

 EMV3     LDML   CSAA        CSA ADDRESS SAVED IN ATE
          ADC    -CSRA       ADDRESS 44/45
          ZJN    EMV4        IF ERROR PRIORITY 2 AND RETRY

          LDML   MRBA        SCM PE ENTRY COUNTER
          NJN    EMV5        IF ERROR PRIORITY 2 AND SCM PE
          UJN    EMV6        IF ERROR PRIORITY 2 ONLY

 EMV4     LJM    EMV9        ERROR PRIORITY 2 AND RETRY
 EMV5     LJM    EMV10       ERROR PRIORITY 2 AND SCM PE

*         WRITE MODEL DEPENDENT BUFFER DATA.
*
*         ERROR PRIORITY = 1 (RETRY).             ERROR ID = 7, 2, 3, 4, 5.
*
*         ERROR PRIORITY = 2 (OTHER) AND RETRY.   ERROR ID = 7, 2, 3, 4, 5.
*
*         ERROR PRIORITY = 2 (OTHER), RETRY AND SCM PE.  ERROR ID = 7, 1, 2,
*                                                                   3, 4, 5.
*
*         ERROR PRIORITY = 2 (OTHER) AND SCM PE.  ERROR ID = 1, 2, 3, 4, 5.
*
*         ERROR PRIORITY = 2 (OTHER).             ERROR ID = 2, 3, 4, 5.
*
*         ERROR PRIORITY = 3 (ISSUE TIME OUT).    ERROR ID = 6, 3, 4, 5.
*
*         WRITE CAPTURE BUFFER.        (ERROR ID = 2)  LGTH = 200 HEX
*         WRITE HISTORY FILE.          (ERROR ID = 3)  LGTH = 40  HEX
*         WRITE EXCHANGE PACKAGE.      (ERROR ID = 4)  LGTH = 34  HEX
*         WRITE P AND SURROUNDING INSTRUCTIONS. (ERROR ID = 5) LGTH = E  HEX
*         WRITE EXECUTING WORDS OF SCM TO MDB.  (ERROR ID = 6) LGTH = 17 HEX
*         WRITE LAST TWO WORDS OF MRB6.         (ERROR ID = 7) LGTH = 2  HEX
*         WRITE MRB6.                           (ERROR ID = 1) LGTH = 3  HEX
          EJECT

*         WRITE CAPTURE BUFFER TO MDB.

*         CLEAR THE SUB HEADER WORD BUFFER FOR SUB HEADER BUILD.

 EMV6     LDC    SHWD        LOAD ADDRESS OF SUB HEADER WORD DATA BLOCK
          RJM    CLR         CLEAR BLOCK

*         SET UP SUB HEADER.

          LDN    SH.CB       SUB HEADER ID
          STML   SHWD+V4SHHID  STORE TO BUFFER
          LDC    LOD.CB      LENGTH OF DATA TO WRITE
          ADN    1           ADD 1 FOR SUB HEADER WORD
          STML   SHWD+V4SHLOD  STORE TO BUFFER
          CALL   WSH         WRITE SUB HEADER WORD

          RJM    WCB         WRITE CAPTURE BUFFER TO MDB, (ERROR ID = 2)


*         WRITE HISTORY FILE TO MDB.

*         CLEAR THE SUB HEADER WORD BUFFER FOR SUB HEADER BUILD.

 EMV7     LDC    SHWD        LOAD ADDRESS OF SUB HEADER WORD DATA BLOCK
          RJM    CLR         CLEAR BLOCK

*         SET UP SUB HEADER.

          LDN    SH.HF       SUB HEADER ID
          STML   SHWD+V4SHHID  STORE TO BUFFER
          LDC    LOD.HF      LENGTH OF DATA TO WRITE
          ADN    1           ADD 1 FOR SUB HEADER WORD
          STML   SHWD+V4SHLOD  STORE TO BUFFER
          CALL   WSH         WRITE SUB HEADER WORD
          RJM    WHF         WRITE HISTORY FILE, (ERROR ID = 3)

*         WRITE EXCHANGE PACKAGE TO MDB.

*         CLEAR THE SUB HEADER WORD BUFFER FOR SUB HEADER BUILD.


          LDC    SHWD        LOAD ADDRESS OF SUB HEADER WORD DATA BLOCK
          RJM    CLR         CLEAR BLOCK

*         SET UP SUB HEADER.

          LDN    SH.EP       SUB HEADER ID
          STML   SHWD+V4SHHID  STORE TO BUFFER
          LDC    LOD.EP      LENGTH OF DATA TO WRITE
          ADN    1           ADD 1 FOR SUB HEADER WORD
          STML   SHWD+V4SHLOD  STORE TO BUFFER
          CALL   WSH         WRITE SUB HEADER WORD

          RJM    WEP         WRITE EXCHANGE PACKAGE, (ERROR ID = 4)


*         WRITE P AND SURROUNDING INSTRUCTIONS.

*         CLEAR THE SUB HEADER WORD BUFFER FOR SUB HEADER BUILD.

          LDC    SHWD        LOAD ADDRESS OF SUB HEADER WORD DATA BLOCK
          RJM    CLR         CLEAR BLOCK

*         SET UP SUB HEADER.

          LDN    SH.PI       SUB HEADER ID
          STML   SHWD+V4SHHID  STORE TO BUFFER
          LDC    LOD.PI      LENGTH OF DATA TO WRITE
          ADN    1           ADD 1 FOR SUB HEADER WORD
          STML   SHWD+V4SHLOD  STORE TO BUFFER
          CALL   WSH         WRITE SUB HEADER WORD

          RJM    WPC         WRITE P AND SURROUNDING INSTRUCTIONS, (ERROR ID = 5)
          LDC    SHWD        LOAD SUB HEADER WORD BUFFER ADDRESS
          RJM    CLR         CLEAR BLOCK

          CALL   WSH         INSERT LENGTH TO LOG IN MAIN HEADER
          UJP    EMVX        EXIT


*         WRITE EXECUTING WORDS OF SCM TO MDB.

*         CLEAR THE SUB HEADER WORD BUFFER FOR SUB HEADER BUILD.

 EMV8     LDC    SHWD        LOAD ADDRESS OF SUB HEADER WORD DATA BLOCK
          RJM    CLR         CLEAR BLOCK

*         SET UP SUB HEADER.

          LDN    SH.EW       SUB HEADER ID
          STML   SHWD+V4SHHID  STORE TO BUFFER
          LDC    LOD.EW      LENGTH OF DATA TO WRITE
          ADN    1           ADD 1 FOR SUB HEADER WORD
          STML   SHWD+V4SHLOD  STORE TO BUFFER
          LDC    PFID.EW     PFS ERROR ID
          STML   SHWD+V4SHPFS  STORE TO BUFFER
          CALL   WSH         WRITE SUB HEADER WORD

*         READ, WRITE EXECUTING WORDS OF SCM'S.  (ERROR ID = 6)

          CALL   RWE
          LDD    RS          ADJUSTED LOWER MDB ADDRESS
          STM    E6AD        SAVE
          LDD    RS+1        ADJUSTED UPPER MDB ADDRESS
          STM    E6AD+1      SAVE
          LDD    RS+2        ADJUSTED UPPER MDB ADDRESS
          STM    E6AD+2      SAVE
          UJP    EMVX        EXIT

*         WRITE LAST TWO WORDS OF MRB6 TO MDB.

*         CLEAR THE SUB HEADER WORD BUFFER FOR SUB HEADER BUILD.

 EMV9     LDC    SHWD        LOAD ADDRESS OF SUB HEADER WORD DATA BLOCK
          RJM    CLR         CLEAR BLOCK

*         SET UP SUB HEADER.

          LDN    SH.MR2      SUB HEADER ID
          STML   SHWD+V4SHHID  STORE TO BUFFER
          LDC    LOD.MR2     LENGTH OF DATA TO WRITE
          ADN    1           ADD 1 FOR SUB HEADER WORD
          STML   SHWD+V4SHLOD  STORE TO BUFFER
          CALL   WSH         WRITE SUB HEADER WORD

          CALL   WLR         WRITE LAST TWO WORDS OF MRB6, (ERROR ID = 7)
          LDML   CEPR        ERROR PRIORITY
          SBN    2
          MJN    EMV11       IF ERROR PRIORITY 1 (RETRY)
          LDML   MRBA        SCM PE ENTRY COUNTER
          ZJN    EMV11       IF ERROR PRIORITY 2, RETRY AND SCM PE

*         IF ERROR PRIORITY 2 AND RETRY AND SCM PE.

*         WRITE FIRST 3 WORDS OF MRB6 TO MDB.

 EMV10    CALL   WMR         WRITE MRB6, (ERROR ID = 1)

 EMV11    LJM    EMV6        ERROR ID 2, 3, 4, 5

          EJECT
**        DEP - DETERMINE ERROR PRIORITY.
*
*         METHOD             TEST DFT ERROR ANALYSIS CODE FOR RETRY AND
*                            ASSIGN ERROR PRIORITY 1. IF NOT, TEST PFS 8B FOR
*                            ISSUE TIMEOUT BIT AND ASSIGN ERROR PRIORITY 3.
*                            OTHERWISE ASSIGN ERROR PRIORITY 2.
*
*         ENTRY              NA.
*
*         USES               BC, BCDA, CEPR, CM - CM+1, DARP.
*
*         CALLS              FMB.
*
*         EXIT               ERROR PRIORITY CODE SAVED IN CEPR.

 DEP      SUBR               ENTRY/EXIT

          LDDL   BC+BCDA     DFT ANALYSIS CODE
          LPC    0#FF        JUST CODE
          SBN    DARP        RETRY IN PROGRESS
          NJN    DEP1        IF NO RETRY IN PROGRESS

*         IF RETRY IN PROGRESS.

          LDN    V4EPRT      ERROR PRIORITY 1  (RETRY IN PROGRESS)
 DEP0     STML   CEPR        SAVE
          UJP    DEPX        EXIT

 DEP1     LDC    PFSB        LOAD PFS8B ADDRESS
          RJM    FMB         FIND MAINTENANCE REGISTER IN SCRATCH BUFFER
          CRDL   CM          READ PFS8B
          LDDL   CM+1        LOAD LOCATION WITH ISSUE TIMEOUT BIT
          LPC    PFIT        MASK ISSUE TIMEOUT BIT
          ZJN    DEP2        IF NOT ISSUE TIMEOUT

          LDN    V4EPIT      ERROR PRIORITY 3  (ISSUE TIMEOUT)
          UJN    DEP0

 DEP2     LDN    V4EPOT      ERROR PRIORITY 2  (OTHER)
          UJN    DEP0
          EJECT
**        FEP - FIND EXCHANGE PACKAGE.
*
*         METHOD             READS ADDRESS OF EXCHANGE PACKAGE.
*
*         ENTRY              NA.
*
*         USES               RDATA+7.
*
*         CALLS              PAC.
*
*         EXIT               (MRVAL) = ADDRESS OF EXCHANGE PACKAGE.


 FEP      SUBR               ENTRY/EXIT
          READMR RDATA,HBUF+CPRPC,SSMR
          LDML   RDATA+7
          LPN    0#20        CHECK MONITOR MODE
          ZJP    FEP0        IF JOB MODE
          READMR RDATA,HBUF+HDRPC,PMPS  ADDR OF XP AT MPS
          UJP    FEP1        EXIT

 FEP0     READMR RDATA,HBUF+HDRPC,PJPS  ADDR OF XP AT JPS
 FEP1     RJM    PAC         ADDR IN MRVAL
          UJP    FEPX        EXIT
          EJECT
**        MSA - MAKE SYSTEM VIRTUAL ADDRESS.
*
*         METHOD             MAKE SYSTEM VIRTUAL ADDRESSES FOR P.
*
*         ENTRY              (W4 - W5) = PARTIAL ADDRESS TO EXCHANGE PACKAGE.
*                            (W6) =  R-RGTR OFFSET TO EXCHANGE PACKAGE.
*
*         USES               CM - CM+2, MSAA - MSAA+2, MSAB, T1-T4, W0-W6.
*
*         CALLS              LWA.
*
*         EXIT               (CM - CM+2) = SYSTEM VIRTUAL ADDRESS.
*                            (W0 - W3) = SEGMENT TABLE ENTRY.


 MSA1     LDN    0           FLAG INVALID/MISSING SEGMENT

 MSA      SUBR               ENTRY/EXIT
          LRD    W4
          LDD    W6
          ADC    RR          SET BIT 18
          CRML   MSAA,ON     (MSAA) = P FROM EXCHANGE PACKAGE
          LDML   MSAA+1
          LPC    0#FFF       ZERO OUT RING NUMBER
          STML   MSAA+1
          LDML   MSAA+3
          LPN    BOB         BYTE OFFSET BITS
          STML   MSAB        (MSAB) = BYTE OFFSET
          LDML   MSAA+3
          SCN    BOB
          STML   MSAA+3      CHANGE TO WORD BOUNDARY
          LDD    W6          LOAD BYTE ADDRESS
          ADN    16D         SEGMENT TABLE LENGTH OFFSET
          ADC    RR          SET BIT 18
          CRDL   T1          GET SEGMENT TABLE LENGTH
          ADN    18D         SEGMENT TABLE ADDRESS OFFSET
          CRDL   T2          GET SEGMENT TABLE ADDRESS
          ADN    1
          CRDL   T3
          LDDL   T1
          SBML   MSAA+1
          MJP    MSA1        IF NOT A VALID SEGMENT
          LDDL   T3          FORM WORD ADDRESS FOR LWA
          SHN    -3
          STDL   T3
          LDD    T2
          LPN    7
          SHN    13D
          RADL   T3
          LDDL   T2
          SHN    -3
          STDL   T2
          LDN    T2
          RJM    LWA         LOAD ADDRESS OF SEGMENT TABLE
          ADML   MSAA+1      ADD SEGMENT OF INTEREST
          CRDL   W0          FETCH ASID
          LDDL   W0
          LPC    0#8000
          ZJP    MSA1        IF INVALID
          LDDL   W1
          ZJP    MSA1        IF NOT A VALID ASID
          STDL   CM          SAVE ASID
          LDML   MSAA+2      COPY REMAINDER OF SVA
          STDL   CM+1
          LDML   MSAA+3
          STDL   CM+2
          LDN    1
          UJP    MSAX        RETURN

 MSAA     BSSZ   4
 MSAB     CON    0
          EJECT
**        RWE - READ AND WRITE THE EXECUTING WORDS OF THE SCM'S.
*
*         METHOD             READ THE EXECUTING WORD OF THE SELECTED SCM
*                            AND WRITE IT TO THE MDB.
*
*         ENTRY              NA.
*
*         USES               RN, RWEA, RWEB, W5.
*
*         CALLS              AMR, CMI, PAC, WMB.
*
*         EXIT               THE EXECUTING WORDS OF ALL SELECTED SCM'S ARE
*                            WRITTEN TO THE MDB.
*

          ROUTINE RWE        ENTRY/EXIT

          LDN    0
          STDL   W5          TABLE INDEX
 RWE0     LDML   RWEA,W5     SOFT CONTROL ADDRESS
          STDL   RN

          EXITMR RWE1

          LDM    HBUF+HDRPC  FORM FUNCTION WORD
          ADC    MRRD
          ADML   RWEB,W5     ADD TYPE CODE
          RJM    AMR         ACCESS MAINTENANCE CHANNEL
          LDN    8D
          IAM    RDATA,MR
          RJM    PAC         PAC DATA INTO MRVAL
          RJM    CMI         CLEAR MAINT INTERLOCK

 RWE1     EXITMR FMR

          RJM    WMB         WRITE MDB DATA
          AODL   W5          UPDATE INDEX
          ADC    -23D
          ZJP    RWEX        IF DONE READING
          UJP    RWE0        CONTINUE READING



 RWEA     BSS    0           SOFT CONTROL ADDRESSES
          CON    IDU.CIR
          CON    IDU.CIR+1
          CON    IDU.CIR+2
          CON    IDU.CIR+3
          CON    ACU.M2
          CON    ACU.M3
          CON    ACU.M4
          CON    BDP.SCM
          CON    BDP.SCM+1
          CON    EPN.SCM
          CON    EPN.ETM
          CON    IDU.CSMM
          CON    IDU.CSMM+1
          CON    IDU.CSMM+2
          CON    IDU.CSMM+3
          CON    IDU.CW
          CON    IDU.CW+1
          CON    IDU.CW+2
          CON    IDU.CW+3
          CON    INU.IMAP
          CON    INU.IBS
          CON    LSU.SCM
          CON    SVA.BN

 RWEB     BSS    0           TYPE CODES
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.ACU
          CON    TC.ACU
          CON    TC.ACU
          CON    TC.BDP
          CON    TC.BDP
          CON    TC.EPN
          CON    TC.EPN
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.IDU
          CON    TC.LSU
          CON    TC.ACU

          EJECT
**        SRP - SET RELOCATION POINTER.
*
*         ENTRY  (MRVAL) = PACKED REGISTER 32 BIT RMA BYTE ADDRESS.
*
*         EXIT   (A) = PARTIAL ADDRESS.
*                (W6) = PARTIAL ADDRESS.
*                THE INPUT BYTE ADDRESS RMA WILL BE CONVERTED TO
*                AN R-REGISTER POINTER WORD ADDRESS.
*
*         CALLS  STA.

 SRP      SUBR

          LDN    2
          STD    T5
          LDN    3
          STD    T6
          LDML   MRVAL,T5
          STDL   W2
          LDML   MRVAL,T6
          SHN    -3
          STDL   W3
          LDDL   W2
          LPN    7
          SHN    15
          LMDL   W3
          STDL   W3
          LDDL   W2
          SHN    -3
          STDL   W2
          RJM    STA
          LJM    SRPX        RETURN
          EJECT
**        WCB - WRITE THE CAPTURE BUFFER TO THE MDB.
*
*         METHOD             WRITE THE CAPTURE BUFFER TO THE MDB.
*
*         ENTRY              THE MDB TO BE USED HAS THE ADJUSTED MDB ADDRESS
*                            IN RS - RS+2.
*
*         USES               CM, MRRD, MRVAL, PMF1, RDATA, RN, W5.
*
*         CALLS              AMR, CLR, CMI, PAC, WMB.
*
*         EXIT               SUB HEADER WORD FOR CAPTURE BUFFER AND CAPTURE
*                            BUFFER DATA WRITTEN TO SELECTED MDB.
*
*                            THE LAST SELECTED MDB ADDRESS WILL BE IN
*                            RS - RS+2.

 WCB      SUBR               ENTRY/EXIT

*         WRITE CAPTURE BUFFER TO MEMORY.

          EXITMR WCB5

          LDK    PMF1        LOAD ADDRESS OF CAPTURE BUFFER
          STDL   RN          SAVE
          LDC    MRRD        LOAD READ REGISTER FUNCTION
          ADML   HBUF+HDRPC  SELECT RADIAL TO USE

*         SET CHANNEL INTERLOCK, LOAD FUNCTION, OUTPUT ADDRESS.

          RJM    AMR         ACCESS MNTNCE RGTR
          LDN    1
          STML   RMEA
          LDC    512D
          STDL   W5          WORD COUNTER FOR CAPTURE BUFFER
 WCB0     LDN    10
          IAM    RDATA,MR    READ 1 WORD FROM CAPTURE BUFFER
          ZJN    WCB2        IF NO ERROR

          LDN    0           DEPLETE 512 WORD CTR
          STDL   W5          MCH MUST HAVE DISCONNECTED
 WCB1     LDC    0#FFFF
          STML   MRVAL,W5    STORE ALL 1'S TO DENOTE ERROR
          AODL   W5
          SBN    4
          NJN    WCB1        IF NOT DONE
          LDN    1
          STDL   W5          DEPLETE COUNTER
          UJN    WCB3        WRITE MDB WITH ERROR DATA

 WCB2     RJM    PAC         PACKED DATA NOW IN MRVAL

 WCB3     RJM    WMB         WRITE DATA TO MDB

          SODL   W5          DECREMENT 512 WORD CTR
          ZJN    WCB4        IF DONE
          UJN    WCB0        PROCESS NEXT WORD

 WCB4     RJM    CMI         DEACTIVATE CHANNEL, CLEAR INTERLOCK

 WCB5     EXITMR FMR
          UJP    WCBX        EXIT
          EJECT
**        WE1 - WRITE ERROR ID 1 AND DATA LENGTH OF 3 TO MDB SUB HEADER.
*
*         METHOD             SET UP MRB6 ID AND DATA LENGTH AND THEN WRITE
*                            WRITE THE SUB HEADER.
*
*         ENTRY              THE MDB TO BE USED HAS THE ADJUSTED MDB ADDRESS
*                            IN RS - RS+2.
*
*         USES               SHWD.
*
*         CALLS              CLR, WSH.
*
*         EXIT               SUB HEADER WORD FOR ERROR ID 1 WRITTEN TO MDB.
*
*                            THE LAST SELECTED MDB ADDRESS WILL BE IN
*                            RS - RS+2.

          ROUTINE WE1        ENTRY/EXIT

*         CLEAR THE SUB HEADER WORD BUFFER FOR SUB HEADER BUILD.

          LDC    SHWD        LOAD ADDRESS OF SUB HEADER WORD BUFFER
          RJM    CLR         CLEAR BLOCK

*         SET UP SUB HEADER.

          LDN    SH.MR1      SUB HEADER ID
          STML   SHWD+V4SHHID  STORE TO BUFFER
          LDC    LOD.MR1     LENGTH OF DATA TO WRITE
          ADN    1           ADD 1 FOR SUB HEADER WORD
          STML   SHWD+V4SHLOD  STORE TO BUFFER
          CALL   WSH         WRITE SUB HEADER WORD
          UJP    WE1X        EXIT

          EJECT
**        WEP - WRITE THE EXCHANGE PACKAGE TO THE MDB.
*
*         METHOD             WRITE THE EXCHANGE PACKAGE TO THE MDB.
*
*         ENTRY              THE MDB TO BE USED HAS THE ADJUSTED MDB ADDRESS
*                            IN RS - RS+2.
*
*         USES               CM, MRVAL, T3, W2, W4, W6.
*
*         CALLS              CLR, FEP, PAC, SRA, WMB.
*
*         EXIT               SUB HEADER WORD FOR EXCHANGE PACKAGE ID AND
*                            EXCHANGE PACKAGE DATA WRITTEN TO SELECTED MDB.
*
*                            THE LAST SELECTED MDB ADDRESS WILL BE IN
*                            RS - RS+2.

 WEP      SUBR               ENTRY/EXIT

*         WRITE EXCHANGE PACKAGE TO MEMORY.

          LDC    LOD.EP      LENGTH OF EXCHANGE PACKAGE
          STDL   T3          INITIALIZE INDEX
          RJM    FEP         FIND EXCHANGE PACKAGE
          RJM    SRP         SET R RGTR
          LDD    W6
          STD    W2          SAVE OFFSET FOR ROUTINE WPI
          LRD    W4
          ADC    RR          SET BIT 18
          CRML   MRVAL,ON    READ FIRST WORD FROM EXCHANGE PACKAGE
          UJN    WEP1
 WEP0     AOD    W6          INCREMENT EXCHANGE PACKAGE CM ADDRESS
          LRD    W4
          ADC    RR
          CRML   MRVAL,ON    READ WORD FROM EXCHANGE PACKAGE
 WEP1     RJM    WMB         WRITE MODEL DEP BUFFER
          SODL   T3          DECREMENT INDEX
          NJP    WEP0        IF NOT DONE WITH EXCHANGE PACKAGE
          UJP    WEPX        EXIT

          EJECT
**        WHF - WRITE THE HISTORY FILE TO THE MDB.
*
*         METHOD             WRITE THE HISTORY FILE TO THE MDB.
*
*         ENTRY              THE MDB TO BE USED HAS THE ADJUSTED MDB ADDRESS
*                            IN RS - RS+2.
*
*         USES               CM, W5.
*
*         CALLS              CLR, PAC, WMB.
*
*         EXIT               SUB HEADER WORD FOR HISTORY FILE AND HISTORY
*                            FILE DATA WRITTEN TO SELECTED MDB.
*
*                            THE LAST SELECTED MDB ADDRESS WILL BE IN
*                            RS - RS+2.

 WHF      SUBR               ENTRY/EXIT

*         WRITE HISTORY FILE DATA TO MEMORY.

          FUNCMR HBUF+CPRPC,MRMC  MASTER CLEAR THE PROCESSOR
          LDN    0
          STDL   W5          INITIALIZE INDEX

          EXITMR WHF1

 WHF0     RDMEM  RGU.HF,W5,,,8,TC.RGU   READ HISTORY FILE TO RDATA

          RJM    PAC         PACKED RESULT NOW IN MRVAL
          RJM    WMB         WRITE MODEL DEP BUFFER
          AODL   W5          INCREMENT INDEX
          ADC    -64D
          NJP    WHF0        IF NOT DONE WITH HISTORY FILE

 WHF1     EXITMR FMR
          UJP    WHFX        EXIT
          EJECT
**        WLR - WRITE MRB6 DATA TO THE MDB.
*
*         METHOD             WRITE THE LAST TWO WORDS OF MRB6 TO THE MDB.
*
*         ENTRY              THE MDB TO BE USED HAS THE ADJUSTED MDB ADDRESS
*                            IN RS - RS+2.
*
*         USES               MRVAL, TRPO, W6.
*
*         CALLS              WMB.
*
*         EXIT               MRB DATA WRITTEN TO MDB FOR RETRY ERRORS.
*
*                            THE LAST SELECTED MDB ADDRESS WILL BE IN
*                            RS - RS+2.

          ROUTINE WLR        ENTRY/EXIT

          LDN    TRPO        THETA RETRY P OFFSET
          STDL   W6          STORE TO OFFSET INDEX
 WLR0     LDDL   W6          LOAD OFFSET
          RJM    IMB         SET R REGISTER
          CRML   MRVAL,ON    READ MRB
          RJM    WMB         WRITE MRB TO THE MDB
          AODL   W6          INCREMENT OFFSET INDEX
          SBN    TRPO+2
          NJP    WLR0        CONTINUE FOR 2 WORDS
          UJP    WLRX        EXIT
          EJECT
**        WMR - WRITE MRB6 DATA TO THE MDB.
*
*         METHOD             WRITE THE FIRST THREE WORDS OF MRB6 TO THE MDB.
*
*         ENTRY              THE MDB TO BE USED HAS THE ADJUSTED MDB ADDRESS
*                            IN RS - RS+2.
*
*         USES               MRBA, W4, W5, W6.
*
*         CALLS              IBW, IMB, WE1, WMB.
*
*         EXIT               MRB DATA WRITTEN TO MDB FOR SINGLE OR MULTIPLE
*                            SCM PE.
*
*                            THE LAST SELECTED MDB ADDRESS WILL BE IN
*                            RS - RS+2.

          ROUTINE WMR        ENTRY/EXIT

 WMR0     LDN    25D         OFFSET FOR MRB6
          STDL   W6          INITIALIZE INDEX

          CALL   WE1         WRITE MDB SUB HEADER FOR ERROR ID
          LDML   MRBA        SCM PE COUNT
          STDL   W4          SAVE
          LDML   MRBA,W4     FREE
          RJM    IBW         SET R REGISTER

          CRDL   CM          READ MDB BUFFER CONTROL WORD
          LDD    CM+V4BCOST  MRB OFFSET
          ADDL   W6          ADD MRB6 OFFSET
          STDL   W5          INITIALIZE INDEX

 WMR1     RJM    IMB         ADDRESS THE MRB
          CRML   MRVAL,ON    READ THE MRB
          RJM    WMB         WRITE MRB DATA TO MDB
          AODL   W6          INCREMENT MRB INDEX
          SBN    28D
          ZJN    WMR2        IF FINISHED WITH 3 WORDS OF MRB
          AODL   W5          INCREMENT OFFSET
          UJN    WMR1        CONTINUE

 WMR2     SOML   MRBA        DECREMENT PE COUNT
          ZJP    WMRX        EXIT
          UJP    WMR0        NOT FINISHED WITH MULTIPLE ENTRIES
          EJECT
**        WPC - WRITE PROGRAM CONTENTS
*
*         METHOD             TRANSLATE P FROM A PVA TO AN RMA.
*                            WRITE RESPECTIVE PTE TO MDB.  ADD
*                            AND SUBTRACT 5 WORDS ON EACH SIDE OF
*                            P.  IF A PAGE BOUNDARY IS CROSSED, THE
*                            APPROPRIATE ROUTINE IS CALLED.  OTHERWISE,
*                            LOG THE 5 INSTRUCTIONS ON EACH SIDE OF
*                            P (INCLUDING P) TO THE MDB.
*
*         CALLED             BY LMB
*
*         ENTRY              (W2)   - R RGTR OFFSET TO XCHG PKG
*                            (W4-W5) -R RGTR ADDRESS TO XCHG PKG
*
*         USES               LMBA, T1-T4, PSMV, W0-W3, W6, MRVAL
*
*         CALLS              PVC, MSA, SPT, GPP, GNP, RWP, WRZ

 WPC      SUBR               ENTRY/EXIT
          RJM    PVC         PRESET VIRTUAL CONSTANTS
          LDDL   W2
          STDL   W6          RESTORE R-RGTR TO XCHG PKG
          RJM    MSA         MAKE SYSTEM VIRTUAL ADDRESS
          ZJP    WPC3        IF NOT VALID
          AOML   LTOL        INCREMENT LENGTH TO LOG COUNT
          AOD    RS
          LRD    RS+1
          ADC    RR
          CWDL   W0          WRITE SEG TABLE ENTRY
          RJM    SPT         SEARCH PAGE TABLE
          ZJP    WPC2        IF PAGE MISS

*         SAVE RMA

          STDL   T3
          SRD    T1
          LDDL   T1
          STML   WPCA        SAVE UPPER 10 BITS
          LDDL   T2
          STML   WPCA+1      SAVE MID 12 BITS

*         WRITE PTE TO MDB

          AOML   LTOL        INCREMENT LENGTH TO LOG COUNT
          AOD    RS          INCREMENT MDB ADDRESS
          LRD    RS+1
          ADC    RR
          CWML   SPTJ,ON     WRITE PTE TO MDB

*         CHECK PAGE BOUNDARIES.

          LDML   PSMV
          LMC    0#7F
          SHN    9D
          LMC    0#FFFF
          LPML   MSAA+3
          SHN    -3
          STML   WPCB        PAGE OFFSET (IN WORDS)
          SBN    5
          MJN    WPC0        IF CROSSING TOP PAGE BDRY
          ADN    11D
          STDL   T4          PG OFFSET + 6 WORDS
          LDML   PSMV
          LMC    0#7F
          SHN    6
          LPML   T4          MASK FOR OVERFLOW
          NJN    WPC1        IF CROSSING BOTTOM PAGE BDRY

*         WRITE 11 WORDS FROM 1 PAGE TO MDB

          LDN    1
          RJM    WRZ         WRITE ZEROS TO 2ND PTE
          LDN    11D         # WORDS TO READ, WRITE
          STDL   W4
          LDDL   T3
          SBN    5
          RJM    RWP         WRITE PROGRAM CONTENTS TO MDB
          LJM    WPCX

 WPC0     RJM    GPP         GET PREV PAGE
          LJM    WPCX

 WPC1     LDDL   T4          PO + 6
          LPN    0#3F
          STDL   T4          # WORDS TO READ FROM NEXT PAGE
          RJM    GNP         GET NEXT PAGE
          LJM    WPCX

 WPC2     LDN    12D
          STDL   T2
          UJP    WPC4

 WPC3     LDN    13D
          STDL   T2
 WPC4     LDC    0#FFFF
          STML   MRVAL
          STML   MRVAL+1
          STML   MRVAL+2
          STML   MRVAL+3
          RJM    WMB         WRITE ALL F'S TO MDB
          LDDL   T2

          RJM    WRZ         WRITE ALL ZEROS
          LJM    WPCX

 WPCA     CON    0,0,0       STORES RMA FOR P
 WPCB     CON    0           PAGE OFFSET FOR P

*COPY  CTP$DFT_PVA_TO_RMA_ROUTINES


          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW

          OVERLAY  (VERSION 4 DFT MDB LOGGING PART II)
          SPACE  4,10
**        TDE - TEST FOR DUPLICATE LOGGED ENTRIES.
*
*         METHOD             TEST THE RETRY MULTIPLE FLAG.  IF IT IS SET,
*                            ADJUST THE LENGTH OF MAINTENANCE REGISTER
*                            BUFFER AND TEST FOR A MATCH BETWEEN NEW ERROR
*                            AND PREVIOUS ERROR.
*                            IF THE RETRY MULTIPLE FLAG IS CLEAR, TEST FOR
*                            A MATCH BETWEEN NEW ERROR AND PREVIOUS ERROR
*                            WITH NO LENGTH ADJUSTMENT.
*
*         ENTRY              NA.
*
*         USES               LBUF, MFLG, TRMF.
*
*         CALLS              CFM.
*
*         EXIT               MFLG <> 0 = NO MATCH.
*

          ROUTINE TDE        ENTRY/EXIT

          LDML   TRMF        RETRY MULTIPLE FLAG
          ZJN    TDE1        IF NO RETRY MULTIPLE
          LDML   LBUF
          SBN    1
 TDE0     RJM    CFM         TEST FOR MATCH
          STML   MFLG        MATCH FLAG
          UJP    TDEX        EXIT
 TDE1     LDML   LBUF
          UJN    TDE0

*COPY     CTP$DFT_LOG_ERROR_CHECK_MATCH
*COPYC CTP$DFT_MDB_LOGGING_ROUTINES

          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW


          OVERLAY  (ANALYSE I4 IOU ERRORS)
          QUAL
*COPYC CTP$DFT_ANALYZE_IOU_ERRORS_I4
*COPYC CTP$DFT_PROCESS_DUAL_I4_IOU_ERR
*COPY CTP$DFT_SET_SS_DUAL_I4
          QUAL   *
          QUAL   *
 CEE      SPACE  4,10
**        CEE - CHECK FOR EXPECTED IOU ERROR.
*
*         METHOD  - IOU FAULT STATUS REGISTERS ARE READ FROM SCRATCH
*                   BUFFER.  IF ANY ERROR OTHER THAN CHANNEL 17
*                   ERROR EXISTS, THEN *AIE* SHOULD PROCESS ERROR.
*                   CHANNEL 17 ERROR IS FLAGGED BY *FS2* REGISTER.
*                   BOTH NIO AND CIO *FS2* REGISTER DATA ARE CHECKED IF
*                   CIO SUBSYSTEM IS INSTALLED.
*
*         EXIT   (A) = 0 IF ERROR SHOULD BE PROCESSED.
*                (A) = 1 IF ERROR SHOULD BE IGNORED.
*
*         USES   T2, W0 - W3, *EIEF*.
*
*         CALLS  FMB.


 CEE      SUBR               ENTRY/EXIT
          LDML   EIEF        EXPECTED IOU ERROR FLAG
          ZJN    CEEX        IF NOT SET, PROCESS ERROR
          LDN    0           CLEAR EXPECTED ERROR FLAG
          STML   EIEF
          LDN    0
          STDL   T2          INITIALIZE REGISTER LIST INDEX FOR CIO PP-S
          LDN    OIMR        CHECK IF CIO SUBSYSTEM PRESENT
          RJM    FMB
          CRDL   W0
          LDML   W0+3        CHECK *OIMR* BIT 56
          SHN    21-63D+56D
          MJN    CEE1        IF CONCURRENT PP-S PRESENT
          LDN    2           CHECK ONLY NON-CONCURRENT REGISTERS
          STD    T2
 CEE1     LDML   CEEA,T2     READ NEXT REGISTER FROM SCRATCH MRB
          RJM    FMB
          CRDL   W0
          LDDL   W0
          ADDL   W1
          ADDL   W2
          STML   CEEB
          LDDL   T2          CHECK REGISTER
          LPN    1
          ZJN    CEE2        IF NOT *IFS2* (NIO OR CIO)
          LDDL   W3
          SCN    0#10
          UJN    CEE3        CONTINUE

 CEE2     LDDL   W3
 CEE3     ADML   CEEB        PREVIOUS BYTE SUM
          NJN    CEE5        IF OTHER ERROR SET
          AODL   T2
          SBN    4
          NJN    CEE1        IF REGISTERS NOT ALL READ
          SETDAC DDCL        ACTION = CLEAR ERRORS
          LDN    1           INDICATE THAT ERROR SHOULD BE IGNORED
 CEE4     LJM    CEEX        RETURN

 CEE5     LDN    0           INDICATE THAT ERROR SHOULD BE PROCESSED
          UJN    CEE4        RETURN

 CEEA     CON    CIFS1,CIFS2,IFS1,IFS2
 CEEB     CON    0

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (ANALYSE CYBER 990 MEMORY ERRORS)
 AME      SPACE  4,10
**        AME - PROCESS MEMORY ERRORS.
*
*         CALLS  CLR, GSC, FMB, *CFF*, *LOG*, *SME*.


          ROUTINE AME

          LDN    0
          STM    RLST        CORRECTED ERROR FLAG
          STM    NERR        SET NO ERROR FLAG FLAG
          STML   SBER
          STML   SBER+1
          STML   SYCD
          LDN    BC
          RJM    CLR         ZERO SCRATCH BUFFER
          LDM    SUMS        SUMMARY STATUS
          SHN    21-SSUE
          PJP    AME6        IF NOT UNCORRECTED
          LDC    MUL1        CYBER 990 UNCORRECTED ERROR MEMORY ERROR LOG
          STD    RN
 AME0     READMR RDATA,CMCC
          LDM    RDATA
          SHN    12
          PJN    AME1        IF NO VALID DATA IN REGISTER
          LDM    RDATA+7
          LPN    1
          ZJN    AME1        IF NOT PARTIAL WRITE ERROR
          LDM    RDATA+6     BITS 48 - 55
          NJN    AME2        IF PARTIAL WRITE ERROR
 AME1     AOD    RN
          LMC    0#A7+1
          NJN    AME0        IF NOT THRU SCANNING THE UEL REGISTERS
          UJP    AME3        PUT OUT UNCORRECTED ERROR ANALYSIS

*         DFT ANALYSIS - OS ACTION = MULTIPLE ODD BIT ERROR.
*                                  = STEP SYSTEM (VERSION 4).

 AME2     SETDAC DDCM
          SETDAN (EPUN,DAPWP)
          SETFLG (BC.FV7,BC.FV8,BC.FL)
          SETOSA OSMOB,OSSS
          UJP    AME4        LOG THE ERROR

*         DFT ANALYSIS - OS ACTION = UNCORRECTED MEMORY ERROR.
*                                  = NO OS ACTION (VERSION 4).

 AME3     SETDAC DDCM
          SETDAN (EPUN,DAUME)
          SETFLG (BC.FV7,BC.FV8,BC.FL)
          SETOSA OSUCM,OSNA
 AME4     LDM    ME0U        UNCORRECTED MEMORY REGISTER LIST
          RJM    BRL         BUILD REGISTER LIST
          CALL   RMR         READ REGISTERS
          CALL   CFF         CHECK FOR FREEZE
          LDM    RTP2
          ZJN    AME4.5      IF NOT TO IGNORE ERROR
          LDN    0
          STM    DFTA        NO ACTION
          STM    REGI        RESET REGISTER LIST INDEX
          UJP    AMEX
 AME4.5   CALL   LOG
 AME5     LJM    AMEX        RETURN

 AME6     LDM    SUMS
          SHN    21-SSCE
          PJN    AME5        IF NOT A CORRECTED ERROR
          LDN    1
          STM    RLST        SET CORRECTED ERROR LIST FLAG

*         SET UP SCRATCH BUFFER CONTROL WORD.
*
*         DFT ANALYSIS - ANALYSIS = CORRECTED CM ERROR.
*         DFT ANALYSIS - DFT ACTION = CLEAR MEMORY ERROR.
*         DFT ANALYSIS - ERROR PRIORITY = CORRECTED ERROR.
*         DFT ANALYSIS - FLAGS = LOG (OS).

          SETDAC DDCM
          SETDAN (EPCO,DACME)
          SETFLG (BC.FL)
          LDM    ME0C        CORRECTED MEMORY ERROR REGISTERS
          RJM    BRL         BUILD REGISTER LIST
          CALL   RMR         READ REGISTERS
          CALL   CFF
          LDM    RTP2
          ZJN    AME6.5      IF NOT TO IGNORE ERROR
          LDN    0
          STM    DFTA        NO ACTION
          STM    REGI        RESET REGISTER LIST INDEX
          UJP    AMEX

 AME6.5   LDD    MD          GET MODEL
          LMC    0#40
          ZJN    AME7        IF MODEL 40 MEMORY
          UJP    AME11       IF MODEL 41 OR 42 MEMORY

*         PROCESS CYBER 990 MEMORY ERRORS.
*
*         FOR CYBER 990 THERE ARE MULTIPLE *CEL* REGISTERS.  PREPARE
*         LOOP TO READ ALL BUT FIRST SAVE OFFSET OF THE READ
*         IN RESIDENT SAVE AREA BECAUSE OVERLAYS CANT HOLD
*         MODIFIED DATA.

 AME7     LDN    3
          STM    RST1
 AME8     ADC    MCEL
          RJM    FMB
          CRDL   W0          READ *CEL* REGISER (I)
          LDDL   W0
          SHN    2
          MJN    AME10       IF REGISTER TO PROCESS
 AME9     SOM    RST1
          MJP    AMEX        IF DONE WITH *CEL* REGISTERS
          UJN    AME8        LOOP

 AME10    RJM    GSC         GET SYNDROME CODE
          LDDL   W2
          SHN    -11D
          LPN    0#1C        CLEAR LOWER 2 BITS FOR DISTRIBUTOR
          STML   SBER+1
          LDDL   W1
          LPC    0#7FF
          SHN    5
          RAML   SBER+1
          LDDL   W1
          SHN    -11D
          STML   SBER
          LDDL   W0
          LPN    0#7
          SHN    5
          RAML   SBER
          LDML   SBER+1
          LMML   RST1        ADD IN DISTRIBUTOR NUMBER
          STML   SBER+1
          CALL   SME         SERVICE MEMORY ERROR
          LJM    AME9        CONTINUE

*         FOR CYBER 990 THERE ARE MULTIPLE CEL REGISTERS PREPARE
*         LOOP TO READ ALL BUT FIRST SAVE OFFSET OF THE READ
*         IN RESIDENT SAVE AREA BECAUSE OVERLAYS CANT HOLD
*         MODIFIED DATA.

 AME11    LDN    3           CYBER 990 MEMORY
          STM    RST1
 AME12    ADC    MCEL
          RJM    FMB
          CRDL   W0          READ CEL(I) REG
          LDDL   W0
          SHN    2
          MJN    AME14       IF REGISTER TO PROCESS
 AME13    SOM    RST1
          MJP    AMEX        IF DONE WITH CEL REGS
          UJN    AME12       LOOP

 AME14    RJM    GSC         GET SYNDROME CODE
          LDDL   W2
          SHN    -11D
          LPN    0#1C        CLEAR LOWER 2 BITS FOR DISTRIBUTOR
          STML   SBER+1
          LDDL   W1
          LPC    0#7FF
          SHN    5
          RAML   SBER+1
          LDDL   W1
          SHN    -11D
          STML   SBER
          LDDL   W0
          LPN    0#1F        THIS IS DIFFERENCE BETWEEN MODEL 41, 42 AND MODEL 40 MEMORY
          SHN    5
          RAML   SBER
          LDML   SBER+1
          LMML   RST1        ADD IN DISTRIBUTOR NUMBER
          STML   SBER+1
          CALL   SME         SERVICE MEMORY ERROR
          LJM    AME13       LOOP
 GSC      SPACE  4,10
**        GSC - GET SYNDROME CODE.
*
*         ENTRY  (W0 - W3) = PROPER *CEL* REGISTER.
*
*         EXIT   (SYCD) = SYNDROME CODE.
*
*         USES   W0 - W3, *SYCD*.


 GSC      SUBR               ENTRY/EXIT
          LDN    0
          STM    SYCD

*         PROCESS CYBER 990 SYNDROME CODE.

 GSC3     LDDL   W2
          LPC    0#FF        BITS 40 - 47
          STM    SYCD        SAVE SYNDROME CODE
          LJM    GSCX        RETURN
*COPY CTP$DFT_SERVICE_MEMORY_ERROR
*COPY CTP$DFT_REWRITE_CM_ERROR
          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (LOG ERRORS TO BUFFER CONTROL WORDS)

**        ON CYBER 990 THERE IS SPECIAL HANDLING OF COMPARING MULTIPLE
*         RETRY ERRORS.


 QUAL$    EQU    0           DEFINE UNQUALIFIED COMMON DECKS
*COPYC CTP$DFT_LOG_ERROR
*COPY CTP$DFT_LOG_ERROR_CHECK_MATCH
*COPY CTP$DFT_ZERO_SUPPORTIVE_STATUS
*COPY CTP$DFT_INCREMENT_ERROR_COUNT
*COPY CTP$DFT_FIND_CONTROL_WORD
*COPY CTC$DFT_ELEMENT_CONVERSIONS


*         IF *TRMF* IS SET, THEN THE BUFFER LENGTH MUST BE DECREASED BY
*         ONE.  THIS ADJUSTMENT IS MADE SO THAT RETRY COUNTERS ARE NOT
*         COMPARED.  IF A DUPLICATE RETRY ERROR HAS OCCURRED, THEN THE
*         RETRY COUNTERS IN THE SCRATCH BUFFER SHOULD OVERWRITE THE RETRY
*         COUNTERS IN THE CURRENT BUFFER.


 ABL      SUBR               ENTRY/EXIT
          LDML   TRMF        THETA RETRY MULTIPLE FLAG
          ZJN    ABL1        IF NO RETRY MULTIPLE
          LDML   LBUF
          SBN    1
          UJN    ABLX        COMPARE BUFFERS
 ABL1     LDML   LBUF
          UJN    ABLX

 URC      SUBR               ENTRY/EXIT
          LDML   HALT
          ZJN    URCX        IF NOT HALT ON ERROR

*         UPDATE RETRY COUNTERS.

          LDN    TRCO        THETA RETRY COUNTER OFFSET
          RJM    IMB
          CRML   LOGA,ON     READ SCRATCH BUF, WORD 29
          LDML   FREE
          RJM    IBW         INCREMENT BUFFER CONTROL WORDS
          CRDL   CM          BUFFER CONTROL WORD
          LDDL   CM+3
          ADN    TRCO        THETA RETRY COUNTER OFFSET
          RJM    IMB
          CWML   LOGA,ON     UPDATE LOGGED ENTRY
          UJP    URCX        RETURN
*COPYC CTP$DFT_LOG_ERROR_NO_CONSOLE
          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (GENERATE FAULT SYMPTOM CODE)

**        CYBER 990 FAULT SYMPTOM CODES.

*COPYC CTP$DFT_GENERATE_FAULT_SYMPTOM
*COPY     CTP$DFT_WRITE_FSC_TO_BUFFER

          ROUTINE I4S        NOT DEFINED ON NON 960 APPLICATIONS
          LJM    I4SX
          QUAL   *

          OVERFLOW  R2ORG    CHECK FOR OVERFLOW
          OVERLAY  (MODEL 40 IOU FSC)
 I4A      SPACE  4,10
**        I4A - INTERFACE TO I4A FSC COMMON DECK.
*


          ROUTINE  I4A

          LDDL   BC+BCDA     GET ANALYSIS TO LOG
          SHN    -BC.ANP
          SBN    EPEN
          PJP    I4A2        IF ENVIRONMENT WARNING
          LDML   CPU0M       CPU0 MODEL NUMBER
          STML   CDIF
          LDC    IFS1
          RJM    FMB         FIND MAINTENANCE REGISTER IN SCRATCH BUFFER
          CRML   CDIF+1,ON
          LDC    IFS2
          RJM    FMB         FIND MAINTENANCE REGISTER IN SCRATCH BUFFER
          CRML   CDIF+5,ON
          LDN    OIMR
          RJM    FMB         FIND REGISTER IN MAINTENANCE REGISTER SCRATCH
          CRDL   W0
          LDDL   W3
          SHN    21-7
          PJN    I4A0        IF NO CIO PPS PRESENT
          LDC    CIFS1
          RJM    FMB         FIND REGISTER IN MAINTENANCE REGISTER SCRATCH
          CRML   CDIF+9D,ON
          LDC    CIFS2
          RJM    FMB         FIND REGISTER IN MAINTENANCE REGISTER SCRATCH
          CRML   CDIF+13D,ON
 I4A0     LDC    CDIF        FWA OF INTERFACE BUFFER
          RJM    /IOUFLT0/IOUFLT0
 I4A1     LDC    2RDI        IOU ELEMENT IDENTIFIER
          ADM    IOUO        INCREMENT BY IOU ORDINAL
          RJM    WFS         WRITE FAULT SYMPTOM CODE TO SUPPORTIVE STATUS
          UJP    I4AX        RETURN

 I4A2     LDN    3
          STD    T1
 I4A3     LDML   I4AA,T1     GET CANNED ENVIRONMENT FAULT SYMPTOM CODE
          STML   CDIF,T1     STORE IN OUTPUT BUFFER
          SOD    T1
          PJN    I4A3        IF NOT DONE
          UJN    I4A1        LOG THE FAULT CODE

 I4AA     DATA   H*701     *


*copy     ctp$convert_digits_to_ascii
*copy     ctp$dft_generate_i4c_codes
*copy     ctp$dft_model_40_iou_fsc
*copy     ctp$dft_write_fsc_to_buffer

          OVERFLOW  R2ORG    CHECK FOR OVERFLOW
          OVERLAY  (IOU MODEL 44 FSC DECK)
 I4I      SPACE  4,10
**        I4I - INTERFACE TO I4C FSC COMMON DECK.
*
*         CALLS  GS4.


          ROUTINE  I4I

          LDDL   BC+BCDA     GET ANALYSIS TO LOG
          SHN    -BC.ANP
          SBN    EPEN
          PJP    I4I2        IF ENVIRONMENT WARNING
          LDML   CPU0M       CPU0 MODEL NUMBER
          STML   CDIF
          LDC    IFS1
          RJM    FMB         FIND MAINTENANCE REGISTER IN SCRATCH BUFFER
          CRML   CDIF+1,ON
          LDC    IFS2
          RJM    FMB         FIND MAINTENANCE REGISTER IN SCRATCH BUFFER
          CRML   CDIF+5,ON
          LDC    CDIF        FWA OF INTERFACE BUFFER
          RJM    /IOUFLT4/IOUFLT4
 I4I1     LDC    2RDI        IOU ELEMENT IDENTIFIER
          ADM    IOUO        INCREMENT BY IOU ORDINAL
          RJM    WFS         WRITE FAULT SYMPTOM CODE TO SUPPORTIVE STATUS
          UJP    I4IX        RETURN

 I4I2     LDN    3
          STD    T1
 I4I3     LDML   I4IA,T1     GET CANNED ENVIRONMENT FAULT SYMPTOM CODE
          STML   CDIF,T1     STORE IN OUTPUT BUFFER
          SOD    T1
          PJN    I4I3        IF NOT DONE
          UJN    I4I1        LOG THE FAULT CODE

 I4IA     DATA   H*701     *
*COPY     CTP$DFT_MODEL_44_IOU_FSC
*copy     ctp$convert_digits_to_ascii
*copy     ctp$dft_generate_i4c_codes
*copy     ctp$dft_write_fsc_to_buffer
          OVERFLOW  R2ORG    CHECK FOR OVERFLOW

          OVERLAY  (READ MAINTENANCE REGISTERS)
          QUAL   *           SO THAT OTHER OVERLAYS MAY ACCESS
 THPA     SPACE  4,10
**        CYBER 990/990B PROCESSOR CORRECTED/UNCORRECTED ERROR REGISTER LIST.


 THPA     REGLST (10,00,12,30,80,81,82,83,84,85,86,87,88,89,8A,8B,8C,8D
,,8E,8F)
 THMA     SPACE  4,10
**        CYBER 990/990B MEMORY ERROR REGISTER LIST FOR ALL MEMORY ERRORS.


 THMA     REGLST (10,00,12,20,A0,A1,A2,A3,A4,A5,A6,A7,21)
 SXIU     SPACE  4,10
**        I1/I1CR/I2/I4 IN I2 MODE CORRECTED AND/ UNCORRECTED IOU ERROR LIST.


 SXIU     REGLST (10,00,12,30,40,80,81,A0,18,21)
 I4IC     SPACE  4,10
**        I4 CORRECTED IOU ERROR LIST.


 I4IC     REGLST (10,00,12,30,40,80,81,A0,18,21,16,34,44,84,85,A4,1C,25)
 I4IU     SPACE  4,10
**        I4 UNCORRECTED IOU ERROR LIST.


 I4IU     REGLST (10,00,12,30,40,80,81,A0,18,21,16,34,44,84,85,A4,1C,25)

*COPYC CTP$DFT_READ_MAINTENANCE_REGS
*COPY CTP$DFT_ZERO_SUPPORTIVE_STATUS
          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (PROCESSOR PRIMITIVES)

*COPY CTP$DFT_PROCESSOR_PRIMITIVES
 THE      SPACE  4,10
**        THE  - CYBER 990 HALF-EXCHANGE IN ROUTINE TO START PROCESSOR.
*
*         ENTRY  PROCESSOR MASTER CLEARED, *CSA* REGISTER SET TO (STEX)
*                *BLOCK EXCHANGE REQUEST* AND *DISABLE PROCESSOR FAULT
*                STATUS* BITS ARE CLEARED IN *DEC*, PROCESSOR STARTED
*                AND THE DEADSTART INTERLOCK IS CLEARED IN THE *EICB*.
*
*         EXIT   PROCESSOR HALF EXCHANGED OUT TO MONITOR
*                EXCHANGE PACKAGE AT *MPS* OR *JPS*.
*


          ROUTINE THE

*         START THE PROCESSOR.

          LDML   HEIJ        GET HALF EXCHANGE IN ADDRESS
          STM    THEB+7
          SHN    -8D
          STM    THEB+6
          LOCKMR SET
          FUNCMR HBUF+CPRPC,MRMC   MASTER CLEAR PROCESSOR
          LDML   CSAR
          STDL   RN
          WRITMR THEB,HBUF+CPRPC
          FUNCMR HBUF+CPRPC,MRSP   START PROCESSOR
          LDC    200D        WAIT 100 MICRO SECS
 THE1     SBN    1
          NJN    THE1        DELAY

*         CLEAR  MAINTENANCE REGISTER INTERLOCK.

          LOCKMR CLEAR
          LJM    THEX        RETURN

 THEB     BSSZ   10          CONTROL STORE ADDRESS
 CCR      SPACE  4,10
**        CCR - CLEAR CORRECTED ERROR IN *MCR*.


          ROUTINE CCR

          READMR RDATA,HBUF+HDRPC,PMCR
          LDM    RDATA+7
          LPC    0#FD        CLEAR BIT 62 CORRECTED ERROR
          STM    RDATA+7
          WRITMR RDATA,HBUF+HDRPC,PMCR
          LJM    CCRX        RETURN
 CLRBTS   SPACE  4,10
**        CLRBTS - RESTORE MODEL-DEPENDENT BITS IN *DEC*.
*         ON CYBER 990 THIS IS A NO OP BUT FOR GENERALITY A STUB NEEDS
*         TO BE PROVIDED.


 CLRBTS   SUBR               ENTRY/EXIT
          UJN    CLRBTSX

*COPY CTP$DFT_MANAGE_MEMORY_PORT
 STRBTS   SPACE  4,10
**        STRBTS - STORE BITS IN *DEC*.


          ROUTINE STRBTS

*         PROCESS CYBER 990/990B.

 SETBTP4  LDM    RDATA+2     CLEAR BIT 16
          LPC    0#FF-0#80
          STM    RDATA+2
          LJM    STRBTSX     RETURN
          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (MASSAGE CPU REGISTERS)
*COPY CTP$DFT_MASSAGE_CPU_REGISTERS

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (CLEAR ERRORS)
 CLE      SPACE  4,10
**        CLE - CLEAR ERRORS.
*
*         EXIT   ALL REGISTERS NECESSARY WILL BE CLEARED OF ERRORS.


          ROUTINE CLE

          LDM    HBUF+HDRPC
          LPC    7417
          STD    EC
          FUNCMR ,MRCE       CLEAR ERRORS FROM *PFS* REGISTERS
          LJM    CLEX        RETURN

          ROUTINE CME


*         PROCESS CYBER 990/990B MAINFRAMES.

 CME5     LDM    RLST
          NJP    CME7.5      IF CORRECTED ERROR
          LDN    3
          STD    T3          NUMBER OF UNCORRECTED ERROR REGISTERS
          LDC    MUL1
          STD    RN
          STD    T2
 CME6     LDD    T2
          RJM    FMB
          CRML   MRVAL,ON    GET NEXT REGISTER
          RJM    UPR         UNPACK IT
          LDM    RDATA
          SHN    21-7
          PJN    CME7        IF VALID NOT SET
          LDM    RDATA
          LPN    0#3F        SAVE ALL BUT VALID, UNLOGGED
          STM    RDATA
          WRITMR RDATA,HBUF+HDRPC
 CME7     AOD    RN          NEXT REGISTER
          AOD    T2          NEXT REGISTER OFFSET IN MAINTENANCE REGISTER BUFFER
          SOD    T3
          PJP    CME6        IF MORE TO PROCESS
          LJM    CMEX        RETURN

 CME7.5   LDN    3           CORRECTED ERROR LOGS
          STD    T3
          LDC    MCEL
          STD    RN
 CME8     LDD    RN
          RJM    FMB
          CRML   MRVAL,ON    GET REGISTER
          RJM    UPR         UNPACK IT
          LDM    RDATA
          SHN    21-7
          PJN    CME9        IF VALID NOT SET
          LDM    RDATA
          LPN    0#3F        SAVE ALL BUT VALID, UNLOGGED
          STM    RDATA
          WRITMR RDATA,HBUF+HDRPC
 CME9     AOD    RN
          SOD    T3
          PJP    CME8        IF MORE TO PROCESS
          LJM    CMEX        RETURN
          QUAL   *

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (UPDATE C170 MEMORY)
*COPYC CTP$DFT_UPDATE_170_MEMORY

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (DFT REQUEST PROCESSORS)
*COPY CTP$DFT_RETURN_ERROR_CODE
*COPYC CTP$DFT_OS_REQUESTS
*COPYC CTP$DFT_OS_REQUESTS_PACKETS
          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (DFT REQUEST PROCESSORS - DUAL I4)
*COPY CTP$DFT_RETURN_ERROR_CODE
*COPYC CTP$DFT_REQUESTS_DUAL_I4
*COPY CTP$DFT_CHECK_TPM_PKT_RESPONSE
          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (DFT REQUEST PROCESSORS FOR IOU1)
*COPY CTP$DFT_RETURN_ERROR_CODE
*COPYC CTP$DFT_REQUESTS_IOU1_DUAL_I4

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (DFT REQUEST PROCESSORS - 2)
*COPY CTP$DFT_RETURN_ERROR_CODE
*COPYC CTP$DFT_REQUEST_PROCESSOR_2

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (PP REQUEST PROCESSOR)
*COPY CTP$DFT_RETURN_ERROR_CODE
*COPYC CTP$DFT_PP_UTILITY_REQUESTS
*COPY  CTP$DFT_DUMP_PP_REGISTERS
*COPY  DSI$DUMP_LOAD_IDLE_PP

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (DFT ERROR LOGGING ROUTINES)
*COPY     CTP$DFT_PROCESS_DISK_ERROR
*COPY CTP$DFT_RETURN_ERROR_CODE

          OVERFLOW  R2ORG
          OVERLAY  (RESTART SCI PP)
 QUAL$    EQU    0
*COPYC CTP$DFT_RESTART_SCI
*COPY DSI$DUMP_LOAD_IDLE_PP
          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          OVERLAY  (HANDLE BLOCKED IOU ACCESS TO CM),10000B
*COPY CTP$DFT_HANDLE_IOU_BIT57

          OVERLAY  (DFT RUN TIME ERROR HANDLING)
*COPYC CTP$DFT_RUN_TIME_ERROR_HANDLER
*COPY CTP$DFT_RETURN_ERROR_CODE
*copy     ctp$construct_message_in_eicb

          OVERFLOW R2ORG     CHECK FOR OVERFLOW
          END
/EOR
