          CTEXT  SCI F6 F7 KEY
          OVERLAY (SCI F6/F7 KEY)
 CHS      SPACE  4,10
**        CHS - CHANGE DRIVER STATE.
*
*         CLEARS THE RECEIVED A 1E(16) FLAG AND DETERMINES
*         IF THIS ROUTINE WAS CALLED TO PROCESS *F6* OR *F7*.
*         SETS *MDD* TO NON-REFRESHING DISPLAY MODE.
*
*         EXIT   TO *TSM* FOR *F6* KEY.
*                TO *CSM* FOR *F7* KEY.


 CHS      ROUTINE

          LDI    PT          SAVE CURRENT ROUTINE
          STM    NRTP.,PT
          LDN    0
          STM    RSMC.,PT    RESET FOUND 0#1E
          STM    RFLG        TURN OFF *MDD* REPEAT DISPLAY
          LDM    MDMT+PTDB.  CHECK *MDD* STATUS
          ZJN    CHS1        IF NO *MDD*
          LDC    MDD         CLEAR ANY POSSIBLE MIDSTREAM OUTPUT FROM *MDD*
          STM    MDMT+RTNP.
          STM    MDMT+NRTP.
 CHS1     LDM    RDCA        DETERMINE WHICH FUNCTION KEY WAS HIT
          LMC    WW
          ZJP    TSM         IF *F7* KEY
*         LJM    CSM         PROCESS *F6* KEY

          ERRNZ  CSM-*       MUST FALL DIRECTLY INTO *CSM*
 CSM      SPACE  4,10
**        CSM - CHANGE SCD MODE.
*
*         RESETS THE ROUTINE LIST AND NEXT ROUTINE POINTER IF
*         THE CHANGE OF STATE IS POSSIBLE PER THE DEFINITION
*         BYTE (PTDB.) ELSE DOES NOTHING.
*
*         EXIT   TO *RDCX* IF TOGGLE IS MADE.
*                TO *RAB* IF TOGGLE IS NOT POSSIBLE.


 CSM      BSS    0           ENTRY
          LDD    PT          TEST FOR IN *MDD* MODE
          LMC    MDMT
          ZJP    RAB         IF KEY RECEIVED IN *MDD* MODE
          LDM    SCMT+SCDS.
          ZJN    CSM3        IF CURRENTLY *SCD/NOS*

*         TOGGLE FROM *SCD/VE* TO *SCD/NOS*.

          LDML   SCMT+PTDB.  CHECK *SCD/NOS* STATUS
          SHN    21-11
          PJP    RAB         IF *SCD/NOS* NOT PRESENT
          LDN    0
          STM    SCMT+SCDS.  SET *SCD/NOS* STATE
          LDM    SCMT+NRTL.  RESTORE PREVIOUS ROUTINE
          NJN    CSM1        IF PREVIOUS ROUTINE DEFINED
          LDC    NOSCI       SET ADDRESS TABLE
 CSM1     STM    SCMT+RTNL.
          LDC    PCL         ACTIVATE NOS CONTROLWARE NEXT
 CSM2     STI    PT          RESET NEXT ROUTINE
          LJM    RDCX        RETURN

*         TOGGLE FROM *SCD/NOS* TO *SCD/VE*.

 CSM3     LDML   SCMT+PTDB.  CHECK *SCD/VE* STATUS
          SHN    21-12
          PJN    RAB         IF *SCD/VE* NOT PRESENT
          AOM    SCMT+SCDS.  SET *SCD/VE* STATE
          LDN    0
          STM    SCMT+SCRN.  RESET SCREEN OFFSET FOR NOS/VE
          LDM    SCMT+RTNL.  SAVE *SCD/NOS* ROUTINE
          STM    SCMT+NRTL.
          LDC    NVESI       SET NEXT ROUTINE
          STM    SCMT+RTNL.
          LDC    VES         ACTIVATE *SCD/VE* CONSOLE NEXT
          UJN    CSM2        RETURN
 RAB      SPACE  4,10
**        RAB - RING A BELL.
*
*         EXIT   ASCII *BEL* PLACED IN THE OUTPUT STREAM IF THERE IS ROOM.
*                TO *RDCX*.


 RAB      BSS    0           ENTRY
          LDM    PTUS.,PT    GET INPUT PORT
          LPN    1           TEST FOR INPUT ON PORT ONE
          ZJN    RAB1        IF NOT
          LDM    CHP1.,PT    FIND END OF CURRENT OUTPUT LIST
          ADM    CHR1.,PT
          STD    T0
          ADC    -CHARS.     TEST FOR END OF BUFFERS
          SBD    PT
          PJN    RAB3        IF BEYOND BUFFER
          AOM    CHR1.,PT    INCREASE OUTPUT COUNT
          UJN    RAB2        CONTINUE

 RAB1     LDM    PTUS.,PT    GET OUTPUT PORTS
          LPN    1           TEST FOR INPUT ON PORT ONE
          NJN    RAB3        IF SO
          LDM    CHP0.,PT    FIND END OF CURRENT OUTPUT LIST
          ADM    CHR0.,PT
          STD    T0
          ADC    -CHARS.     TEST FOR END OF BUFFERS
          SBD    PT
          PJN    RAB3        IF BEYOND BUFFER
          AOM    CHR0.,PT    INCREASE OUTPUT COUNT
 RAB2     LDN    7           SEND A BELL
          STI    T0
          AOM    CHRC.,PT
 RAB3     LDM    NRTP.,PT    GET LAST ROUTINE BACK
          STI    PT
          LJM    RDCX        RETURN
 TOP      SPACE  4,10
**        TOP - TOGGLE OFF PORT IF REQUESTED.
*
*         EXIT   (A) = 0 IF NO OTHER PP WANTS THE PORT
*                (A) <> 0 IF ANOTHER PP HAS SET REREQUESTED.
*
*         CALLS  RTR.


 TOP2     LDC    BPA         SET ROUTINE TO BREAK PORT ACCESS NEXT
          STI    PT

 TOP      SUBR               ENTRY/EXIT
          LDM    S0FLG       TEST IOU TYPE
          NJN    TOP1        IF ON AN S0/S0E
          RJM    RTR         READ TEST MODE REGISTER
          LPN    60          IGNORE RESERVED BITS
          SHN    -3          ALIGN REREQUESTED BITS WITH PTUS.
          LPML   PTUS.,PT    GET CURRENT PORTS IN USE
          NJN    TOP2        IF REREQUESTED SET FOR A USED PORT
 TOP1     LDN    0           THIS LOOKS WEIRD BUT NEED FOR S0/S0E TEST
          UJN    TOPX        RETURN
 TSM      SPACE  4,10
**        TSM - TOGGLE BETWEEN *SCD* AND *MDD*.
*
*         RESETS THE PORT USAGE AND PORT DEFINITION FOR *MDD* AND
*         *SCD* TO CONVERT THE USAGE OF THE PORT.
*
*         EXIT   TO *RDCX* IF TOGGLE IS POSSIBLE.
*                TO *RAB* IF KEY INAPPROPRIATE AND IGNORED.
*
*         CALLS  TOP.


 TSM      BSS    0           ENTRY
          LDD    PT          TEST ENTRY USER
          LMC    MDMT
          ZJP    TSM5        IF MDD CURRENTLY

*         PROCESS *F7* DETECTED IN *SCD* MODE.

          LDM    MDMT+PTDB.  CHECK *MDD* STATUS
          NJN    TSM2        IF DEFINED
 TSM1     RJM    TOP         TOGGLE OFF PORT
          ZJP    RAB         IF NO ONE WANTS PORT
          LJM    RDCX        RETURN

*         TOGGLE FROM *SCD* TO *MDD*.

 TSM2     LPN    3
          STD    T2          SAVE *MDD* PORT(S)
          SBN    2
          PJN    TSM3        IF *MDD* WANTS BOTH PORTS
          LDM    SCMT+PTDB.  GET WHICH PORT *F7* CAME FROM
          LPN    1
          LMD    T2
          NJN    TSM1        IF *MDD* DOES NOT WANT THIS PORT
 TSM3     LDN    0           CLEAR *SCD* ROUTINE
          STI    PT
          LDM    MDMT+PTDB.  SET THAT *MDD* HAS THE PORT
          LMC    10000
          STML   MDMT+PTDB.
          LDML   SCMT+PTDB.  CLEAR THAT *SCD* HAS THE PORT
          STM    SCMT+PTDB.
          LDM    TSMC,T2     SET UP BIT TOGGLING FOR *PTUS.*
          STD    T4
          LMC    SCNI        FORM *SCN* INSTRUCTION
          STM    TSMA
          LDML   MDMT+PTUS.  UPDATE *MDD* PORT STATUS
 TSMA     SCN    **
*         SCN    2           (PORT 0)
*         SCN    5           (PORT 1)
*         SCN    6           (PORT 0 INPUT, BOTH PORTS OUTPUT)
*         SCN    7           (PORT 1 INPUT, BOTH PORTS OUTPUT)
          LMD    T4
          STML   MDMT+PTUS.
          LDML   SCMT+PTUS.  UPDATE *SCD* PORT STATUS
          LMD    T4
          STML   SCMT+PTUS.
          LDM    MDMT+RTNL.  RESET *MDD* ROUTINE LIST
          STD    T4
          LDI    T4
          STM    MDMT+RTNP.
 TSM4     LJM    RDCX        RETURN

*         PROCESS *F7* DETECTED IN *MDD* MODE.

 TSM5     LDD    DO          TEST IF STANDALONE DEADSTART
          ZJN    TSM5.5      IF DUAL-STATE
          LDDL   VA          TEST FOR *MDD* UTILITY MODE
          SHN    21-14
          MJP    RAB         IF *MDD* UTILITY MODE
          NJN    TSM5.5      IF NOS/VE IS AROUND
          LDM    SCMT+PTDB.  TEST IF *SCD* IS ACTIVE
          NJN    TSM5.5      IF NOT INITIATING DEADSTART FROM *MDD*
          CALL   DVM         DEADSTART NOS/VE FROM *MDD* MODE

 TSM5.5   RJM    TOP         TOGGLE OFF PORT
          NJN    TSM4        IF SOMEONE WANTED THE PORT
          LDM    SCMT+PTDB.  CHECK *SCD* STATUS
          ZJP    RAB         IF NOT DEFINED

*         TOGGLE FROM *MDD* TO *SCD*.

          LPN    3           SAVE *SCD* PORT(S)
          STD    T2
          SBN    2
          PJN    TSM6        IF *SCD* WANTS BOTH PORTS
          LDM    MDMT+PTDB.  GET WHICH PORT *F7* CAME FROM
          LPN    1
          LMD    T2
          NJP    RAB         IF *SCD* DOES NOT WANT THIS PORT
 TSM6     LDM    SCMT+PTDB.  SET THAT *SCD* HAS THE PORT
          LMC    10000
          STML   SCMT+PTDB.
          LDML   MDMT+PTDB.  CLEAR THAT *MDD* HAS THE PORT
          STM    MDMT+PTDB.
          LDM    TSMC,T2     SET UP BIT TOGGLING FOR *PTUS.*
          STD    T4
          LMC    SCNI        FORM *SCN* INSTRUCTION
          STM    TSMB
          LDML   SCMT+PTUS.  UPDATE *SCD* PORT STATUS
 TSMB     SCN    **
*         SCN    2           (PORT 0)
*         SCN    5           (PORT 1)
*         SCN    6           (PORT 0 INPUT, BOTH PORTS OUTPUT)
*         SCN    7           (PORT 1 INPUT, BOTH PORTS OUTPUT)
          LMD    T4
          STML   SCMT+PTUS.
          LDML   MDMT+PTUS.  UPDATE *MDD* PORT STATUS
          LMD    T4
          STML   MDMT+PTUS.
          LDM    SCMT+SCDS.  GET CURRENT *SCD* MODE
          ZJN    TSM7        IF NOS MODE
          LDC    VES         SET *RTNP.* TO SCD/VE STARTUP ROUTINE
          UJN    TSM8        CONTINUE

 TSM7     LDC    PCL         SET *RTNP.* TO LOAD CONTROLWARE
 TSM8     STM    SCMT+RTNP.
          LJM    RDCX        RETURN

 TSMC     CON    2           PORT 0 INPUT/OUTPUT
          CON    5           PORT 1 INPUT/OUTPUT
          CON    6           PORT 0 INPUT, BOTH PORTS OUTPUT
          CON    7           PORT 1 INPUT, BOTH PORTS OUTPUT

          OVERFLOW  SCMT     CHECK FOR OVERFLOW

          ENDX
