          CTEXT  SCI TPM PRESET
          OVERLAY  (SCI PRESET MODE TABLES),OVLA
 PMT      SPACE  4,10
**        PMT - PRESET MODE TABLES.
*
*         THIS ROUTINE IS ENTERED FROM THE BOOT CODE.
*
*         ENTRY  (TIMC), (TIMD), (TIME) SET FOR 12-BIT CLOCK.
*
*         EXIT   MODE TABLE(S) INITIALIZED.
*                (TIMA) INITIALIZED FROM CHANNEL 14.
*                (TIMC), (TIMD), (TIME) MODIFIED FOR 16-BIT CLOCK IF S0/S0E.
*
*         CALLS  FHE, SMM, SSM, *SMT*.


 PMT      ROUTINE

          LDML   S0FLG       CHECK IF CY2000
          LMC    10000
          ZJP    PMT2        IF CY2000
          LDN    DISCID      GET CONSOLE DESCRIPTOR
          RJM    FHE
          LDM    CTUF        CHECK FOR CTI UTILITY MODE *MDD*
          NJN    PMT1        IF SO THEN NO *SCD*
          RJM    SSM         SET *SCD* MODE
 PMT1     RJM    SMM         SET *MDD* MODE
          LDM    CTUF        CHECK FOR CTI UTILITY MODE *MDD*
          ZJN    PMT1.1      IF NOT A UTILITY
          LDC    CCFI        GET CLEAR CHANNEL FLAG OP-CODE
          LMM    PPNO        PLACE PP-S CHANNEL NUMBER
          STM    PMTA
          PSN                NEED FOR S0/S0E
 PMTA     CCF    *,**        CLEAR CHANNEL FLAG FOR *SCI* PP
 PMT1.1   BSS    0
          LOADOV IDL         LOAD IDLE OVERLAY
          IAN    14          INITIALIZE TIMER BASE TIME
          STML   TIMA
          LDM    S0FLG       CHECK MAINFRAME TYPE
          ZJN    PMT2        IF NOT S0/S0E
          LDC    SBMLI       CHANGE *SBM* TO *SBML* FOR 16-BIT CLOCK
          STML   TIMC
          LDC    ADCI+20     SET CLOCK OVERFLOW ADJUSTMENT FOR 16-BIT CLOCK
          STM    TIMD
          LDC    RAMLI       CHANGE *RAM* TO *RAML* FOR 16-BIT CLOCK
          STML   TIME
 PMT2     CALL   SMT         CONTINUE
 RMD      SPACE  4,10
**        RMD - RESTORE MISCELLANEOUS DATA FROM CM TABLES.
*
*         ENTRY  *SCI* HAS BEEN RESTARTED BY *DFT*.
*
*         EXIT   TO *PMT*.
*                (DP - DP+1, DFTO) = *DFT* POINTERS FROM EICB.
*                (SB - SB+1, SBAO) = SCDPT POINTERS FROM EICB.
*
*         USES   T1 - T5.
*
*         CALLS  GSI, IIB, PIB, SPA, SSR, *PMT*.


 RMD      ROUTINE

          RJM    PIB         INITIALIZE EICB POINTER
          LDN    DSDFT       RESTORE *DFT* POINTERS
          RJM    IIB
          CRDL   T1
          LDDL   T1
          STML   DFTO
          LRD    T1+1
          SRD    DP
          RJM    SSR         RESTORE *SSR* POINTER
          RJM    SPA         SET UP R-REGISTER FOR *SCI* PARAMETER TABLE
          RJM    GSI         GET *SCI* PARAMETER TABLE INTERLOCK
          LDDL   CM+1        CLEAR BOTH DEFINITION CHANGED FLAGS
          LPC    0#3FFF
          STDL   CM+1

*         UPDATE PORT STATUSES.

          LDDL   CM+2        DETERMINE *SCD* MODE
          ZJN    RMD1        IF *SCD* NOT ACTIVE
          LPN    1
          STD    T5
          LDC    0#8000      SET *SCD* DEFINITION CHANGED
          RADL   CM+1
          LDML   RMDA,T5     SHOW *SCD* ACTIVE ON PORT X
          STML   SCMT+PTUS.
          STML   EMC0,T5
 RMD1     LDDL   CM+3        DETERMINE *MDD* PORT
          ZJN    RMD2        IF *MDD* NOT ACTIVE
          LPN    1
          STD    T5
          LDC    0#4000      SET *MDD* DEFINITION CHANGED
          RADL   CM+1
          LDML   RMDB,T5     SHOW *MDD* ACTIVE ON PORT Y
          STML   MDMT+PTUS.
          STML   EMC0,T5
 RMD2     LDML   SBAO        REWRITE DEFINITION CHANGED FLAGS IN SCDPT
          ADC    RR
          CWDL   CM          WRITE FLAGS AND CLEAR INTERLOCK
          LJM    PMT         PRESET MODE TABLES

 RMDA     CON    10002,10005 *SCD* PORT 0, PORT 1 FLAGS
 RMDB     CON    10002,10005 *MDD* PORT 0, PORT 1 FLAGS
 RMT      SPACE  4,10
**        RMT - RELOCATE PARAMETER TABLE.
*
*         ENTRY  (T2 - T3) = NEW ADDRESS (12-BIT FORMAT) OF SCDPT.
*
*         CALLS  SPB, STA, *SMT*.


 RMT      ROUTINE

          AOM    SCMT+CMBS.  SET FLAG FOR *CPW* ROUTINE
          LDD    T2          CONVERT ADDRESS FROM 12- TO 16-BIT FORMAT
          SHN    14
          LMD    T3
          STDL   W3
          SHN    -20
          STD    W2
          RJM    STA
          STM    SBAO        RESET OFFSET
          SRD    SB          SAVE NEW R-REGISTER

*         PRIOR TO CORRECTIVE CODE FOR PSR NS2F653, NOS DID NOT SET
*         UP THE *SCD* PARAMETER BLOCK CORRECTLY -
*         1)  THE *SCD*/*MDD* DEFINITION CHANGED FLAGS WERE NOT USED.
*         2)  *MDD* WAS NOT DESCRIBED.
*         3)  THE *SCD* PORT WAS ALWAYS REPORTED AS ZERO.
*
*         THE FOLLOWING CODE MODIFIES THE ORIGINAL TABLE TO REFLECT THE
*         ACTUAL *SCD* AND *MDD* INFORMATION AND TO SET THE *SCD* FLAG.
*
*         NOTE THAT THIS CODE DOES NOT FOLLOW INTERLOCK PROTOCOL ON THE
*         *SCI* PARAMETER TABLE.  THERE IS NO NEED TO BECAUSE THE ONLY
*         TIME THIS CODE IS EXECUTED IS VERY EARLY IN NOS DEADSTART
*         DURING THE HANDOFF FROM *SET* TO *DSD*.  NO OTHER CODE IS
*         LOOKING AT THE TABLE AT THIS TIME.
*
*         NOTE ALSO THAT THE SETTING OF THE *SCD* CHANGED FLAG CAUSES
*         *CPW* TO EVENTUALLY GET CALLED WHICH THEN CORRECTLY SETS UP THE
*         CM BUFFER SIZE IN *CMBS.*.  IF THIS CODE IS REMOVED, THAT
*         PROTOCOL MUST ALSO BE CHANGED.

          ADC    RR          READ HEADER WORD
          CRDL   CN
          LDDL   CN+1        CHECK FOR NS2F653 FIX INSTALLED
          LPC    0#C000
          NJN    RMT1        IF *SCD*/*MDD* DEFINITION CHANGED SET
          LDC    0#8000      SET *SCD* DEFINITION CHANGED FLAG
          RADL   CN+1
          LDM    SCMT+PTDB.  SET CURRENT *SCD* PORT BITS
          LPN    3
          RADL   CN+2
          LDML   MDMT+PTDB.  SET CURRENT *MDD* DEFINITION
          SCN    77
          STDL   CN+3
          RJM    SPB         SET PP BOUNDARY
          LDM    SBAO        REWRITE HEADER WORD
          ADC    RR
          CWDL   CN
 RMT1     CALL   SMT         GO RESET THE TABLE
 SMM      SPACE  4,10
**        SMM - SET *MDD* MODE.
*
*         ENTRY  (HBUF) = CONSOLE DESCRIPTOR.
*                (SCIA) = 2000 + PP NUMBER IF C170 *MDD* MODE INITIATED.
*
*         EXIT   (PTDB.) INITIALIZED.
*
*         USES   PT, CM - CM+3.
*
*         CALLS  IIB.


 SMM      SUBR               ENTRY/EXIT
          LDM    NOSL        TEST IF LOADED BY NOS
          ZJN    SMMX        IF SO RETURN
          LDC    MDMT        SET *MDD* TABLE
          STD    PT
          LDM    SCIA
          SHN    21-12
          PJN    SMM1        IF NOT INITIATED BY C170 STATE
          LDN    D7RS        GET PORT NUMBER FROM EICB
          RJM    IIB
          CRDL   CM
          LDD    CM+1        POSITION PORT BITS
          SHN    -4
          LPC    0700        ISOLATE PORT BITS
          LMC    4000
          UJN    SMM2        SAVE VALUES

 SMM1     LDM    HBUF+CDCMDD+1
          SHN    21-3        TEST *MDD* FLAG
          PJN    SMMX        IF NO *MDD*
          SHN    21-13-21+3
          LPC    0700        ISOLATE PORT BITS
          LMC    4000
 SMM2     STM    MDMT+PTDB.  SET VALUE OF *PTDB.*
          LJM    SMMX        RETURN
 SSM      SPACE  4,10
**        SSM - SET *SCD* MODE.
*
*         ENTRY  (HBUF) = CONSOLE DESCRIPTOR.
*
*         EXIT   (PTDB.) INITIALIZED.


 SSM      SUBR               ENTRY/EXIT
          LDN    0           ASSUME SCD MODE UNDEFINED
          STD    CN+3        CLEAR NOS CHANNEL BY DEFAULT
          STM    SCMT+PTDB.
          LDD    DO          GET DEADSTART TYPE
          NJN    SSMX        IF 180 WAIT TO START SCD
          LDM    HBUF+CDCDTYP
          ZJN    SSMX        IF CC545 DEADSTART
          LDM    HBUF+CDCPFLG  GET PORT NUMBER
          LPN    3
          LMC    DEFAULT     SET ACTIVE REAL STATE MODE
          STM    SCMT+PTDB.
          UJN    SSMX        RETURN
          SPACE  4,10
 SCIA     EQU    /PRESET/SCIA

          OVERFLOW SCMT      CHECK FOR OVERFLOW
          OVERLAY  (SCI UPDATE MODES/PORTS),OVLA
 SMT      SPACE  4,10
**        SMT - SET/RESET MODE TABLE.
*
*         LOOKS THROUGH THE *SCDPT* TO DEFINE THE MODE TABLES.
*
*         ENTRY  (T1, T2) = ADDRESS OF *SCDPT*.
*
*         EXIT   TO *EMC*.
*
*         USES   CM - CM+3, CN - CN+3, PT, T3, T4.
*
*         CALLS  CPW, MTA, SPB, UMM, UPD, USM.


 SMT5     LDC    MDMT        PROCESS *MDD* MODE
          STD    PT
          LDML   MDMT+PTDB.
          RJM    UMM         UPDATE *MDD* MODE TABLE
          LDC    SCMT        SET TO *SCD* MODE TABLE
          STD    PT
          LDML   SCMT+PTDB.
          RJM    USM         UPDATE *SCD* MODE DEFINITION
          LJM    EMC         ESTABLISH MODE CONNECTIONS

 SMT      ROUTINE            ENTRY/EXIT

          RJM    MTA         CHECK FOR PARAMETER TABLE
          ZJN    SMT5        IF NO *SCI* PARAMETER TABLE
          RJM    SPB         SET PP BOUNDARY
          LDC    SCMT
          STD    PT
 SMT1     LDN    0
          STD    CM
          LDC    SPIB        SET INTERLOCK BIT
          STDL   CM+1
          LDML   SCMT+PTDB.
          LPC    10000       MASK FOR ATTACHED BIT
          STDL   CM+2
          LDML   MDMT+PTDB.
          LPC    10000       MASK FOR ATTACHED BIT
          STDL   CM+3
          LDM    SBAO
          LMC    RR          ACTIVATE R-REGISTER
          RDSL   CM          SET INTERLOCK AND ATTACHED BITS
          CRDL   CN
          LDDL   CM+1
          LPC    SPIB
          NJN    SMT1        IF INTERLOCK ALREADY SET
          LDDL   CN+1        CHECK *SCD* DEFINITION CHANGED FLAG
          SHN    21-17
          PJN    SMT3        IF *SCD* DEFINITION NOT CHANGED
          LDDL   CN+2
          RJM    USM         UPDATE MODE DEFINITION

*         REREAD FIRST WORD OF *SCI* PARAMETER TABLE BECAUSE CODE IN *USM* MAY
*         HAVE CHANGED IT.

          RJM    MTA         GET MODE TABLE ADDRESS
          CRDL   CN
          LDD    CN+1        CHECK BLOCK LENGTH
          LPN    17
          SBN    4
          MJN    SMT3        IF NO PARAMETER WORDS
          STD    T3
          LDM    SBAO
          STD    T4
 SMT2     LDD    T4
          ADC    RR+3
          CRDL   W0
          RJM    CPW         CHECK PARAMETER WORD
          AOD    T4
          SOD    T3
          PJN    SMT2        IF MORE WORDS TO PROCESS
 SMT3     LDC    MDMT        TEST *MDD* MODE
          STD    PT
          LDDL   CN+1        CHECK *MDD* DEFINITION CHANGED FLAG
          SHN    21-16
          PJN    SMT4        IF *MDD* DEFINITION NOT CHANGED
          LDI    PT          SAVE CURRENT ROUTINE
          STML   MDMT+NRTP.
          LDDL   CN+3
          RJM    UMM         UPDATE *MDD* MODE

*         REREAD FIRST WORD OF *SCI* PARAMETER TABLE BECAUSE CODE IN *UMM* MAY
*         HAVE CHANGED IT.

 SMT4     RJM    MTA         GET MODE TABLE ADDRESS
          CRDL   CN
          LDDL   CN+1        CLEAR DEFINITION CHANGED FLAGS AND INTERLOCK BIT
          STD    CN+1
          RJM    MTA         GET MODE TABLE ADDRESS
          CWDL   CN          WRITE CLEARED CHANGED FLAGS AND INTERLOCK BIT
*         UJN    EMC         GET PORTS ATTACHED

          ERRNZ  EMC-*       CODE ASSUMES CONTIGUOUS LOCATIONS
 EMC      SPACE  4,10
**        EMC - ESTABLISH TWO PORT MUX CONNECTION.
*
*         THIS ROUTINE GETS ACCESS TO THE PROPER PORT ON THE TWO PORT
*         MULTIPLEXOR.  *PTUS.* IS SET UP WITH THE PROPER VALUES FOR THE
*         PORTS WHICH HAVE BEEN OBTAINED BY THE MODE.
*
*         ENTRY  (*PTDB.*) = DEFINED FOR PORTS.
*
*         EXIT   TO *IDL*.
*
*         USES   T7, PT.
*
*         CALLS  SPM.
*
*         RESETS RTNP. TO 0 IF ACCESS FAILS.
*                      TO *ACL* IF ACCESS SUCCESSFUL.


 EMC      ROUTINE            ESTABLISH PORT CONNECTION

          LDC    SCMT        WORK ON *SCD* MODE TABLE FIRST
 EMC1     STD    PT
          LDML   PTDB.,PT    GET PORT BITS FROM THE DEFINITION BYTE
          NJN    EMC3        IF MODE IS DEFINED
 EMC2     LJM    EMC8        CONTINUE FOR UNDEFINED MODE

 EMC3     SHN    21-14       CHECK MODE/PORT STATUS
          MJN    EMC2        IF MODE ALREADY HAS PORT
          SHN    21-13-21+14
          PJN    EMC2        IF MODE NOT ACTIVE
          LDML   PTDB.,PT    GET PORT BITS FROM THE DEFINITION BYTE
          LPN    3
          STD    T7
          SBN    2           CHECK IF BOTH PORTS WANTED
          PJN    EMC4        IF BOTH PORTS WANTED

*         GET SINGLE PORT.

          LDD    T7          SET PORT DESIRED
          RJM    SPM         SELECT PORT ON MULTIPLEXOR
          ZJP    EMC7        IF ACCESS FAILED SET NEXT ROUTINE TO ZERO
          LDC    SHNI        FORM SHIFT INSTRUCTION
          LMD    T7          FORM SHIFT INSTRUCTION
          STM    EMCA
          LDN    2           ASSUME PORT 0
 EMCA     SHN    **          NO SHIFT FOR PORT 0
*EMCA     SHN    1           SHIFT ONE FOR PORT 1
          LMC    10000       SET HAVE ONE PORT
          RADL   T7          ADD IN INPUT PORT NUMBER
          LDM    PTUS.,PT    UPDATE PORTS ATTACHED
          SCN    7           CLEAR ALL PORT FLAGS
          LMDL   T7          SET DESIRED PORT FLAGS
          STML   PTUS.,PT
          LJM    EMC6        FINISH WORK

*         GET FIRST PORT OF TWO PORTS.

 EMC4     STD    T7          SAVE INPUT PORT
          LDML   PTUS.,PT    GET CURRENT VALUE
          SCN    1
          LMDL   T7          SET NEW INPUT PORT
          STML   PTUS.,PT
          LDN    0           GET PORT ZERO
          RJM    SPM         SELECT PORT ON MULTIPLEXOR
          ZJN    EMC5        IF ACCESS FAILED
          LDM    PTUS.,PT    UPDATE PORTS ATTACHED
          LPC    20005       CLEAR PORT 0 FLAG
          LMC    10002       UNCONDITIONALLY SET PORT 0 FLAG
          STML   PTUS.,PT

*         GET SECOND PORT OF TWO PORTS.

 EMC5     LDN    1           GET PORT ONE
          RJM    SPM         SELECT PORT ON MULTIPLEXOR
          ZJN    EMC7        IF ACCESS FAILED CLEAR NEXT ROUTINE
          LDML   PTUS.,PT    UPDATE PORTS ATTACHED
          LPC    10003       CLEAR PORT 1 FLAG
          LMC    20004       UNCONDITIONALLY SET PORT 1 FLAG
          STML   PTUS.,PT
 EMC6     LDC    ACL         ACTIVATE CONTROLWARE LOAD AS NEXT ROUTINE
 EMC7     STI    PT          SET NEXT ROUTINE
 EMC8     LDD    PT          TEST IF TRIED BOTH MODE TABLES
          LMC    SCMT
          NJP    IDL         IF BOTH *SCD* AND *MDD* PROCESSED
          LDC    MDMT        SET TO *MDD* MODE TABLE
          LJM    EMC1        LOOP
 RPR      SPACE  4,10
**        RPR - RELINQUISH PORT RESERVATION.
*
*         EXIT   TO *SMPX*.
*
*         CALLS  DLY, GSI, MTA, RPT.


 RPR      ROUTINE

          RJM    MTA         GET MODE TABLE ADDRESS
          ZJN    RPR1        IF TABLE NOT DEFINED
          RJM    GSI         GET *SCI* PARAMETER TABLE INTERLOCK
 RPR1     RJM    RPT         RELINQUISH PORT
          RJM    MTA         GET MODE TABLE ADDRESS
          ZJN    RPR2        IF TABLE NOT DEFINED
          CRDL   CM
          LDDL   CM+1        CLEAR TABLE INTERLOCK
          LPC    0#EFFF
          STDL   CM+1
          RJM    MTA         GET MODE TABLE ADDRESS
          CWDL   CM          WRITE CLEARED INTERLOCK
 RPR2     LDC    1000D       SET NUMBER OF MILLISECONDS
          RJM    DLY         DELAY FOR ONE SECOND
          LJM    SMPX        RETURN TO IDLE LOOP
 CLR      SPACE  4,10
**        CLR - CLEAN UP PORT DEFINITION.
*
*         ENTRY  (PT) = PORT TABLE ADDRESS.
*
*         USES   T5, T6.
*
*         CALLS  RPT.


 CLR      SUBR               ENTRY/EXIT
          LDML   PTDB.,PT
          ZJN    CLRX        IF ALREADY CLEAN
          SHN    21-14
          PJN    CLR1        IF PORT NOT ATTACHED
          RJM    RPT         CLEAR PORT RESERVATION
 CLR1     LDC    MTBL.L
          STD    T6
          LDD    PT
          STD    T5
 CLR2     LDN    0
          STIAO  T5          CLEAR ALL OF PORT TABLE
          SOD    T6
          PJN    CLR2
          UJN    CLRX        RETURN
 CPW      SPACE  4,10
**        CPW - CHECK PARAMETER WORD.
*
*         TESTS IF A CM BUFFER IS DEFINED AND INITIALIZES POINTERS.
*
*         ENTRY  (W0 - W3) = PARAMETER WORD.
*
*         USES   PT.


 CPW10    LDC    NOSBI       SET NOS ROUTINE LIST
          STM    NRTL.,PT

 CPW      SUBR               ENTRY/EXIT
          LDDL   W0
          SHN    -17+6
          LPN    7           ISOLATE PARAMETER WORD TYPE
          SBN    2
          MJN    CPWX        IF NOT BUFFER DEFINITION
          SBN    2
          PJN    CPWX        IF NOT BUFFER DEFINITION
          LDC    SCMT        FETCH PORT TABLE ADDRESS
          STD    PT
          LDDL   W2          FORM R-REGISTER
          SHN    22-6+4
          STM    SCMT+RRUP.  SAVE R-UPPER
          SHN    14
          STM    SCMT+RRLW.  SAVE R-LOWER
          LDDL   W3          STORE R-REGISTER OFFSET
          STML   SCMT+CMBA.
          STML   SCMT+CMIP.  INITIALIZE POINTERS
          STML   SCMT+CMOP.

*         IF *CMBS.* HAS BEEN SET NON-ZERO BY *RMT* THEN SAVE THE BUFFER SIZE
*         IN *CMBS*.  THIS CHECK AVOIDS THE USE OF THE BUFFER TOO EARLY IN
*         NOS DEADSTART.

          LDML   SCMT+CMBS.  CHECK IF TIME TO SAVE CM BUFFER SIZE
          ZJN    CPW5        IF NOT TIME
          LDDL   W1          SAVE BUFFER SIZE
          STML   SCMT+CMBS.
          ADML   SCMT+CMBA.  COMPUTE END OF BUFFER ADDRESS
          SBN    1
          STML   SCMT+CMBL.
 CPW5     LDM    SCMT+SCDS.
          NJP    CPW10       IF CURRENTLY *SCD/VE* STATE
          LDC    NOSBI       SET ROUTINE LIST
          STM    SCMT+RTNL.
          LJM    CPWX        RETURN
 DLY      SPACE  4,10
**        DLY - DELAY FOR (A) MILLISECONDS.
*
*         ENTRY  (A) = NUMBER OF MILLISECONDS TO DELAY.
*
*         USES   T0.


 DLY      SUBR               ENTRY/EXIT
          STD    T0
 DLY1     IAN    14          INPUT REAL-TIME CLOCK
          LPC    1024D-1     EXTRACT RANGE OF 0 .. 1023 MILLISECONDS
          SBM    DLYA
          PJN    DLY2        IF LESS THAN 1024 MICROSECONDS ELAPSED
          RAM    DLYA        UPDATE BASE TIME
          SOD    T0          DECREMENT MILLISECOND COUNTER
          ZJN    DLYX        IF DELAY EXPIRED
          UJN    DLY1        LOOP TILL DELAY EXPIRED

 DLY2     RAM    DLYA        UPDATE BASE TIME
          UJN    DLY1        LOOP

 DLYA     BSS    1
 GVI      SPACE  4,15
**        GVI - GET VIRTUAL INTERFACE.
*
*         ENTRY  R-REGISTER SET TO *SCI* PARAMETER TABLE.
*
*         EXIT   (CB - CB+1) = NOS/VE COMMUNICATIONS BLOCK R-REGISTER.
*                (SCMT+CBAO.) = NOS/VE COMMUNICATIONS BLOCK A-OFFSET.
*                (SCMT+ELAO. - SCMT+ELRL.) = NOS/VE ERROR LINE R-POINTER.
*
*         USES   W0 - W3.
*
*         CALLS  STA.


 GVI      SUBR               ENTRY/EXIT
          LDM    SBAO        GET *SCD/VE* INTERFACE POINTER ADDRESS
          ADC    RR+1
          CRDL   W0
          RJM    STA         SET UP FOR VE CM READ
          STML   SCMT+CBAO.  SAVE A-OFFSET
          SRD    CB          STORE COMMUNICATIONS BLOCK R-REGISTER
          ADC    RR+2        READ ERROR LINE (TOP LINE) RMA
          CRDL   W0
          RJM    STA
          STML   SCMT+ELAO.  SAVE ERROR LINE RMA
          LDD    W4
          STM    SCMT+ELRU.
          LDD    W5
          STM    SCMT+ELRL.
          LDC    VES         SET *SCD/VE* STARTUP ROUTINE
          STM    SCMT+NRTP.
          LRD    SB          RELOAD R-REGISTER TO POINT TO *SCD/VE* BLOCK
          LJM    GVIX        RETURN
 MTA      SPACE  4,10
**        MTA - MODE TABLE ADDRESS.
*
*         TEST FOR AND SET UP *SCDPT* ADDRESS.
*
*         EXIT   (A) = 0 IF NO *SCI* PARAMETER TABLE.
*                (A + R) = READY FOR CM ACCESS.


 MTA      SUBR               ENTRY/EXIT
          LDM    SBAO
          ADD    SB
          ADD    SB+1
          ZJN    MTAX        IF NO *SCDPT*
          LRD    SB          LOAD R-REGISTER
          LDM    SBAO
          LMC    RR          ACTIVATE R-REGISTER
          UJN    MTAX        RETURN
 PMM      SPACE  4,10
**        PMM - PRESET *MDD* MODE.
*
*         PRESETS VARIABLES FOR *MDD* MODE.


 PMM      SUBR               ENTRY/EXIT
          LDN    3           SET *DFT* FREEZE FLAG
          STM    DFTR
          LDN    12          SET REGISTER COUNT
          STM    RFPB
          LDN    11          SET REFRESH ADJUSTMENT
          STM    RRRP
          SHN    11          SET REFRESH RATE CONTROL
          STML   RDLY
          STML   MDDR
          LDN    10          SET WORD COUNT
          STM    VAL2
          LDC    MRPL        SET REGISTER LIST
          STM    MRPV
          LDC    MPSV        SET UP STATE POINTER TO POINTER
          STM    VMBA+3
          UJN    PMMX        RETURN
 RPT      SPACE  4,10
**        RPT - RELINQUISH PORT RESERVATION IN TEST MODE REGISTER.
*
*         ENTRY  *SCI* PARAMETER TABLE IS INTERLOCKED.
*
*         USES   T6.
*
*         CALLS  MTA, RTR, SMN, USB.
*
*         MACROS LOCKMR.


 RPT      SUBR               ENTRY/EXIT
          RJM    RTR         READ TEST MODE REGISTER
          SHN    -2
          LPN    3
          NJN    RPT1        IF A REQUESTED BIT IS SET
          LDM    PTDB.,PT    ELSE GET INPUT PORT FROM CURRENT MODE
          LPN    1
          UJN    RPT2        CONTINUE

 RPT1     SBN    1           SET PORT NUMBER
 RPT2     STD    T6
          LMC    SHNI        SET UP *USB*
          STM    USBA
          LDML   EMC0,T6     CLEAR PORT ATTACHED FLAG
          STM    EMC0,T6
          RJM    MTA         GET MODE TABLE ADDRESS
          ZJN    RPT3        IF PARAMETER TABLE UNDEFINED
          CRDL   CM          READ FIRST WORD OF *SCI* PARAMETER TABLE
          RJM    SMN         SET MODE NUMBER
          LDIL   T2          CLEAR PORT ATTACHED FLAG IN PARAMETER TABLE
          LPC    0#FFFF-1S12
          STIL   T2
          RJM    MTA         GET MODE TABLE ADDRESS
          CWDL   CM          WRITE CLEARED PORT ATTACHED FLAG
 RPT3     LOCKMR SET
          RJM    RTR         READMR RDATA,ELIO,ITMR
          LDC    25S12+0     CLEAR REREQUESTED, REQUESTED AND RESERVED BITS
          RJM    USB         UPDATE *TM* REGISTER
          LDML   PTDB.,PT
          STM    PTDB.,PT    CLEAR PORT ATTACHED
          LOCKMR CLEAR
          LDD    T6          SET PORT CURRENTLY UNATTACHED
          SHN    1
          LPML   PTUS.,PT
          STM    PTUS.,PT
          LDC    SMPX        WAIT FOR *TPR* TO GET PORT BACK
          STI    PT
          LJM    RPTX        RETURN
 SMN      SPACE  4,10
**        SMN - SET MODE NUMBER.
*
*         EXIT   (T2) = ADDRESS OF CM+X FOR PROPER DEFINITION.


 SMN      SUBR               ENTRY/EXIT
          LDD    PT
          LMC    SCMT
          ZJN    SMN1        IF *SCD* MODE
          LDN    1
 SMN1     ADN    CM+2
          STD    T2          SELECT CM+2 OR CM+3
          UJN    SMNX        RETURN
 SPM      SPACE  4,10
**        SPM - SELECT PORT ON MULTIPLEXOR.
*
*         ENTRY  (A) = PORT TO OBTAIN ACCESS TO.
*
*         EXIT   (A) = 0, IF ACCESS FAILED.
*
*         USES   T2.
*
*         CALLS  DLY, GSI, MTA, RTR, SCF, SMN, USB.
*
*         MACROS LOCKMR.


 SPM3     LDC    25S12+1     CLEAR REREQUESTED, REQUESTED, SET RESERVED
          STML   EMC0,T2     SAVE FACT PORT ACQUIRED
          RJM    USB
          LDM    S0FLG       TEST FOR IOU TYPE
          NJN    SPM4        IF ON AN S0/S0E
          LOCKMR CLEAR
 SPM4     RJM    MTA         GET MODE TABLE ADDRESS
          ZJN    SPM5        IF TABLE DOES NOT EXIST
          RJM    GSI         GET *SCI* PARAMETER TABLE INTERLOCK
          RJM    SMN         SET MODE NUMBER IN T2
          LDIL   T2          SET PORT ACQUIRED BIT
          LPC    0#EFFF
          LMC    0#1000
          STIL   T2
          RJM    MTA         GET *SCI* PARAMETER TABLE ADDRESS
          CWDL   CM          SET PORT ATTACHED FLAG AND CLEAR INTERLOCK
 SPM5     LDML   PTDB.,PT
          LPC    0#0FFF      SET PORT IN USE FLAG
          LMC    0#1000
          STML   PTDB.,PT
          LDK    MX          RESERVE CHANNEL 15
          RJM    SCF
          LDC    MXPT+**     SELECT PORT
 SPMB     EQU    *-1
          FAN    MX
          FNC    305,MX      SET PARAMETERS
          FNC    MXMC,MX     MASTER CLEAR PORT
          FNC    MXDM,MX     CLEAR PORT SELECTION
          AJM    *,MX        WAIT FOR FUNCTION TO COMPLETE
          CCF    *,MX

*         ON AN I2, SCI MUST DELAY AFTER A MASTERCLEAR AND BEFORE ANY CHARACTERS
*         ARE OUTPUT TO THE TPM.

          LDM    IOUM        CHECK MODEL NUMBER
          SBN    0#20
          NJN    SPMX        IF NOT MODEL 20 IOU
          LDN    50D         DELAY 50 MILLESECONDS
          RJM    DLY
          LDN    1           INDICATE ACCESS SUCCESSFUL

 SPM      SUBR               ENTRY/EXIT
          STD    T2          SAVE PORT NUMBER
          LDML   EMC0,T2     TEST IF PORT CURRENTLY ACQUIRED
          SHN    -14
          ZJN    SPM0        IF NOT GET IT
          LDN    0
          UJN    SPMX        RETURN PORT NOT ACQUIRED

 SPM0     LDM    S0FLG       TEST FOR IOU TYPE
          NJP    SPM3        IF ON AN S0/S0E
          LDC    MXPT        FORM PORT SELECT FUNCTION
          ADD    T2
          STM    SPMB
          LMC    SHNI&MXPT   FORM SHIFT INSTRUCTION
          STM    USBA
          LMN    77          COMPLEMENT SHIFT COUNT
          STM    SPMA
          LOCKMR SET
          RJM    RTR         READ TEST MODE REGISTER
 SPMA     SHN    **          (IF PORT 0 BEING USED)
*SPMA     SHN    -1          (IF PORT 1 BEING USED)
          LPN    1
          ZJP    SPM3        IF PORT IS FREE
          LDML   EMC0,T2     GET ESTABLISHED CONNECTION BEFORE FLAG
          ZJN    SPM1        IF NEVER ACQUIRED
          LDC    20S12+20    SET REREQUESTED BIT
          UJN    SPM2        GO UPDATE STATUS BITS

 SPM1     LDC    4S12+4      SET REQUESTED BITS
 SPM2     RJM    USB         UPDATE STATUS BITS IN *TM* REGISTER
          LOCKMR CLEAR       RETURNS (A) = 0
          LJM    SPMX        RETURN
 UMM      SPACE  4,10
**        UMM - UPDATE *MDD* MODE DEFINITION.
*
*         ENTRY  (A) = NEW MODE DEFINITION.
*                (PT) = *MDMT*.
*
*         USES   T7.
*
*         CALLS  CLR, PMM.


 UMM      SUBR               ENTRY/EXIT
          SCN    77          CLEAR *SCD* CHANNEL NUMBER
          STDL   T7          SAVE DEFINITION
          SHN    -6          ALIGN *MDD* PORT BITS
          LPN    3           RETRIEVE PORT BITS
          RADL   T7          PLACE PORT BITS IN LAST 2 BITS
          LMML   MDMT+PTDB.
          LPC    4003        MASK FOR ACTIVE AND PORT BITS
          ZJN    UMM1        IF UNCHANGED
          RJM    CLR         CLEAN UP MODE DEFINITION
          LDD    T7          CLEAR PORT ATTACHED FLAG
          UJN    UMM2

 UMM1     LDDL   T7
 UMM2     STML   MDMT+PTDB.  SET *MDD* DEFINITION
          ZJN    UMMX        IF UNDEFINED RETURN
          LOADOV MDDSI       LOAD *MDD* RESIDENT OVERLAY
          LDC    MDDSI       SET TO *MDD* MODE
          STM    MDMT+RTNL.
          LDM    MDDSI       SET INITIALIZATION ROUTINE
          STI    PT
          RJM    PMM         PRESET *MDD* MODE
          LJM    UMMX        RETURN
 UNC      SPACE  4,10
**        UNC - UPDATE NOS CHANNEL.
*
*         ENTRY  (A) = CHANNEL NUMBER.
*
*         USES   T4.
*
*         NOTE   EXTREME CARE MUST BE TAKEN TO INCLUDE REFERENCE TO
*                ALL CHANNEL 10 INSTRUCTIONS IN THE RESIDENT OVERLAY.


 UNC      SUBR               ENTRY/EXIT
          STD    T4
          LDM    MC1         ADJUST CHANNEL NUMBER IN *SCI* RESIDENT
          SCN    37
          LMD    T4
          STM    MC1
          LDM    MC2         ADJUST CHANNEL NUMBER IN *SCI* RESIDENT
          SCN    37
          LMD    T4
          STM    MC2
          LDM    MC3         ADJUST CHANNEL NUMBER IN *SCI* RESIDENT
          SCN    37
          LMD    T4
          STM    MC3
          LDM    MC4         ADJUST CHANNEL NUMBER IN *SCI* RESIDENT
          SCN    37
          LMD    T4
          STM    MC4
          LDM    MC5         ADJUST CHANNEL NUMBER IN *SCI* RESIDENT
          SCN    37
          LMD    T4
          STM    MC5
          LDM    MC6         ADJUST CHANNEL NUMBER IN *SCI* RESIDENT
          SCN    37
          LMD    T4
          STM    MC6
          LDM    MC7         ADJUST CHANNEL NUMBER IN *SCI* RESIDENT
          SCN    37
          LMD    T4
          STM    MC7
          LJM    UNCX        RETURN
 USB      SPACE  4,10
**        USB - UPDATE STATUS BITS.
*
*         ENTRY  (A) = 5/MASK, 7/0, 5/VALUE
*                (USBA) = *SHN PORT* INSTRUCTION.
*                (RDATA - RDATA+7) = CURRENT TEST MODE REGISTER CONTENTS.
*
*         EXIT   TEST MODE REGISTER REWRITTEN.
*
*         USES   T1.
*
*         MACROS WRITMR.


 USB      SUBR               ENTRY/EXIT
 USBA     SHN    **          (IF PORT 0)
*USBA     SHN    1           (IF PORT 1)
          STD    T1
          SHN    -14
          ADC    SCNI        FORM MASK
          STM    USBB
          LDM    S0FLG       TEST FOR IOU TYPE
          NJN    USBX        IF ON AN S0/S0E
          LDM    RDATA+7
 USBB     SCN    **
          LMD    T1
          STM    RDATA+7
          WRITMR RDATA,ELIO,ITMR
          UJN    USBX        RETURN
 USM      SPACE  4,10
**        USM - UPDATE *SCD* MODE DEFINITION.
*
*         ENTRY  (A) = NEW MODE DEFINITION.
*                (PT) = *SCMT*.
*                (CN+3) = NOS COMMUNICATION CHANNEL.
*
*         USES   T7.
*
*         CALLS  CLR, GVI.


 USM      SUBR               ENTRY/EXIT
          STDL   T7          SAVE DEFINITION
          LMML   SCMT+PTDB.
          LPC    4003        MASK FOR ACTIVE AND PORT BITS
          ZJN    USM1        IF UNCHANGED
          RJM    CLR         CLEAN UP MODE DEFINITION
 USM1     LDDL   T7
          SHN    21-13
          PJN    USMX        IF MODE IS INACTIVE
          LDC    7770        SET UP ADDRESS FOR NOS CM BUFFER
          STM    SCMT+CMWP.
          LDC    OVLA        SET ADDRESS TABLE
          STM    SCMT+RTNL.
          LDN    0           ASSUME NOS STATE
          STM    SCMT+SCDS.
          LDC    PCL         SET *SCD/NOS* STARTUP ROUTINE
          STM    SCMT+NRTP.
          LDDL   T7          RESET MODE DEFINITION BYTE
          STML   SCMT+PTDB.
          SHN    21-12
          PJN    USM2        IF NO VIRTUAL STATE
          LDN    1           SET *SCD/VE*
          STM    SCMT+SCDS.
          RJM    GVI         GET VIRTUAL INTERFACE
 USM2     LDC    EMC         SET *ESTABLISH MODE CONNECTION*
          STI    PT          IN RTNP.
          LDML   SCMT+PTDB.
          SHN    21-14
          PJN    USM3        IF MODE CURRENTLY UNATTACHED
          LDM    SCMT+NRTP.  RESTORE OLD ROUTINE
          STI    PT          RESET RTNP.
 USM3     LDD    CN+3        GET NOS COMMUNICATION CHANNEL NUMBER
          LPN    37
          NJN    USM4        IF A VALUE IS GIVEN
          LDN    CH          USE DEFAULT NOS CHANNEL
 USM4     STM    SCMT+NCCH.  SAVE CHANNEL NUMBER
          RJM    UNC         UPDATE NOS CHANNEL NUMBER
          LJM    USMX        RETURN

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          ENDX
