
          IDENT  SCI,70B
          CIPPU  J
          MEMSEL 8
          BASE   MIXED
 SCILVL   MICRO  1,, 11      *SCI* RELEASE LEVEL MICRO
          TITLE CTM$SYSTEM CONSOLE INTERFACE (SCI - LEVEL "SCILVL").
          COMMENT *SMD* LVL="SCILVL"
          COMMENT COPYRIGHT FIDES INFORMATION SERVICES. 2003
 CTMSCI   SPACE  4,10
***       SCI - SYSTEM CONSOLE INTERFACE.
 CTMSCI   SPACE  4,10
***       CTM$SYSTEM CONSOLE INTERFACE.
*
*         *SCI* IS COMPRISED OF THE FUNCTIONALITIES OF THE OLD *VPB*
*         (NOS/VE PP BOOT), *SCD* (SYSTEM CONSOLE DRIVER), AND *MDD*
*         (MONITOR DISPLAY DRIVER) PROGRAMS.
*
*         *SCI* SUPPLIES THE NOS AND NOS/VE OPERATING SYSTEMS WITH A CC634B
*         (CDC721) CONSOLE, AND SUPPLIES NOS, NOS/BE, AND NOS/VE WITH ANALYST OR
*         MAINTENANCE FUNCTIONS ON THE SAME OR A DIFFERENT CONSOLE.  *SCI*
*         SUPPLIES THE FUNCTIONS PROVIDED BY DISCRETE PROGRAMS *SCD*, *VPB*,
*         AND *MDD* IN EARLIER LEVELS OF CIP.
 HISTORY  SPACE  4,10
***       *SCI* RELEASE HISTORY.
*
*         LEVEL 01 - RELEASED WITH CIP007 AND NOS/VE 1.2.2, APRIL 1987.
*
*         LEVEL 99 - CONTAINED FIXES FOR A VARIETY OF PROBLEMS IN THE
*                    ORIGINAL CIP007 RELEASE.  CIP007 RE-RELEASED, JUNE 1987.
*
*         LEVEL 02 - RELEASED WITH CIP008 AND NOS/VE 1.2.3, SEPT. 1987.
*
*         LEVEL 98 - CONTAINED LRZ DUAL I4 PRE-RELEASE CODE, OCT. 1987.
*
*         LEVEL 97 - CONTAINED FIX FOR NV03447 IN WHICH SCI WAS CORRUPTING
*                    BYTE 0 OF D7ST.  SENT TO SITE UMTL, FEB. 1988.
*
*         LEVEL 03 - RELEASED WITH CIP009 AND NOS/VE 1.3.1, APRIL 1988.
*
*         LEVEL 96 - RELEASED WITH CIP LEVEL 710, SEPTEMBER 1988.
*
*         LEVEL 04 - RELEASED WITH CIP LEVEL 716 AND NOS/VE 1.4.1, DECEMBER 1988.
*
*         LEVEL 05 - RELEASED WITH CIP LEVEL 727 AND NOS/VE 1.4.2, JUNE 1989.
*
*         LEVEL 06 - RELEASED WITH CIP LEVEL 739 AND NOS/VE 1.5.1, DECEMBER 1989.
*
*         LEVEL 07 - RELEASED WITH CIP LEVEL 757 AND NOS/VE 1.5.3, SEPTEMBER 1990.
*
*         LEVEL 08 - RELEASED WITH CIP LEVEL 765 AND NOS/VE 1.5.3, FEBRUARY 1991.
*
*         LEVEL 95 - CONTAINED FIX FOR SCI FAILING TO RELOCATE (NV0U996).
*                    SENT TO SITE FOR NV08708, APRIL, 1991.
*
*         LEVEL 94 - CONTAINED FIX FOR SCI NOT WORKING WITH OLD NOS/BE SYSTEM.
*                    SENT TO SITE FOR NV08832, APRIL, 1991.
*
*         LEVEL 93 - COMBINED FIX FOR NV0U996 AND NV08832 IN BCU L765AB AND LATER
*                    L765 BCU-S.
*
*         LEVEL 09 - RELEASED WITH CIP LEVEL 780 AND NOS/VE 1.6.1, SEPTEMBER 1991.
*
*         LEVEL 10 - RELEASED WITH BCU L780AB, FIRST QUARTER 1992.
*
*         LEVEL 11 - RELEASED WITH NEPTUN, FIRST QUARTER 2003.
 COMMON   SPACE  4,10
*         COMMON DECKS.


*COPY     CTC$BOOT_CONTROL_TABLE
*COPY     CTC$EI_CONTROL_BLOCK
*COPY     DSA$HARDWARE_TABLE_DEFINITIONS
*COPY     DSA$VE_REQUESTS_TO_DFT
*COPY     DSC$PP_MR_AND_TPM_CONSTANTS
*COPY     DSI$MAINTENANCE_REGISTER_MACROS
*COPY     DSI$PP_INSTRUCTION_MNEMONICS
*COPY     DSI$PP_MACROS
          TITLE  OVERVIEW DOCUMENTATION.
 PRESET   SPACE  4,10
***       *SCI* PRESET.
*
*         WHEN *SCI* PRESET IS LOADED FROM THE CIP AREA OF CENTRAL
*         MEMORY, CERTAIN INFORMATION IS PASSED IN DIRECT CELLS:
*
*         ENTRY  (27) = 0, IF INITIATED BY *CTI*.
*                     = PP NUMBER, IF INITIATED BY *SDA* IN DUAL-STATE.
*                     = 2000 + PP NUMBER, IF INITIATED BY C170 *X.MDD*.
*                     = 4000 + PP NUMBER, IF RELOCATED BY *DFT*.
*                     = 177777, IF INITIATED BY THE SERVICE PROCESSOR
*                            IN A SERVICE PROCESSOR ENVIRONMENT.
*                     = 174000, IF RESTARTED BY SERVICE PROCESSOR.
*                (30 - 32) = R-POINTER TO *SCI* CODE IN CIP AREA.
*                (33) = 1 IF INITIATED FOR *UTILITY MDD* MODE.
*                     = 0 FOR ALL OTHER MODES.
*                (34 - 36) = R-POINTER TO *CIP* DIRECTORY.
*
*         IN A NON-CYBER 2000 ENVIRONMENT:
*
*         *SCI* PRESET LOOKS AT THE MRT TO DETERMINE IN WHICH MODE(S) IT
*         SHOULD FUNCTION.  DEADSTART *MDD* MODE TAKES PRECEDENCE AND IS
*         PERFORMED BEFORE *VPB* DEADSTART FUNCTIONS ARE INITIATED.  TO
*         DEADSTART STANDALONE NOS/VE, THE *F7* FUNCTION KEY ON THE *MDD*
*         CONSOLE MUST BE USED.
*
*         THE PP MEMORY IS ZEROED THEN THE RESIDENT OVERLAY IS LOADED AND
*         CONTROL IS PASSED TO THE OVERLAY WHICH ACQUIRES TPM ACCESS FOR
*         THE *MDD* AND/OR *SCD* MODES.
*
*         IN A CYBER 2000 ENVIRONMENT:
*
*         *SCI* PRESET READS REQUIRED INFORMATION FROM THE BOOT CONTROL
*         TABLE AND PERFORMS *VPB* FUNCTIONS FOR THE CYBER 2000 BEFORE
*         CONTINUING ON TO NOS/VE *SCD* MODE.  *MDD* AND NOS *SCD* MODES
*         ARE NOT VALID MODES ON A CYBER 2000 MAINFRAME.
 IDLE     SPACE  4,10
***       IDLE LOOP AND RESIDENT ROUTINES.
*
*         BY SERVICING BOTH *SCD* AND *MDD* ON EVERY PASS THROUGH THE IDLE
*         LOOP, EACH OF THESE MODES IS ENSURED THAT IT HAS AN OPPORTUNITY
*         TO PROCESS ANY INPUT IT HAS RECEIVED FROM THE TWO PORT MUX,
*         CENTRAL MEMORY OR FROM THE OPERATING SYSTEM.
*
*         BY ALTERNATING ACCESS TO THE TWO PORT MUX BOTH *MDD* AND *SCD*
*         HAVE A CHANCE TO RECEIVE INPUT OR HANDLE ANY OUTPUT THEY HAVE
*         TO THE TERMINAL (CONSOLE).
*
*         THE *TIM* SUBROUTINE USES CHANNEL 14 TO MAINTAIN A REAL-TIME
*         CLOCK MECHANISM.  TABLE *ACTB* PROVIDES A MECHANISM TO EXECUTE
*         CERTAIN ROUTINES ON A TIMED PERIODIC BASIS.  THE ROUTINES IN THIS
*         TABLE HANDLE INACTIVE *SCD* STATES, CHECK IF THERE IS A NEED TO
*         DEADSTART OR TERMINATE NOS/VE, SHARE THE TPM WITH OTHER TPM-ACCESS
*         PP ROUTINES, AND CHECK FOR CHANGES TO THE *SCI* PARAMETER TABLE
*         IN CENTRAL MEMORY.
          SPACE  4,10
***       REQUIRED REFERENCES.
*
*         CDC 721 SYSTEM CONSOLE.............................ARH5782.
*         CDC 721 AUGMENTATION CONTROLWARE ERS...............ARH6192.
*         SCI/MONITOR DISPLAY DRIVER ERS.....................ARH7881.
*         NOS/VE SYSTEM CONSOLE DESIGN DIRECTION.............ARH6451.
*         SCD INTERFACE SPECIFICATION........................ARH5783.
*         CTI INTERFACE SPECIFICATION........................ARH2984.
*         DFT/OS INTERFACE SPECIFICATION - TABLE FORMATS.....ARH6853.
          SPACE  4,10
***       DICTIONARY.
*
*         EICB - ENVIRONMENTAL INTERFACE CONTROL BLOCK.
*         SCDCB - SCD COMMUNICATIONS BLOCK WITH NOS/VE.
*         TPM - TWO PORT MUX.
*         SCIPT - SCI PARAMETER TABLE.
          TITLE  MONITOR DISPLAY DRIVER (*MDD*) DOCUMENTATION.
 MDD      SPACE  4,10
***       MONITOR DISPLAY DRIVER (*MDD*) MODE.
*
*         *MDD* IS BROKEN INTO TWO MAIN OVERLAY FUNCTIONALITIES.  THESE ARE
*         THE RESIDENT *MDD* CODE AND SEVERAL *MDD* OVERLAYS.
*
*         *MDD* RESIDENT CONTAINS CODE WHICH IS USED BY COMMAND OVERLAYS
*         AND CODE USED TO COMPUTE THE ROUTINE NEEDED BY A NEW COMMAND.
*
*         OTHER OVERLAYS CONTAIN THE CODE TO EXECUTE SPECIFIC COMMANDS AND
*         AN OVERLAY WHICH CONTAINS A LIST OF COMMANDS AND PARAMETERS
*         FOR A SPECIFIC MAINFRAME.
 TABLES   SPACE  4,10
***       *MDD* TABLE STRUCTURES.
*
*         *MDD* USES SEVERAL TABLES TO PROCESS COMMANDS.  EACH COMMAND IS
*         DESCRIBED BY A COMMAND TABLE ENTRY, WHICH MAY HAVE ONE OR MORE
*         PARAMETERS, AND BY A HELP ENTRY.
*
 CMND     SPACE  4,20
***       *MDD* COMMAND TABLE STRUCTURE.
*
*         COMMAND TABLE ENTRIES ARE 5 WORDS IN LENGTH:
*
* CMND    16/ *XX*
* CMND+1  10/ VALID, 6/ OVL
* CMND+2  4/, 12/ ADDR
* CMND+3  16/ PTBL
* CMND+4  16/ DTYP
*
*         XX = COMMAND MNEMONIC.
*         VALID = BIT MASK INDICATING VALID MAINFRAME(S).
*         OVL = OVERLAY NUMBER FOR COMMAND PROCESSOR.
*         ADDR = ADDRESS OF COMMAND PROCESSOR.
*         PTBL = ADDRESS OF PARAMETER TABLE FOR THIS COMMAND.
*         DTYP = NUMERIC PARAMETER DECODE TYPE.
 PRMT     SPACE  4,20
***       *MDD* PARAMETER TABLE STRUCTURE.
*
*         PARAMETER TABLE ENTRIES HAVE TWO FORMATS:
*
*                FORMAT 1: USED FOR NON-KEYWORD PARAMETERS:
*
* PRMC    4/, 1/ 0, 11/ SIZE
* PRMC+1  16/ ETBL
*
*         SIZE = SIZE OF CONVERTED PARAMETER VALUE IN PP WORDS.
*         ETBL = ADDRESS OF EQUIVALENCE TABLE.
*
*                FORMAT 2: USED FOR PARAMETERS WITH KEYWORD VALUES:
*
* PRMC    4/, 1/ 1, 11/ SIZE
* PRMC+1  16/ ETBL
* PRMC+2  16/ ADDR
*
*         SIZE = SIZE OF CONVERTED PARAMETER VALUE IN PP WORDS.
*         ETBL = ADDRESS OF EQUIVALENCE TABLE.
*         ADDR = ADDRESS OF NEXT PARAMETER TABLE (FORWARD LINK).
 ETBL     SPACE  4,20
***       *MDD* EQUIVALENCE TABLE STRUCTURE.
*
*         EQUIVALENCE TABLE ENTRIES ARE 3 WORDS IN LENGTH:
*
* ETBL    16/ *XX*
* ETBL+1  16/ PTBL
* ETBL+2  16/ ADDR
*
*         XX = PARAMETER MNEMONIC.
*         PTBL = ADDRESS OF ASSOCIATED PARAMETER TABLE ENTRY.
*         ADDR = ADDRESS OF CONVERTED VALUE.
 HELP     SPACE  4,15
***       *MDD* HELP TABLE STRUCTURE.
*
*         HELP ENTRIES ARE 2 WORDS IN LENGTH:
*
* HELP    16/ VALID
* HELP+1  16/ ADDR
*
*         VALID = BIT MASK INDICATING VALID MAINFRAME(S).
*         ADDR = ADDRESS OF HELP TEXT.
          TITLE  SYSTEM CONSOLE DRIVER (*SCD*) DOCUMENTATION.
 SCD      SPACE  4,10
***       SYSTEM CONSOLE DRIVER (*SCD*) MODE.
*
*         *SCD* PROVIDES THE INTERFACE TO THE CC634B (CDC 721) TERMINAL
*         FOR THE OPERATING SYSTEM(S).
*
*         FOR THE C170 BASED OPERATING SYSTEM, *SCD* TRANSLATES CC545 LIKE
*         FUNCTIONS AND DATA INTO A USABLE FORM ON THE CC634B.  THIS
*         TRANSLATION IS AIDED THROUGH CONTROLWARE AUGMENTATION SOFTWARE
*         IN THE CC634B THAT *SCD* DOWNLOADS WHEN CONFIGURING THE TERMINAL.
*
*         FOR THE C180 BASED OPERATING SYSTEM, *SCD* READS FROM CENTRAL
*         MEMORY TO OBTAIN COMMANDS AND POINTERS TO LINES TO BE OUTPUT TO
*         THE CC634B.  NO CONTROLWARE IS DOWNLOADED TO THE CC634B.
 CC545    SPACE  4,10
***       CC545 TERMINAL EMULATION.
*
*         DATA RECEIVED FROM THE OPERATING SYSTEM IS IN THREE CLASSES:
*         CC545 LIKE FUNCTIONS -
*                160400 = READ KEYBOARD                    (7020 * 2**4).
*                160000 = SELECT OUTPUT LEFT               (7000 * 2**4).
*                162000 = SELECT OUTPUT RIGHT              (7100 * 2**4).
*                160100 = SELECT PRIORITY OUTPUT LEFT      (7004 * 2**4).
*                162100 = SELECT PRIORITY OUTPUT RIGHT     (7104 * 2**4).
*                170020 = SELECT *SCD*INITIALIZATION       (7401 * 2**4).
*                170040 = SET CHANNEL 10 CHANNEL FLAG      (7402 * 2**4).
*
*         CC634B SPECIFIC FUNCTIONS -
*                010000 = ERASE TO END OF LINE              (400 * 2**4).
*                010020 = CLEAR HIDDEN BUFFER               (401 * 2**4).
*                010040 = RESET DISPLAY PAGE SELECTION      (402 * 2**4).
*                010060 = TRANSFER HIDDEN TO VISIBLE        (403 * 2**4).
*                010100 = TRANSFER AND CLEAR                (404 * 2**4).
*                010120 = NEXT WORD ON CH. IS SPECIAL CHAR. (405 * 2**4).
*                010140 = START INVERSE ON PREV. CHARACTER  (406 * 2**4).
*                010160 = END INVERSE ON NEXT CHARACTER     (407 * 2**4).
*                010200 = START UNDERSCORE                  (410 * 2**4).
*                010220 = END UNDERSCORE                    (411 * 2**4).
*                010240 = START BLINK                       (412 * 2**4).
*                010260 = END BLINK                         (413 * 2**4).
*                010300 = START REDUCED INTENSITY           (414 * 2**4).
*                010320 = END REDUCED INTENSITY             (415 * 2**4).
*                010340 = START INVERSE/UNDERSCORE          (416 * 2**4).
*                010360 = END INVERSE/UNDERSCORE            (417 * 2**4).
*                010400 = NO-OP                             (420 * 2**4).
*
*         CC545 TYPE DATA.
*                0000 - 5777 = TWO DISPLAY CODE CHARACTERS.
*                6000 - 6777 = Y-POSITION CHANGE.
*                7000 - 7777 = X-POSITION CHANGE.
          TITLE  NOS/VE PP BOOTSTRAP (*VPB*) DOCUMENTATION.
 VPB1     SPACE  4,10
***       NOS/VE PP BOOT (*VPB*) MODE IN A NON-CYBER 2000 ENVIRONMENT.
*
*         *VPB* MODE IS DIVIDED INTO TWO LOGICAL PIECES; A DEADSTART PIECE
*         WHICH IS IMPLEMENTED AS THREE OVERLAYS AND A TERMINATION PIECE
*         IMPLEMENTED AS TWO OVERLAYS.  *VPB* CODE OCCUPIES THE AREA
*         NORMALLY OCCUPIED BY *MDD* RESIDENT AS WELL AS THE OVERLAY AREA.
*         WHILE *VPB* IS ACTIVE, NEITHER *MDD* NOR *SCD* MODES ARE ACTIVE.
*         THE ONE EXCEPTION IS WHILE *VPB* MODE IS WAITING FOR *DROPVE* OR
*         TERMINATE BITS IN THE EICB TO CHANGE; *VPB* MODE IS ACTIVATED ONCE
*         A SECOND BUT RELINQUISHES CONTROL IF FURTHER DELAY IS REQUIRED.
*
*         *VPB* DEADSTART CODE CONTAINS ALL THE PP ROUTINES REQUIRED TO
*         HANDLE STANDALONE AND DUAL-STATE DEADSTARTS AND RECOVERIES.
*
*         *VPB* TERMINATION CODE CONTAINS CODE TO LOGICALLY TERMINATE NOS/VE
*         AND, IN A DUAL-STATE ENVIRONMENT, TO RESTART C170 STANDALONE MODE.
 VPB2     SPACE 4,10
***       NOS/VE PP BOOT (*VPB*) MODE IN A CYBER 2000 ENVIRONMENT.
*
*         *VPB* MODE IS ONE LOGICAL DEADSTART PIECE WHICH IS IMPLEMENTED AS
*         ONE OVERLAY.  IT RESIDES IN THE UPPER 4K OF THE PP AND CONTAINS
*         ALL OF THE ROUTINES REQUIRED TO HANDLE NOS/VE STANDALONE DEADSTART.
*
*         *VPB* TERMINATION CODE IS NOT EXECUTED IN A CYBER 2000 ENVIRONMENT.
          TITLE  MEMORY LAYOUT.
 MEMORY   SPACE  4,10
***       MEMORY LAYOUT.
*
*         0000   +-----------------------------------------------+
*                :  DIRECT CELLS                                 :
*         0100   +-----------------------------------------------+
*                :  *SCI* IDLE LOOP AND RESIDENT ROUTINES.       :
*         OVLM   +-----------------------------------------------+
*                :  *MDD* RESIDENT, IF *MDD* MODE IS ACTIVE.     :
*                :  THIS AREA IS ALSO TEMPORARILY USED FOR *VPB* :
*                :  CODE, ALONG WITH THE *OVLA* OVERLAY AREA, IF :
*                :  NOS/VE DEADSTART OR TERMINATION IS ACTIVE.   :
*         OVLA   +-----------------------------------------------+
*                :  *MDD* COMMAND PROCESSORS, *SCD* CODE, AND    :
*                :  TRANSIENT *SCI* OVERLAYS.  DURING NOS/VE     :
*                :  DEADSTART AND TERMINATION, *VPB* CODE USES   :
*                :  BOTH THIS AREA AND THE *MDD* RESIDENT AREA.  :
*                :  IF AN *MDD* OVERLAY MUST REGAIN CONTROL      :
*                :  AFTER EXITING TEMPORARILY TO THE MAIN LOOP,  :
*                :  TYPICALLY WHEN DOING TERMINAL OUTPUT, IT     :
*                :  MUST SET *OVLP* NONZERO TO INHIBIT ANY OTHER :
*                :  OVERLAYS FROM BEING LOADED.                  :
*         SCMT   +-----------------------------------------------+
*                :  *SCD* MODE TABLE.                            :
*                +-----------------------------------------------+
*                :  GLOBAL LOCATIONS.                            :
*         MDMT   +-----------------------------------------------+
*                :  *MDD* MODE TABLE.                            :
*                +-----------------------------------------------+
*                :  MEMORY BEYOND THE *MDD* MODE TABLE (UP TO    :
*                :  ADDRESS 10000) CONTAINS ADDITIONAL GLOBAL
*                :  LOCATIONS AND A SCRATCH BUFFER USED FOR      :
*                :  VARIOUS PURPOSES BY SEVERAL MODES OF *SCI*.  :
*                +-----------------------------------------------+
*         7777   :  CYBER 2000 *VPB* DEADSTART OVERLAY.          :
*                +-----------------------------------------------+
          TITLE  MODE TABLES AND GLOBAL LOCATIONS.
 TABLE    SPACE  4,15
***       MODE TABLE DEFINITION.
*
*         A MODE TABLE IS DEFINED FOR BOTH *MDD* AND *SCD*.  THE TWO TABLES
*         EACH CONSIST OF A COMMON PORTION, CONTAINING INFORMATION USED BY
*         BOTH *MDD* AND *SCD*, AND AN EXTENSION, CONTAINING MODE-UNIQUE
*         INFORMATION.  NOTE THAT THERE IS ONLY ONE *SCD* MODE TABLE, EVEN
*         THOUGH *SCD* LOGICALLY CONSISTS OF TWO SUB-MODES, *SCD/NOS* AND
*         *SCD/VE*.
 PTDB.    SPACE  4,45
***       *PTDB.* - MODE STATUS FLAGS.
*
*         ALTHOUGH *PTDB.* IS COMMON TO BOTH *MDD* AND *SCD* MODE TABLES,
*         ITS LAYOUT IS SLIGHTLY DIFFERENT FOR EACH MODE.
*
*         FOR *SCD* MODE, *PTDB.* HAS THE FOLLOWING FORMAT:
*
*         3/, 1/ R, 1/A, 2/ SS, 3/ TT, 3/ CT, 3/ PT
*
*         R = *SCD* HAS PORT(S) RESERVED.
*         A = *SCD* MODE IS ACTIVE (*SCD/NOS*, *SCD/VE*, OR BOTH).
*         SS = *SCD* STATE(S) ACTIVE:
*              1 = *SCD/NOS*.
*              2 = *SCD/VE*.
*              3 = BOTH *SCD/NOS* AND *SCD/VE* (DUAL-STATE CONSOLE).
*         TT = TERMINAL TYPE:
*              0 = NON-CC634B (NON-CDC721) CONSOLE.
*              1 = CC634B (CDC721) CONSOLE.
*         CT = CONTROLWARE TYPE:
*              0 = NO CONTROLWARE (*SCD/VE* ONLY).
*              1 = CC545 CONTROLWARE (*SCD/NOS* OR DUAL-STATE CONSOLE).
*         PT = PORT(S) IN USE:
*              0 = ALL I/O ON PORT ZERO.
*              1 = ALL I/O ON PORT ONE.
*              2 = OUTPUT TO BOTH PORTS, INPUT FROM PORT ZERO.
*              3 = OUTPUT TO BOTH PORTS, INPUT FROM PORT ONE.
*
*         FOR *MDD* MODE, *PTDB.* HAS THE FOLLOWING FORMAT:
*
*         3/, 1/ R, 1/A, 2/ IN, 3/ PT, 3/, 3/ PT
*
*         R = *MDD* HAS PORT(S) RESERVED.
*         A = *MDD* MODE IS ACTIVE.
*         IN = *MDD* INITIATOR:
*              0 = CTI.
*              1 = CYBER 170 OS.
*              2 = NOS/VE.
*         PT = PORT(S) IN USE: (*** NOTE THAT *PT* APPEARS TWICE ***)
*              0 = ALL I/O ON PORT ZERO.
*              1 = ALL I/O ON PORT ONE.
*              2 = OUTPUT TO BOTH PORTS, INPUT FROM PORT ZERO.
*              3 = OUTPUT TO BOTH PORTS, INPUT FROM PORT ONE.
 PTUS.    SPACE  4,25
***       *PTUS.* - PORT STATUS.
*
*         13/ UNUSED, 1/ O1, 1/O0, 1/ IP
*
*         UNUSED = UNUSED BITS, BUT MAY BE NONZERO.
*         O1 = OUTPUT ON PORT ONE IF O1=1.
*         O0 = OUTPUT ON PORT ZERO IF O0=1.
*         IP = INPUT PORT:
*              0 = INPUT FROM PORT ZERO.
*              1 = INPUT FROM PORT ONE.
*
*         NOTE THAT *PTDB.* AND *PTUS.* AS WELL AS THE CODE PROVIDE FOR
*         OUTPUTTING ON BOTH PORTS WHILE INPUTTING FROM ONLY ONE.  THIS
*         *SLAVE CONSOLE* CAPABILITY SHOULD NOT BE CONFUSED WITH A
*         SECONDARY CONSOLE, SINCE ONLY ONE KEYBOARD IS ACTIVE AND BOTH
*         CONSOLES WILL DISPLAY IDENTICAL OUTPUT.  ALSO, NOTE THAT THERE
*         IS CURRENTLY NO PROVISION FOR ACTIVATING THIS MODE, SHORT OF
*         MANUALLY SETTING BITS IN THE CENTRAL MEMORY PARAMETER TABLE.
*
*         THIS CAPABILITY IS UNADVERTISED AND UNVERIFIED.
 RTNP.    SPACE  4,10
***       *RTNP.* - CURRENT EXECUTION ADDRESS FOR MODE.
*
*         *RTNP.* SPECIFIES WHERE MODE EXECUTION IS TO BE RESUMED FROM
*         THE MAIN LOOP.  IT MUST BE THE FIRST ENTRY IN THE TABLE, SO THAT
*         INDIRECT ADDRESSING CAN BE USED TO ACCESS IT.
          EJECT
 MODE     SPACE  4,10
***       MODE TABLE - COMMON PORTION.
*
*         IN ADDITION TO THE FOLLOWING DEFINITIONS WHICH APPLY TO BOTH
*         TABLES, BOTH MODES ALSO DEFINE ADDITIONAL TABLE ENTRIES.


          LIST   G
 BEGIN    BSSN   0
 RTNP.    BSSN   1           PROCESSING ROUTINE ADDRESS
          ERRNZ  RTNP.       *RTNP.* MUST BE FIRST ENTRY IN TABLE
 RTNL.    BSSN   1           ROUTINE LIST ADDRESS
 PTDB.    BSSN   1           PORT DEFINITION BYTE
 PTUS.    BSSN   1           PORTS IN USE
 OFFS.    BSSN   1           OFFSET FROM R-REGISTER
 RRUP.    BSSN   1           R-REGISTER UPPER
 RRLW.    BSSN   1           R-REGISTER LOWER
 NRTP.    BSSN   1           NEXT ROUTINE SAVE AREA
 RSMC.    BSSN   1           START MULTIPLE CODE (1E(16))
 CHRC.    BSSN   1           CHARACTER COUNT MASTER
 CHR0.    BSSN   1           CHARACTER COUNT PORT 0
 CHR1.    BSSN   1           CHARACTER COUNT PORT 1
 CHP0.    BSSN   1           POINTER TO CHARACTER STRING PORT 0
 CHP1.    BSSN   1           POINTER TO CHARACTER STRING PORT 1
 CHRB.    BSSN   100D        CHARACTER BUFFER (ONE CHAR/WORD)
 CHARS.   BSSN   4           BUFFER TO HOLD 4 CHAR. FROM MUX
 KBIP.    BSSN   1           KEYBOARD BUFFER INPUT POINTER
 KBOP.    BSSN   1           KEYBOARD BUFFER OUTPUT POINTER
 TEMP.    BSSN   1           TEMPORARY DATA
 MTBL.L   BSSN   0           TABLE LENGTH
 END      BSSN
          LIST   *
          EJECT
 SCMT     SPACE  4,10
***       SCMT - *SCD* MODE TABLE EXTENSION.
*
*         NOTE THAT *SCMT* MUST BE INCLUDED IN THE ADDRESS CALCULATION
*         WHEN USING ANY OF THESE WORDS.


 SCMT     EQU    7120

          LIST   G
 BEGIN    BSSN   MTBL.L
 DATA.    BSSN   1           INPUT DATA FROM NOS
 NRTL.    BSSN   1           NOS ROUTINE LIST
 RKIA.    BSSN   1           WAITING FOR NOS/VE TO ECHO LAST INPUT
 GOTL.    BSSN   1           GOT LAST LINE IN LIST
 SCDS.    BSSN   1           *SCD* STATE (0 = NOS)
 CWLD.    BSSN   1           CONTROLWARE LOADED
 TTOF.    BSSN   1           TRANSLATION TABLE OFFSET
 XPOS.    BSSN   1           X-POSITION
 YPOS.    BSSN   1           Y-POSITION
 SAVE.    BSSN   4           POSITIONING SAVE AREA
 COMM.    BSSN   8D          COMMUNICATION BUFFER FOR SCDCB
 SCRN.    BSSN   1           SCREEN OFFSET
 CMBA.    BSSN   1           CM BUFFER OFFSET FOR *SCD* MODE
 CMBS.    BSSN   1           BUFFER SIZE
 CMBL.    BSSN   1           CM BUFFER END
 CMIP.    BSSN   1           BUFFER INPUT POSITION
 CMOP.    BSSN   1           BUFFER OUTPUT POSITION
 CMBC.    BSSN   1           AMOUNT OF DATA IN BUFFER
 CMWP.    BSSN   1           CM WORD BUFFER POSITION
 OPSF.    BSSN   1           OUTPUT HOLD FLAG
 CBAO.    BSSN   1           *SCD* COMMUNICATIONS BLOCK A-OFFSET
 ELAO.    BSSN   1           NOS/VE ERROR LINE A-OFFSET
 ELRU.    BSSN   1           NOS/VE ERROR LINE UPPER R-REGISTER
 ELRL.    BSSN   1           NOS/VE ERROR LINE LOWER R-REGISTER
 CMOV.    BSSN   1           CURSOR MOVED FLAG
 NCCH.    BSSN   1           NOS COMMUNICATION CHANNEL
 SCMT.L   BSSN   0           LENGTH OF *SCD* MODE TABLE
 END      BSSN
          LIST   *
          EJECT
 GLOBALS  SPACE  4,10
***       GLOBAL LOCATIONS.
*
*         THE SPACE BETWEEN THE END OF THE *SCD* MODE TABLE AND THE
*         BEGINNING OF THE *MDD* MODE TABLE IS USED FOR GLOBAL CELLS.


          LIST   G
 BEGIN    BSSN   SCMT+SCMT.L
 MION     BSSN   1           MAXIMUM IOU ORDINAL LOGICALLY ON (0 OR 1)
 NOSL     BSSN   1           FLAG FOR LOADED BY NOS
 PPNO     BSSN   1           NUMBER OF THE PP WE ARE IN
 OVLS     BSSN   1           NUMBER OF OVERLAYS ACTUALLY LOADED
 CMWC     BSSN   1           NUMBER OF *MDD* CENTRAL MEMORY WRITES
 MRWC     BSSN   1           NUMBER OF *MDD* MAINTENANCE REGISTER WRITES
 CPUT     BSSN   1           CPU TYPE
 RDCA     BSSN   1           LAST KEYBOARD CHARACTER
 DOFF     BSSN   1           *SCI* DIRECTORY OFFSET
 OVLP     BSSN   1           INHIBIT OVERLAY LOADS IF NONZERO
 DFTO     BSSN   1           A-REGISTER OFFSET TO *DFT* BLOCK
 SAAO     BSSN   1           A-REGISTER OFFSET TO *SSR*
 SBAO     BSSN   1           A-REGISTER OFFSET TO *SCI* PARAMETER TABLE
 ISPB     BSSN   1           DISABLE OS BOUNDS MANIPULATION (STANDALONE)
 CTUF     BSSN   1           CTI UTILITY MODE *MDD* FLAG
 CELA     BSSN   1           COUNTER FOR NOS/VE ERROR LINE
 CDLA     BSSN   1           COUNTER FOR *DFT* MESSAGE
 SCDP     BSSN   1           *SCD* PORT
 GLOBEND  BSSN   0           LAST GLOBAL + 1
 END      BSSN
          LIST   *

          ERRNG  MDMT-GLOBEND  GLOBALS OVERFLOW INTO *MDMT*
          EJECT
 MDMT     SPACE  4,10
***       *MDD* MODE TABLE EXTENSION.
*
*         NOTE THAT THESE WORDS ARE ABSOLUTE ADDRESSES, WITH *MDMT* BIAS
*         ALREADY PRESENT.


 MDMT     EQU    7400

          LIST   G
 BEGIN    BSSN   MDMT+MTBL.L
 RFLG     BSSN   1           REPEAT FLAG
 WAIT     BSSN   1           OPERATOR PAUSE FLAG
 HLPC     BSSN   1           HELP PARAMETER
 PPCT     BSSN   1           PP CONCURRENCY TYPE
 RPPA     BSSN   1           ADDRESS TO RESTART A PP
 RFPC     BSSN   1           TYPE CODE
 RFPA     BSSN   1           STARTING REGISTER NUMBER
 RFPB     BSSN   1           REGISTER COUNT
 RDLY     BSSN   1           REPEAT DELAY COUNTER
 MDDR     BSSN   1           REPEAT DELAY
 RRRP     BSSN   1           REFRESH RATE PARAMETER
 SEPA     BSSN   1           SET CPU VARIABLE (0,1)
 SPTS     BSSN   1           SEARCH PAGE TABLE SHIFT
 CMDA     BSSN   1           COMMAND PROCESSOR OVERLAY NUMBER
 CMDB     BSSN   1           COMMAND PROCESSOR ADDRESS
 VAL1     BSSN   4           VALUE 1 SAVE AREA (4 WORDS)
 VAL2     BSSN   1           VALUE 2 SAVE AREA
 VAL3     BSSN   3           INCREMENT VALUE (3 WORDS)
 VAL4     BSSN   1           LAST NUMBER DECODE TYPE
 CPOP     BSSN   1           CHARACTERS PREVIOUSLY OUTPUT TO MUX
 DDST     BSSN   1           DFT STRUCTURE PARAMETER
 DFTF     BSSN   1           DFT ERROR CONDITION FLAG PARAMETER FOR *MDD*
 DFTP     BSSN   1           DFT BUFFER PARAMETER FOR *MDD* MODE
 DFTR     BSSN   1           DFT ON/OFF PARAMETER
 DPRB     BSSN   1           PP REGISTER TYPE
 ECEI     BSSN   1           ECR ELEMENT ID
 HPTL     BSSN   1           PAGE TABLE LENGTH WORDS/100(8)
 HPSM     BSSN   1           MASK OF PAGE SIZE/100(8)
 MPSV     BSSN   2           MONITOR PROCESS STATE POINTER
 MRPV     BSSN   1           MAINTENANCE REGISTER VARIABLE
 PTAV     BSSN   2           PAGE TABLE ADDRESS
 JPSV     BSSN   2           JOB PROCESS STATE POINTER
 PSMV     BSSN   1           PAGE SIZE MASK
 PTLV     BSSN   1           PAGE TABLE LENGTH VALUE
 XPSV     BSSN   2           EXCHANGE PACKAGE (*** NEVER USED ***)
 VMBA     BSSN   5           PVA BUFFER
 UEP1     BSSN   1           UPDATE ELEMENT PARAMETER 1
 UEP2     BSSN   4           UPDATE ELEMENT PARAMETER 2

*         WARNING - BE AWARE THAT DURING PARAMETER CRACKING, ROUTINE *CLB*
*         ZEROS OUT *MRBF* - *MRBF+6*.

 MRBF     BSSN   10          MAINTENANCE REGISTER BUFFER
 ANCD     BSSN   1           ANALYSIS CODE
 PPTY     BSSN   1           PP TYPE (0 = UPPER PP)
 MDMT.L   BSSN   0           END OF *MDD* MODE TABLE
 END      BSSN
          LIST   *

          ERRNG  7677-MDMT.L *MDMT* OVERFLOWS INTO COMMON VARIABLES
          EJECT
 COMMON   SPACE  4,10
***       COMMON VARIABLES.


          LIST   G
 BEGIN    BSSN   7677
 S0FLG    BSSN   1           MACHINE TYPE FLAG
*                            (C2000 = 10000(8), S0/S0E = 1, GENERIC = 0)
 EMC0     BSSN   1           ESTABLISHED PORT 0 CONNECTION PREVIOUSLY
 EMC1     BSSN   1           ESTABLISHED PORT 1 CONNECTION PREVIOUSLY
 ELIO     BSSN   1           IOU CONNECT CODE
 I0CC     EQU    ELIO        ALTERNATE NAME FOR IOU CONNECT CODE
 ELPR     BSSN   1           PROCESSOR CONNECT CODE
 ELCM     BSSN   1           MEMORY CONNECT CODE
 IOUM     BSSN   1           IOU MODEL
 MEMM     BSSN   1           MEMORY MODEL
 MXS0     BSSN   1           PORT 0 STATUS
 MXS1     BSSN   1           PORT 1 STATUS
 XOFF     BSSN   1           *X-OFF* RECEIVED FROM PORT 0
 XOF1     BSSN   1           *X-OFF* RECEIVED FROM PORT 1
 RDATA    BSSN   10          TEST MODE REGISTER (A0) BUFFER
 BUFF     BSSN   0           *SCD/VE* CM BUFFER (REST OF PP)
          BSSN   3           (SLACK FOR *HBUF* USAGE)
 HBUF     BSSN   0           HARDWARE ELEMENT BUFFER
 END      BSSN
          LIST   *

          ERRPL  HBUF+CMXLEN-10000  MRT BUFFER OVERFLOWS PP
          ERRPL  BUFF+11D*4-10000   *SCD/VE* BUFFER OVERFLOWS PP
          TITLE  MISCELLANEOUS EQUATES.
 EQUATES  SPACE  4,10
**        CONSTANT DEFINITIONS.


 BEL      EQU    0#07        BELL (CONTROL-G)
 BS       EQU    0#08        BACK SPACE
 TAB      EQU    0#09        TAB (CONTROL-I)
 LF       EQU    0#0A        LINE FEED
 CR       EQU    0#0D        CARRIAGE RETURN
 XON      EQU    0#11        X-ON
 XOF      EQU    0#13        X-OFF
 ESC      EQU    0#1B        ESCAPE
 RS       EQU    0#1E        RECORD SEPARATOR (FUNCTION KEY PREFIX)
 VV       EQU    0#76        LOWER CASE V (FUNCTION KEY 6)
 WW       EQU    0#77        LOWER CASE W (FUNCTION KEY 7)
 CH       EQU    10          DEFAULT *SCD/NOS* COMMUNICATIONS CHANNEL
 CRLF     EQU    10000       CARRIAGE RETURN LINE FEED FLAG
 RR       EQU    400000      ACTIVATE R-REGISTER IN CM ACCESS
 LNOF     EQU    102         DEFAULT OVERLAY LOAD RETURN ADDRESS
 OVLM     EQU    3540        ORIGIN FOR *MDD* RESIDENT AND *VPB* DEADSTART
 OVLA     EQU    5400        ORIGIN FOR *MDD* AND *SCD* OVERLAYS
 SPIB     EQU    10000       *SCI* PARAMETER TABLE INTERLOCK BIT
 CBUF     EQU    6300        AVAILABLE PP AND CHANNEL BUFFER (DEADSTART ONLY)
 MBUF     EQU    6500        MEMORY BUFFER (DEADSTART ONLY)
 CY2OVL   EQU    7760        CYBER 2000 DEADSTART OVERLAY ORIGIN
 DEFAULT  EQU    5100        DEFAULT ACTIVE REAL-STATE *SCD* MODE
 PRGM     SET    1           OVERLAY MACRO VARIANT FOR *DSI$PP_MACROS*
 SCIPTL   EQU    4           *SCI* PARAMETER TABLE LENGTH
 TSDRBL   EQU    20D         TEMPORARY *SCI* DFT REQUEST BUFFER LENGTH
 EICBFWA  EQU    200         EICB FIRST WORD ADDRESS (CYBER 2000 ONLY)

*         THE IOU RESOURCE TABLE (*VEPP*) IN THE *SSR* CONTAINS
*         THE STATUS OF ALL PP-S AND CHANNELS ACCESSIBLE BY NOS/VE.
*         EACH 16-BIT BYTE CONTAINS THE STATUS OF ONE PP AND ONE
*         CHANNEL.  THE TABLE IS ACCESSED VIA *CYBIL* AS A THREE
*         DIMENSIONAL ARRAY WITH THE INDICIES -
*         IOU NUMBER, NIO/CIO TYPE, AND ELEMENT NUMBER.
*         SINCE SPACE IS ALLOCATED FOR THE MAXIMUM IOU CONFIGURATION,
*         THE REQUIRED SIZE IS DETERMINED BY MULTIPLYING THE
*         MAXIMUM NUMBER OF DIFFERENT STATES OF EACH SUBSCRIPT
*         TOGETHER - 2(UP TO TWO IOUS) * 2(NIO OR CIO TYPE) *
*         34(8) (MAXIMUM NUMBER OF ELEMENTS WHEN ROUNDED UP TO THE
*         NEAREST MULTIPLE OF 4).

 IRTL     EQU    2*2*34      IOU RESOURCE TABLE LENGTH

*         WHEN *SCI* IS REQUESTED TO DEADSTART NOS/VE IN DUAL STATE MODE,
*         THE NVE SUBSYSTEM WAITS FOR *SCI* TO PUT A DEADSTART STATUS IN
*         *D8ST* IN THE EICB TO INDICATE WHETHER DEADSTART SHOULD CONTINUE
*         OR BE ABORTED DUE TO A PROBLEM ENCOUNTERED WHILE LOADING THE
*         BOOT.

 BLOK     EQU    1           BOOT LOAD OK, CONTINUE DEADSTART
 BPNI     EQU    2           BOOT PROGRAM NOT INSTALLED ON CIP DEVICE

          LIST   X
*COPY     CTI$MAINTENANCE_DISPLAY_MACROS
          LIST   *
          TITLE  DIRECT CELL DEFINITIONS.
 DIRECTS  SPACE  4,10
****      DIRECT CELL DEFINITIONS.
*
*         DIRECT CELL USAGE IN *SCI* MUST OBSERVE CERTAIN RULES, SINCE
*         A NUMBER OF DIFFERENT MODES OF *SCI* CAN BE ACTIVE SIMULTANEOUSLY.
*         DIRECT CELLS ARE DIVIDED INTO SEVERAL GROUPS:
*
*         1)  *SCRATCH* CELLS ARE USABLE BY ANY ROUTINE IN ANY MODE, AND
*         THEY CANNOT BE ASSUMED TO RETAIN VALUES ACROSS THE MAIN LOOP.
*         GLOBAL OR MODE-TABLE CELLS MUST BE USED FOR SUCH PURPOSES.
*
*         2)  *POINTER* CELLS SHOULD BE CONSIDERED READ-ONLY, ALTHOUGH
*         A NUMBER OF ROUTINES READ AND STORE THE POINTERS.  THEY SHOULD
*         NOT BE USED FOR ANY OTHER PURPOSE.
*
*         3)  *MDD* DIRECT CELLS CAN BE USED ONLY BY *MDD* ROUTINES.
*         THESE DIRECT CELLS ARE ASSUMED TO REMAIN INTACT ACROSS EXITS
*         TO AND CALLS FROM THE MAIN LOOP, SINCE *MDD* IS PSEUDO-REENTRANT.
*
*         4)  *VPB* MODE IS USED ONLY FOR NOS/VE DEADSTART OR TERMINATION;
*         BECAUSE IT OVERLAYS THE ENTIRE *MDD* AREA, IT CAN SAFELY USE
*         DIRECT CELLS WHICH OVERLAY THE *MDD* SPECIFIC DIRECT CELLS.
*
*         5)  CERTAIN DIRECT CELLS HAVE SPECIAL MEANINGS WHEN *SCI* PRESET
*         IS ACTIVE, AS THEY CONTAIN HANDOFF DATA FROM *CTI* OR *SDA* OR
*         *DFT*.


*         SCRATCH CELLS - AVAILABLE FOR ALL MODES OF *SCI*.

 T0       EQU    0           TEMPORARIES
 T1       EQU    1
 T2       EQU    2
 T3       EQU    3
 T4       EQU    4
 T5       EQU    5
 T6       EQU    6
 T7       EQU    7
 W0       EQU    10          WORKING STORAGE
 W1       EQU    11
 W2       EQU    12
 W3       EQU    13
 W4       EQU    14
 W5       EQU    15
 W6       EQU    16
 W7       EQU    17
 CM       EQU    20 - 23     CENTRAL MEMORY WORD BUFFER
 CN       EQU    24 - 27     CENTRAL MEMORY WORD BUFFER

*         POINTERS - TO BE USED ONLY AS DOCUMENTED.

 SC       EQU    30 - 32     R-POINTER FOR *SCI* IMAGE IN *CIP* AREA
 TI       EQU    33          USED ONLY BY THE TIME OUT ROUTINE
 CD       EQU    34 - 36     R-POINTER FOR *CIP* DIRECTORY
*                            FOR CYBER 2000, CD - CD+3 IS USED TO HOLD THE
*                            R-POINTER TO THE TEMPORARY SCI DFT REQUEST BUFFER.
 IB       EQU    37 - 41     R-POINTER FOR EI CONTROL BLOCK
 CB       EQU    42 - 43     R-REGISTER FOR *SCD/VE* COMMUNICATIONS BLOCK
 DP       EQU    44 - 45     R-REGISTER FOR DFT BUFFER (OFFSET = *DFTO*)
 SA       EQU    46 - 47     R-REGISTER FOR *SSR* (OFFSET IN *SAAO*)
 SB       EQU    50 - 51     R-REGISTER FOR *SCDPT* (OFFSET IN *SBAO*)
 HP       EQU    52 - 53     R-REGISTER FOR *2AP*

*         *MDD*-ONLY DIRECT CELLS, PRESERVED ACROSS MAIN LOOP EXITS/CALLS.

 MP       EQU    54 - 57     MEMORY PARAMETERS
 M1       EQU    60          TEMPORARIES
 M2       EQU    61
 M3       EQU    62
 PC       EQU    63          PARAMETER COUNT
 PP       EQU    64          PP NUMBER (ALSO USED AS GENERAL SCRATCH)
 WC       EQU    65          WORD COUNT
*         EQU    66          UNUSED
*         EQU    67          UNUSED

*         *VPB*-ONLY DIRECT CELLS - OVERLAP *MDD*-ONLY CELLS.

 BL       EQU    54 - 55     BOOT LOAD ADDRESS
 LA       EQU    56 - 57     LOAD ADDRESS/100 (USED ONLY TO DEADSTART NOS/VE)
 SZ       EQU    60 - 61     MEMORY SIZE/100
 VP       EQU    62 - 65     R-POINTER TO *DFT* REQUEST BUFFER

          ORG    70

 DO       CON    1           DEADSTART ORIGIN (1 = STANDALONE)
 BA       CON    0           BUFFER ADDRESS
 BP       CON    0           POINTER INTO CHARACTER BUFFER
 PT       CON    0           CURRENT PORT TABLE ADDRESS
 VA       CON    0           NOS/VE ACTIVE FLAGS
 EC       CON    0           ELEMENT CONNECT CODE FOR *READMR* AND *WRITMR*
 RN       CON    0           REGISTER NUMBER FOR *READMR* AND *WRITMR*
 ON       CON    1           CONSTANT ONE

          ERRNZ  SC-30       *CTI* / *SCI* MISMATCH
          ERRNZ  CD-34       *CTI* / *SCI* MISMATCH
****
 COMMON   SPACE  4,10
*         COMMON DECKS.


*COPY     CTI$DFT_ANALYSIS_CODES
*COPY     CTC$DFT_CONSTANTS
*COPY     CTC$ELEMENT_DESCRIPTOR_DEF
          TITLE  SCI PRESET OVERLAY.
 ORIGIN   SPACE  4,10
**        ORIGIN CHECK.
*
*         BECAUSE A NUMBER OF DIFFERENT ROUTINES INITIATE *SCI*, AND
*         EXECUTE *LJM 100* TO BEGIN *SCI* PRESET, THE FOLLOWING
*         ERROR CHECK IS REQUIRED.


          ERRNZ  *-100       BOOTSTRAPS BEGIN EXECUTION AT 100
          QUAL   PRESET
 CTMSCI   SPACE  4,10
**        SCI - SYSTEM CONSOLE INTERFACE.
*
*         ENTRY  SEE *CTI* HANDOFF DOCUMENTATION.
*
*         EXIT   TO *PMT*, IF NORMAL COPY OF *SCI*.
*                TO *RMD*, IF RESTARTED BY *DFT*.
*                TO *DTE*, IF CYBER 2000 ENVIRONMENT.
*
*         CALLS  CHK, FDO, PDC.


 CTMSCI   BSS    0           ENTRY (FROM BOOTSTRAP OR CTI)
          LDDL   27          GET HANDOFF DATA
          STM    SCIA        SAVE POSSIBLE RESTART FLAG AND PP NUMBER
          SHN    -14
          LMN    17
          NJN    SCI1        IF NOT CYBER 2000
          LDN    BCTP+3      GET CIP DIRECTORY POINTER FROM BOOT CONTROL TABLE
          CRDL   SC
          RJM    FDO         FETCH DIRECTORY HEADER OFFSET
          STDL   T1          SAVE CONTENTS OF *DOFF*
          CALL   DTE         DEADSTART CYBER 2000 - NO RETURN

 SCI1     RJM    PDC         PRESET DIRECT CELLS
          RJM    CHK         CHECK VALIDATION
          LDM    SCIA        CHECK RESTART FLAG
          SHN    21-13
          MJN    SCI2        IF RESTART BY *DFT*
          CALL   PMT         PRESET MODE TABLES *NO RETURN*

 SCI2     AOD    VA          SET NOS/VE ACTIVE FLAG
          CALL   RMD         RESTORE MODE DEFINITIONS FROM SCDPT

 SCIA     BSS    1           ORIGINAL CONTENTS OF DIRECT CELL 27
 LNO      SPACE  4,10
**        LNO - LOAD NEXT OVERLAY.
*
*         ENTRY  (A) = 6/OVERLAY ID, 12/JUMP ADDRESS.
*
*         EXIT   TO ROUTINE IN OVERLAY LOADED.
*
*         USES   CM - CM+3.


 LNO      SUBR               ENTRY
          STM    LNOB        SET OVERLAY JUMP ADDRESS
          SHN    -14         GET OVERLAY INDEX
          ADML   DOFF        DIRECTORY OFFSET
          LRD    SC+1        READ DIRECTORY ENTRY
          LMC    RR
          CRDL   CM
          LDD    CM          SET LOAD ADDRESS
          STM    LNOA
          LDD    SC          READ OVERLAY
          ADDL   CM+3
          ADC    RR+1
          CRML   **,CM+1
 LNOA     EQU    *-1         (OVERLAY LOAD ADDRESS)
          LJM    **          BRANCH TO ENTRY POINT DESIRED
 LNOB     EQU    *-1         (ENTRY POINT)
 CHK      SPACE  4,20
**        CHK - CHECK FOR PROPER VALIDATIONS BEFORE STARTING *MDD*.
*
*         ENTRY  (33) = 1/MDD UTILITY FLAG,2/UNUSED,2/MDD PORT NUMBER.
*
*         EXIT   TO *FIE* IF FATAL ERROR OCCURS DURING INITIALIZATION.
*                TO *DSA* IF STANDALONE DEADSTART REQUIRED.
*                TO *DDS* IF DUAL-STATE DEADSTART REQUIRED.
*                (CPUT) = X00 S1-CR WHERE X = NUMBER OF CPUS.
*                       = X01 S1
*                       = X02 S2
*                       = X03 S3
*                       = X04 THETA
*                       = X05 S0/S0E
*                (ELIO) = IOU PORT CODE.
*                (IOUM) = IOU MODEL.
*                (ELCM) = MEMORY PORT CODE.
*                (ELPR) = PROCESSOR PORT CODE.
*                (MION) = MAXIMUM IOU ORDINAL WHICH IS LOGICALLY ON.
*
*         USES   DA, PT.
*
*         CALLS  FHE, PII.


 CHK      SUBR               ENTRY/EXIT
          LDN    IOUID
          RJM    FHE         FIND IOU PORT CODE
          MJP    FIE         IF NOT FOUND
          LDM    HBUF+CIOPC
          LPC    7417        MASK OUT *SCI* PP TYPE
          STM    I0CC        SAVE IOU-0 CONNECT CODE
          LDM    HBUF+CIOE+EM
          SHN    -4          REMOVE UPPER FOUR BITS OF SERIAL NUMBER
          STM    IOUM        SAVE IOU MODEL
          RJM    PII         PRESET FOR OS-BOUNDS CHECKING
          LDC    10000+IOUID CHECK FOR SECOND IOU
          RJM    FHE         FIND HARDWARE ELEMENT
          MJN    CHK0        IF NO SECOND IOU
          LDM    HBUF+CIOST  CHECK IF LOGICALLY ON
          SHN    21-0
          MJN    CHK0        IF SECOND IOU IS LOGICALLY OFF
          AOM    MION
 CHK0     LDN    CMID
          RJM    FHE         FIND MEMORY PORT CODE
          MJP    FIE         IF NOT FOUND
          LDM    HBUF+CMIPC
          STM    ELCM        SAVE MEMORY PORT CODE
          LDM    HBUF+CMIE+EM
          SHN    -4          REMOVE UPPER FOUR BITS OF SERIAL NUMBER
          STM    MEMM        SAVE MEMORY MODEL
          LDN    0
          STD    T7          SET UP PROCESSOR COUNTER
          LDN    PROCID
          RJM    FHE         FIND PROCESSOR ID
          MJP    FIE         IF NOT FOUND
          LDM    HBUF+CPRPC
          STM    ELPR        SAVE CONNECT CODE
          LDM    HBUF+CPRE+EM  GET MODEL NUMBER
          SHN    -10
          STM    CPUT        SAVE CPU TYPE
          SBN    1           TEST IF AN S1 OR S1-CR
          NJN    CHK2        IF NOT
          LDM    HBUF+CPRE+EM  GET MODEL NUMBER
          SHN    -4
          LPN    7           SAVE JUST 3 BITS
          SBN    3
          ZJN    CHK1        IF AN 830
          SBN    4-3
          NJN    CHK2        IF NOT AN 810
 CHK1     STM    CPUT        SAVE CPU TYPE
 CHK2     AOD    T7
          SHN    14
          ADN    PROCID
          RJM    FHE         FIND PROCESSOR ID
          PJN    CHK2        TRY FOR NEXT ONE
          SOD    T7
          SHN    6           SET NUMBER OF CPUS
          RAM    CPUT
          LPN    77          CHECK MAINFRAME TYPE
          LMN    5
          NJN    CHK3        IF NOT AN S0/S0E
          AOM    S0FLG       SET S0/S0E FLAG
          LOADOV S0DLI       LOAD S0/S0E DUMP LOAD IDLE PP ROUTINES
 CHK3     LDM    CTUF        TEST IF *MDD* IS TO BE ACTIVE
          ADM    DSPI-1
          ZJN    CHK5        IF NO *MDD*
 CHK4     LJM    CHKX        RETURN

 CHK5     LDM    NOSL        CHECK IF LOADED BY CTI
          SBD    DO          AND NOT NOS/VE DEADSTART
          NJN    CHK4        IF LOADED FOR NOS *SCD* MODE OR C170 *MDD* MODE
          LDM    SCIA        CHECK IF *SCI* RELOCATED
          SHN    21-13
          MJN    CHK4        IF *SCI* RELOCATED BY *DFT*
          LDD    DO          CHECK DEADSTART ORIGIN
          ZJN    CHK6        IF LOADED FOR DUAL-STATE DEADSTART
          CALL   DSA         INITIATE STANDALONE NOS/VE DEADSTART

 CHK6     CALL   DDS         INITIATE DUAL-STATE NOS/VE DEADSTART
 FIE      SPACE  4,10
**        FIE - FATAL INITIALIZATION ERROR.
*
*         NOTE   RESIDENT OVERLAY MUST BE LOADED BEFORE THIS IS CALLED.


 FIE      BSS    0           ENTRY
          LDC    DASP        610 - *SCI* PRESET FAILURE
          LJM    AAC         ACTIVATE ANALYSIS CODE PROCESSOR
 PDC      SPACE  4,20
**        PDC - PRESET DIRECT CELLS FOR *SCI* USAGE.
*
*         ENTRY  (DO) = DEADSTART TYPE (1 = STANDALONE, 0 = DUAL-STATE).
*                (SCIA) = PP NUMBER, IF DUAL-STATE.
*                       = PP NUMBER + 2000, IF *SCI* INITIATED BY C170 X.MDD.
*                       = PP NUMBER + 4000, IF *SCI* RESTARTED BY *DFT*.
*
*         EXIT   NON-HANDOFF DIRECT CELL POINTERS CLEARED.
*                (DOFF) = *SCI* DIRECTORY ADDRESS.
*                (PPNO) = *SCI* PP NUMBER.
*                (SCDP) = *SCD* PORT NUMBER.
*                (DSPI-1) = *MDD* ACTIVE AND PORT NUMBER.
*                RESIDENT OVERLAY LOADED.
*                CH 17 INACTIVE.
*                TO *FIE* IF FATAL ERROR OCCURS DURING INITIALIZATION.
*
*         USES   T1, T2, DA, CM - CM+3.
*
*         CALLS  CSP, FDO, FHE, PHT, PIB, SBN, SPA, SPN.
*
*         MACROS LOADOV.


 PDC      SUBR               ENTRY/EXIT
          RJM    SBN         STARTED BY NOS?
          RJM    CSP         CONFIGURE *SCI* PP
          LDN    IB          CLEAR NON-HANDOFF DIRECT CELLS
          STD    T1
 PDC1     LDN    0
          STIAO  T1          CLEAR ADDRESS
          LMN    DO
          NJN    PDC1        IF NOT DONE

*         LOAD RESIDENT OVERLAY.

          RJM    FDO         FETCH DIRECTORY HEADER OFFSET
          LOADOV RESOL       LOAD RESIDENT OVERLAY
          EXITMR AAC         SET MAINTENANCE REGISTER READ EXIT ADDRESS
          FATALMR  AAC       SET FATAL MAINTENANCE REGISTER EXIT ADDRESS
          RJM    PHT         PRESET HARDWARE TABLE
          LDN    GPDID       READ GLOBAL PROCESSOR DESCRIPTOR
          RJM    FHE
          MJP    FIE         IF NOT FOUND

*         INTERLOCK WITH C170 OS (IF ANY) AND INITIALIZE CHANNELS.

          LDM    HBUF+GPDST
          LPN    1           EXTRACT LEAST SIGNIFICANT BIT
          STD    DO          SET DEADSTART ORIGIN
          ZJN    PDC1.1      IF NOT STANDALONE NOS/VE
          AOM    ISPB        DISABLE OS BOUNDS MANIPULATION
          LDM    SCIA        CHECK RESTART FLAG
          SHN    21-13
          MJN    PDC2        IF RESTARTED BY *DFT*
          DCN    MR+40       INITIALIZE CHANNELS FROM CTI
          DCN    MX+40
          CCF    *,MX
          UJN    PDC2        CONTINUE

 PDC1.1   SCF    *,MX        WAIT FOR CYBER 170 OS TO RELEASE *SCI*
          DCN    MX+40
          CCF    *,MX
          SCF    *,MR
          DCN    MR+40
          CCF    *,MR

*         DETERMINE TYPE OF ACTIVATION.

 PDC2     LDN    DISCID      GET *SCD* AND *MDD* MODE INFORMATION
          RJM    FHE
          MJP    FIE         IF NOT FOUND
          RJM    SPN         SET PP NUMBER
          LDM    NOSL        GET LOAD SOURCE
          NJN    PDC4        IF NOT *SDA* LOAD
 PDC3     RJM    PIB         PREPARE INTERFACE BLOCK POINTER
          RJM    SPA         SET *SCI* PARAMETER TABLE ADDRESS
          UJN    PDC5        RETURN

 PDC4     LDM    SCIA
          SHN    21-12
          MJN    PDC3        IF C170 *MDD* MODE LOAD
          LDM    HBUF+CDCPFLG  GET *SCD* PORT NUMBER
          LPN    3           ISOLATE DEADSTART PORT NUMBER
          STM    SCDP
          LDM    HBUF+CDCMDD+1
          SHN    21-3        TEST *MDD* FLAG
          PJN    PDC5        IF NO *MDD*
          SHN    21-13-21+3
          LPC    700         ISOLATE *MDD* PORT NUMBER
          LMC    4000        SET CTI FLAG AND ACTIVE DEFINITION
          STM    DSPI-1
 PDC5     LJM    PDCX        RETURN
 SPN      SPACE  4,10
**        SPN - SET PP NUMBER.
*
*         ENTRY  (NOSL) = LOAD SOURCE (1 = CTI, 0 = SDA).
*                (SCIA) = ORIGINAL CONTENTS OF DIRECT CELL 27.
*                (HBUF) = CONSOLE MRT DESCRIPTOR.
*
*         EXIT   (PPNO) = PP NUMBER PASSED BY *DFT*, IF RESTART.
*                       = PP NUMBER PASSED BY *MDD* BOOT, IF C170 X.MDD LOAD.
*                       = PP NUMBER PASSED BY *SDA*, IF DUAL-STATE.
*                       = PP NUMBER FROM CONSOLE MRT, IF STANDALONE DEADSTART.


 SPN      SUBR               ENTRY/EXIT
          LDM    SCIA        CHECK RESTART FLAG
          SHN    21-13
          MJN    SPN1        IF RESTARTED BY *DFT*
          SHN    21-12-21+13
          MJN    SPN1        IF STARTED BY C170 STATE
          LDM    NOSL        CHECK INITIATION STATUS
          NJN    SPN2        IF INITIATED BY CTI
 SPN1     LDM    SCIA        GET NUMBER PASSED BY *SDA*/*DFT*/*MDD* BOOT
          UJN    SPN3        SET PP NUMBER AND EXIT

 SPN2     LDM    HBUF+CDCSCD DETERMINE PP NUMBER FROM CONSOLE MRT
          LPN    77          MASK OFF FLAG
          NJN    SPN3        IF FOUND
          LDM    HBUF+CDCSCD
          SHN    -6          SHIFT OFF FLAG
 SPN3     LPN    77          MASK OFF POSSIBLE FLAGS
          STM    PPNO        SAVE PP NUMBER
          UJN    SPNX        RETURN

          OVERFLOW  RESOL    CHECK FOR OVERFLOW
 CSP      SPACE  4,10
**        CSP - CONFIGURE *SCI* PP.
*
*         ENTRY  (DO) = *SCI* LOAD SOURCE (0 = *SDA* LOAD).
*
*         EXIT   (NOSL) = *SCI* LOAD SOURCE (0 = *SDA* LOAD).
*                (CTUF) = NONZERO IF *MDD* UTILITY LOAD.
*                (VA) = 10000 IF DEADSTARTED AS *MDD* UTILITY MODE.
*                (EOC - 7777) = 0 EXCEPT AS NOTED.
*
*         USES   T7.


 CSP      SUBR               ENTRY/EXIT
          LDC    EOC         SET START ADDRESS FOR CLEARING MEMORY
          STD    T7
          LDN    0
 CSP1     STIAO  T7
          SHN    -14
          ZJN    CSP1        IF NOT TO 7777+1
          LDD    DO          SET LOAD SOURCE
          STM    NOSL
          STM    PPTY        SET PP TYPE (0 = UPPER PP)
          LDD    33          CHECK IF CTI UTILITY
          ZJN    CSP2        IF NOT *MDD* UTILITY
          STM    CTUF        SET CTI UTILITY FLAG
          LDC    1S12        SET BIT SO *MDD* DOES NOT DEADSTART NOS/VE
          STDL   VA
 CSP2     LJM    CSPX        RETURN
 FDO      SPACE  4,10
**        FDO - FETCH DIRECTORY HEADER OFFSET.
*
*         ENTRY  (SC - SC+2) = CIP DIRECTORY R-POINTER.
*
*         EXIT   (A) = (DOFF) = DIRECTORY HEADER OFFSET.
*
*         USES   CM - CM+3.


 FDO      SUBR               ENTRY/EXIT
          LDD    SC          READ RESIDENT OVERLAY HEADER
          LRD    SC+1
          LMC    RR          ACTIVATE R-REGISTER
          CRDL   CM
          ADDL   CM+1        SKIP RESIDENT
          ADN    1           FOR DIRECTORY HEADER
          STML   DOFF        SAVE DIRECTORY HEADER A-ADDRESS
          UJN    FDOX        RETURN

 EOC      BSS    0           EVERYTHING FROM HERE ON GETS ZEROED OUT
 SBN      SPACE  4,10
**        SBN - STARTED BY NOS.
*
*         IF *SCI* IS LOADED BY *SDA* FOR A DUAL-STATE DEADSTART THE FOLLOWING
*         DIRECT CELLS MUST BE MOVED TO FIT THE STANDARD AS DEFINED.
*
*         ENTRY  (SCIA) = *SCI* PP NUMBER.
*
*         USES   SC - SC+2, PP, CD - CD+2.


 SBN      SUBR               ENTRY/EXIT
          LDD    DO
          NJN    SBNX        IF STANDALONE DEADSTART
          LDM    SCIA
          NJN    SBN1        IF NOT STARTED IN PP ZERO
          LDC    DASL        611 - *SCI* LOADED IN PP 0
          STML   SBNA
          UJN    *           HANG

 SBN1     LDN    0
          STD    33          CLEAR *MDD* UTILITY FLAG
          LDD    21          MOVE *SCI* CODE POINTER TO PROPER ADDRESS
          STD    SC
          LDD    22
          STD    SC+1
          LDD    23
          STD    SC+2
          LDD    24          MOVE CTI DIRECTORY POINTER TO PROPER ADDRESS
          STD    CD
          LDD    25
          STD    CD+1
          LDD    26
          STD    CD+2
          UJN    SBNX        RETURN

 SBNA     CON    0           ANALYSIS CODE IF NON-ZERO

          QUAL   *

 CHKX     EQU    /PRESET/CHKX
 DSPI     EQU    7224B       IN SCMT CHARS. BUFFER
 EOC      EQU    /PRESET/EOC
          OVERLAY  (SCI IDLE LOOP),100
 PPNM     SPACE  4,10
***       PPNM - PP NAME AND REVISION LEVEL.


 PPNM     VFD    24/3HSCI
          VFD    8/0#"SCILVL"
 IDL      SPACE  4,10
**        IDL - IDLE LOOP.
*
*         USES   PT.
*
*         CALLS  MUX, SCF, SMP, TIM.


 IDL      ROUTINE

          LDC    SCMT        SERVICE *SCD* MODE
          RJM    SMP
          AOM    AACA        ENABLE *MDD* PROCESSING OF MR ERRORS
          LDC    MDMT        SERVICE *MDD* MODE
          RJM    SMP
          LDN    0           DISABLE *MDD* PROCESSING OF MR ERRORS
          STM    AACA
          LDN    MX          INTERLOCK TPM
          RJM    SCF
          RJM    MUX         PROCESS MUX FOR *MDD*
          LDC    SCMT
          STD    PT
          RJM    MUX         PROCESS MUX FOR *SCD*
          CCF    *,MX        RELEASE TPM
          RJM    TIM         CALL TIMER
          UJN    IDL         LOOP
          EJECT
 CKQ      SPACE  4,10
**        CKQ - COMPLETE CHARACTER QUEUE.
*
*         ENTRY  (BP) = LAST ADDRESS INTO WHICH A CHARACTER WAS PLACED.
*                (BA) = ADDRESS OF THE BEGINNING OF THE OUTPUT STRING.
*
*         EXIT   TO *SMPX*.
*                (CHRC.) = MASTER NUMBER OF CHARACTERS TO OUTPUT.
*                (CHR0.) = NUMBER OF CHARACTERS TO OUTPUT ON PORT 0.
*                (CHR1.) = NUMBER OF CHARACTERS TO OUTPUT ON PORT 1.
*                (CHP0.) = POINTER TO THE CHARACTERS TO OUTPUT ON PORT 0.
*                (CHP1.) = POINTER TO THE CHARACTERS TO OUTPUT ON PORT 1.


 CKQ      ROUTINE            COMPLETE CHARACTER QUEUE

          LDD    BP
          SBD    BA
          STM    CHRC.,PT    STORE LENGTH OF QUEUE
          STD    T0          SAVE IT
          LDM    PTUS.,PT    GET OUTPUT PORTS
          LPN    2           TEST FOR OUTPUT ON PORT ZERO
          ZJN    CKQ1        IF NOT
          LDD    T0          GET LENGTH OF QUEUE
          STM    CHR0.,PT    STORE LENGTH OF QUEUE FOR PORT ZERO
 CKQ1     LDM    PTUS.,PT    GET OUTPUT PORTS
          LPN    4           TEST FOR OUTPUT ON PORT ONE
          ZJN    CKQ2        IF NOT
          LDD    T0          GET LENGTH OF QUEUE
          STM    CHR1.,PT    STORE LENGTH OF QUEUE FOR PORT ONE
 CKQ2     LDD    BA
          STM    CHP0.,PT    SET START OF QUEUE PORT 0
          STM    CHP1.,PT    SET START OF QUEUE PORT 1
*         UJN    SMPX        RETURN

          ERRNZ  SMPX-*      *SMP*  MUST FOLLOW TO FALL INTO RETURN
 SMP      SPACE  4,10
**        SMP - SERVICE MODE PROCESS.
*
*         ENTRY  (A) = MODE TABLE ADDRESS TO BE SERVICED.
*                (LNOC) = LAST OVERLAY LOADED.
*
*         EXIT   MODE DRIVER SERVICED.
*
*         USES   BA, BP, PT.
*
*         CALLS  MODE ROUTINE SPECIFIED IN MODE TABLE.


 SMP      SUBR               ENTRY/EXIT
          STD    PT          SAVE MODE TABLE ADDRESS
          ADN    CHRB.
          STD    BP
          STD    BA
          LDI    PT          FETCH ROUTINE POINTER
          STM    SMPA
          ZJN    SMPX        IF NO ROUTINE
          LDD    PT          TEST FOR *SCD* MODE
          LMC    SCMT
          NJN    SMP3        IF *MDD* MODE
          LDM    SCMT+SCDS.  TEST WHICH *SCD* TO SERVICE
          ZJN    SMP1        IF *SCD/NOS* REQUIRED
          LOADOV NVESI       LOAD *SCD/VE* OVERLAY
          UJN    SMP3        CONTINUE

*         DETERMINE WHICH *SCD/NOS* MODE (CHANNEL OR BUFFERED) TO USE.

 SMP1     LDML   SCMT+CMBS.  DETERMINE CHANNEL OR BUFFERED MODE
          ZJN    SMP2        IF CHANNEL MODE
          SHN    21-17
          MJN    SMP2        IF LOADING CONTROLWARE
          LOADOV NOSBI       LOAD *SCD/NOS* BUFFERED OVERLAY
          UJN    SMP3        CONTINUE

 SMP2     LOADOV NOSCI       LOAD *SCD/NOS* CHANNEL OVERLAY
*         UJN    SMP3        CONTINUE

 SMP3     LJM    **          CALL INTO PROPER ROUTINE
 SMPA     EQU    *-1         (ENTRY POINT ADDRESS)
 SIS      SPACE  4,10
**        SIS - SERVICE INACTIVE *SCD* MODE.
*
*         THIS ROUTINE CAUSES AN *SCD* MODE NOT CURRENTLY BEING DISPLAYED
*         ON THE CONSOLE TO RESPOND TO THE CORRECT OS AS THOUGH THE
*         DISPLAY WAS AN ACTIVE MODE.
*
*         CALLS  SNS, SVS.


 SIS1     SHN    -16
          LMN    7
          ZJN    SIS2        IF MODE DUAL-STATE
          LDM    SCMT+SCDS.
          ZJN    SIS3        IF NOS STATE PRESENT
 SIS1.1   RJM    SVS         SERVICE NOS/VE STATE
          UJN    SISX        RETURN

 SIS2     RJM    SVS         SERVICE NOS/VE STATE
 SIS3     RJM    SNS         SERVICE NOS STATE

 SIS      SUBR               ENTRY/EXIT
          LDML   SCMT+PTDB.
          ZJN    SISX        IF MODE UNDEFINED
          SHN    21-14
          PJN    SIS1        IF PORT IS RELEASED
          SHN    -16
          LMN    17
          NJN    SISX        IF NOT DUAL-STATE
          LDM    SCMT+SCDS.
          NJN    SIS3        IF NOS/VE STATE ACTIVE
          UJN    SIS1.1      SERVICE NOS/VE STATE
 TIM      SPACE  4,10
**        TIM - MAINTAIN MILLISECOND TIME AND EXECUTE TIMED ROUTINES.
*
*         *TIM* USES THE CHANNEL 14 CLOCK TO ALLOW THE EXECUTION OF
*         CERTAIN ROUTINES ON A TIMED BASIS.  THE ROUTINES TO BE
*         ACTIVATED PERIODICALLY ARE IN *ACTB*.  TO ENSURE ACCURACY,
*         *TIM* SHOULD BE CALLED AT LEAST EVERY TWO MILLISECONDS.
*         THE 16-BIT CHANNEL 14 CLOCK ON S0/S0E MAINFRAMES IS PROCESSED IN ITS
*         ENTIRETY, RATHER THAN TRUNCATING IT TO 12 BITS FOR COMPATIBILITY.
*         THIS RESULTS IN CODE MODIFICATION WHICH MUST BE PERFORMED
*         WHENEVER *TIM* IS LOADED INTO MEMORY.  *TIMA* SHOULD ALSO
*         BE INITIALIZED BEFORE THE FIRST CALL TO *TIM*.
*
*         ENTRY  (TIMC) = INITIALIZED AS 12- OR 16-BIT INSTRUCTION.
*                (TIMD) = INITIALIZED FOR 12- OR 16-BIT CLOCK ROLLOVER.
*                (TIME) = INITIALIZED AS 12- OR 16-BIT INSTRUCTION.
*
*         EXIT   (TIMA) IS WITHIN ONE MILLISECOND OF CHANNEL 14 VALUE.
*
*         USES   T1, TI.
*
*         CALLS  SEE *ACTB*.
*
*         NOTE   CHANGES TO THIS ROUTINE SHOULD BE MADE IN *DFT* ALSO.


 TIM      SUBR               ENTRY/EXIT
 TIM1     IAN    14          READ MICROSECOND COUNTER
 TIMC     SBM    TIMA
*TIMC     SBML   TIMA        (16-BIT CLOCK)
          PJN    TIM2        IF NO OVERFLOW
 TIMD     ADC    10000       COMPENSATE FOR CLOCK OVERFLOW
*TIMD     ADC    200000      (16-BIT CLOCK)
 TIM2     ADC    -1000D
          MJN    TIMX        IF LESS THAN ONE MILLISECOND ELAPSED
          LDC    1000D       ADVANCE BASE TIME BY ONE MILLISECOND
 TIME     RAM    TIMA
*TIME     RAML   TIMA        (16-BIT CLOCK)
          AOM    TIMB        ADVANCE SCAN COUNTER
          LMN    5
          NJN    TIM1        IF SCAN PERIOD NOT UP
          STM    TIMB        RESET SCAN COUNTER
          LDC    ACTB        PRESET ACTION ENTRY
          STD    TI
 TIM3     AOM    2,TI        ADVANCE ENTRY COUNTER
          SBM    1,TI
          MJN    TIM4        IF DELAY NOT COMPLETE
          LDN    0
          STM    2,TI        RESET COUNTER
          LDI    TI          CALL SPECIFIED ROUTINE
          STD    T1
          RJM    0,T1
 TIM4     LDN    3           ADVANCE TABLE INDEX
          RAD    TI
          LMC    ACTBL
          NJN    TIM3        IF MORE ENTRIES TO CHECK
          LJM    TIM1        RETURN

 TIMA     CON    0           1000 MICROSECOND COUNTER
 TIMB     CON    0           MILLISECOND COUNTER

 ACTB     BSS    0
          CON    PCC,1000D/5,0 PROCESS CPU/PP COMMUNICATION FUNCTIONS
          CON    CST,50D/5,0   CHECK FOR *SCD* PARAMETER TABLE CHANGES
          CON    SIS,500D/5,0  SERVICE INACTIVE *SCD* STATES
          CON    TPR,250D/5,0  TEST FOR PORT REQUESTED EVERY 0.25 SECONDS
          CON    TVO,1000D/5,0 TEST FOR NOS/VE OPERATIONAL
          CON    CDP,1000D/5,0 CHECK FOR DELAY ON PORTS
 ACTBL    EQU    *

*         TIMERS USED BY OVERLAYS MUST BE IN RESIDENT.

 PRRA     BSS    1           USED TO DETECT *REQUEST DFT IDLE* TIMEOUT
 CTVA     BSS    1           USED TO DETECT *DROPVE* TIMEOUT
 CDPA     BSSZ   1           USED TO TIME DELAY ON PORT 0
 CDPB     BSSZ   1           USED TO TIME DELAY ON PORT 1
          ERRNZ  CDPB-CDPA-1 CELLS MUST BE CONTIGUOUS
 PCC      SPACE  4,10
**        PCC - PROCESS CPU/PP COMMUNICATION FUNCTIONS.
*
*         UPDATES THE *SCI* TIME WORD IN THE CPU/PP COMMUNICATION BLOCK
*         AND CHECKS FOR RELOCATION REQUESTS.
*
*         ENTRY  (VA) = NOS/VE STATUS (0 = INACTIVE, 1 = ACTIVE).
*
*         EXIT   TO *PRR* IF RELOCATION REQUEST IS PRESENT.
*                *SCI* TIME WORD IN RELOCATION BLOCK UPDATED.
*
*         USES   CM - CM+3, T1 - T4, W4 - W7.
*
*         CALLS  IIB, *PRR*, SPB.
*


 PCC      SUBR               ENTRY/EXIT
          LDD    VA          CHECK STATUS
          ZJN    PCCX        IF NOS/VE NOT ACTIVE

*         CHECK RELOCATION CONTROL WORD.

          LDN    D8RLP       READ RELOCATION CONTROL WORD POINTER
          RJM    IIB
          CRDL   W4
          LDD    W4+3
          ZJN    PCCX        IF NO POINTER
          LRD    W4+1
          RJM    SPB         SET PP BOUNDS
          LDD    W4          READ RELOCATION CONTROL WORD
          ADC    RR
          CRDL   CM
          ADN    1           READ MONITOR TIME WORD
          CRDL   T1
          ADN    1           UPDATE *SCI* TIME WORD
          CWDL   T1
          LDD    CM          IGNORE UPPER BITS (INITIALIZE FLAG)
          SCN    77
          ADDL   CM+1
          SCN    77
          ZJN    PCCX        IF NO REQUESTS PRESENT

*         CALL *PRR* TO PROCESS THE RELOCATION REQUEST.
*
*         (CM - CM+3) = RELOCATION CONTROL WORD.
*         (W4 - W7) = R-POINTER TO RELOCATION CONTROL WORD.

          CALL   PRR
 TPR      SPACE  4,10
**        TPR - TEST FOR PORT REQUESTED.
*
*         TO MINIMIZE OVERLAY LOADING, THIS ROUTINE VERIFIES THAT EITHER
*         THE PORT REQUIRED BY *SCD* OR *MDD* IS AVAILABLE OR THAT A
*         CALL TO *EMC* IS REQUIRED TO SET *REREQUESTED* FOR A PORT.
*
*         ENTRY  (PT) = *SCMT*.
*
*         EXIT   (RTNP.) = *BPA* IF PORT IS TO BE RELEASED.
*
*         USES   PT, T0, T1.
*
*         CALLS  CPS, RTR, *EMC*.


 TPR2     LDM    RDATA+7     DETERMINE WHICH PORT(S) ARE AVAILABLE
          LPN    0#03
          LMN    0#03        CHANGE PORT RESERVED TO PORT AVAILABLE
          STD    T0

*         SINCE *SCI* DOES NOT SET REREQUESTED BITS FOR PORTS BEING SHARED
*         INTERNALLY, SET FAKE REREQUESTED STATUS FOR *SCI*-OWNED PORTS.

          LDML   EMC0+1      DETERMINE WHICH PORT(S) ARE OWNED BY *SCI*
          SHN    1
          ADML   EMC0+0
          SHN    -14+4       POSITION TO REREQUESTED BITS
          LPN    0#30
          STD    T1
          LMC    0#FF        CLEAR EXTERNAL REREQUESTED STATUS FOR *SCI* PORTS
          LPML   RDATA+7
          LMD    T1
          STM    RDATA+7     SAVE MERGED EXTERNAL/INTERNAL REREQUESTED BITS

*         CHECK *SCD* PORT STATUS.

          LDM    SCMT+PTDB.  CHECK PORT STATUS FOR *SCD*
          RJM    CPS
          NJN    TPR4        IF PORT AVAILABLE OR REREQUESTED NOT SET

*         CHECK *MDD* PORT STATUS.

 TPR3     LDM    MDMT+PTDB.  CHECK PORT STATUS FOR *MDD*
          RJM    CPS
          ZJN    TPRX        IF NO PORT(S) AVAILABLE AND REREQUESTED ALREADY SET
 TPR4     CALL   EMC         ACQUIRE PORT(S) AND/OR SET REREQUESTED STATUS

 TPR      SUBR               ENTRY/EXIT
          LDM    S0FLG       TEST IOU TYPE
          NJN    TPRX        IF ON AN S0/S0E
          LDM    OVLP        TEST OVERLAY LOAD PERMITTED
          NJN    TPRX        IF *MDD* COMMAND ACTIVE
          RJM    RTR         READ THE TEST MODE REGISTER
          LPN    14          MASK FOR JUST REQUESTED BITS
          ZJP    TPR2        IF NOT REQUESTED TEST IF NEEDED
          SHN    -1          ALIGN WITH PTUS. FLAGS
          STD    T1
          LDM    SCMT+PTUS.  CHECK *SCD* PORT(S)
          LPDL   T1
          NJN    TPR1        IF REQUESTED PORT IS HELD BY *SCD*
          LDC    MDMT        CHECK *MDD* PORT(S)
          STD    PT
          LDM    MDMT+PTUS.  TEST IF *MDD* HAS THE PORT
          LPDL   T1
          ZJN    TPRX        IF NEITHER MODE CURRENTLY HAS THE PORT
 TPR1     LDC    BPA
          STI    PT          RESET RTNP. FOR THE MODE
          UJN    TPRX        RETURN
 TVO      SPACE  4,15
**        TVO - TEST NOS/VE OPERATIONAL.
*
*         TESTS IF THE *DROPVE* FLAG OR TERMINATE SYSTEM FLAG HAS BEEN
*         SET IN THE EICB.
*
*         EXIT   TO *DDS* IF DEADSTART NOS/VE FLAG IS SET.
*                TO *CTV* IF TERMINATE NOS/VE FLAG IS SET.
*
*         USES   T1 - T6.
*
*         CALLS  SPA.


 TVO2     LDD    SB          CHECK IF PARAMETER TABLE ALREADY FOUND
          ADD    SB+1
          NJN    TVO3        IF ADDRESS ALREADY DEFINED
          RJM    SPA         SET *SCI* PARAMETER TABLE ADDRESS IF DEFINED
 TVO3     LDN    D8ST        TEST IF DEADSTART BIT HAS BEEN SET BY *SDA*
          RJM    IIB
          CRDL   T1
          LDD    T4
          LPN    1
          ZJN    TVOX        IF NOT RETURN
          CALL   DDS         INITIATE DUAL-STATE DEADSTART

 TVO4     LDD    IB          TEST IF EICB HAS BEEN DEFINED
          ADD    IB+1
          ADD    IB+2
          NJN    TVO2        IF DEFINED
          RJM    PIB         TRY FOR IT

 TVO      SUBR               ENTRY/EXIT
          LDDL   VA          TEST FOR *MDD* UTILITY MODE
          ZJN    TVO4        IF NOS/VE NOT AROUND
          LDM    SCMT+PTDB.  TEST IF *SCD* IS ACTIVE
          ZJN    TVOX        IF NOT THEN DONT TERMINATE
          LDK    D7ST        NOS STATUS WORD
          RJM    IIB
          CRDL   T1          READ *DROPVE* FLAG
          ADN    D8DS-D7ST
          CRDL   T3          READ TERMINATE NOS/VE BIT
          LDDL   T2
          LPN    20
          NJN    TVO1        IF *DROPVE* FLAG SET
          LDD    T6
          LMN    1
          NJN    TVOX        RETURN IF NOS/VE STILL OPERATIONAL
 TVO1     LDN    0           CLEAR *MDD* REPEAT FLAG
          STM    RFLG
          CALL   CTV         HANDLE TERMINATING NOS/VE
          QUAL   *

 PPNM     EQUAL
 PRRA     EQUAL
 SMPX     EQUAL
 TIMA     EQUAL
 TIMC     EQUAL
 TIMD     EQUAL
 TIME     EQUAL
 CTVA     EQUAL
 CDPA     EQUAL
 CDPB     EQUAL
          OVERLAY  (RESIDENT OVERLAY),*+5
 RESOL    SPACE  4,10
 RESOL    ROUTINE            DUMMY ROUTINE TO IDENTIFY OVERLAY
          QUAL   *
 AAC      SPACE  4,10
**        AAC - ACTIVATE ANALYSIS CODE ERROR PROCESSOR.
*
*         ENTRY  (A) = ANALYSIS CODE.
*                (AACA) = 1, IF *MDD* IS TO PROCESS MR ERRORS.
*                       = 0, IF *SCI* IS TO HANG ON MR ERRORS.
*
*         EXIT   TO *PAN* TO PROCESS THE ERROR.
*                (ANCD) = ANALYSIS CODE.
*                (OVLP) = 0.


 AAC      STML   ANCD        SAVE ANALYSIS CODE
          LDN    0           ENSURE THAT OVERLAY LOADS ARE PERMITTED
          STM    OVLP
          CALL   PAN         PROCESS ANALYSIS CODE

 AACA     CON    0           NONZERO IF *MDD* SHOULD PROCESS ERROR
 FTE      SPACE  4,10
**        FTE - FUNCTION TIME OUT PROCESSOR.
*
*         ENTRY  SAME AS *AAC*.


 FTE      EQU    AAC         *FTE* PROCESS IS THE SAME AS *AAC*
 ACL      SPACE  4,10
**        ACL - ACTIVATE CONTROLWARE LOAD.
*
*         ENTRY  (PT) = MODE TABLE ADDRESS.
*
*         USES   T2.
*
*         EXIT   (CHRC., PTNP., RTNL.) UPDATED.


 ACL      BSS    0           ENTRY
          LDN    0
          STM    CHRC.,PT    CLEAR CHARACTER COUNT
          STM    CWLD.,PT    CLEAR CONTROLWARE LOADED FLAG
          LDM    RTNL.,PT    GET CONTROLWARE LOAD ROUTINE
          STD    T2
          LDI    T2
          STI    PT          PROCESS CONTROLWARE LOAD NEXT
 ACL1     LJM    SMPX        EXIT
 BPA      SPACE  4,10
**        BPA - BREAK PORT ACCESS.
*
*         ENTRY  *F7* KEY DETECTED OR REQUESTED BIT SET
*                IN THE TESTMODE REGISTER.
*
*         EXIT   TO *RPR*.
*                TO *SMPX* VIA *ACL1* IF OUTPUT IN PROGRESS.
*
*         CALLS  RTR.


 BPA      BSS    0
          LDM    CHRC.,PT
          NJN    ACL1        IF NOT DONE OUTPUTTING
          CALL   RPR         RELINGUISH PORT RESERVATION
 CDP      SPACE  4,15
**        CDP - CHECK FOR DELAY ON PORTS.
*
*         IF A DELAY IS IN PROGRESS ON EITHER PORT, THIS ROUTINE DECREMENTS
*         THE CORRESPONDING DELAY COUNTER.
*
*         ENTRY  (CDPA) <> 0 IF A DELAY IS IN PROGRESS ON PORT 0.
*                (CDPB) <> 0 IF A DELAY IS IN PROGRESS ON PORT 1.
*
*         EXIT   (CDPA) OR (CDPB) DECREMENTED IF DELAY IN PROGRESS.


 CDP      SUBR               ENTRY/EXIT
          LDM    CDPA        CHECK PORT 0 DELAY COUNTER
          ZJN    CDP1        IF NO DELAY IN PROGRESS ON PORT 0
          SOM    CDPA        DECREMENT PORT 0 DELAY COUNTER
 CDP1     LDM    CDPB        CHECK PORT 1 DELAY COUNTER
          ZJN    CDPX        IF NO DELAY IN PROGRESS ON PORT 1
          SOM    CDPB        DECREMENT PORT 1 DELAY COUNTER
          UJN    CDPX        RETURN
 CPS      SPACE  4,10
**        CPS - CHECK PORT STATUS.
*
*         ENTRY  (A) = *PTDB.* FOR PORT BEING CHECKED.
*                (T0) = AVAILABLE PORTS.
*                (RDATA - RDATA+7) = *TM* REGISTER.
*
*         EXIT   (A) = 0, IF PORT(S) UNAVAILABLE AND REREQUESTED SET.
*                    > 0, IF PORT(S) AVAILABLE OR REREQUESTED NOT SET.
*
*         USES   T1.


 CPS      SUBR               ENTRY/EXIT
          ZJN    CPSX        IF MODE UNDEFINED
          LPN    3
          STD    T1
          LDM    CPSA,T1     SET PORT(S) REQUIRED
          LPDL   T0
          NJN    CPSX        IF REQUIRED PORT(S) AVAILABLE
          LDM    RDATA+7     CHECK REREQUESTED STATUS OF UNAVAILABLE PORT(S)
          LPML   CPSA,T1
          LMM    CPSA,T1
          LPN    0#30
          UJN    CPSX        RETURN WITH (A) = REREQUESTED STATUS

 CPSA     BSS    0           PORT REREQUESTED AND AVAILABLE INDEXED BY *PTDB.*
          LOC    0
          CON    0#11        PORT 0 ONLY
          CON    0#22        PORT 1 ONLY
          CON    0#33        PORT 0 INPUT, BOTH PORTS OUTPUT
          CON    0#33        PORT 1 INPUT, BOTH PORTS OUTPUT
          LOC    *O
 CSP      SPACE  4,10
**        CSP - CHECK *SCD* PORT.
*
*         THIS ROUTINE IS CALLED WHENEVER A CONTROL-G OR A LOST CARRIER CONDITION IS
*         DETECTED ON A PORT.  IF THE PORT IS THE SAME ONE THAT *SCD* MODE IS USING,
*         THEN THE *SCD* CONTROLWARE LOADED FLAG IS CLEARED.  NO CHECK IS MADE TO SEE
*         IF *SCD* MODE IS ACTIVE BECAUSE RESIDENT IS TIGHT ON SPACE AND IT DOES NOT
*         HURT IF THE FLAG IS CLEARED WHEN THE MODE IS NOT ACTIVE.
*
*         ENTRY  (T2) = PORT NUMBER THAT RECEIVED THE CONTROL-G OR LOST CARRIER CONDITION.
*
*         EXIT   (SCMT+CWLD.) = 0 IF *SCD* IS USING THE SAME PORT.


 CSP      SUBR               ENTRY/EXIT
          LDML   SCMT+PTUS.  GET *SCD* PORT NUMBER
          SHN    -2
          LPN    1
          LMD    T2          COMPARE WITH THE PORT THAT GOT THE CONDITION
          NJN    CSPX        IF NOT SAME AS *SCD* PORT
          STM    SCMT+CWLD.  CLEAR *SCD* CONTROLWARE LOADED FLAG
          UJN    CSPX        RETURN
 CST      SPACE  4,10
**        CST - CHECK *SCI* PARAMETER TABLE.
*
*         USES   T1, CM - CM+3.
*
*         CALLS  GSI, UDB, *SMT*.


 CST      SUBR               ENTRY/EXIT
          LDD    SB
          ADD    SB+1
          ZJN    CSTX        IF NO *SCI* PARAMETER TABLE
          RJM    GSI         GET *SCI* PARAMETER TABLE INTERLOCK
          LDML   SCMT+PTDB.  PROPAGATE *SCD* PORT ATTACHED FLAG
          LPC    0#1000
          STDL   T1
          LDDL   CM+2
          LPC    0#EFFF
          ADDL   T1
          STDL   CM+2
          LDML   MDMT+PTDB.  PROPAGATE *MDD* PORT ATTACHED FLAG
          LPC    10000
          ADD    CM+3
          STDL   CM+3
          LDM    SBAO        UPDATE PORT STATUS IN CM TABLE
          LMC    RR
          CWDL   CM          PROPAGATE FLAGS AND CLEAR INTERLOCK
          LDDL   CM+1        CHECK *SCD*/*MDD* DEFINITION CHANGED FLAGS
          LPC    0#C000
          ZJN    CSTX        IF NO CHANGES TO TABLE

*         THIS PIECE OF CODE MIGHT BE A CANDIDATE TO MOVE TO SMT.
*         IT IS PLACED HERE TO KEEP FROM GETTING *INVALID MONITOR
*         COMMAND* AT TRANSITION FROM BOOT TO CORE NOS/VE.

          LDD    CB          TEST IF NOS/VE COMMUNICATION IS SET UP
          ADD    CB+1
          ZJN    CST1        IF NOT
          LDM    SCMT+COMM.  RESET INPUT TO NOS/VE
          LPC    0#FF00
          STM    SCMT+COMM.
          LDN    0
          STM    SCMT+COMM.+1
          LDN    1
          RJM    UDB         WRITE WORD FOR NOS/VE
 CST1     CALL   SMT         RESET MODE TABLES
 GKC      SPACE  4,10
**        GKC - GET KEYBOARD CHARACTER.
*
*         EXIT   (A) = NEXT CHARACTER RECEIVED FROM KEYBOARD.
*
*         USES   T1, T2.


 GKC      SUBR               ENTRY/EXIT
          LDM    KBOP.,PT
          LPN    3
          ADD    PT
          ADK    CHARS.
          STD    T1
          LDI    T1          GET LAST CHARACTER
          STD    T2          SAVE CHARACTER
          ZJN    GKCX        IF NONE
          AOM    KBOP.,PT    INCREMENT OUTPUT POINTER
          LDN    0
          STI    T1          CLEAR CHARACTER FROM BUFFER
          LDD    T2
          UJN    GKCX        RETURN
 GSI      SPACE  4,10
**        GSI - GET *SCI* PARAMETER TABLE INTERLOCK.
*
*         EXIT   PARAMETER TABLE INTERLOCKED.
*                (CM - CM+3) = PARAMETER TABLE FIRST WORD WITH
*                              INTERLOCK BIT CLEARED.
*
*         CALLS  SPB.


 GSI      SUBR               ENTRY/EXIT
          LRD    SB
          RJM    SPB         SET PP BOUNDARY
 GSI1     LDN    0
          STD    CM
          STD    CM+2
          STD    CM+3
          LDC    SPIB        INTERLOCK BIT
          STDL   CM+1
          LDM    SBAO        *SCI* PARAMETER TABLE ADDRESS
          LMC    RR
          RDSL   CM          SET INTERLOCK
          LDDL   CM+1
          LPC    SPIB
          NJN    GSI1        IF INTERLOCK ALREADY SET
          UJN    GSIX        RETURN
 LNO      SPACE  4,10
**        LNO - LOAD NEXT OVERLAY.
*
*         ENTRY  (A) = 6/OVERLAY ID, 12/JUMP ADDRESS.
*
*         EXIT   TO ROUTINE IN OVERLAY LOADED.
*                TO *SMPX* IF OVERLAY LOAD INHIBITED.
*                (OVLS) INCREMENTED IF OVERLAY ACTUALLY LOADED.
*
*         USES   T1, W0 - W3.


 LNO2     LJM    SMPX        PRETEND MODE IS FINISHED

 LNO      SUBR               ENTRY
          STM    LNOB        SET OVERLAY JUMP ADDRESS
          SHN    -14         GET OVERLAY INDEX
          STD    T1
          LMC    **          COMPARE WITH CURRENT OVERLAY
 LNOC     EQU    *-1
          ZJN    LNO1        IF CURRENT OVERLAY
          LDM    OVLP        TEST IF OVERLAY LOAD RESTRICTED
          NJN    LNO2        IF SO
          AOML   OVLS        INCREMENT OVERLAY COUNTER
          LDD    T1          LOAD APPROPRIATE OVERLAY
          STM    LNOC        SAVE OVERLAY ID
          ADML   DOFF        (A) = DIRECTORY OFFSET
          LRD    SC+1        (R) = DIRECTORY ADDRESS
          LMC    RR          ACTIVATE R-REGISTER
          CRDL   W0          READ DIRECTORY ENTRY
          LDD    W0
          STM    LNOA        SET LOAD ADDRESS
          LDD    SC          RESIDENT OVERLAY ADDRESS
          ADDL   W3          ADD IN OFFSET
          ADC    RR+1        ACTIVATE R-REGISTER
          CRML   **,W1       READ IN OVERLAY
 LNOA     EQU    *-1
 LNO1     LJM    **          JUMP TO ROUTINE
 LNOB     EQU    *-1
          EJECT
 MUX      SPACE  4,10
**        MUX - DO THE I/O ON THE TWO PORT MUX.
*
*         OUTPUT THE CHARACTERS QUEUED UP FOR THIS MODE AND CHECK FOR
*         ANY INPUT DATA.
*
*         ENTRY  (PT) = MODE TABLE ADDRESS.
*                ((PT)+CHP0.) = ADDRESS OF CHARACTER STRING FOR PORT 0.
*                ((PT)+CHP1.) = ADDRESS OF CHARACTER STRING FOR PORT 1.
*                ((PT)+CHRC.) = SIZE OF CHARACTER STRING.
*
*         USES   T2.
*
*         CALLS  CSP, OTM, RDC.


*         CARRIER HAS BEEN LOST ON THE PORT.

 MUX8     LDN    1           SET CARRIER LOST FLAG FOR THIS PORT
          STM    MUXB,T2
          LDDL   PT          CHECK IF *MDD* PORT
          LMC    MDMT
          NJN    MUX9        IF NOT *MDD* PORT
          STML   OVLP        ALLOW OVERLAY LOADS
 MUX9     RJM    CSP         CHECK *SCD* PORT
          LDC    ACL         ACTIVATE CONTROLWARE LOAD
          STI    PT
          LDN    0           CLEAR *X-OFF* STATUS FOR THIS PORT
          STM    XOFF,T2
 MUX10    FNC    MXDM,MX     DESELECT PORT
          AJM    *,MX        WAIT FOR FUNCTION TO BE ACCEPTED

 MUX      SUBR               ENTRY/EXIT
          LDML   PTDB.,PT
          SHN    21-14
          PJN    MUXX        IF PORT IS NOT ACTIVE
          LDM    PTUS.,PT    GET PORTS USED
          ZJN    MUXX        IF NO OUTPUT PORT
          LPN    1           ISOLATE INPUT PORT
          STD    T2
          ADC    MXPT        ADD IN PORT SELECT FUNCTION
          STM    MUXA
*         PSN                NEED ON S0/S0E IF NO INSTRUCTION BEFORE *FNC*
          LDM    CDPA,T2     CHECK FOR DELAY IN PROGRESS ON THIS PORT
          NJN    MUXX        IF DELAY IN PROGRESS
          FNC    MXPT+0,MX   SELECT DESIRED PORT
 MUXA     EQU    *-1

*         CHECK PORT STATUS.

          FNC    MXSS,MX     GET PORT STATUS
          ACN    MX
          IAN    MX
          DCN    MX
          STM    MXS0,T2     SAVE PORT STATUS
          SHN    21-DCDB
          PJP    MUX8        IF LOST CARRIER
          LDM    MUXB,T2     CHECK IF CARRIER DOWN IN LAST PORT STATUS
          ZJN    MUX2        IF CARRIER NOT DOWN LAST TIME
          LDN    0           CLEAR CARRIER DOWN IN LAST STATUS FLAG
          STM    MUXB,T2

*         A 16 SECOND DELAY IS REQUIRED ON A PORT IF THE CARRIER GOES DOWN AND
*         COMES BACK UP.  THIS IS BECAUSE THE TPM DOES A 12 - 15 SECOND DELAY
*         IN THIS SITUATION DURING WHICH IT DOES NOT RESPOND TO FUNCTIONS OR
*         DATA.

          LDN    16D         SET DELAY TIME TO AT LEAST 15 SECONDS
          STM    CDPA,T2
 MUX1     LJM    MUX10       DESELECT PORT

 MUX2     LDM    MXS0,T2     CHECK DATA SET READY
          SHN    21-DSRB
          MJN    MUX3        IF DATA SET READY
          FNC    MXDR+1,MX   SET DATA TERMINAL READY
          AJM    *,MX        WAIT FOR FUNCTION COMPLETE

*         AFTER A SETDTR FUNCTION, *SCI* MUST DELAY BECAUSE OF A 0.5 SECOND
*         DELAY IN THE PC CONSOLE SOFTWARE.  IF *SCI* SENDS DATA TO THE
*         PC CONSOLE BEFORE THE PC CONSOLE DELAY IS COMPLETE, THAT DATA
*         WILL BE LOST.

          LDN    2           SET DELAY TIME TO AT LEAST 1 SECOND
          STM    CDPA,T2
          UJN    MUX1        DESELECT PORT

 MUX3     SHN    21-INRB-21+DSRB+22
          PJN    MUX4        IF NO INPUT AVAILABLE
          RJM    RDC         READ CHARACTER

*         CHECK FLOW CONTROL.

 MUX4     LDM    XOFF,T2
          NJN    MUX1        IF X-OFF RECEIVED
          LDM    MXS0,T2
          SHN    21-OBRB
          PJN    MUX1        IF OUTPUT BUFFER FULL

*         PROCESS PORT 0 OUTPUT.

          LDM    CHR0.,PT
          ZJN    MUX5        IF NO CHARACTERS TO OUTPUT ON PORT 0
          STD    T2          SAVE NUMBER
          FNC    MXPT+0,MX   SELECT PORT 0
          LDM    CHP0.,PT    GET POINTER FROM WHICH TO OUTPUT
          RJM    OTM         OUTPUT TO MUX
          STM    CHR0.,PT    SAVE REMAINING CHARACTERS
          ZJN    MUX5        IF MULTIPLEXOR ACCEPTED ALL THE CHARACTERS
          LMC    777777
          ADD    T2          COMPUTE NEW BUFFER ADDRESS
          RAM    CHP0.,PT

*         PROCESS PORT 1 OUTPUT.

 MUX5     LDM    CHR1.,PT    CHARACTERS TO OUTPUT ON PORT 1
          ZJN    MUX6        IF NONE
          STD    T2          SAVE NUMBER
          FNC    MXPT+1,MX   SELECT PORT 1
          LDM    CHP1.,PT    GET POINTER FROM WHICH TO OUTPUT
          RJM    OTM         OUTPUT TO MUX
          STM    CHR1.,PT    SAVE REMAINING CHARACTERS
          ZJN    MUX6        IF MULTIPLEXOR ACCEPTED ALL THE CHARACTERS
          LMC    777777
          ADD    T2          COMPUTE NEW BUFFER ADDRESS
          RAM    CHP1.,PT

*         UPDATE MASTER CHARACTER COUNTER.

 MUX6     LDM    CHR0.,PT    RECONCILE CHARACTER COUNTERS
          SBM    CHR1.,PT
          PJN    MUX7        IF PORT 0 HAS MORE CHARACTERS LEFT THAN PORT 1
          LDN    0           USE PORT 1 VALUE
 MUX7     ADM    CHR1.,PT
          STM    CHRC.,PT    SET MASTER CHARACTER COUNTER
          LJM    MUX10       RETURN
 MUXB     BSSZ   1           CARRIER LOST ON PORT 0
 MUXC     BSSZ   1           CARRIER LOST ON PORT 1
          ERRNZ  MUXC-MUXB-1 CELLS MUST BE CONTIGUOUS

 OTM      SPACE  4,10
**        OTM - OUTPUT TO MUX.
*
*         ENTRY  (A) = ADDRESS FROM WHICH TO BEGIN OUTPUT.
*                (T2) = NUMBER OF CHARACTERS TO OUTPUT.
*
*         EXIT   (A) = NUMBER OF UNSENT CHARACTERS.
*
*         USES   T1.


*         PROCESS PREMATURE TERMINATION OF OUTPUT.

 OTM2     STD    T1          SAVE NUMBER OF UNSENT CHARACTERS
          DCN    MX+40
          LDM    S0FLG       SET MAINFRAME TYPE (S0/S0E = 1, GENERIC = 0)
          RAD    T1          ACCOUNT FOR CHARACTER LOST BY S0/S0E

 OTM      SUBR               ENTRY/EXIT
          STM    OTMA        SET CHARACTER BUFFER ADDRESS
          LDD    T2          GET MAXIMUM NUMBER OF CHARACTERS
          FNC    MXWT,MX     ACTIVATE BUFFER FOR OUTPUT
          ACN    MX
          OAM    **,MX       OUTPUT TO PORT ON MUX
 OTMA     EQU    *-1

*         WAIT FOR OUTPUT TO COMPLETE OR TERMINATE PREMATURELY.

 OTM1     IJM    OTM2,MX     IF CHANNEL WENT INACTIVE
          FJM    OTM1,MX     WAIT FOR CHANNEL TO GO INACTIVE -OR- EMPTY
          DCN    MX+40
*         LDN    0
          UJN    OTMX        RETURN WITH (A) = 0
 SPA      SPACE  4,10
**        SPA - SET UP *SCI* PARAMETER TABLE ADDRESS FROM EICB.
*
*         IF THE *SCI* PARAMETER TABLE IS NOT DEFINED, *D7RS+2* MAY CONTAIN
*         EITHER ALL ONES OR ALL ZEROS.  THERE IS NO NEED TO CHECK FOR ALL
*         ZEROS SINCE THE RESULTING R-REGISTER AND OFFSET WOULD STILL BE ZERO.
*
*         EXIT   (SB - SB+1) = R-REGISTER IF PARAMETER TABLE IS DEFINED.
*                (SBAO) = OFFSET.
*
*         USES   W0 - W0+3.
*
*         CALLS  IIB, STA.


 SPA      SUBR               ENTRY/EXIT
          LDN    D7RS+2      GET ADDRESS FROM EICB
          RJM    IIB
          CRDL   W0
          LDDL   W0+2        CHECK IF TABLE DEFINED
          SHN    -15
          NJN    SPAX        IF NO PARAMETER TABLE DEFINED
          RJM    STA         CREATE R-REGISTER ADDRESS
          STM    SBAO        SAVE OFFSET
          SRD    SB          SAVE R-REGISTER
          UJN    SPAX        RETURN
 RDC      SPACE  4,10
**        RDC - READ CHARACTER.
*
*         ENTRY  INPUT AVAILABLE ON MUX.
*                (T2) = PORT NUMBER.
*
*         CHARACTER TRANSFERRED FROM PORT BLOCK TO CHARS. BUFFER.
*         IF CHARS. BUFFER IS FULL THE NEW CHARACTER IS IGNORED.
*
*         EXIT   (RTNP.) = *BPA* IF 1E,77 CHARACTER STRING READ.
*                        = *ACL* IF CONTROL-G RECEIVED IN ANY MODE.
*                        = *ACL* IF CONTROL-I RECEIVED IN *SCD/NOS* MODE.
*
*         USES   T3.
*
*         CALLS  CHS.


 RDC8     LDN    1           SET WAIT FLAG
 RDC9     STM    XOFF,T2     SET/CLEAR WAIT FLAG

 RDC      SUBR               ENTRY/EXIT
          FNC    MXRD,MX
          ACN    MX
          IAN    MX
          DCN    MX
          LPC    0#7F        TRIM PARITY
          ZJN    RDCX        IF NO CHARACTER
          STM    RDCA        SAVE KEYBOARD CHARACTER
          LMN    XON
          ZJN    RDC9        IF X-ON RECEIVED
          LMN    XOF&XON
          ZJN    RDC8        IF X-OFF RECEIVED
          LMN    RS&XOF
          NJN    RDC1        IF NOT START OF MULTIPLE CODE
          LDN    1
          STM    RSMC.,PT    SET FOUND 0#1E
          UJN    RDCX        RETURN

 RDC1     LMC    VV&RS       CHECK FOR LOWER CASE V
          ZJN    RDC3        IF MIGHT BE AN *F6* KEY
          LMN    WW&VV       CHECK FOR LOWER CASE W
          ZJN    RDC3        IF MIGHT BE AN *F7* KEY
          LMC    BEL&WW
          NJN    RDC1.5      IF NOT CONTROL-G
          RJM    CSP         CHECK *SCD* PORT
          LDDL   PT
          LMC    MDMT
          NJN    RDC2        IF NOT *MDD* MODE
          STM    OVLP        CLEAR PROHIBIT OVERLAY LOAD FLAG
          UJN    RDC2        CONTINUE

 RDC1.5   LDD    PT          CHECK FOR CONTROL-I IN *SCD/NOS* MODE
          LMC    SCMT
          NJN    RDC4        IF *MDD* MODE
          LDM    SCMT+SCDS.
          NJN    RDC4        IF *SCD/VE* MODE
          LDM    RDCA
          LMN    TAB
          NJN    RDC4        IF NOT CONTROL-I
 RDC2     LDC    ACL         ACTIVATE CONTROLWARE LOAD
          STI    PT          RESET RTNP.
          LJM    RDCX        RETURN

 RDC3     LDM    RSMC.,PT    TEST FOR *F6* KEY
          ZJN    RDC4        IF 1E NOT FOUND
          LDN    0           ENABLE OVERLAY LOAD
          STM    OVLP
          CALL   CHS         CHANGE DRIVER STATE?

 RDC4     LDM    KBIP.,PT    CALCULATE NEXT CHARACTER POSITION
          LPN    3
          ADC    CHARS.      (T3) = POINTER TO CHARS. BUFFER
          ADD    PT
          STD    T3
          LDD    PT          CHECK FOR *SCD/VE* MODE
          LMC    SCMT
          NJN    RDC6        IF *MDD* MODE
          LDM    SCMT+SCDS.
          ZJN    RDC6        IF *SCD/NOS* MODE
          LDM    RDCA
          SBN    0#12
          NJN    RDC5        IF NOT DC2
          LDM    SCMT+RSMC.
          NJN    RDC7        THROW CHARACTER AWAY
 RDC5     LDM    SCMT+RSMC.
          ZJN    RDC6        IF THE LAST CHARACTER WAS NOT A COMMAND CODE
          LDM    RDCA
          ADC    0#80        SET HIGH ORDER BIT TO FLAG A COMMAND CODE
          STM    RDCA
          LDN    0
          STM    SCMT+RSMC.  CLEAR COMMAND CODE FLAG
 RDC6     LDI    T3          CHECK FOR EMPTY SLOT IN CHARS BUFFER
          NJN    RDC7        IF SLOT NOT EMPTY THROW AWAY CHARACTER
          LDM    RDCA        PLACE CHARACTER IN EMPTY SLOT
          STI    T3
          AOM    KBIP.,PT    INCREMENT INPUT POINTER
 RDC7     LJM    RDCX        RETURN
 RTR      SPACE  4,10
**        RTR - READ TEST MODE REGISTER.
*
*         EXIT   (A) = LEAST SIGNIFICANT BITS IN REGISTER.
*
*         USES   RN.
*
*         CALLS  RMR.


 RTR      SUBR               ENTRY/EXIT
          LDC    ITMR        READ THE TEST MODE REGISTER
          STD    RN
          LDM    ELIO
          RJM    RMR         READMR RDATA,ELIO,ITMR
          UJN    RTRX        RETURN WITH (A) = (RDATA+7)
 SCP      SPACE  4,10
**        SCP - GO TO CURSOR.
*
*         PLACES CURSOR ON SCREEN AT XPOS.,YPOS..
*
*         USES   BP.


 SCP      SUBR               ENTRY/EXIT
          LDM    SCMT+CMOV.
          ZJN    SCPX        IF CURSOR ALREADY POSITIONED
          LDN    0
          STM    SCMT+CMOV.  RESET FLAG FOR CURSOR MOVED
          LDN    0#02        SEND POSITION CURSOR FUNCTION
          STIAO  BP
          LDM    SCMT+XPOS.
          ADM    SCMT+SCRN.  ADD SCREEN OFFSET
          STIAO  BP          X-POSITION
          LDM    SCMT+YPOS.
          STIAO  BP          Y-POSITION
          UJN    SCPX        RETURN
 SNS      SPACE  4,10
**        SNS - SERVICE NOS STATE.
*
*         WHEN NOS IS NOT ACTIVELY BEING DISPLAYED BY THE *SCD* MODE THIS
*         ROUTINE WILL INPUT ONE WORD FROM CHANNEL 10. IF A REQUEST FOR
*         INPUT IS RECEIVED A NUL IS RETURNED. A REQUEST TO GET OFF THE
*         CHANNEL IS ACTED UPON.  ALL OTHER INPUT IS DISCARDED.


 SNS1     SHN    21-10-21+14
          PJN    SNSX        IF NOT INPUT FUNCTION
          LDN    0
 MC1      OAN    CH          RETURN A NUL
 MC2      FJM    *,CH

 SNS      SUBR               ENTRY/EXIT
          LDML   SCMT+DATA.
          STDL   T6
          LDN    0
          STM    SCMT+DATA.
          LDDL   T6
          NJN    SNS3        IF THERE IS PREVIOUS DATA TO DEAL WITH
 SNS2     FSJM   SNSX,CH     IF CHANNEL NOT AVAILABLE
 MC3      EQU    SNS2
 MC4      EJM    SNSX,CH     IF CHANNEL EMPTY
 MC5      IAN    CH
 SNS3     SHN    21-17
          PJN    SNS2        IF NOT A VALID FUNCTION
          SHN    21-14-21+17
          PJN    SNS1        IF CC545 FUNCTION
          SHN    0-4-21+14
          LPN    3
          SBN    1
          NJN    SNS4        IF NOT UPDATE MODE FUNCTION
          LDN    2
 MC6      IAM    T2,CH       READ IN ADDRESS OF SCDPT
          CALL   RMT         RESET MODE TABLE

 SNS4     SBN    2-1
          NJN    SNSX        IF NOT GET OFF CHANNEL FUNCTION
 MC7      SCF    SNSX,CH     GET OFF CHANNEL
          LJM    SNSX        RETURN
 SVS      SPACE  4,10
**        SVS - SERVICE NOS/VE STATE.
*
*         THIS ROUTINE WILL INFORM NOS/VE THAT THE CURRENT LIST OF LINES
*         HAS ALL BEEN DISPLAYED AND THE CURRENT COMMAND HAS BEEN
*         ACCEPTED.
*
*         CALLS  UDB.


 SVS      SUBR               ENTRY/EXIT
          LDN    0
          STM    SCMT+COMM.+2  SET END OF LIST
          STM    SCMT+COMM.+3
          STM    SCMT+COMM.+4  SET COMMAND ACCEPTED
          LDN    2
          RJM    UDB         NOTIFY NOS/VE
          UJN    SVSX        RETURN
 UDB      SPACE  4,10
**        UDB - UPDATE DATA BLOCK.
*
*         INFORMS HOST THROUGH SCD COMMUNICATIONS BLOCK OF *SCD/VE* STATUS.
*
*         ENTRY  (A) = NUMBER OF WORDS TO UPDATE ON SCDCB.
*                (PT) = *SCD* MODE TABLE ADDRESS.
*
*         USES   T6.
*
*         CALLS  SPB.


 UDB      SUBR               ENTRY/EXIT
          STD    T6
          LRD    CB          POINT TO COMMUNICATIONS BLOCK
          RJM    SPB         SET PP BOUNDARY
          LDML   SCMT+CBAO.
          ADC    RR          USE R-REGISTER
          CWML   SCMT+COMM.,T6  WRITE COMMUNICATION BUFFER TO SCDCB
          UJN    UDBX        RETURN
 COMMON   SPACE  4,10
**        COMMON DECKS.


          LIST   X
*COPY     DSI$GET_HARDWARE_ELEMENT
*COPY     DSI$FIND_CIP_MODULE
*COPY     DSI$MAINTENANCE_REGISTER_ACCESS
*COPY     DSI$PP_UTILITY_SUBROUTINES
*COPY     DSI$PP_SSR_INTERFACE
 PPTYPE   SET    0           LOCATION OF *PPTY* IS DEFINED LATER
*COPY     DSI$VALIDATE_PP_BOUNDS


 NIOU     EQU    *
*COPY     DSI$DUMP_LOAD_IDLE_PP
 NIOUL    EQU    *

          OVERFLOW  OVLM     CHECK FOR OVERFLOW

 OVLL     SET    OVLL+1
          IFEQ   OVLL,21,2
 OVLL     SET    1
 OVLU     SET    OVLU+1
 OVLN     SET    OVLU*20+OVLL-21
 CHL      MICRO  OVLL,1,*"ALPHABET"*
 CHU      MICRO  OVLU,1,*"ALPHABET"*
 NU       OCTMIC OVLN,2
          TITLE  "PRGNAM""CHU""CHL" ("NU") - S0/S0E PP SUBROUTINES.
          IDENT  "PRGNAM""CHU""CHL",NIOU  "NU" S0/S0E PP SUBROUTINES
          QUAL   "PRGNAM""CHU""CHL"

          ORG    NIOU
*COPY     DSI$S0_DUMP_LOAD_IDLE_PP

 S0DLI    ROUTINE            DUMMY ROUTINE TO IDENTIFY S0/S0E PP ROUTINE OVERLAY
          QUAL   *

          ERRNG  NIOUL-*     S0/S0E PP ROUTINES ARE LARGER THAN FOR OTHER IOU-S

          OVERFLOW  OVLM     CHECK FOR OVERFLOW

*COPY     CTI$SCI_MDD_RESIDENT_CODE
*COPY     CTI$MDD_COMMAND_LIST
*COPY     CTI$SCI_MDD_COMMANDS
*COPY     CTI$SCI_VPB_DEADSTART_NOSVE
*COPY     CTP$SCI_VPB_DEADSTART_CY2000
*COPY     CTI$SCI_DEADSTART_VE_AFTER_MDD
*COPY     CTI$SCI_VPB_TERMINATE_NOSVE
*COPY     CTI$SCI_F6_F7_KEY
*COPY     CTI$SCI_TPM_PRESET
*COPY     CTI$SCI_SCD_VE_ROUTINES
*COPY     CTI$SCI_SCD_NOS_ROUTINES
*COPY     CTP$SCI_PROCESS_ANALYSIS_CODE
          LIST   *
          SPACE  4,10
          END
/EOR
