          CTEXT  SCI SCD NOS ROUTINES
          OVERLAY  (SCI SCD/NOS CHANNEL ROUTINES)
 NOSSI    SPACE  4,10
**        SCD/NOS CHANNEL INTERFACE ROUTINE LIST.


 NOSCI    ROUTINE
          LOC    0
 S.LCW    CON    PCL         PROCESS CONTROLWARE LOAD
 S.WFK    CON    RKV         WAIT FOR KEYBOARD ROUTINE
 S.NIO    CON    BNO         STANDARD I/O
 S.PIO    CON    BPO         PRIORITY I/O
          LOC    *O
 PCL      SPACE  4,10
**        PCL - PREPARE CONTROLWARE LOAD.
*
*         SEND THE CONTROLWARE LOAD PREAMBLE DOWN TO THE CONSOLE AND
*         PRESET THE CONTROLWARE ADDRESSES.
*
*         EXIT   TO *LCW* IF CONTROLWARE NOT LOADED.
*                TO *LCW2* IF CONTROLWARE IS LOADED.
*
*         RESETS RTNP.  TO  *LCW*.
*
*         USES   CM - CM+3, CN - CN+1.
*
*         NOTE   THIS ROUTINE MUST BE LOCATED AT *OVLA+4*.


 PCL      ROUTINE            PREPARE FOR CONTROLWARE LOAD

          LDM    SCMT+CMBS.  SET CONTROLWARE LOAD FLAG
          LMC    100000
          STML   SCMT+CMBS.
          LDM    SCMT+CWLD.
          NJP    LCW2        IF CONTROLWARE IS LOADED
          LDC    CWLP        TRANSFER CONTROLWARE LOAD PREAMBLE TO BUFFER
          STD    T1
          STM    SCMT+CWLD.  SET LOADED FLAG
 PCL1     LDI    T1          MOVE NEXT WORD
          STIAO  BP
          AOD    T1          ADVANCE INDEX
          LMC    CWLP+CWLP.L
          NJN    PCL1        IF MORE WORDS TO MOVE
          FINDCM SCD         FIND OLD SCD TO GET CONTROLWARE
          SRD    CN          SAVE R REGISTER
          ADN    1
          CRDL   CM          READ SCD HEADER
          ADN    1
          ADDL   CM+1        SCD PROGRAM LENGTH
          STML   SCMT+CMIP.
          CRDL   CM          READ CONTROLWARE HEADER
          LDDL   CM+1        FETCH CONTROLWARE DATA LENGTH
          STML   SCMT+CMOP.
          LDC    LCW         LOAD CONTROLWARE
          STI    PT          INTO RTNP.
          LJM    CKQ         RETURN
 LCW      SPACE  4,10
**        LCW - LOAD CONTROLWARE.
*
*         ENTRY  (CN - CN+1) = R-REGISTER FOR THE CONTROLWARE.
*
*         EXIT   TO *SMPX* IF CHARACTERS TO OUTPUT.
*                TO *CKQ* IF ADDED CHARACTERS TO OUTPUT.
*
*         EXIT   (RTNP.) = *WFF*.
*
*         USES   CM - CM+3, T1.
*
*         CALLS  BAP, *ICLX*.


 LCW      BSS    0           LOAD CONTROLWARE
          LDM    SCMT+CHRC.
          ZJN    LCW1        IF MUX IS FREE
          LJM    SMPX        RETURN

 LCW1     SOML   SCMT+CMOP.  DECREMENT BYTE COUNT
          MJN    LCW2        IF END OF LOAD
          AOML   SCMT+CMIP.  INCREMENT CONTROLWARE ADDRESS
          LMC    RR
          LRD    CN
          CRDL   CM
          LDDL   CM
          RJM    BAP         BUILD ADDRESS PAIRS
          LDDL   CM+1
          RJM    BAP         BUILD ADDRESS PAIRS
          LDDL   CM+2
          RJM    BAP         BUILD ADDRESS PAIRS
          LDDL   CM+3
          RJM    BAP         BUILD ADDRESS PAIRS
          LJM    CKQ         COMPLETE CHARACTER QUEUE

 LCW2     LDC    CCWL        MOVE CONTROLWARE STARTUP SEQUENCE TO BUFFER
          STD    T1
 LCW3     LDI    T1          MOVE NEXT WORD
          STIAO  BP
          AOD    T1          ADVANCE INDEX
          LMC    CCWL+CCWL.L
          NJN    LCW3        IF MORE WORDS TO MOVE
          LDN    1           NOTIFY HOST TO REFRESH DISPLAYS
          STM    SCMT+CHARS.
          STM    SCMT+KBIP.
          LDN    0
          STM    SCMT+KBOP.  RESET KEYBOARD BUFFER
          STM    SCMT+CHARS.+1
          STM    SCMT+CHARS.+2
          STM    SCMT+CHARS.+3
          STML   SCMT+CMBC.  RESET CM BUFFER
          LDML   SCMT+CMBA.
          STML   SCMT+CMIP.
          STML   SCMT+CMOP.
          LDM    SCMT+CMBS.  CLEAR CONTROLWARE LOAD FLAG
          STM    SCMT+CMBS.
          NJN    LCW4        IF BUFFERED I/O ACTIVE
          LDM    SCMT+NCCH.  ADJUST CHANNEL NUMBER
          STD    T0
          LMC    TSJMI
          STML   WFF0
          LDD    T0
          LMC    EJMI
          STM    WFF1
          LDD    T0
          LMC    IANI
          STM    WFFC
          LDC    WFF
          STI    PT          SET RTNP.
          LJM    CKQ         RETURN

 LCW4     CALL   ICLX        RETURN TO BUFFERED I/O OVERLAY
 SEQ      SPACE  4,10
**        CONSOLE CONTROLWARE LOAD PREAMBLE/POSTAMBLE SEQUENCES.


          CODE   ASCII

 CWLP     BSS    0           CONTROLWARE LOAD PREAMBLE
          CON    0#0D,0#0D   TERMINATE ANY POSSIBLE FUNCTION
          CON    0#1E,0#33   DISABLE HOST LOADED CODE
          CON    0#1E,0#12   SET 80 CHARACTER LINE
          CON    0#48          (CLEARS SCREEN)
 CWLP.T   EQU    *-CWLP

          CON    0#02,0#1E   PLACE MESSAGE ON SCREEN
          CON    0#1E
          CON    1RL+40,1RO+40
          CON    1RA+40,1RD+40
          CON    1RI+40,1RN+40
          CON    1RG+40,1R +40
          CON    1RC+40,1RO+40
          CON    1RN+40,1RS+40
          CON    1RO+40,1RL+40
          CON    1RE+40,1R +40
          CON    1RC+40,1RO+40
          CON    1RN+40,1RT+40
          CON    1RR+40,1RO+40
          CON    1RL+40,1RW+40
          CON    1RA+40,1RR+40
          CON    1RE+40
          CON    0#1E,0#09   START CONTROLWARE LOAD
          CON    0#78,0#32
 CWLP.L   EQU    *-CWLP

 CCWL     BSS    0           CONTROLWARE STARTUP SEQUENCE
          CON    0#0D,0#0D   TERMINATE CONTROLWARE LOAD
          CON    0#1E,0#12   START CONTROLWARE
          CON    0#78
 CCWL.L   EQU    *-CCWL

          CODE   *
 BAP      SPACE  4,10
**        BAP - BUILD ADDRESS PAIRS.
*
*         ENTRY  (A) = 16 BIT ADDRESS.
*                (BP) = CHARACTER BUFFER POINTER.
*
*         EXIT   (BP) = INCREMENTED BY 4.
*
*         USES   T1.


 BAP      SUBR               ENTRY/EXIT
          STD    T1
          SHN    -10         TRANSLATE UPPER BYTE TO 20, 60 PAIR
          SHN    22-4
          ADN    0#20
          STI    BP
          SHN    4-22
          ADC    0#60
          STM    1,BP
          LDD    T1          TRANSLATE LOWER BYTE TO 20, 60 PAIR
          SHN    -4
          LPN    0#F
          ADN    0#20
          STM    2,BP
          LDD    T1
          LPN    0#F
          ADC    0#60
          STM    3,BP
          LDN    4           UPDATE CHARACTER QUEUE POINTER
          RAD    BP
          UJN    BAPX        RETURN
*copy     cti$sci_scd_common_routines
 RKV      SPACE  4,10
**        RKV - RETURN KEYBOARD VALUE.
*
*         OUTPUT CHARACTER READ FROM THE TO THE DISPLAY PROGRAM.
*
*         ENTRY  (PT) = MODE TABLE ADDRESS.
*
*         CALLS  CKC, TAD.
*
*         TIMING    BECAUSE OF THE COMMUNICATION WITH THE NOS DISPLAY
*                DRIVER THE CHANNEL INSTRUCTIONS MUST BE SET UP BEFORE
*                THE CHARACTER IS RETURNED.  OTHERWISE NOS MAY ASK
*                FOR ANOTHER CHARACTER BERFORE SCI HAS AN OPPORTUNITY
*                TO RETURN TO THE MUX ROUTINE FOR IT.


 RKV      BSS    0
          LDM    SCMT+NCCH.  ADJUST CHANNEL NUMBER
          STD    T0
          LMC    OANI
          STM    RKVA
          LDD    T0
          LMC    FJMI
          STM    RKVB
          LDD    T0          ADJUST CHANNEL NUMBER IN *WFF*
          LMC    TSJMI
          STML   WFF0
          LDD    T0
          LMC    EJMI
          STM    WFF1
          LDD    T0
          LMC    IANI
          STM    WFFC
          LDN    0
          STM    SCMT+DATA.  CLEAR DATA WORD
          RJM    GKC         GET KEYBOARD CHARACTER
          RJM    TAD         TRANSLATE ASCII TO DISPLAY
 RKVA     OAN    CH
 RKVB     FJM    *,CH
*         UJN    WFF         WAIT FOR FUNCTION
          ERRNG  WFF-*       CODE ASSUMES *WFF* IS ADJACENT
 WFF      SPACE  4,10
**        WFF - WAIT FOR FUNCTION.
*
*         CHECK FOR A VALID DISPLAY FUNCTION.
*
*         ENTRY  (PT) = MODE TABLE ADDRESS.
*
*         EXIT   TO *TFN* IF VALID FUNCTION.
*
*         RESET  RTNP.  TO   WFF0


 WFF      BSS    0           WAIT FOR FUNCTION
          LDC    WFF0
          STI    PT          AS NEXT ROUTINE
          LDML   SCMT+DATA.
          UJN    WFF2        CHECK FOR FUNCTION

 WFF0     FSJM   SMPX,CH     IF CHANNEL NOT AVAILABLE
 WFF1     EJM    SMPX,CH     IF NO DATA ON CHANNEL
 WFFC     IAN    CH
 WFF2     STML   SCMT+TEMP.  SAVE CHANNEL DATA
          SHN    21-17
          PJN    WFF1        IF NOT A VALID FUNCTION
          LJM    TFN         TRANSLATE FUNCTION
 BNO      SPACE  4,10
**        BNO - BEGIN NORMAL OUTPUT.
*
*         ENTRY  (PT) = MODE TABLE ADDRESS.
*
*         EXIT   TO *NCO*.
*
*         RESETS RTNP.  TO   NCO
*
*         CALLS  TCD.


 BNO      BSS    0           BEGIN NORMAL OUTPUT
          LDML   SCMT+DATA.
          RJM    TCD         TRANSLATE CHANNEL DATA
          LDC    NCO         *NORMAL CHANNEL OUTPUT*
          STI    PT          AS NEXT ROUTINE
*         UJN    NCO         START NORMAL CHANNEL OUTPUT
          ERRNZ  NCO-*       CODE ASSUMES *NCO* IS ADJACENT
 NCO      SPACE  4,10
**        NCO - NORMAL CHANNEL OUTPUT.
*
*         READ DATA FROM CHANNEL AND TRANSLATE IT FOR THE TWO PORT MUX.
*
*         ENTRY  (PT) = MODE TABLE ADDRESS.
*
*         EXIT   TO *TFN* IF FUNCTION ENCOUNTERED.
*                TO *SMPX* IF CHARACTERS TO BE OUTPUT
*
*         CALLS  FCN, TCD.


 NCO      BSS    0           NORMAL CHANNEL OUTPUT
          LDM    SCMT+NCCH.  ADJUST CHANNEL NUMBER
          STD    T0
          LMC    TSJMI
          STML   NCO1
          LDD    T0
          LMC    EJMI
          STM    NCOB
          LDD    T0
          LMC    IANI
          STM    NCOC
          LDM    SCMT+CHRC.
          ZJN    NCO1        IF MUX IS READY
          LJM    SMPX        RETURN

 NCO1     FSJM   SMPX,CH     IF CHANNEL NOT AVAILABLE
 NCOB     EJM    SMPX,CH     IF NO DATA ON CHANNEL
 NCOC     IAN    CH
          STML   SCMT+TEMP.
          SHN    21-17
          MJP    TFN         IF IT IS A FUNCTION
 NCO2     LDML   SCMT+TEMP.  RESTORE CHANNEL DATA VALUE
          RJM    TCD         TRANSLATE CHANNEL DATA
          LDD    BP          CURRENT CHARACTER BUFFER POSITION
          SBD    BA
          ZJN    NCO1        IF NO CHARACTERS TO OUTPUT
          LJM    CKQ         RETURN

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (SCI SCD/NOS BUFFERED ROUTINES)
 NOSBI    SPACE  4,10
**        SCD/NOS BUFFERED INTERFACE ROUTINE LIST.


 NOSBI    ROUTINE
          LOC    0
 S.LCW    CON    ICL         INITIATE CONTROLWARE LOAD
 S.WFK    CON    WFK         WAIT FOR KEYBOARD ROUTINE
 S.NIO    CON    BBO         BEGIN BUFFERED I/O
 S.PIO    CON    BPO         BEGIN PRIORITY I/O
          LOC    *O
 ICL      SPACE  4,10
**        ICL - INITIATE CONTROLWARE LOAD.
*
*         CALLS  *PCL*.
*
*         NOTE   THIS ROUTINE MUST BE LOCATED AT *OVLA+4*.


 ICL      CALL   PCL
          ERRNZ  ICL-PCL     *PCL* MISMATCH WITH CHANNEL OVERLAY

 ICLX     ROUTINE            *PCL* RETURNS HERE

          LDC    WFF         WAIT FOR FUNCTION
          STI    PT
          LJM    CKQ         WAIT FOR CONTROLWARE LOADING TO COMPLETE
*copy     cti$sci_scd_common_routines
 WFK      SPACE  4,10
**        WFK - WAIT FOR KEYBOARD.
*
*         WAIT UNTIL A KEY IS TYPED OR THE CM BUFFER IS EMPTY.
*
*         ENTRY  (PT) = MODE TABLE ADDRESS.
*
*         EXIT   TO *WFF* IF COMPLETE.
*                TO *ECB* IF CM BUFFER NOT EMPTY AND NO KEYBOARD INPUT.
*
*         CALLS  GKC, TAD.
*
*         TIMING BECAUSE OF THE COMMUNICATION WITH THE NOS DISPLAY
*                DRIVER THE CHANNEL INSTRUCTIONS MUST BE SET UP BEFORE
*                THE CHARACTER IS RETURNED.  OTHERWISE NOS MAY ASK
*                FOR ANOTHER CHARACTER BERFORE SCI HAS AN OPPORTUNITY
*                TO RETURN TO THE MUX ROUTINE FOR IT.


 WFK      BSS    0
          LDM    SCMT+NCCH.  ADJUST CHANNEL NUMBER
          STD    T0
          LMC    OANI
          STM    WFK2
          LDD    T0
          LMC    FJMI
          STM    WFKB
          LDD    T0          ADJUST CHANNEL NUMBER IN *WFF*
          LMC    TSJMI
          STML   WFF0
          LDD    T0
          LMC    EJMI
          STM    WFF1
          LDD    T0
          LMC    IANI
          STM    WFFC
          RJM    GKC         GET KEYBOARD CHARACTER
          NJN    WFK1        IF CHARACTER INPUT
          LDM    SCMT+CMBC.
          ZJN    WFK2        IF BUFFERED OUTPUT COMPLETE
          LJM    ECB         EMPTY CM BUFFER

 WFK1     RJM    TAD         TRANSLATE ASCII TO DISPLAY
 WFK2     OAN    CH
 WFKB     FJM    *,CH
          LDN    0
          STM    SCMT+DATA.  CLEAR FUNCTION
*         UJN    WFF         WAIT FOR FUNCTION
          ERRNZ  WFF-*       CODE ASSUMES *WFF* IS ADJACENT
 WFF      SPACE  4,10
**        WFF - WAIT FOR FUNCTION.
*
*         WAIT FOR A VALID 7000 TYPE FUNCTION.
*
*         EXIT   TO *TFN* WHEN FUNCTION ENCOUNTERED.
*                TO *ECB* IF NO VALID FUNCTION ON CHANNEL.
*
*         EXIT   (RTNP.) = *WFF0*.


 WFF      BSS    0           WAIT FOR FUNCTION
          LDC    WFF0
          STI    PT          AS NEXT ROUTINE
          LDML   SCMT+DATA.
          UJN    WFF2        CHECK FOR FUNCTION

 WFF0     FSJM   ECB,CH      IF CHANNEL NOT AVAILABLE
 WFF1     EJM    ECB,CH      IF NO DATA ON CHANNEL
 WFFC     IAN    CH
 WFF2     STML   SCMT+TEMP.  SAVE CHANNEL DATA
          SHN    21-17
          PJN    WFF1        IF NOT A VALID FUNCTION
          LJM    TFN         TRANSLATE FUNCTION
 BBO      SPACE  4,10
**        BBO - BEGIN BUFFERED OUTPUT.
*
*         THIS WAITS FOR THE CM BUFFER TO BE EMPTIED AND THEN RESETS
*         THE BUFFER POINTERS, PROCESSES THE FIRST SCREEN SELECT
*         FUNCTION, AND CALLS *BUFFERED CHANNEL OUTPUT*.
*
*         EXIT   TO *BCO3* WHEN CM BUFFER EMPTY.
*                TO *ECB* WHEN CM BUFFER NOT EMPTY.
*
*         RESETS RTNP.  TO   BCO.
*
*         USES   T5.


 BBO      BSS    0
          LDM    SCMT+CMBC.
          ZJN    BBO1        IF CM BUFFER EMPTY
          LJM    ECB         EMPTY CM BUFFER

 BBO1     LDC    BCO         *BUFFERED CHANNEL OUTPUT*
          STI    PT          AS NEXT ROUTINE
          LDM    SCMT+CMWP.
          STD    T5
          LDML   SCMT+DATA.
          STIL   T5
          LJM    BCO3        START BUFFERED OUTPUT
 BCO      SPACE  4,10
**        BCO - BUFFERED CHANNEL OUTPUT.
*
*         COPY DATA FROM CHANNEL 10 TO THE CM BUFFER UNTIL A VALID
*         7000 FUNCTION OTHER THAN *SELECT RIGHT* OR *SELECT LEFT*
*         IS ENCOUNTERED OR CM BUFFER BECOMES FULL.
*
*         EXIT   TO *TFN* IF VALID FUNCTION FOUND.
*                TO *ECB* OTHERWISE.
*
*         USES   T5.
*
*         CALLS  SPB.


 BCO      BSS    0
          LDM    SCMT+NCCH.  ADJUST CHANNEL NUMBER
          STD    T0
          LMC    TSJMI
          STML   BCOB
          LDD    T0
          LMC    EJMI
          STM    BCO2
          LDD    T0
          LMC    IANI
          STM    BCOC
 BCOB     FSJM   BCO5,CH     IF CHANNEL NOT AVAILABLE
          LDM    SCMT+CMWP.
          STD    T5
 BCO1     LDM    SCMT+CMBS.  TEST FOR BUFFER FULL
          SBM    SCMT+CMBC.
          NJN    BCO2
          LJM    ECB         EMPTY CM BUFFER

 BCO2     EJM    BCO5,CH     IF NOT DATA ON CHANNEL
 BCOC     IAN    CH
          STIL   T5
          SHN    21-17
          MJP    BCO4        IF FUNCTION
 BCO3     AOD    T5
          LPN    3
          NJN    BCO2        IF NOT ON WORD BOUNDARY
          LCN    4
          RAD    T5          RESET ADDRESS
          STM    BCOF
          LDM    SCMT+RRUP.  SET UP R-REGISTER
          STD    W0
          LDM    SCMT+RRLW.
          STD    W1
          LRD    W0
          RJM    SPB         SET PP BOUNDARY
          LDML   SCMT+CMOP.
          LMC    RR
          CWML   **,ON
 BCOF     EQU    *-1
          AOM    SCMT+CMBC.
          AOML   SCMT+CMOP.
          LDML   SCMT+CMBL.  TEST FOR END OF BUFFER
          SBML   SCMT+CMOP.
          PJN    BCO3.1      IF NOT
          LDML   SCMT+CMBA.  ELSE RESET TO FIRST
          STML   SCMT+CMOP.
 BCO3.1   LJM    BCO1        CHECK CHANNEL FOR DATA

 BCO4     LPC    424*100
          ZJP    BCO3        IF NOT A INPUT/PRIORITY/SPECIAL FUNCTION
          LDD    T5
          STM    SCMT+CMWP.
          LDIL   T5
          STML   SCMT+TEMP.  SAVE CHANNEL DATA
          SHN    21-17
          LJM    TFN         TRANSLATE FUNCTION

 BCO5     LDD    T5          GET CURRENT DATA POINTER
          STM    SCMT+CMWP.
*         LJM    ECB         EMPTY CM BUFFER
          ERRNZ  ECB-*       CODE ASSUMES *ECB* IS ADJACENT
 ECB      SPACE  4,10
**        ECB - EMPTY CM BUFFER.
*
*         READ CHANNEL DATA FROM THE CM BUFFER AND TRANSLATE IT FOR
*         THE CONSOLE.
*
*         EXIT   TO *CKQ* TO COMPLETE THE CHARACTER BUFFER.
*                TO *SMPX* IF LAST TRANSLATION NOT OUTPUT.
*
*         CALLS  TCD.
*
*         USES   CM - CM+3, T5.


 ECB      BSS    0
          LDM    SCMT+CHRC.
          ZJN    ECB1        IF MUX READY FOR MORE OUTPUT
          LJM    SMPX        RETURN

 ECB1     SOM    SCMT+CMBC.  DECREMENT DATA COUNT
          PJN    ECB3        IF DATA TO OUTPUT
          LDN    0
          STM    SCMT+CMBC.  RESET DATA COUNT
          LDM    SCMT+CMWP.  SET STARTING BUFFER ADDRESS
          SCN    3
          STD    T5
          LDM    SCMT+CMWP.
 ECB2     LPN    3
          NJN    ECB2.2
          LJM    ECB4        RETURN
 ECB2.2   LDIL   T5
          RJM    TCD         TRANSLATE CHANNEL DATA
          AOD    T5
          SOM    SCMT+CMWP.
          UJN    ECB2        LOOP

 ECB3     LDM    SCMT+RRUP.  SET UP R-REGISTER
          STD    W0
          LDM    SCMT+RRLW.
          STD    W1
          LRD    W0
          LDML   SCMT+CMIP.  GET BUFFER ADDRESS
          ADC    RR          FORM CM ADDRESS OF INPUT BUFFER WORD
          CRDL   CM
          AOML   SCMT+CMIP.  INCREMENT BUFFER ADDRESS
          LDML   SCMT+CMBL.  TEST FOR END OF BUFFER
          SBML   SCMT+CMIP.
          PJN    ECB3.1      IF NOT
          LDML   SCMT+CMBA.  ELSE RESET TO BEGINNING
          STML   SCMT+CMIP.
 ECB3.1   LDDL   CM
          RJM    TCD         TRANSLATE FIRST WORD
          LDDL   CM+1
          RJM    TCD         TRANSLATE SECOND WORD
          LDDL   CM+2
          RJM    TCD         TRANSLATE THIRD WORD
          LDDL   CM+3
          RJM    TCD         TRANSLATE FOURTH WORD
 ECB4     LJM    CKQ         UPDATE CHARACTER QUEUE AND RETURN

          OVERFLOW  SCMT     CHECK FOR OVERFLOW

          ENDX
