          CTEXT  SCI VPB TERMINATE NOSVE
          OVERLAY  (SCI VPB TERMINATE NOS/VE - PART 1)
 CTV      SPACE  4,10
**        CTV - CHECK IF TIME TO TERMINATE NOS/VE.
*
*         CALLS  IIB.


 CTV      ROUTINE

*         SINCE SCI SHOULD NEVER EXECUTE THE TERMINATION CODE ON A CYBER 2000
*         MAINFRAME, THE FOLLOWING CHECK FOR A CYBER 2000 SHOULD NOT BE REQUIRED.
*         HOWEVER, FOR FAULT TOLERANT REASONS, THE CHECK IS INCLUDED JUST IN
*         CASE THE TERMINATE BIT OR THE DROPVE BIT SHOULD EVER GET SOMEHOW SET
*         IN THE EICB.  IN THIS CASE, SIMPLY RETURN TO THE IDLE LOOP.

          LDML   S0FLG       CHECK FOR CYBER 2000
          LMC    10000
          ZJN    CTV2        IF CYBER 2000
          LDN    D7ST        CHECK *DROPVE* FLAG
          RJM    IIB
          CRDL   T1
          LDD    T2
          LPN    20
          ZJN    CTV3        IF *DROPVE* FLAG NOT SET
          LDM    CTVA        CHECK TIMER
          NJN    CTV1        IF TIMER VALID
          LDN    10D+1       START 10 SECOND TIMER FOR TERMINATION REQUEST
          STM    CTVA
 CTV1     SOM    CTVA        DECREMENT TIMER
          ZJN    CTV4        IF TIMER EXPIRED, FORCE NOS/VE TERMINATION
 CTV2     LJM    IDL         RETURN TO IDLE LOOP TO SERVICE OTHER MODES

 CTV3     LDN    0           RESET TIMER
          STM    CTVA
          LDN    D8DS        CHECK NOS/VE TERMINATION FLAG
          RJM    IIB
          CRDL   T1
          LDD    T4
          LMN    1
          NJN    CTV2        IF NOS/VE TERMINATION NOT REQUESTED
 CTV4     CALL   TVE         TERMINATE NOS/VE

          OVERFLOW  SCMT
          OVERLAY  (SCI VPB TERMINATE NOS/VE - PART 2),MDDSI
 ABD      SPACE  4,10
**        ABD - ABORT NOS/VE DEADSTART.
*
*         THIS ROUTINE IS CALLED IF THE NOS/VE BOOT PROGRAMS HAVE NOT BEEN
*         INSTALLED TO THE CIP DEVICE.  DEADSTART IS ABORTED.
*
*         EXIT   TO *RMA*.
*
*         USES   CM - CM+3.
*
*         CALLS  IIB, SPB.


 ABD      ROUTINE

*         SET BOOT NOT INSTALLED STATUS IN *D8ST*.

          LDN    D8ST
          RJM    IIB
          CRDL   CM
          LDN    BPNI        SET BOOT NOT INSTALLED
          SHN    6
          RADL   CM+3
          RJM    SPB
          LDN    D8ST
          RJM    IIB
          CWDL   CM

*         CLEAR *D8DS* SO *SDA* WILL DROP.

          LDN    D8DS
          RJM    IIB
          CRDL   CM
          LDN    0
          STD    CM+1
          LDN    D8DS
          RJM    IIB
          CWDL   CM
          LJM    RMA         RESUME MODE ACTIVITY
 TVE      SPACE  4,10
**        TVE - TERMINATE NOS/VE.
*
*         EXIT   TO *AAC*, IF ERROR RETURNED ON *DFT* REQUESTS.
*
*         CALLS  FRT, IAD, ICD, IDR, IDT, INS, ISI, SPB, SPR, UDW,
*                URT, *REC*.


 TVE      ROUTINE

*         TERMINATE NOS/VE OPERATION AND, FOR DUAL-STATE, RESTART THE C170.

          LRD    DP          FIND THE VE REQUEST POINTER IN THE DFT BLOCK
          LDM    DFTO
          ADC    RR+4        ACTIVATE THE R-REGISTER
          CRDL   VP
          RJM    FRT         FETCH RESOURCE TABLE
          RJM    IAD         IDLE ALL I/O DRIVERS
          RJM    ISI         IDLE SECONDARY IOU
          RJM    URT         UPDATE RESOURCE TABLE
          RJM    ICD         IDLE CONSOLE DRIVER
          SSRE   RSAV
          RJM    SPR         SET UP PROCESSOR REQUEST
          LDN    HVP         HALT VIRTUAL PROCESSORS
          RJM    IDR         ISSUE DFT REQUEST
          LMN    RCNE        CHECK FOR NO ERROR ON REQUEST
          ZJN    TVE1        IF DFT REQUEST COMPLETED WITH NO ERROR
          LDC    DAH8        62C - *SCI* DETECTED *DFT* ERROR WHILE HALTING
          LJM    AAC         ACTIVATE ANALYSIS CODE ERROR PROCESSOR

 TVE1     RJM    UDW         UPDATE DEADSTART WORD
          LDN    0           CLEAR NOS/VE ACTIVE STATUS
          STD    VA
          LDD    DO
          NJN    TVE2        IF NOT DUAL STATE
          LRD    DP
          RJM    SPB         SET PP BOUNDARY

*         UPDATE THE C170/C180 LOGGING FLAG, SET TRANSITION FROM DUAL STATE.

          LDC    1S11+1S3+1S0
          STDL   W3
          LDN    0
          STDL   W0
          STDL   W1
          STDL   W2
          RJM    IDT
          RDSL   W0          CLEAR 180 LOGGING, SET 170 ERRORS FLAG
          SSRE   DSAV
          RJM    SPR         SET UP PROCESSOR REQUEST
          LDN    S1P         START 170 PROCESSOR
          RJM    IDR         ISSUE DFT REQUEST
          LMN    RCNE        CHECK FOR NO ERROR ON REQUEST
          ZJN    TVE2        IF DFT REQUEST COMPLETED WITH NO ERROR
          LDC    DAS7        62D - *SCI* DETECTED *DFT* ERROR WHILE STARTING
          LJM    AAC         ACTIVATE ANALYSIS CODE ERROR PROCESSOR

 TVE2     LJM    RMA         RESUME OTHER MODE(S)
          EJECT
 FRT      SPACE  4,10
**        FRT - FETCH RESOURCE TABLE.
*
*         EXIT   (CBUF) = PP/CHANNEL RESOURCE TABLE FROM *SSR*.


 FRT      SUBR               ENTRY/EXIT
          SSRE   VEPP        SSR ENTRY POINTING TO TABLE
          CRML   CBUF,W4     READ PP/CHANNEL TABLE
          UJN    FRTX        RETURN
 ICD      SPACE  4,10
**        ICD - IDLE CONSOLE DRIVER.
*
*         EXIT   (SCDP) = *SCD* PORT BIT(S) AT TIME OF TERMINATION.
*
*         USES   CM - CM+3, T1, T2.
*
*         CALLS  GSI, IIB, RTR.
*
*         MACROS LOCKMR, WRITMR.


 ICD4     LDD    SB
          ADD    SB+1
          ZJN    ICDX        IF NO SCI PARAMETER TABLE
          RJM    GSI         GET *SCI* PARAMETER TABLE INTERLOCK
          LDDL   CM+1        SET CHANGED FLAG
          LPC    0#7FFF
          LMC    0#8000
          STDL   CM+1
          LDDL   CM+2        TURN OFF SCD/VE
          LPC    15777
          STDL   CM+2
          LDM    SBAO
          LMC    RR          ACTIVATE R-REGISTER
          CWDL   CM          WRITE CHANGES AND CLEAR INTERLOCK

 ICD      SUBR               ENTRY/EXIT
          LDM    MDMT+PTDB.  TEST *MDD* ACTIVE
          ZJN    ICD1        IF *MDD* NOT DEFINED
          LDC    BPA         SET TO BREAK PORT ACCESS
 ICD1     STM    MDMT+RTNP.  SET *MDD* ROUTINE
          LDM    SCMT+PTDB.  SET (SCDP) = PORT BITS
          LPN    3
          STM    SCDP
          LDML   SCMT+PTDB.  TURN OFF *SCD/VE*
          LPC    15777
          STML   SCMT+PTDB.
          SHN    21-11
          MJP    ICD4        IF *SCD/NOS* ACTIVE
          LDML   SCMT+PTDB.  TEST IF *SCD/VE* HAD A PORT
          SHN    21-14
          PJN    ICD2        IF NOT
          LOCKMR SET
          RJM    RTR         READ TEST MODE REGISTER
          STD    T1          SAVE RDATA+7
          LDM    SCMT+PTUS.  GET PORTS USED BY *SCD/VE*
          LPN    1
          STD    T2          SAVE PORT NUMBER
          ADN    1
          LMDL   T1          CLEAR PORT NUMBER
          STM    RDATA+7
          WRITMR RDATA,I0CC
          LOCKMR CLEAR
          LDML   EMC0,T2     SET THAT *SCI* DOES NOT HAVE THE PORT
          STM    EMC0,T2

*         IF THERE IS NO *SCI* PARAMETER TABLE ADDRESS IN THE EICB, THEN TURN
*         OFF *SCI* PARAMETER BLOCK CHECKING.

 ICD2     LDN    D7RS+2      CHECK FOR *SCI* PARAMETER TABLE ADDRESS
          RJM    IIB
          CRDL   CM
          LDDL   CM+2
          LPC    377
          ADDL   CM+3
          NJN    ICD3        IF *SCI* PARAMETER TABLE ADDRESS EXISTS
*         LDN    0           TURN OFF *SCI* PARAMETER BLOCK CHECKING
          STD    SB
          STD    SB+1
          STM    SBAO

*         TURN OFF *SCD* MODE.

 ICD3     LDN    0           TURN OFF *SCD* MODE
          STM    SCMT+PTDB.
          STM    SCMT+RTNP.
          LJM    ICDX        RETURN
 IDR      SPACE  4,10
**        IDR - ISSUE DFT REQUEST.
*
*         ENTRY  (A) = PARAMETER FOR DFT.
*                (VP - VP+3) = DFT REQUEST POINTER.
*
*         EXIT   REQUEST ISSUED TO DFT.
*                (A) = DFT RESPONSE CODE.
*
*         USES   CM - CM+3, W0 - W0+3.
*
*         CALLS  IVB, SPB.


 IDR      SUBR               ENTRY/EXIT
          STDL   CM          SAVE PARAMETER WORD
          LRD    VP+1
          RJM    SPB         SET PP BOUNDARY FOR VE REQUEST BLOCK
          LDD    VP+3
          RJM    IVB         INDEX TO VPB BLOCK
          CWDL   CM          WRITE DFT REQUEST
          STDL   CM
          ADN    1
          CWML   IDRA,ON     WRITE ADDITIONAL PARAMETERS
          SRD    CM+1        BUILD REQUEST POINTER
          LDN    2
          STD    CM+3
          LDN    0
          RJM    IVB         INDEX VE BLOCK
          CWDL   CM          WRITE DFT REQUEST POINTER
 IDR1     LDD    VP+3        INDEX TO VPB REQUEST
          RJM    IVB
          CRDL   W0          READ STATUS WORD
          LDDL   W0
          SHN    -10
          ZJN    IDR1        IF NOT COMPLETE
          UJN    IDRX        CONTINUE CURRENT ROUTINE

 IDRA     CON    0,0,0,0
*COPY     CTP$SCI_INCREMENT_DFT_BUFFER
 ISI      SPACE  4,15
**        ISI - IDLE SECONDARY IOU.
*
*         EXIT   TO *AAC*, IF ERROR RETURNED ON *DFT* REQUEST.
*
*         USES   CM - CM+3.
*
*         CALLS  IDR.
*
*         NOTES  THIS ROUTINE IS ONLY EXECUTED IN A DUAL STATE
*                ENVIRONMENT.  *DFT-S* IS NOT IDLED BY *SCI*.
*                INSTEAD IT IS LEFT RUNNING SO IT CAN RETURN VARIOUS
*                TYPES OF INFORMATION, SUCH AS, THE CONTENTS OF THE
*                IOU1 MAINTENANCE REGISTERS AND IOU1 PP-S TO THE *NVE*
*                SUBSYSTEM.  *DFT-S* IS THEN IDLED BY THE *NVE*
*                SUBSYSTEM WHEN IT HAS OBTAINED THE NEEDED INFORMATION.


 ISI      SUBR               ENTRY/EXIT

*         IDLE PP-S AND CHANNELS IN IOU1.

          LDM    MION
          ZJN    ISIX        IF SINGLE IOU
          LDC    0#100       IOU 1/SUBFUNCTION 0
          STDL   CM+1
          LDN    0
          STDL   CM+2
          STDL   CM+3
          LDN    IAP         IDLE ALL PP-S (EXCEPT DFT-S)
          RJM    IDR         ISSUE DFT REQUEST
          LMN    RCNE        CHECK FOR NO ERROR ON REQUEST
          ZJN    ISI5        IF DFT REQUEST COMPLETED WITH NO ERROR
          LDC    DASI        62B - *SCI* DETECTED *DFT* ERROR WHILE IDLING 2ND IOU
          LJM    AAC         ACTIVATE ANALYSIS CODE ERROR PROCESSOR

*         UPDATE IOU RESOURCE TABLE FOR IOU1.
*         NOTE THAT *DFT-S* CANNOT DO THIS SINCE IT DOES
*         NOT KNOW THE STRUCTURE OF THE IOU RESOURCE TABLE.

 ISI5     LDC    IRTL/2      START AT SECOND HALF OF TABLE (FOR IOU1)
          STDL   T1
 ISI10    LDN    0           INITIALIZE REPLACEMENT ENTRY
          STDL   T2
          LDML   CBUF,T1     TEST WHETHER PP ENTRY IS LOGICALLY OFF
          LPC    0#FF
          LMN    0#F
          NJN    ISI20       IF PP IS LOGICALLY ON
          LDN    0#F
          STDL   T2          INDICATE PP IS LOGICALLY OFF
 ISI20    LDML   CBUF,T1     TEST WHETHER CHANNEL ENTRY IS LOGICALLY OFF
          SHN    -10
          LMN    0#F
          NJN    ISI30       IF CHANNEL IS LOGICALLY ON
          LDC    0#F00
          RADL   T2          INDICATE CHANNEL IS LOGICALLY OFF
 ISI30    LDDL   T2          UPDATE IOU RESOURCE TABLE ENTRY
          STML   CBUF,T1
          AODL   T1
          SBK    IRTL
          NJP    ISI10       PROCESS NEXT TABLE ENTRY
          UJP    ISIX        RETURN
*COPY     CTP$SCI_INCREMENT_DFT_VE_BLOCK
*COPY     CTP$SCI_SET_UP_PROCESSOR_REQ
 UDW      SPACE  4,10
**        UDW - UPDATE DEADSTART WORD AND CLEAR RELOCATION POINTER.
*
*         EXIT   (*D8DS* PARCEL 3) = 0.
*                (*D8RLP* PARCEL 3) = 0.
*
*         USES   CM - CM+3.
*
*         CALLS  IIB, SPB.


 UDW      SUBR               ENTRY/EXIT
          LRD    IB+1
          RJM    SPB         SET PP BOUNDARY
          LDN    D8DS        READ *D8DS*
          RJM    IIB
          CRDL   CM
          LDN    0           CLEAR DEADSTARTED STATUS
          STD    CM+3
          LDN    D8DS
          RJM    IIB
          CWDL   CM          WRITE DEADSTART WORD
          LDN    D8RLP       READ RELOCATION CONTROL WORD
          RJM    IIB
          CRDL   CM
          LDN    0           CLEAR R-POINTER LENGTH
          STD    CM+3
          LDN    D8RLP       REWRITE RELOCATION CONTROL WORD
          RJM    IIB
          CWDL   CM
          UJN    UDWX        RETURN
 URT      SPACE  4,10
**        URT - UPDATE RESOURCE TABLE IN THE SSR.
*
*         ENTRY  (CBUF) = PP/CHANNEL RESOURCE TABLE.
*
*         EXIT   PP/CHANNEL RESOURCE TABLE IN *SSR* UPDATED.
*
*         CALLS  SPB.


 URT      SUBR               ENTRY/EXIT
          LRD    SA
          RJM    SPB         SET BOUNDARY FOR PP
          SSRE   VEPP        SSR ENTRY POINTING TO TABLE
          CWML   CBUF,W4     WRITE PP/CHANNEL TABLE
          UJN    URTX        RETURN
 WFP      SPACE  4,10
**        WFP - WRITE FIRST WORD OF THE *SCI* PARAMETER TABLE.
*
*         ENTRY  (CM - CM+3) = UPDATED FIRST WORD.
*                OS BOUNDS CORRECTLY SET.


 WFP      SUBR               ENTRY/EXIT
          LRD    SB          WRITE WORD
          LDM    SBAO
          LMC    RR
          CWDL   CM
          UJN    WFPX        RETURN
          SPACE  4,10
*         COMMON DECKS.


*COPY     CTP$SCI_VPB_IDLE_IOU0
 RMA      SPACE  4,15
**        RMA - RESUME MODE ACTIVITY.


*         BECAUSE *RMA* MAY RELOAD *MDD* RESIDENT, IT MUST START AT *OVLA*
*         SO THAT *MDD* RESIDENT DOES NOT OVERWRITE IT.

          BSS    OVLA-*      POSITION *RMA* AT OVLA

 RMA      BSS    0           ENTRY

*         CLEAN UP THE *SCI* PARAMETER TABLE.  CLEAR THE *SCD* BYTE IF *SCD/NOS*
*         IS NOT ACTIVE.  CLEAR THE *MDD* BYTE IF *MDD* MODE WAS NOT ACTIVATED
*         BY CTI OR C170.

          LDD    SB
          ADD    SB+1
          NJN    RMA5        IF PARAMETER TABLE DEFINED
          UJN    *           IF PARAMETER TABLE NOT DEFINED, HANG

 RMA5     RJM    GSI         GET *SCI* PARAMETER TABLE INTERLOCK
          LDN    D7RS
          RJM    IIB
          CRDL   W0
          LDM    SCMT+PTDB.  CHECK IF *SCD/NOS* ACTIVE
          SHN    21-11
          PJN    RMA15       IF *SCD/NOS* NOT ACTIVE

*         *SCD/NOS* IS ACTIVE SO THE *SCD* BYTE WILL NOT BE CLEARED.
*         DETERMINE IF THE *MDD* BYTE SHOULD BE CLEARED.

          LDDL   W0+1
          SHN    -15
          LPN    5
          NJN    RMA10       IF CTI/MDD OR C170/MDD INITIATED
          LDN    0           CLEAR *MDD* BYTE
          STDL   CM+3
          LDDL   CM+1        SET *MDD* BYTE CHANGED FLAG
          LPC    0#AFFF
          LMC    0#4000
          STDL   CM+1
 RMA10    RJM    WFP         WRITE FIRST WORD OF PARAMETER TABLE
          LOADOV MDDSI       RELOAD *MDD* RESIDENT
          CALL   SMT         RESET MODE TABLES

*         *SCD/NOS* IS NOT ACTIVE.  CLEAR THE *SCD* BYTE AND DETERMINE IF THE
*         *MDD* BYTE SHOULD BE CLEARED.

 RMA15    LDN    0           CLEAR *SCD* BYTE
          STDL   CM+2
          LDDL   CM+1        SET *SCD* BYTE CHANGED FLAG
          LPC    0#6FFF
          LMC    0#8000
          STDL   CM+1
          LDM    MDMT+PTDB.  CHECK IF *MDD* ACTIVE
          ZJP    RMA20       IF *MDD* NOT ACTIVE
          LDDL   W0+1        CHECK IF CTI OR C170 INITIATED
          SHN    -15
          LPN    5
          NJN    RMA10       IF CTI OR C170 INITIATED

*         *MDD* WAS INITIATED FROM THE C180 SIDE.  CLEAR THE PORT RESERVED BIT IF HELD,
*         THE *MDD* BYTE AND THE PP NUMBER IN THE PARAMETER TABLE.

          LDML   MDMT+PTDB.  CHECK IF *MDD* HAS A PORT RESERVED
          SHN    21-14
          PJP    RMA17       IF *MDD* DOES NOT HAVE A PORT RESERVED
          LDM    S0FLG
          NJN    RMA17       IF ON AN S0/S0E
          LDML   MDMT+PTDB.  GET PORT NUMBER
          LPN    1
          ADC    SCNI+1      CREATE SHIFT INSTRUCTION
          STML   RMAA
          LOCKMR SET
          RJM    RTR         READ TEST MODE REGISTER
 RMAA     SCN    1           CLEAR PORT 0 RESERVED BIT
*         SCN    2           (CLEAR PORT 1 RESERVED BIT)
          STML   RDATA+7
          WRITMR RDATA,ELIO,ITMR  REWRITE TEST MODE REGISTER
          LOCKMR CLEAR
 RMA17    LDN    0           CLEAR *MDD* BYTE
          STDL   CM+3
          LDDL   CM+1        CLEAR PP NUMBER AND SET CHANGED FLAG
          LPC    0#AC0F
          LMC    0#4000
          UJN    RMA25       WRITE FIRST WORD OF PARAMETER TABLE

*         *MDD* IS NOT CURRENTLY ACTIVE.  CLEAR THE PP NUMBER FROM THE
*         PARAMETER TABLE.  THEN CHECK IF THIS COPY OF *SCI* WAS ORIGINALLY
*         LOADED FOR C170 *MDD* MODE.  IF SO, RELOAD THE C170 PP RESIDENT.
*         OTHERWISE HANG WAITING FOR TERMINATION CODE TO IDLE AND RETURN
*         THE PP TO C170.  IN THIS CASE, THE PP MUST BE AN UPPER PP.

 RMA20    LDDL   CM+1        CLEAR PP NUMBER
          LPC    0#FC0F
 RMA25    STDL   CM+1
          RJM    WFP         WRITE FIRST WORD OF PARAMETER TABLE
          LRD    SA          ENSURE THIS IS AN UPPER PP
          RJM    SPB
          LDDL   W0+1
          SHN    21-15
          PJN    *           IF C170 *MDD* MODE NOT SET, HANG
          SHN    0-4-21+15   ISOLATE PP NUMBER
          LPN    77
          SBM    PPNO
          NJN    *           IF NOT C170 *MDD* MODE PP, HANG
          CALL   RCP         RELOAD C170 PP RESIDENT

          OVERFLOW  CBUF     CHECK FOR OVERFLOW

          ENDX
