DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦177072fdd⟧ TextFile

    Length: 50432 (0xc500)
    Types: TextFile
    Notes: UNREAD_DATA_SECTOR
    Names: »MXISRC«

Derivation

└─⟦9d718387b⟧ Bits:30005557 8" CR80 Floppy CR80FD_0058 ( NICS TARE COMMUNICATIONS PROCESSOR 780126 NIC/210/version 01.01 MXI FR WORK )
    └─⟦b3aaefac6⟧ 
        └─ ⟦this⟧ »CP.MXISRC« 

TextFile

LIST
;=======================================================================
;  CARD DECK IDENTIFICATION NUMBER: CR/C/0106
;  MODULE IDENTIFICATION:           NIC/210
;  VERSION:   0301
;  DATED:     780321/FR,HQH
;
;  OPERATIONAL SUBMODULE MULTIPLEXER CPU INTERFACE  (MXI)
;
;    THE MXI SUBMODULE CONSISTS OF TWO PROCESSES BOTH OF WHICH RUN
;    MASKED WHILE UPDATING THEIR RESPECTIVE CDT/CST-RECORDS.
;
;    .  A CPU-INTERRUPT-DRIVEN
;       THE PURPOSE OF THE CPU INTERRUPT DRIVEN PROCESS IS TO SERVE THE
;       MUX-CPU GENERATED CPU INTERRUPTS REQUESTING THE COM-CPU TO SERVE
;       THE BY THE MUX-CPU CREATED MQI/MQO'S (MESSAGE QUEUES) THROUGH
;       WHICH SUPPLYING AND REMOVAL OF BINS FOR THE MUX IS CONTROLLED.
;       THE MXI WILL SERVE THE MUX WITH EMPTY BINS FOR INPUT DATA AND
;       FULL BINS FOR OUTPUT DATA. THE DIFFERENT STATUS CHANGES REPORTED
;       BY THE MUX WILL BE TRANSFERRED TO THE CST FOR LATER RETRIEVAL.
;
;    .  A LETTER-DRIVEN
;       THE PURPOSE OF THE LETTER DRIVEN PART OF THE MXI IS TO HANDLE
;       THE LTU RELATED SUBCOMMANDS ISSUED TO THE CMI SUBMODULE, I.E.
;       THE SETUU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DMMAND INTERPRETER SUBMODULE
;         .  OUTPUT DATA PROCESSING SUBMODULE
;
;       N B  THE MUX PSW MUST (AND WILL BE) 2#011
;
;  N O T E    IN ORDER FOR THE CPU INTERRUPT DRIVEN PROCESS TO SERVE
;             THE MQI/MQO'S SENT FROM THE MUX-CPU PROPERLY IT WILL HAVE
;             TO RUN AT A HIGHER (S/W) PRIORITY LEVEL THAN THE LETTER
;             DRIVEN PROCESS.
;
; THE SYNCHRONEOUS EDC BLOCK PROTOCOL IS NOT IMPLEMENTED.
;
;=======================================================================
BEGIN   MODULE SYSMXI
PMASK= #C413, CMASK= #9413
MXIOLTO:= TRUE           ;   SWITCH TO INCLUDE OLTO TEST POINTS
USE BASE
LOC=0
NOLIST
; $ADADEF
; $SYSLOC
; $CPBASE:
; $MONNAM:
; $TSTNAM:
LIST
MXUSHD:=      100/U_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DED BAUD RT- 600
MX05SP:=       8<8       ;   MED.SPD. HLT MSG BIN CNT 8*.58 =  5 SEC
MXMSBD:=      15         ;   NMB OF CHARS TO PASS DURING 576 MSEC ON
                         ;   MED SPEED CHANNEL BEFORE BIN DISCONNECT.
MX30SP:=      37<8       ;   LOW SPD HLT MSG BIN CNT  37*.8 = 30 SEC
MXLSBD:=      21         ;   NMB OF CHARS TO PASS DURING 806 MSEC ON
                         ;   LOW SPEED CHANNEL BEFORE BIN DISCONNECT.
MXSTUC:=      141        ;   STUCK TAPE CHARACTER COUNT
MXSTCP=       5          ;   RELEASE PULSE STUCK SUPERCOUNT
;
MXUSMS=                            %;   MASK FOR CLEARING LTU STATUS
              -1                   %;   ALL BITS BUT
              -1<CSTSNS            %;   NOT SEND STATUS
              -1<CSTRCS            %;   NOT RECEIVE STATUS
              -1<CSTCBR            %;   NOT CHANNEL BREAK
              -1<CSTRPS            %;   NOT RELEASE PULSE STUCK
              -1<CSTSCH             ;   NOT STATUS CHANGED
;
;=======================================================================
; CONSTANT DEFINITIONS
; LETTER-DRIVEN PROCESS (2)
;
;-----------------------------------------------------------------------
                     ; SUBCOMMAND NOMEMCLATURE
LOC=0                ; -----------------------
SBCTN:  LOC=LOC+1        ; SUBCOMMAND WORD 1:
   SBBTYP:=SBCTN<1       ;   SUBCOMMAND TYPE
   SBBNMB:=SBBTYP+1      ;   SUBCOMMAND SEQUENCE NUMBER
SBCSU1: LOC=LOC+1        ; SUBCOMMAND WORD 2:
   SBBLOG:=SBCSU1*2+1    ;   LOGICAL CHANNEL NUMBER
                         ;   FOR SET CORRESPONDING TO CSTCS1.
SBCSU2: LOC=LOC+1        ; SUBCOMMAND WORD 3 (ONLY SETUP):
                         ;   CORRESPONDS TO CSTCS2
SBCSU3: LOC=LOC+1        ; SUBCOMMAND WORD 4 (ONLY SETUP):
                         ;   CORRESPONDS TO CSTCS3
SBCSUC= LOC-SBCSU1       ; NMB OF CST PARAMETERS TO MOVE
;
;-----------------------------------------------------------------------
;
; ASYNCHRONUOUS LTU MEMORY LAY-OUT NOMENCLATURE
;
;        MODE 0 OF THE ASYNC LTU
LOC=0
MODE0:  LOC= LOC+1       ;   MODE 0 BYTE OF ASYNC LTU
   SAVLOC2= LOC, LOC= 0  ; BINARY BIT LAY-OUT
   LTABRS: LOC= LOC+4    ;   BAUD RATE CODE FIELD
   LTARSS: LOC= LOC+1    ;   LTU RESET BIT
   LTASYS: LOC= LOC+1    ;   SYNC/ASUNC SISTINCTION
   LTADSS: LOC= LOC+1    ;   CHANNEL DISABLE BIT
   LTAODS: LOC= LOC+1    ;   ODD/EVEN PARITY BIT
LOC=SAVLOC2
;
;        MODE 1 OF THE ASYNC LTU
MODE1:  LOC= LOC+1       ;   MODE 1 BYTE OF ASYNC LTU
   SAVLOC2= LOC, LOC= 0  ; BINARY BIT LAY-OUT
   LTAFDS: LOC= LOC+1    ;   FULL/HALF DUPLEX BIT
   LTABLS: LOC= LOC+1    ;   BLOCK/CHAR ON DEMAND
   LTAFRS: LOC= LOC+1    ;   FREE RUNNING/ON DEMAND MODE
   LTARDS: LOC= LOC+1    ;   END OF BLOCK (REL.PULSE ENABLE)
   LTASTS: LOC= LOC+2    ;   STOPBIT CODE FIELD
   LTASPS: LOC= LOC+1    ;   LOOP BIT
   LTACLS: LOC= LOC+1    ;   7BIT/5BIT CHAR LENGTH DESIGNATOR
;FF\f


;=======================================================================
;
; CPU INTERRUPT DRIVEN PROCESS (1)
;
;-------------------------------------------------------------------------------
; $PRCGEN1:
;-----------------------------------------------------------------------
; DATA AREA,INITIALIZED BY DBA
;
MXR7TS:       0                     ;   SAVE LOC FOR R7 UNDER OLTO CALLS
OTFPAG= 0,  OTFATY= 0,  OTFDTY= 0

OPTREG:
OTFTYP= RELFIL, OTFRCN= 1,  OTFRCL= 08, OTFST= 0
OTFNM1= <:RE:>, OTFNM2= <:GS:>      ;   $TFDGEN
OPTWRK:
OTFTYP= RELFIL, OTFRCN= 1,  OTFRCL= 12, OTFST= #2A
OTFNM1= <:WO:>, OTFNM2= <:RK:>      ;   $TFDGEN
OPTCST:
OTFTYP= RELFIL, OTFRCN= (CSTELGT+15)/16, OTFRCL= 16, OTFST= 0
OTFNM1= <:CS:>, OTFNM2= <:T :>      ;   $TFDGEN

MXITEM:                            %;   TRANSMISSION ERR MASK, MQI ERR
               1<MQIPER            %;   PARITY
              +1<MQICFE            %;   FRAMING
              +1<MQITXO            %;   TRANSMITTER OVERRUN
              +1<MQIRXO             ;   RECEIVER OVERRUN

MXOSTM:                             ;   OUTPUT STATUS MASK
MXISTM:                            %;   INPUT STATUS MASK
         1<MQISCH                  %;     STATUS CHANGED
        +1<MQIRXS                  %;     RECEIVE STATUS
        +1<MQITXS                   ;     SEND STATUS

MXUPBM:       #FF00                 ;   UPPER BYTE MASK
;
MXIDPL:                             ;   NOTE THIS LETTER WILL NOT BE
                                    ;        RETURNED BY IDP.
              0                     ;   REL. IDP LETTER REF
              MXIIDP                ;   LETTER URGENCY
              IDPLPN, MXILPN        ;   RECEIVER AND SENDER
                                    ;      RETURNED BY THE IDP;
;-----------------------------------------------------------------------
; $PRCGEN2:
;=======================================================================
;
; DATA AREA ,NOT INITIALIZED BY DBA
; CPU INTERRUPT-DRIVEN PROCESS
;
;-----------------------------------------------------------------------

MXIGST: LOC= LOC+1       ;   REL POINTER TO TOP OF GST
MXICDI: LOC= LOC+1       ;   REL POINTER TO GST CST-DIRECTORY

MXPMQI: LOC= LOC+1       ;   MQI PRESET VALUE (ONE REC BEFORE TOP)
MXIMQI: LOC= LOC+1       ;   CURRENTLY SERVED MQI
MXPMQO: LOC= LOC+1       ;   MQO PRESET VALUE (ONE REC BEFORE TOP)
MXIMQO: LOC= LOC+1       ;   CURRENTLY SERVED MQO

MXACST: LOC= LOC+1       ; ABS POINTER TO CURRENT CST RECORD
MXICST: LOC= LOC+1       ;   CURRENT CST-RECORD BEING SERVED
MXCBSA: LOC= LOC+1       ;   MEMORY SECTION FOR BIN
MXCLNK: LOC= LOC+1       ;   CURRENT POINTER TO BIN SERVED
MXCRBS: LOC= LOC+1       ;   CURRENT DISCONNECTED BIN STATUS
;-----------------------------------------------------------------------
; $PRCGEN3:
;FF\f


;=======================================================================
; $PRCGEN5:
;
; MXI, LETTER DRIVEN PROCESS.
;
; DATA AREA, INITIALIZED BY DBA
;
;-----------------------------------------------------------------------
;
        0                           ;   SAVE LOC FOR R7 UNDER OLTO CALLS

OTFTYP= RELFIL, OTFRCN= 1,  OTFRCL= 08, OTFST= 0
OTFNM1= <:RE:>, OTFNM2= <:GS:>      ;   $TFDGEN
OTFTYP= RELFIL, OTFRCN= 1,  OTFRCL= 14, OTFST= #65
OTFNM1= <:WO:>, OTFNM2= <:RK:>      ;   $TFDGEN
OTFTYP= RELFIL, OTFRCN= CSTELGT/16, OTFRCL= 16, OTFST= 0
OTFNM1= <:CT:>, OTFNM2= <:T :>      ;   $TFDGEN
OPTCDT:
OTFTYP= RELFIL, OTFRCN= (CDTELGT+15)/16, OTFRCL= 16, OTFST= 0
OTFNM1= <:CD:>, OTFNM2= <:T :>      ;   $TFDGEN

MXRTCL:                             ;
              0                     ;   REL. RTC LETTER PNT
              MXIRTC                ;   LETTER URGENCY
              RTCLPN                ;   RECEIVER
              MXILPN                ;   SENDER
;
;-----------------------------------------------------------------------
                     ; MULTIPLE BIT FIELD CONVERSION CONTROL FILE
                     ; ------------------------------------------
MXSUCS:                             ;
                                    ; BAUD RATE FIELD CONVERSION TABLE
MXABRT:                             ;
        LOC= 0
 MXLNK: MXASTT                      ;   LINK TO NEXT FIELD TABLE
 MXCTL: (CSTCS3-CSTCS1)+CSTBRT<4+MODE0<8 ; BAUDRATE FIELD
 MXMSK: CSTBRM                      ;   MASK
 MXVAL: 2#11111111                  ;   VALIDITY MASK  11111111
 MXTAB: LOC= LOC+MXSUCS             ;   FIRST TABLE ENTRY
        7<LTABRS                    ;   50
        6<LTABRS                    ;   75
        5<LTABRS                    ;   100
        4<LTABRS                    ;   110
        3<LTABRS                    ;   165
        2<LTABRS                    ;   200
        1<LTABRS                    ;   300
        0<LTABRS                    ;   600
;
                                    ;
                                    ; STOPBIT LENGTH FIELD CONVERSION
MXASTT:                             ; TABLE
        MXAMOT                      ;
        (CSTCS3-CSTCS1)+CSTSTB<4+MODE1<8 ; STOPBIT LENGTH FIELD
        CSTSTM                      ;
              2#1110                ;   VALIDITY MASK  111.
              0                     ;   SPARE
              0<LTASTS              ;   1.0
              1<LTASTS              ;   1.5
              2<LTASTS              ;   2.0
;
                                    ;
MXAMOT:                             ; MODE OF OPERATION CONVERSION TABLE
        MXAPRT                      ;
        (CSTCS2-CSTCS1)+CSTMOP<4+MODE1<8 ; MODE OF OPERATION FIELD
        CSTMOM                      ;
              2#1110                ;   VALIDITY MASK  111.
              0                     ;   ASYNC INTERNAL MODE
              (1<LTARDS)+1<LTAFRS   ;   FREE RUNNING ASYNC LTU
              (1<LTARDS)+0<LTABLS   ;   &HARACTER ON DEMAND
              (1<LTARDS)+1<LTABLS   ;   BLOCK ON DEMAND
;
                                    ;
                                    ; ASYNC LTU PARITY FIELD CONVERSION
MXAPRT:                             ; TABLE
        0                           ;   END OF FILE FLAG
        (CSTCS3-CSTCS1)+CSTPAY<4+MODE0<8 ; PARITY FIELD
        1<CSTPAY                    ;
              2#11
              0<LTACLS              ;   EVEN    -    (DEFAULT ASYNC)
              1<LTACLS              ;   ODD     -
;-----------------------------------------------------------------------
                                ; CDT PRESET COUNTERS
                                ; -------------------
MXIMCX: (BINLGT-BINWXO)*2<8+0   ;   MAX/CURRENT CHARACTER COUNT PRESET
MXRPAT: 250+250<8               ;   RELEASE PULSE SUBCOUNT
MXSPAC: MXSTUC-1+(MXSTUC-1)<8   ;   STUCK TAPE CHAR CNT CDT PRESET
;-----------------------------------------------------------------------
                     ; CHARACTER BLOCK SIZE CONV. TABLE
MXBLKT:              ; --------------------------------
        32           ;   SYNCHRONEOUS
        32           ;
        128          ;
        256          ;
        512          ;
        1024         ;
        2048         ;
        4096         ;
        30           ;   ASYNCHRONEOUS / ITA-5
        48           ;                   ITA-2
        60           ;
        96           ;
        120          ;
        192          ;
        480          ;
        768          ;
;-----------------------------------------------------------------------
                     ; MODE OF OPERATION CONVERSION TABLE (CST -> CDT)
MXDMOP:              ; ----------------------------------
        1            ;   0 - ASYNC. INTERNAL
        2            ;   1 - ASYNC. FREE RUNNING
        3            ;   2 - ASYNC. CHARACTER ON DEMAND
        4            ;   3 - ASYNC. BLOCK ON DEMAND
        5            ;   4 - SYNCHRONEOUS CHANNEL WITH/WITHOUT EDC
MXDMAX= LOC-MXDMOP   ;
;-----------------------------------------------------------------------
;
;-------------------------------------------------------------------------------
; $PRCGEN6:
;=======================================================================
;
; DATA AREA, NOT INITIALIZED BY DBA
;
; MXI, LETTER-DRIVEN PROCESS.
;
;-----------------------------------------------------------------------
MXLETT: LOC= LOC+1   ;   REL POINTER TO LETTER ACTIVATING LETTER DRIVEN
                     ;   PROCESS.

MXGST:  LOC= LOC+1   ;   REL POINTER TO TOP OF GST
MXNCC:  LOC= LOC+1   ;   POINTER TO NMB OF CONNECTED CHANNELS
MXNSC:  LOC= LOC+1   ;   GST NMB OF SYNCHRONEOUS
MXNAC:  LOC= LOC+1   ;   GST NMB OF ASYNCHRONEOUS CHANNELS
MXCDI:  LOC= LOC+1   ;   REL POINTER TO CST-RECORD LIBRARY

MXCST:  LOC= LOC+1   ;   REL ADDRESS CURRENT CST RECORD
MXCDT:  LOC= LOC+1   ;   CURRENT CDT RECORD ADDRESS
MXBSA:  LOC= LOC+1   ;   BIN BUFFER SECTION ADDRESS

MXPHY:  LOC= LOC+1   ;   SAVE FOR C4RRE-T LTU PHYS ADDRESS
MXMOD0: LOC= LOC+1   ;   LTU MODE 0 BYTE BUILD UP CELL
MXMOD1: LOC= LOC+1   ;            1 BYTE BUILD UP CELL

MXR7SV:       LOC=LOC+1             ;
; $PRCGEN7:                       ; END OF NON-DBA INITIALIZED
;FF\f


;=======================================================================
;
; SUBCOMMAND CASETABLE
; MUST RESIDE IN SUBMODULES PROG.REL. AREA.
;
USE PROG      LOC= 0
                     ; S/W ERROR JUMP TABLE
                     ; --------------------
MXELMI: MXELM        ;   4 - LETTER MECHANISM
MXESBI: MXESB        ;   7 - RMS (SEC QUEUE BIN CNT)
MXEIRI: MXEIR        ;   8 - INTERRUPT RESERVE ERROR
MXEIOI: MXEIO        ;   9 - BUFFER MISLINKAGE

MXEUXI: MXEUX        ;   8001 - UNEXPECTED SENDER
MXEXCI: MXEXC        ;   8002 - EXCESSIVE CHANNEL NUMBER
MXENBI: MXENB        ;   8003 - NO BUFFER AVAILABLE
MXECHI: MXECH        ;   8004 - CHANNEL MISMATCH
MXENEI: MXENE        ;   8005- EDC PROC REQUEST

MXIERR0:MXERR0       ;   POINTER TU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DOPOC                      ;        2  OPEN OUTPUT
        MXCLIC                      ;        3  CLOSE INPUT
        MXCLOC                      ;        4  CLOSE OUTPUT
        MXSTUP                      ;        5  SETUP PARAMETERS
MXCMAX= LOC-MXCSTY                  ;   MAX TYPE AS ENTRY IN CASE TABLE

MXGOBFI:      MXGOBF
;
MXCPEI: MXCPE        ;   6 - CP ERROR
MXCMEI: MXCME        ;   C - COMMAND ERROR
MXATVI: MXATV        ;   E - ATTEMPTED VIOLATION
;FF\f


;=======================================================================
;
; ERROR RECOVERY PROCEDURES

MXERR:
MXERR0:                             ; LOCAL INTERRUPT ENTRY, PROCESS0
MXERR1:                             ; LOCAL INTERRUPT ENTRY, PROCESS 1
        MODC  255-GSTNEDC           ;   *** TEMPORARY ***               ***
                                    ; RECOVERABLE ERRORS
                                    ; -----------------
MXENE:  MODC  GSTNEDC-GSTCHM        ;   8005 - EDC PROC REQUEST
MXECH:  MODC  GSTCHM-GSTNBF         ;   8004 - CHANNEL MISMATCH
MXENB:  MODC  GSTNBF-GSTXCN         ;   8003 - NO MORE BUFFERS AVAILABL
MXEXC:  MODC  GSTXCN-GSTUXS         ;   8002 - EXCESSIVE CHANNEL NMB
MXEUX:  MODC  GSTUXS-GSTIOE         ;   8001 - UNEXPECTED SENDER
                                    ; UN-RECOVERABLE ERRORS
                                    ; ---------------------
MXEIO:  MODC  GSTIOE-GSTIRE         ;   9 - BUFFER MISLINKAGE
MXEIR:  MODC  GSTIRE-GSTSBM         ;   8 - INTERRUPT RESERVATION ERROR
MXESB:  MODC  GSTSBM-GSTNLT         ;   7 - REM(SEC QUEUE BIN CNT) NE 0
MXENL:  MODC  GSTNLT-GSTCPE         ;   6 - NO MORE LETTERS AVAILLABLE
MXECP:  MODC  GSTCPE-GSTLME         ;   5 - CREATE PROCESS
MXELM:  MOVC  GSTLME            R0  ;   4 - LETTER MECHANISM
        MOV          R0  LINTCAUS   ;
        MOV          R4  LINTRET    ;   SAVE PROC REL POINTER
MXHWERR0:
        MON   ERR                   ;   ***TEMPORARY BRAKE
        JMPI             LINTRET    ;   RETURN ORIGINATOR ON RECOVERABL
;
;=======================================================================
; PROCEDURE MAKE PROCESS KNOWN TO MONITOR;
MXCRP:                              ;
        MOV   PRCID            R3   ;   GET OWN PROCESS ID
        MOV   BAS              R4   ;   GET OWN PROCESS BASE
        MON   CRP                   ;   INTRODUCE OWN PROCESS TO MONITOR
        JMP &        S4  MXECP      ;      ON MISMATCH, DUMP PROCESS
        JMP          X6             ;
;=======================================================================
; PROCEDURE GET LETTER AND COPY FROM OWN PROCESS;
MXGLET:                             ;
        MON   GLET                  ;   GET LETTER FROM POOL
        JMP &        S4  MXENL      ;      (NO MORE LETTERS LEFT);
        SUB   BAS               R5  ;   RELATIVIZE
        MOV          R5         X6  ;   SAVE LETTER PNT
        INCD         R5         R6  ;   ADVANCE TO NEXT WORDS
        MODC  3                     ;
        MOVM         X6         X5  ;   PRESET LETTER TYPE, RCVR , SNDR
        ADDC  -4                R5  ;   RE-ESTABLISH REL POINTER
        JMP          X4             ;   RETURN
;FF\f


;=======================================================================
MXINICPU:                           ; INITIALIZE CPU DRIVEN PROCESS
        JMP          S6 MXCRP       ;   CREATE OWN PROCESS
        MOVC  MXIDPL            R6  ;
        JMP          S4  MXGLET     ;   GET PRESET IDP LETTER
        CLR              LTMS4. X5  ;   FLAG FREE IDP LETTER;

        MOV   BAS               R2  ;   POINT OWN BASE
        MOV   GSTPTR            R5  ;   GET ABS POINTER TO THE GST
        SUB          R2         R5  ;      KAKE RELATIVE
        MOV          R5  MXIGST     ;      AND SAVE;
        MOV   GSTMQI.X5         R0  ;   GET ABS MQI POINTER
        SUB          R2         R0  ;
        MOV          R0  MXIMQI     ;
        ADDC  -MQIELGT          R0  ;      POINT ONE RECORD BELOW
        MOV          R0  MXPMQI     ;
        MOV   GSTMQO.    X5     R0  ;   GET ABS MQO POINTER
        SUB          R2         R0  ;
        MOV          R0  MXIMQO     ;
        ADDC  -MQOELGT          R0  ;      ADJUST TO ONE RECORD BELOW
        MOV          R0  MXPMQO     ;
        ADDC  GSTCDY            R5  ;   ADJUST GST POINTER TO START OF
        MOV          R5  MXICDI     ;      CHANNEL POINTERS;
        ADDC  -GSTCDY           R5  ;   RE-ESTABLISH GST TOP POINTER
        MOV   GSTMXP.X5         R0  ;   GET MUX CHANNEL PGM START ADDR
        SVS                     R3  ;   GET CURRENT CPU STATUS
        SWP                     R3  ;   RIGHT-ADJUST OWN CPU NMB
        XTR          R3  3          ;   ISOLATE
        ADDC  1                 R3  ;   LET CPU NMB START WITH ONE;
        MODN         R2             ;   COMPENSATE OWN  BASE
        MOVC  CPUIVT+7          R1  ;   POINT REL BOTTOM CPY TABLE
        MOVC  8                 R7  ;   FOR I:=1 UNTIL MAX NMB CPU'S
MXIC10:                             ;   DO
        INE          R7         R3  ;      IF NOT COM-CPU
        MOV          R0         X1  ;         THEN POINT CHANNEL START
        ADDC  -1                R1  ;      POINT NEXT ENTRY
        SOB          R7  MXIC10     ;   END INITIATING CPU VECTOR TAB;
        CPU                         ;   CPU INTR'PT TO START MUX CPU'S;


        MON   RCPU                  ;   RESERVE CPU INTERRUPT
        MON   RTI                   ;   RETURN TO PRIOR PROCESS.
        JMP              MXCPST     ;
;FF\f


;=======================================================================
MXCPST:                             ; CONTROL ENTERS HERE,
        MOVC  EXPR              R0  ;   GET EXPRESS PROCESS PRIORITY
        MON   INQ                   ;   INCLUDE PROCESS IN QUEUE
        JMPI &       S4  MXELMI     ;      (PROCESS NOT KNOWN TO MON);
                                    ; WHEN PROCESS INVOKED
MXMQIH:                             ;
        MOV   MXIMQI            R6  ;   GET MQI PNT
        IBZ          X6  MQIMXI     ;   IF NO DATA IN MQI
        JMP              MXMQOH     ;   THEN GO HANDLE MQO S
        MOV   MQIBAD.X6         R5  ;   GET BUFFER PNT
        MON   GBS        ;(4,6 KEPT)    GET BIN SECTION ADDRESS
        MOV          R3  MXCBSA     ;   SAVE CURRENT SECTION
        MOV   BAS               R0  ;   POINT ABS OWN BASE
        MOV          X6         R4  ;   GET LOG CHAN NMB
     IF MQILAD NE 0
        SRL          R4  MQILAD     ;   RIGHT ADJUST LOG CHAN NMB
     ELSE
        XTR          R4  MQILAX FI  ;   ISOLATE LOG CHAN ADDRESS
        MOD   MXICDI                ;
        MOV          X4         R4  ;   GET ABS CST PNT
        MOV          R4  MXACST     ;   SAVE ABS CST PNT
        SUB          R0         R4  ;      RELATIVE OWN BASE;
        MOV          R4  MXICST     ;   SAVE RELATIVE CST PNT
        MOV   MQISTA.X6         R1  ;   GET CURRENT MQISTATUS
        ILO          R1  1<MQIBML   ;   IF NO BUFFER DISCONNECT GENR'TED
        JMP              MXCPMQ     ;   THEN BYPASS BUFFER HANDLING
        SUB          R0         R5  ;   MAKE BIN REL OWN BASE;
        SVS                     R7  ;   SAVE CURRENT STATUS

        MOV   CSTCS2.X4         R2  ;   GET CHANNEL STATE WORD 2
        IBN          R2  CSTICO     ;   IF INPUT CLOSED
        JMP              MXMI10     ;   THEN
        LDS          R3             ;      SWITCH TO BIN SECTION
        MOV   BINLNK.X5         R4  ;      GET ADDRESS OF NEXT BIN
        CLR              BINLNK.X5  ;      FORCE THIS BIN TO BE LAST
        ADDC  BINSTA            R5  ;      POINT STATUS WORD
        MOVC  1<BINIO           X5  ;         TO FLAG INPUT BIN;
        MOD          R0             ;
        ADDC  -BINSTA           R5  ;      COMPUTE ABS ADDRESS OF BIN
        MODN         R0             ;
        MOV          R5  BINLNK.X4  ;      MAINTAIN BIN QUEUE STRUCTURE
        LDS          R7             ;      RETURN TO ORIGINAL SECTION
     MXIOLTOA= 10, MXIOLTOB= 0, MXIOLTOC= SL+LI1 ; $MXIOLTO
        JMP              MXCPMQ     ;   END MAINTAINING EMPTY BIN QUEUE;
;FF\f


;-----------------------------------------------------------------------
MXMI10:
        IBZ          R2  CSTSYN     ;   IF CHANNEL SETUP TO SYNC
        JMP              MXASYI     ;   THEN
;-----------------------------------------------------------------------
MXSYNI:                             ; SYNC INPUT HANDLING, ENTRY
        MOVC  1<GSTREC          R0  ;   FLAG RECOVERABLE ERROR
        MOV          R0  LINTCAUS   ;
        MOVC  <:I:>             R4
        MOV          R4  LINTRET
        MON          ERR
        MOV   MXIMQI            R6  ;   GET MQI PNT
        JMP              MXAI95
;-------------------------------------------------------------------------------
;   REGISTERS ENTRY
;       R0    OWN BASE
;       R1    CURRENT MQI STATUS
;       R2    CST STATUS INDICATORS
;       R3    BIN MEM SECTION ADDRESS
;       R4    REL CST POINTER
;       R5    REL BIN ADDRESS
;       R6    REL MQI POINTER
;       R7    OWN PSW
;
MXASYI:                             ; ASYNC. BUFFER HANDLING
                                    ; THE LINK OF THE BUFFER IS DERIVED
                                    ; AND STORED
        LDS          R3             ;   SWITCH TO BUFFERS SECTION
        MOVL  BINLNK.X5         R23 ;   GET LINK AND STATUS OF BUFFER
        LDS          R7             ;   SWITCH BACK
        MOV          R2  MXCLNK     ;   SAVE CURRENT LINK
        MOV          R3  MXCRBS     ;   SAVE CURRENT BUFFERSTATUS
     MXIOLTOA= 20, MXIOLTOB= OPTWRK ;   $MXIOLTO
                                    ; STATUS BIT XFER FROM MQI TO INPUT
                                    ; BUFFER:
                                    ;   STUCK TAPE
                                    ;   HALTED MESSAGE
                                    ;   TRANSMISSION ERROR
        MOVC  0                 R2  ;   RESET R2 AND BUILD BUFFER STATUS
        IBN          R1  MQISTC     ;   IF TAPE STUCK
        SETS         R2  BINSTP     ;      THEN SET STUCK TAPE BIT;
        XTR          R3  BINCNX     ;   GET BUFFER BYTE COUNT
        ADDC  CSTHME            R4  ;   GET CSTHME PNT
;
        JON          R3  MXAI20     ;   IF BUFFER EMPTY
        INC                     X4  ;   THEN  INCREASE HMSG COUNT
        MOV          X4         R0  ;      GET CURRENT AND PRESET HMSG;
        SWP                     R0  ;      PLACE CUR OVER PRESET AND VV;
        INE          X4         R0  ;      IF CURRENT NOT EQ PRESET
        JMP              MXAI30     ;         THEN BYPASS INDIC HANDLE;
        SETS         R2  BINHMS     ;      FLAG HALTED MSG IN BIN;
MXAI20:                             ;   END EMPTY BUFFER;
                                    ; CLEAR CURRENT HALT.MSG CNT
        MOV   MXUPBM            R0  ;   GET UPPER BYTE MASK
        AND          R0         X4  ;   LET ONLY UPP. BYTE REMAIN
MXAI30:                             ; END OF HALT.MSG BIN ACCOUNTING
        MOV   MXITEM            R6  ;   PROVIDE TRMS ERR. BIT MASK
        AND          R1         R6  ;
        INE          R6  0          ;   IF ANY SET
        SETS         R2  BINTER     ;   THEN SET TRANSERROR BIN BIR
        SVS                     R0  ;
        MOV   MXCBSA            R3  ;   GET CURRENT SECTION
        ADDC  BINSTA            R5  ;   GET STATUS PNT TO CURR.BUF.
        LDS          R3             ;   SWITCH TO BUFFERS SECTION
        MODC                       %;   BIN STATUS PUT MASK
              1<BINSTP             %;   STUCK TAPE BIT
             +1<BINHMS             %;   HALTED MESSAGE FLAG
             +1<BINTER              ;   TRANSMISSION ERROR
        PUT          R2         X5  ;   INSERT STATUS BITS IN BIN
        LDS          R0             ;   SWITCH BACK
        MOVC  1                 R3  ;   GET BUFFER CNT
        MOV   MXACST            R4  ;   GET ABS CST PNT
        ADDC  CSTFIB            R4  ;   CALC ABS CSTFIB PNT
        MOD   BAS                   ;   ABSOLUTIZE
        ADDC  -BINSTA           R5  ;   CALC ABS BIN PNT (FIRST)
        MOV          R5         R6  ;   PROVIDE ABS LAST BIN PNT
        MON   LNIQ       ;(NO REGS)     LINK INTO QUEUE
;-------------------------------------------------------------------------------
MXGBF:                              ; PROVIDE NEW INPUT BUFFER FOR MUX
        MOVC  1                 R3  ;   GET BUFFER COUNT
        MON   GNIB                  ;   GET INPUT BUFFERS SPECIFIED
        JMP &        S4 MXGOBF      ;   GO GET OUTPUT BUFFER
        MOV   MXCLNK            R4  ;   GET ABS BUFFER LINK
        IEQ          R4  0          ;   IF ZERO
        JMPI         S4  MXIERR0    ;      THEN INPUT DRIED UP; ****************
        SUB   BAS               R4  ;   RELATIVIZE
        MOV   MXCBSA            R2  ;
        SVS                     R1  ;   SAVE CURRENT STATUS
        LDS          R2             ;   SWITCH TO CURRENT SECTION
        INEP         X4  0          ;   IF LINK NOT CLEAR
        LDS &        R1             ;   SWITCH BACK
        JMPI&        S4  MXEIOI     ;   AND INDICATE ERROR *** TEMPORARY
        MOV          R5         X4  ;   ELSE PUT NEW ABS PNT INTO LINK
        LDS          R1             ;   SWITCH BACK
     MXIOLTOA= 30, MXIOLTOB= OPTWRK ;   $MXIOLTO
                                    ; STATUS XFER FROM MQISTA TO CST
                                    ; TRANSFERRED STATUS IS:
                                    ;    CHANGED STATUS
                                    ;    SEND STATUS
                                    ;    RECEIVE STATUS
                                    ;    CHANNEL BREAK (ASYNC ONLY)
                                    ;    RELEASE PULSE STUCK
MXCPMQ:                             ;
        MOV   MXICST            R4  ;
        MOV   MXIMQI            R6  ;
        MOV   MQISTA.X6         R2  ;   GET MQI(O) STATUS FLAGS
        ADDC  CSTVF1            R4  ;   GET VOLATILE STATUS FLAG PNT
        IBNP         R2  MQISCH     ;   IF STATUS CHANGED
        IBN &        R2  MQIBEB     ;      AND CHANNEL BREAK
        SETS&        X4  CSTCBR     ;      THEN SET CHANNEL BREAK BIT;

                                    ; OUTPUT STATUS CHANGE AND
                                    ;   RELEASE PULSE STUCH HANDLING:
        IBZ          R2  MQISCH     ;   IF NO STATUS CHANGE
        JMP              MXAI70     ;   THEN BYPASS OUTPUT STATUS UPDATE
        MOD   MXOSTM                ;   PROVIDE INPUT STATUS MASK (PUT)
        PUT          R2         X4  ;   PUT STATUS BITS INTO CST
        IBN          R2  MQIRGO     ;   IF REL PLS GT 1 CHAR
        SETS         X4  CSTRGO     ;   THEN SET INDICATOR
MXAI70:                             ; END OF OUTPUT STATUS UPDATE
        IBZ          R2  MQIRPS     ;   IF REL.PULSE NOT SUB-STUCK
        JMP              MXAI90     ;   THEN BYPASS REL PULSE CNT
        ADDC  CSTCS3-CSTVF1     R4  ;   CALC CSTCS3 PNT
        SBZP         R2  MQITXS     ;   IF SEND STATUS ON
        IBZP         X4  CSTFLD     ;      OR (SIMPLEX CHANNEL)
        IBZ &        R2  MQIRXS     ;          AND RECEIVE STATUS ON)
        JMP &            MXAI80     ;   THEN
        DEC       CSTSCN-CSTCS3.X4  ;      DECR REL PLS SUPER CNT
        MOV   CSTSCN-CSTCS3.X4  R0  ;   GET CURRENT CNT
        XTR          R0  8          ;   ISOLATE REL PLS CNT BYTE
        JON          R0  MXAI90     ;   IF NONZERO,THEN BYPASS STUCK SET
        ADDC  CSTVF1-CSTCS3     R4  ;   ELSE CALC CSTVSF PNT
        SETS         X4  CSTRPS     ;   SET REL PLS STUCK INDICATOR
        IBN          R2  MQIRPV     ;   IF REL PLS CURRENT ON
        SETS         X4  CSTRPV     ;   SET REL PLS VALUE TO ON
        ADDC  CSTCS3-CSTVF1     R4  ;   RESTORE CSTCS3 PNT
MXAI80:                             ; PRESET STUCK REL PLS CNT
        ADDC  CSTSCN-CSTCS3     R4  ;   RESTORE CSTSCN PNT
        MOVC  MXSTCP            X4  ;   PRESET STUCK REL PLS CNT BYTE
MXAI90:                             ; END OF REL PLS HANDLING
        SETS         X6  MQIIDP     ;      THEN SET MQI READY FOR IDP;
;-----------------------------------------------------------------------
MXAI95:
        MOV   MXICST            R7  ;   THEN GET CURRENT CST PNT :
        MOV          R7  OPTCST+STRT;      SAVE IN FILE DECLARATI:
     MXIOLTOA= 40, MXIOLTOB= OPTCST, MXIOLTOC= ML     ; $MXIOLTO
        IBN          X6  MQIEND     ;   IF LAST MQI
        MOV   MXPMQI            R6  ;   THENPRESET MQI PNT
        ADDC  MQIELGT           R6  ;   INCREMENT TO NEXT MQI
        MOV          R6  MXIMQI     ;   AND SAVE MQI PNT
        LDM   2#110                 ;   OPAN I/O WINDOW
        LDM   2#111                 ;   CLOSE WINDOW
        JMP              MXMQIH     ;
;FF\f


;=======================================================================
MXMQOH:                             ; HANDLE MQO-ELEMENT
        MOV   MXIMQO            R6  ;   GET MQO PNT
        IBZ          X6  MQOMXI     ;   IF ELEMEMT EMPTY
        JMP              MXQLEM
        MOV   MQOFLG.X6         R4  ;   GET LOG CHAN NMB
     IF MQOLAD NE 0
        SRL          R4  MQOLAD FI  ;   RIGHT ADJUST LOG CHAN NMB
        MOD   MXICDI                ;   FROM CDI
        MOV          X4         R7  ;   GET ABS CST PNT
        MOV          R7  MXACST     ;   SAVE ABS CSTPNT
        MODN  BAS                   ;   RELATIVIZE
        ADDC  CSTCS2            R7  ;   CALC REL CSTCS2 PNT
        IBZ          X7  CSTSYN     ;   IF CHAN SETUP FOR SYNC
        JMP              MXASYO     ;   THEN
;-----------------------------------------------------------------------
MXSYNO:                             ; SYNC OUTPUT HANDLING,ENTRY
        MOVC  1<GSTREC          R0  ;   FLAG RECOVERABLE ERROR
        MOV          R0  LINTCAUS   ;
        MOVC  <:O:>             R4
        MOV          R4  LINTRET
        MON          ERR
        JMP              MXAO95     ;   END SERVING SYNC OUTPUT
;-----------------------------------------------------------------------
; WRITE:   FOB.CST, MXIMQO
;
MXASYO:                             ; ASYNC OUTPUT HANDLING, ENTRY
        MOV   MQOSTA.X6         R2  ;   GET MQO STATUS
        IBN          R2  MQOBML     ;   IF BIN MISLINKED
        JMPI         S4  MXEIOI     ;      THEN CALL ERROR PROCESSING;
        ADDC  CSTSCN-CSTCS2     R7  ;   CALC R.P. SUPER CNT PNT
        SBZ          R2  MQOBDS     ;   IF NO BUFFER DISCONNECTED
        IBN          R2  MQOIBD     ;      OR DE-QUEUEING INHIBITED
        JMP              MXAO80     ;      THEN BYPASS BUFFER HANDLING;
                                    ; HANDLE DISCONNECTED BUFFER
        MOVC  MXSTCP            X7  ;      PRESET REL.PULS STUCK SUPCNT
        MOV   MQOBAD.X6         R5  ;      GET ABS BIN PNT
        MOV          R5  MXCLNK     ;      SAVE BUFFER LINK
        MOVC  1                 R3  ;      NMB OF BINS TO BE RELEASED
        MOV   MXACST            R4  ;   POINT (ABS) CURRENT CST RECORD
        ADDC  CSTFOB            R4  ;      CALC ABS CSTFOB PNT
        MON   LNOQ       ;(NONE KEPT)      LINK BIN OUT OF OUTPUT QUEUE
        JMPI &       S4  MXEIOI     ;         (LESS N BINS LEFT ERROR);
        MOD   MXCLNK                ;      PROVIDE MQI BIN ADDRESS
        INE          R5  0-0        ;      IF NOT IDENTICAL TO FOB.CST
        JMPI &       S4  MXEIOI     ;         THEN CP SYSTEM ERROR;
        MON   RNBF                  ;      RELEASE BIN TO FREE POOL;
        JMP              MXAO90     ;      BYPASS DRY-UP HANDLING
MXAO80:                             ;   ELSE
        IBNP         R2  MQOOBE     ;      IF OUTPUT BUFFER EMPTY
        ADDC  CSTVF1-CSTSCN     R7  ;         POINT DIRECT CSTVSF FIELD
        SETS         X7  CSTDRY     ;         FLAG CHAN DR!-UP;
MXAO90:                             ;   END OF DRY-UP CHANNEL CHECK;
MXAO95:                             ;
        MOV   MXIMQO            R6  ;   GET CURRENT MQO ELEMENT
        XTR          X6  1<MQOEND   ;   CLEAR MQOFLG, EXCEPT MQOEND
        IBN          X6  MQOEND     ;   IF MQO LAST IN ARRAY
        MOV   MXPMQO            R6  ;   THEN PRESET
        ADDC  MQOELGT           R6  ;   TO START OF ARRAY
        MOV          R6  MXIMQO     ;   SAVE NEW MQO PNT
        LDM   2#110                 ;   OPEN I/O WINDOW
        LDM   2#111                 ;   CLOSE AGAIN
        JMP              MXMQOH     ;   GO SERVE NEXT MQO




;-----------------------------------------------------------------------
MXQLEM:                             ;
        MOV   MXIMQI            R6  ;   GET CURRENT MQI PNT
        IBN          X6  MQIMXI     ;   IF MORE MQI'S
        JMP              MXMQIH     ;      THEN GO SERVE;

        MON   RCPU                  ;   RESERVE CPU INTERRUPT
        MOVC  IDLE              R0  ;   GET PROCESS IDLE STATE
        MON   INQ                   ;   SET PROCESS IDLE
        JMPI &       S4  MXELMI     ;      (PROCESS NOT KNOWN TO MON);
        MOV   MXIDPL            R5  ;   GET REL IDP
        SOZ              LTMS4. X5  ;   IF LETTER MXI PROPERTY
        JMP              MXQL50     ;   THEN
        DEC              LTMS4. X5  ;      FLAG LETTER BUSY
        MOVC  IDPLPN            R0  ;      SET UP IDP AS RECEIVER
        MOV          R0  LTRCV. X5  ;
        MOVC  MXILPN            R0  ;      SET UP OWN PROCESS ID
        MOV          R0  LTSND. X5  ;            AS SENDER.
        ADD   BAS               R5  ;      MAKE POINTER ABS
        MON   SLET                  ;      SEND LETTER
        JMPI&        S4  MXELMI     ;         (LETTER DATA ERROR);
        MON   SCH                   ;      ENSURE RECEIVER ACTIVATION
        JMP   MXCPST                ;   ON CPU INT GO TO MQI HANDLING
MXQL50:                             ;   ELSE
        MON   RTI                   ;      RETURN TO INTERRUPTED PROC
        JMP   MXCPST                ;   ON INTERRUPT, START MMQ HANDLING



;-----------------------------------------------------------------------
MXGOBF:                             ;
        JMPI         S4  MXENBI     ;   GET BUFFER FOR INPUT BY
        JMPI         S4  MXIERR0    ;   ***  TEMPORARY STOP ***         ***
                                    ;   GET INPUT BUFFER BY PREEMPTING
                                    ;   OUTPUT CHANNEL.
                                    ;   THIS WILL NOT BE IMPLEMENTED,
                                    ;   UNTIL PREEMPTION PROCEDURE IS
                                    ;   SETTLED
;FF\f


;=======================================================================
                                    ; LETTER DRIVEN PROCESS
;-----------------------------------------------------------------------
MXINILETT:                          ; INITIATE MXI SUBMODULE,
                                    ; FIRST PRESET RTC LETTER
        JMP          S6 MXCRP       ;   CREATE OWN PROCESS
        MOVC  MXRTCL            R6  ;
        JMP          S4  MXGLET     ;   GET PRESET RTC LETTER
        MOVC  100/10            R0  ;   SET UP RTC DELAY 100 MSEC
        MOV          R0  LTMS4. X5  ;
        ADD   BAS               R5  ;   MAKE LETTER POINTER ABS
        MON   SLET                  ;   START MXI-RTC ACTIVATION
        JMPI&        S4  MXELMI     ;      (LETTER MECH ERROR);

        MOV   BAS               R2  ;   POINT ABS OWN BASE
        MOV   GSTPTR            R5  ;   GET ABS GST POINTER
        SUB          R2         R5  ;      MAKE RELATIVE
        MOV          R5  MXGST      ;      AND SAVE;
        ADDC  GSTCDY            R5  ;   POINT TO START OF CHANNEL
        MOV          R5  MXCDI      ;      CDI PART OF GST;
        ADDC  GSTNCC-GSTCDY     R5  ;   POINT LOC WITH NMB CONNECTED
        MOV          R5  MXNCC      ;
        ADDC  GSTNSC-GSTNCC     R5  ;   NMB OF SYNCHRONEOUS
        MOV          R5  MXNSC      ;
        ADDC  GSTNAC-GSTNSC     R5  ;   NMB OF ASYNCHRONEOUS
        MOV          R5  MXNAC      ;

        MON   RTI                   ;
;FF\f


;=======================================================================
;  LTU RELATED SUBCOMMAND-EXECUTION IN MXI SUBMODULE
;
;  THE SUBCOMMANDS HANDLED ARE:
;
;         SETUP CHANNEL PARAMETERS
;         OPEN INPUT CHANNEL
;         OPEN OUTPUT CHANNEL
;         CLOSE INPUT CHANNEL
;         CLOSE OUTPUT CHANNEL
;
;  R7 POINTS TO LETTER (REL)
;
;  CONTROL ENTERS HERE WHEN A LETTER FROM CMI IS RECEIVED
;
;-----------------------------------------------------------------------
MXAWLT:                             ;
        MON   WL                    ;   AWAIT NEXT LETTER
MXGOTL:                             ;
        MOV          R7  MXLETT     ;   SAVE REL POINTER TO LETTER
        MOV   LTTYP. X7         R0  ;   GET PRIORITY OF LETTER
        ILO          R0  EXPR       ;   IF SAME OR HIGHER CPU DRIVEN
        JMP              MXGO10     ;   THEN
        MOVC  ORDN              R0  ;      FORCE LETTER DRIVEN PROCESS
        MON   INQ                   ;         TO BE DOWNGRADED;
        JMPI &       S4  MXELMI     ;         (LETTER MECH ERROR);
        MOV   MXLETT            R7  ;      RE-ESTABLISH LETTER POINTER
MXGO10:                             ;   END DOWNGRADING PROCESS PRIO;
        MOVC  0                 R0  ;
        MOV          R0  MXCDT      ;   FLAG NO CDT-RECORD RESERVED MXI
        MOV   LTRCV. X7         R4  ;   GET SENDER OF THIS LETTER
        IEQ   R4 RTCLPN, JMP MXLRTC ;   IF FROM RTC THEN GO SERVE
        IEQ   R4 CMILPN, JMP MXLCMI ;   IF FROM CMI THEN GO SERVE
        IEQ   R4 ODPLPN, JMP MXLODP ;   IF FROM ODP THEN GO SERVE;
        JMPI         S4  MXEUXI     ;   ELSE UNRECOVERABLE ERROR;
        JMP              MXAWLT     ;   GO WAIT FOR VALID LETTER

;-----------------------------------------------------------------------
MXINVT:                             ;
        JMP          S4  MXCPE      ;   SUB-COM'D TYPE 0 - SHOULD HAVE
                                    ;   FILTERED BY CMI;
;-----------------------------------------------------------------------

                                    ; COMPLETION CODE GENERATION
                                    ; --------------------------
MXCPE:  MODC  CMCCPE-CMCCME         ;   6 - CP ERROR DETECTED
SYNCERR:                            ;   *** TEMPORARY BRAKE  ***  SYNC
MXCME:  MODC  CMCCME-CMCATV         ;   C - COMMAND ERROR
MXATV:  MOVC  CMCATV-MXLTOK     R2  ;   E - ATTEMPTED VIOLATION
        MOV   MXCST             R6  ;   GET CURRENT CST PNT
        ADDC  CSTVF1            R6  ;   CALC CURRENT VSF PNT
        SETS         X6  CSTSUE     ;   INDICATE CHANNEL SETUP ERROR
        MOD   MXGST                 ;
        MOV          R4  GSTSBR     ;   SAVE LOC POINTER AS REFERENCE
        MOD          R2             ;   CONTINUE COMPL. CODE GENERATION

MXGO50:
        MOVC  MXLTOK            R2  ;   ON NORMAL RETURN GET OK-CODE
        MOV   MXCDT             R7  ;   POINT CURRENT CDT RECORD;
        JOZ          R7  MXGO90     ;   IF CDT RECORD RESERVED MXI
        ADDC  CDNCT             R7  ;      POINT CDT INDICATORS
        RELS         X7  CDUSED     ;      RELEASE CDT RECORD TO MUX;
        MOV          R7  OPTCDT+STRT;      SAVE IN FILE DECLARATI:
     MXIOLTOA=100, MXIOLTOB= OPTCDT, MXIOLTOC= MN ; $MXIOLTO
MXGO90:                             ;   END RELEASING CDT RECORD;
     MXIOLTOA= 105,  MXIOLTOB=OPTWRK  ;   $MXIOLTO
        LDM   2#100                 ;   ALLOW CPU AND I/0 INT
        MOV   MXLETT            R5  ;   GET REL LETTER PNT
        MOV          R2  MXCMP.X5   ;   PUT RETURN CODE INTO LETTER
        ADD   BAS               R5  ;   ABSOLUTIZE LETTER PNT
        MON   SLET                  ;   SEND LETTER
        JMPI &       S4  MXELMI     ;      ON LETTER CONTROL ERROR
        JMP              MXAWLT     ;   GO AWAIT NEXT LETTER

;FF\f


;=======================================================================
;
; CASE SERVE RTC LETTER
;
;       THIS PROCEDURE WILL BE USED TO ESTABLISH A REGULAR 100 MSEC
;       SERVICE FROM THE CPU-INTERRUPT DRIVEN PART OF THE MXI SUBMODULE
;       OF CURRENTLY ACTIVE MQI/MQO'S. THIS IS DONE VIA A REGULAR SCHED-
;       ULING DONE BY THE RTC SUBMODULE EACH 100 MSEC WHEREUPON THE
;       OTHER PART IS ENVOKEN BY A CPU INTERRUPT.
;
; WRITE:     TIMER FIELD OF DEDICATED RTC LETTER
;
; CALLED BY: MAIN LINE
; CALL TO:   MXAWLT OF MAIN LINE
;
;=======================================================================
MXLRTC:                             ;
        LDM   2#101                 ;   OPEN CPU INTR'PT WINDOW
        CPU                         ;   FORCE CPU-INTR'PT DRIVEN ACTIVE
        LDM   2#111                 ;      TO ALLOW MQI/MQO BEING DONE;

        MOVC  100/10            R0  ;   SET UP DELAY OF 100 MSEC
        MOV          R0  LTMS4.X7   ;      BEFORE NEXT WAKE-UP
        MON   SLET                  ;   ACTIVATE RTC-MXI AGAIN
        JMPI&        S4  MXELMI     ;      (LETTER MECH ERROR);
        JMP              MXAWLT     ;   RETURN MAIN LINE TO SERVE;
;
;FF\f


;=======================================================================
;
; CASE SERVE ODP LETTER
;
;       PRE-EMPT CHANNEL
;
; READ:   MXCDI
; WORK:   MXCST, MXCDT
; WRITE:  (FOB, LOB, NOB).CST, -.CDT
;
; CALLED BY: MAIN LINE
; CALL TO:    MXGO50 (SUCCESFULL), MXATV, MXCME, MXCPE (ON ERRORS)
;
;-----------------------------------------------------------------------
MXLODP:
        MOVC  CMILPN            R2  ;   FORCE CMI TO BE
        MOV          R2  LTRCV. X7  ;      RECEIVER;
        MOV   BAS               R2  ;   GET OWN BASE
        MOV   LTMS3. X7         R4  ;   GET OFR DAT1,DAT2 FIELDS
        SRL          R4  8          ;      ISOLATE CHANNEL NMB;
        MOD   MXCDI                 ;   POINT CORRESPONDING LIB IN GST
        MOV          X4         R4  ;      GET ABS CST-RECORD ADDRESS
        SUB          R2         R4  ;      MADE REL OWN BASE;
        MOV          R4  MXCST      ;
        MOV   CSTCDT.X4         R7  ;   GET ABS ASSOCIATED CDT-RECORD
        SUB          R2         R7  ;      FORCE REL OWN BASE;
        MOV          R7  MXCDT      ;   SAVE FOR LATER
        ADDC  CDNCT             R7  ;   POINT RESERVATION FLAGS
MXOD10: RESS         X7  CDUSED     ;   DO UNTIL CDT-RECORD FREE
        JMP              MXOD10     ;      WAIT FOR MUX;
        LDM   2#101                 ;   OPEN CPU INTR'PT WINDOW
        CPU                         ;   FORCE CPU-INTR'PT DRIVEN ACTIVE
        LDM   2#111                 ;      TO ALLOW MQI/MQO BEING DONE;
        MOV   CSTNOB.X4         R3  ;   GET NMB OF OUTBOUND BINS
        ADD          R2         R4  ;   RE-ESTAB ABS CST-REC ADDR
        ADDC  CSTFOB            R4  ;      AND POINT QUEUE CONTROL BLOCK
        MON   LNOQ                  ;   RELEASE BINS FROM QUEUE
        JMPI&        S4  MXCPEI     ;      (NOT NOB.CST BINS RETURN);
        MON   RNBF                  ;   RELEASE BINS TO FREE POOL;

        MOVC  1                 R3  ;   SET UP FOR GETTING ONE OUTPUT BIN
        MON   GNOB                  ;   GET OUTPUT BIN
        JMPI &       S4  MXATVI     ;      (NO BINS AVAIL);
        MOVC  1                 R3  ;   RE-ESTAB DUMMY BIN COUNT
        MOV   MXCST             R4  ;   POINT REL CURRENT CST REC
        MOD   BAS                   ;
        ADDC  CSTFOB            R4  ;   ABS OUTPUT BIN QUEUE CONTROL
        MON   LNIQ                  ;   ENTER (EMPTY) BIN AS OUTPUT
        MON   GBS                   ;   GET ACTUAL MEM SECTION
        MOVC  15                R0  ;
        CLRS         R3         R0  ;   FORCE MUX PSW 2#011
        MOV   MXCDT             R7  ;   POINT CURRENT CDT RECORD
        MOV          R3  CDOMSA.X7  ;   UPDATE BIN POINTER
        MOV          R5  CDOBUF.X7  ;
        CLR              CDOCCA.X7  ;   FLAG ALL CHARS OUTPUTTED
        CLR              CDOSTA.X7  ;   RESET OUTPUT STATUS
        MOVC  1<MQOBNA          R0  ;   FLAG BIN NOT AVALABLE
        MOV          R0  CDOEST.X7  ;
        JMP              MXGO50     ;   NORMAL RETURN TO CMI
;FF\f


;=======================================================================
;
; CASE SERVE CMI LETTER
;
; READ:   MXNCC, MXCDI
; WRITE:  NCT.CDT(CDUSED), MXCST, MXCDT
;
; CALLED BY: MAIN LINE
; CALL TO:    MXSTUP, MXOPIC, MXCLIC, MXOPOC, MXCLOC, MXCPE(ON ERROR)
;-----------------------------------------------------------------------
MXLCMI:                             ;
        MOV   BAS               R0  ;   POINT ABS OWN BASE
        MOV   LTMS2. X7         R5  ;   GET SUB COMD PNT
        SUB          R0         R5  ;   RELATIVIZE
        MOV   SBBTYP/2.X5       R3  ;   GET SUB-COM'D TYPE
     IF (SBBTYP AN 1) EQ 0
        XTR          R3  8          ;      ISOLATE SUB-COM'D TYPE ALONE
     ELSE
        SRL          R3  8      FI  ;
        MOV   SBBLOG/2.X5       R2  ;   GET LOGICAL CHANNEL NMB
     IF (SBBLOG AN 1) EQ 0
        XTR          R2  8          ;      ISOLATE CHANNEL NMB;
     ELSE
        SRL          R2  8      FI  ;
        MOV   MXNCC             R4  ;   POINT LOC WITH CONNECTED
        IHS          R2         X4  ;   IF REQUESTED LOG CHANNEL INV
        JMP          S4  MXCPE      ;      THEN CP ERROR;
        MOV          R2         R4  ;   GET LOG CHAN NMB TO INDEX REG
        MOD   MXCDI                 ;   FROM CDI
        MOV          X4         R6  ;   GET ABS CUR CST PNT
        SUB          R0         R6  ;      FORCE RELATIVE
        MOV          R6  MXCST      ;      AND SAVE REL CURRENT CST;
        MOV   CSTCDT.X6         R7  ;   GET ABS CDT PNT
        SUB          R0         R7  ;      FORCE RELATIVE OWN BASE;
        MOV          R7  MXCDT      ;   SAVE CURRENT CDT-REC POINTER
        ADDC  CDNCT             R7  ;   POINT CDT WORD WITH RESERVE BIT
MXLC50: RESS         X7  CDUSED     ;   DO UNTIL CDT RECORD RELEASED
        JMP              MXLC50     ;      WAIT FOR CDT FREE;
        LDM   2#101                 ;   OPEN CPU INTR'PT WINDOW
        CPU                         ;   FORCE lPu-INTR'PT DRIVEN ACTIVE
        LDM   2#111                 ;      TO ALLOW MQI/MQO BEING DONE;
        IHS          R3  MXCMAX     ;   IF TYPE OUT OF RANGE
        JMP          S4  MXCPE      ;
        MOD          R3             ;
        JMPI             MXCSTY     ;   THEN GO TO CASE OF TYPE
;FF\f


;=======================================================================
; SETUP CHANNEL PARAMETERS
;
;    .  CHANNEL MUST BE IN A CLOSED STATE (INPUT AND OUTPUT CLOSED);
;    .  THE CST IS FILLED WITH CHANNEL SETUP PAREMETERS.
;    .  ALPHABET CONVERTION TABLE REFERENCE INSERTED IN CST FOR IDP USE
;    .  THE ASSOCIATED LTU IS DISABLED AND FILLED WITH A TRANSLATION
;       OF THE CHANNEL SETUP PARAMETERS.
;    .  THE CDT WILL BE UPDATED EXCEPT FOR THE LINK AND TIMER FIELDS
;    .  THE CHANNEL IS DECLARED SETUP.
;
;       REGISTERS    CALL
;             R5     SUBCOMMAND (TYPE, SEQ.NMB, ETC...)
;             R6     REL TOP OF CST
;             R7     NCT.CDT POINTER
;
; READ:       MXGST, MXNAC, MXSUCS-CHAIN, MXSPAC, MXRPAT, MXIMCX,
;             MXDMOP, MXCST, (CS2,CS3).CST-INDICATORS
; WORK:       MXMOD0, MXMOD1, MXR7SV
; WRITE:      (CS1, CS2, CS3, TTA).CST, CDT-RECORD, (BYTE 0 & 1).LTU
;
; CALLED BY:  MXLCMI
; CALL TO:    MXGO50 (SUCCESFULL), MXATV, MXCME, MXCPE (ON ERRORS)
;
;-----------------------------------------------------------------------
MXSTUP:                             ; CHANNEL PARAMETER SETUP, ENTRY
        MOV   CSTCS2.X6         R2  ;   GET OPEN/CLOSE CST STATUS WORD
        SBN          R2  CSTOCO     ;   IF OUTPUT
        IBN          R2  CSTICO     ;      OR INPUT OPEN
        JMPI         S4  MXATVI     ;      THEN INDICATE VIOLATION;
        IBN          X7  CDOPEN     ;   IF EITHER IN/OUTPUT CHANNEL OPN
        JMPI         S4  MXCPEI     ;      THEN MXI CP ERROR;
;
        MOV          R6         R4  ;
        ADDC  CSTCS1            R4  ;   GET DEST PNT
        ADDC  SBCSU1            R5  ;   GET SOURCE PNT
        MODC  SBCSUC                ;   GET WORD CNT
        MOVM         X5         X4  ;   INSERT SUBCOMMAND INTO CST
        ADDC  (CSTCS2-CSTCS1)-SBCSUC R4 ; POINT DIRECT INDIC IN CSTCS2
        RELS         X4  CSTICO     ;   FORCE CHANNEL CLOSED
        RELS         X4  CSTOCO     ;      FOR INPUT/OUTPUT
        RELS         X4  CSTCSU     ;   FLAG CHANNEL BEING SET-UP;

        MOVL  CSTCS1.X6         R12 ;   GET JUST-INSTALLED CHAN STATUS
     MXIOLTOA=150, MXIOLTOB= 0      ;   $MXIOLTO
        IBZP         R2  CSTALP     ;   IF ALPHABETH ITA-2
        IBN          R2  CSTSYN     ;      AND SYNCHRONEOUS CHANNEL
        JMPI         S4  MXATVI     ;      THEN FLAG VIOLATION ATTEMPT;

     IF CSTLAD NE 0
        SRL          R1  CSTLAD     ;   ISOLATE LOGICAL CHAN NMB
     ELSE
        XTR          R1  CSTLAX FI  ;
        MOV   MXNAC             R4  ;
        IBZP         R2  CSTSYN     ;   IF ASYNCHRONEOUS LINE
        IHS          R1         X4  ;      AND LOG CHAN WITHIN SYNC
        JMPI         S4  MXATVI     ;      THEN VIOLATION ATTEMPT
        IBNP         R2  CSTSYN     ;   IF SYNCHRONEOUS LINE
        ILO          R1         X4  ;      AND WITHIN ASYNC RANGE
        JMPI         S4  MXATVI     ;      THEN FLAG VIOLATION ATTEMPT;

        IBN          R2  CSTALP     ;   IF ITA5 ALPHABET SPECIFIED
        MODC  GST55-GST25L          ;   ADD TABLE DIFFERENCE
        MOD   MXGST                 ;   FROM GST
        MOV   GST25L            R5  ;   GET XLATE TABLE PNT
        MOV          R5  CSTTTA.X6  ;   SAVE TABLE PNT IN CST

        MOV   CSTCS1.X6         R1  ;   GET PHYSICAL CHAN ADDRESS
     IF CSTPAD NE 0
        SRL          R1  CSTPAD     ;   RIGHT ADJUST PHYSICAL ADDRESS
     ELSE
        XTR          R1  CSTPAX FI  ;   ISOLATE PHYSICAL ADDRESS
        ILO           R1 #10         ;   IF PHYSICAL CHAN LESS #10
        JMPI         S4  MXATVI      ;     THEN FLAG VIOLATION ATTEMPT;
; *** HERE IT MIGHT BE CHECKED THAT NOT TWO CHANNELS AS IDENTICAL ***
        IBZ          R2  CSTSYN     ;   IF SETUP DOES NOT SPEC SYNC CHAN
        JMP              MXST50     ;   THEN HANDLE ASSYNC
        JMP          S4  SYNCERR    ;   *** TEMPORARY BRAKE  ***  SYNC
MXST50:
MXST51: SIO          R4         R1  ;   READ MODE 0 BYTE
        IBN          R4  LTASYS     ;   IF SYNC BIT SET
        JMPI         S4  MXATVI     ;   INDICATE VIOLATION
        SETS         R4  LTADSS     ;   SET CHANNEL DISABLE BIT
        SETS         R4  LTARSS     ;   SET CHANNEL RESET BIT
        CIO          R4         R1  ;   WRITE MODE 0 BYTE
        MOV          R1  MXPHY      ;   SAVE LTU PHYSICAL ADDRESS
        MOVC  MXASYW            R0  ;   GET ASYNC LTU RESET WAIT CNT
MXST70: SOB          R0  MXST70     ;   WAIT FOR ASYNC LTU TO RESET
        MOVC  MXMOD0            R0  ;   PRESET LTU SETUP AREA
        MOVC  MXMOD1            R1  ;   GET LTU MODE 1 PNT
        MOVC  0                 X0  ;
        MOVC  0                 X1  ;
;FF\f


                                    ; SINGLE BIT FIELD SETUP
        MOV   CSTCS3.X6         R3  ;
        IBN          R2  CSTALP     ;   SET CHARACTER LENGTH
        SETS         X1  LTACLS     ;
        IBN          R3  CSTFLD     ;   IF FULL DUPLEX
        SETS         X1  LTAFDS     ;   SET FULL DUPLEX DESIGN
                                    ; MULTIPLE BIT FIELD SETUP
        MOVC  MXSUCS           R4   ;   DO WHILE FIELDS TO SERVE
MXST80:
        MOV   MXCTL. X4        R2   ;   GET CONTROL WORD
        XTR          R2  4          ;   GET CST WORD DESIG
        MOD          R2             ;
        MOV   CSTCS1.X6        R3   ;   GET SELECTED CST WORD
        MOV   MXMSK. X4         R2  ;   GET FIELD MASK
        AND          R2        R3   ;   ISOLATE FIELD
        MOV   MXCTL. X4         R2  ;
        SRL          R2  4          ;
        MOD          R2             ;
        SRL          R3  0-0        ;   RIGHT ADJUST FIELD
        MOV   MXVAL. X4        R2   ;   GET VALIDITY TEST MASK
        MOD          R3             ;   MOD WITH VALUE
        IBZ          R2  0-0        ;   IF VALUE POINTS TO NONSET BIT
        JMPI         S4  MXCMEI     ;   THEN VALUE IS INVALID
        ADDC  MXTAB             R3  ;      POINT REL FIELD DESCRIPTOR
        ADD          R4         R3  ;      POINT BASE REL
        MOV   MXCTL. X4         R2  ;   GET CONTROL
        SRL          R2  8          ;   ISOLATE LTU MODE BYTE DESIG
        MOD          R2             ;   USE MODE BYTE DESIGNS DISPLACE
        IOR          X3         X0  ;   INSERT CONVERTED FIELD INTO BYTE
        SOZP  MXLNK. X4             ;   IF NOT LAST FIELD DESCRIPTOR
        MOV   MXLNK. X4         R4  ;      THEN POINT NEXT ENTRY
        JMP              MXST80     ;   END DO WHILE FIELDS TO SERVE;
;
        MOV   CSTCS3.X6         R1  ;   GET BAUDRATE
     IF CSTBRT NE 0
        SRL          R1  CSTBRT FI  ;   RIGHT ADJUST BAUDRATE FIELD
        XTR          R1  CSTBRX     ;   ISOLATE
        IGE          R1  MXMESP     ;   IF MED SPEED CHANNEL
        MODC  MX05SP-MX30SP         ;      PREP MED.SPD.HLT MSG CNT
        MOVC  MX30SP            R2  ;   GET LOW SPEED HLT. MSG BIN CNT
        MOV          R2  CSTHME.X6  ;   PUT MSG HALTED PRESET CNT IN CST
;-----------------------------------------------------------------------
                                    ; INSTALL PARAMETERS IN CDT
                                    ; AT CHANNEL SETUP, CDT IS PRESET
        MOV          R7         R0  ;   GET PNT TO CDT (MXTYP)
        ADDC  CDPCA-CDNCT       R0  ;   GET PNT TO CDT (MXTIM)
        MOV          R0         R2  ;
        ADDC  1                 R2  ;   GET CDT(MXTYP+1) REL PNT
        MOVC  0                 X0  ;   CLEAR CDT(MXTYP)
        MODC  CDTELGT-17-(CDPCA-CDLINK)
        MOVM         X0         X2  ;   CLEAR MXTIM TO MXOSTA
        MOVM         X0         X2
        MOV   MXSPAC            R2  ;   GET THE PRESET BLOCK COUNT
        MOV     R2 CDSPAC-CDNCT.X7  ;   PRESET STUCK TAPE COUNT FIELDS;
        MOV   MXRPAT            R2
        MOV     R2 CDRPAT-CDNCT.X7  ;   PRESET REL.PLS COUNT FIELDS
        MOV   MXIMCX            R2  ;   INPUT BUFFER PRESET VALUE
        MOV     R2 CDIMCX-CDNCT.X7  ;
;                                   ; TRANSFER MODE OF OPER FROM CST
        MOV   CSTCS2.X6         R0  ;   GET MOP FROM CST
        MOV          R0         R3  ;
     IF CSTMOP NE 0
        SRL          R0  CSTMOP FI  ;   RIGHT-ADJUST CST MODE WORD
        XTR          R0  CSTMOX     ;   ISOLATE CST MODE OF OPERATION
        IHS          R0  MXDMAX     ;   IF SPECIFIED MODE OUTSIDE RANGE
        JMPI         S4  MXATVI     ;      THEN VIOLATION ATTEMPT;
        IBN          R3  CSTEDC     ;   IF SYNCHRONEOUS CHAN WITH EDC
        ADDC  1<CSTMOP          R0  ;      THEN INCREASE MODE FLAG;
        MOD          R0             ;   USE TABLE LOOK-UP
        MOV   MXDMOP            R0  ;      TO GET CDT MODE;
     IF CDMOP NE 0
        SLL          R0  CDMOP  FI  ;   THEN POSITION MODE FIELD;
        IOR          R0         X7  ;   INSERT MOP INTO CDT(MXTYP)
        MOVC  MXLSBD            R3  ;   GET LOW SPEED BUF DISCON. TIME
        IGE          R1  MXMESP     ;   IF CHANNEL IS MED SPEED
        MOVC  MXMSBD            R3  ;   THEN GET MED.SP. BUF DISCON TIME
        MOV   R3   CDPBCT-CDNCT.X7  ;   PNT IN CDT (MXPBCT)
        MOV   R3   CDBCT-CDNCT. X7  ;   PNT IN CDT (MXBCT)
        MOV   CSTCS3.X6         R4  ;   GET BLK LGT STATUS WORD
     IF CSTBLT NE 0
        SRL          R4  CSTBLT FI  ;   RIGHT ADJUST BLK LGT FIELD
        XTR          R4  CSTBLX     ;   ISOLATE BLK LGT FIELD
        MOV   MXBLKT.X4         R1  ;   GET CONVERTED BLOCKLENGTH
        MOV   R1   CDOPBC-CDNCT.X7  ;   PRESET BUFFER CONNECT TIME
        MOV   R1   CDOBLC-CDNCT.X7  ;      CURRENT VALUE AS WELL;
        MOVC  1<MQOBNA          R0  ;   FORCE OUTPUT IN DRIED UP STATE
        MOV     R0 CDOEST-CDNCT.X7  ;      FOR THIS CHANNEL
        SVS                     R0  ;   GET OWN PSW
        MOVC  15                R1  ;
        CLRS         R0         R1  ;   FORCE MUX PSW 2#011
        MOV   BAS               R1
        ADD          R7         R1  ;   SIMULATE EMPTY BIN BY USING
        ADDC  CDOSTA-CDNCT      R1  ;      INTO OWN CDT-RECORD;
        MOVL   R01 CDOMSA-CDNCT.X7  ;

        MOVC  2                 R3  ;   SET UP TO GET MUX IDLE BINS
        MOV          R7  MXR7SV     ;   SAVE PNT
        MON   GNIB                  ;   GET INPUT BUFFERS SPECIFIED
        JMPI&         S4 MXGOBFI     ;      (GO GET FROM OUTPUT BUFS);
        MOVC  15                R7  ;
        CLRS         R3         R7  ;   FORCE MUX PSW 2#011
        MOV   MXR7SV            R7  ;   RE-ESTABLISH CDT POINTER;
        MOV     R3 CDIMSA-CDNCT.X7  ;   INSTALL INBUF SECTION IN CDT
        MOV     R5 CDIBUF-CDNCT.X7  ;      FIRST BUFFER AS WELL;

        MOV   MXPHY             R2  ;   GET CURRENT LTU CHANNEL ADDR
        MOV   R2    CDPCA-CDNCT.X7  ;   PUT PHYSICAL ADDRESS INTO CDT
        MOVC  -1                R1  ;   RESET THE LTU ENTIRELY
        MODC  2#1001<12             ;
        WIO          R1         R2  ;      LOOP MODE LATCH OF LTU CLEAR
        MOVC  MXMOD0            R1  ;   GET MOD0 BUILD WORD PNT
        CIO          X1         R2  ;   PUT MODE 0 BYTE INTO LTU
        MOVC  MXMOD1            R1  ;   GET MODE1 BUILD WORD PNT
        MOD8  MODE1                 ;   ADDRESS LTU MODE 1 BYTE
        CIO          X1         R2  ;   PUT MODE 1 BYTE INTO LTU
        MOV   MXCST             R4  ;   GET CST POINTER
        ADDC  CSTCS2            R4  ;   ADJUST TO CST INDICATORS
        SETS         X4  CSTCSU     ;      AND FLAG CHANNEL SET-UP;
        JMP              MXGO50     ;   NORMAL RETURN TO CMI
;FF\f


;=======================================================================
; OPEN INPUT CHANNEL
;
;    .  CHANNEL MUST HAVE BEEN SET UP PREVIOUSLY, NOT OPEN AND NOT IN
;       TEST MODE FOR THE OPEN INPUT SEQUENCE TO BE EXECUTED.
;    .  THE ASSOCIATED LTU IS ENABLED
;    .  INTERNAL LTU'S ARE SET IN 'CLEAR TO SEND' HIGH
;    .  THE TWO DUMMY BINS AT CDT ARE RESET (AS INPUT BINS).
;    .  CDT COUNTERS ARE PRESET AND THE CHANNEL DECLARED OPEN TO MUX
;
;       REGISTERS    CALL
;             R5     SUBCOMMAND (TYPE, SEQ.NMB, ETC...)
;             R6     REL TOP OF CST
;             R7     NCT.CDT POINTER
;
; READ:       MXRPAT, MXSPAC, MXIMCX, (PCA, IMSA, IBUF).CDT, LNK.BIN,
;             CS2.CST(CSTSYN, CSTCSU, CSTTST)
; WRITE:      STA.BIN, (IEST, ISTA, BCT, RPAT, SPAC, IMCX).CDT,
;             CS2.CST(CSTICO), NCT.CDT(CDOPEN)
;
; CALLED BY:  MXLCMI
; CALL TO:    MXGO50 (SUCCESFULL), MXATV, MXCME, MXCPE (ON ERRORS)
;
;-----------------------------------------------------------------------
MXOPIC:
        MOV   CSTCS2.X6         R2  ;   CET CHANNEL STATUS INDICATORS
        SBNP         R2  CSTTST     ;   IF LTU TEST MODE BIT HIGH
        SBN &        R2  CSTICO     ;      OR CHANNEL ALREADY OPEN
        IBZ &        R2  CSTCSU     ;      OR NOT SET-UP
        JMPI         S4  MXATVI     ;      THEN FLAG VIOLATION ATTEMPT

        MOV   CDPCA-CDNCT.X7    R1  ;   GET PHYSICAL ADDRESS OF LTU
        IBZ          R2  CSTSYN     ;   IF CHANNEL NOT SYNC
        JMP              MXOI70     ;   THEN GO HANDLE ASYNC
        JMP          S4  SYNCERR    ;   *** TEMPORARY BRAKE  ***  SYNC
MXOI70:
        ADDC  -CDNCT            R7  ;   POINT START OF CDT RECORD
        SON   CDIBUF.X7             ;   IF POINT EARTHED
        JMPI         S4  MXCPEI     ;      THEN INDICATE ERROR;
        SIO          R4         R1  ;   SENSE LTU
        MOVC  LTADSS            R3  ;   GET ASYNC CHAN DISAB. BIT
        CLRS         R4         R3  ;   CLEAR DISABLE BIT
        CIO          R4         R1  ;   CONTROL LTU
        MOVC  0                 R3  ;   FORCE 'CLEAR TO SEND' HIGH
        MODC  2#0010<12             ;      ADDRESS LTU 'CLEAR TO SEND'
        WIO          R3         R1  ;   (ACTIVE ONLY ON INTERNAL LTU'S)
        SETS         R2  CSTICO     ;   SET INPUT CHANNEL OPEN IN CST
        MOV          R2  CSTCS2.X6  ;   SAVE UPDATED CSTCS2 STATUS WORD

        SVS                     R0  ;   SAVE CURRENT STATUS
        MOV   BAS               R1  ;   GET OWN BASE
        MOVC  1<BINIO           R2  ;   FLAG INPUT BIN
        MOV   CDIMSA.X7         R3  ;   GET MEM SECTION ADDRESS
        SETS         R3  15         ;   FORCE COM-CPU PSW TO BE 2#111
        MOV   CDIBUF.X7         R5  ;   GET CURRENT BIN ADDRESS
        SUB          R1         R5  ;      RELATIVE
        LDS          R3             ;   SHIFT TO INPUT BIN SECTION
        MOV   BINLNK.X5         R4  ;   GET LINKAGE TO NEXT BIN
        MOV          R2  BINSTA.X5  ;   RESET STATUS TO INDICATE FREE
        MODN         R1
        MOV          R2  BINSTA.X4  ;      INPUT BINS;
        LDS          R0             ;   RETURN CURRENT SECTION

        CLR              CDIEST.X7  ;   CLEAR INPUT ERROR STATUS
        CLR              CDISTA.X7  ;   CLEAR INPUT STATE
        MOV   CDPBCT.X7         R2  ;   GET BUFFER DISCONNECT TIM PRESET
        MOV          R2  CDBCT. X7  ;   PRESET BUFFER DISCONNECT TIMER
        MOV   MXRPAT            R2  ;   GET PRESET/CURRENT START UP
        MOV          R2  CDRPAT.X7  ;      VALUE RELEASE PULSE STUCK;
        MOV   MXSPAC            R2  ;   GET PRESET/CURRENT START UP
        MOV          R2  CDSPAC.X7  ;      VALUES OF STUCK TAPE COUNTS;
        MOV   MXIMCX            R2  ;   GET MAX/CURRETN CHAR COUNT
        MOV          R2  CDIMCX.X7  ;      PRESET;
        ADDC  CDNCT             R7  ;   GET PNT TO CDT (MXTYP)
        SETS         X7  CDOPEN     ;   FLAG AT LEAST ONE CHANN5L O|5N
        JMP              MXGO50     ;   NORMAL RETURN TO CMI

;=======================================================================
; CLOSE INPUT CHANNEL
;
;    .  INPUT PART OF CHANNEL MUST BE IN OPEN STATE (ELSE ETTEMPT VIO)
;    .  INTERNAL LTU'S WILL HAVE 'CLEAR TO LEND' FORCED LOW
;    .  THE LTU WILL NOT BE DISABLED
;    .  INPUT BUFFERS CONNECTED TO THE CDT ARE DISCONNECTED AND LINKED
;       INTO THE APPROPRIATE INPUT QUEUE (FIB.CST).
;    .  TWO DUMMY INPUT BINS ARE LINKED TO THE CDT TO AVOID MUX DRY-UP
;    .  IF CHANNEL CLOSED FOR OUTPUT THE CDT WILL BE DECLARED CLOSED
;
;       REGISTERS    CALL
;             R5     SUBCOMMAND (TYPE, SEQ.NMB, ETC...)
;             R6     REL TOP OF CST
;             R7     NCT.CDT POINTER
;
; READ:       MXCST, MXCDT, CS2.CST(CSTOCO), PCA.CDT
; WRITE:      (FIB, LIB, NIB).CST, (IMSA, IBUF).CDT, CS2.CST(CSTICO),
;             NCT.CDT(CDOPEN)
;
; CALLED BY:  MXLCMI
; CALL TO:    MXGO50 (SUCCESFULL), MXATV, MXCME, MXCPE (ON ERRORS)
;
;-----------------------------------------------------------------------
MXCLIC:                             ;
        ADDC  CSTCS2            R6  ;   GET PNT TO CST (CSTCS2)
        IBZ          X6  CSTICO     ;   IF NOT OPEN
        JMPI         S4  MXATVI     ;      THEN FLAG VIOLATION ATTEMPT

        RELS         X6  CSTICO     ;   CLEAR INPUT OPEN BIT IN CST
        MOV   CDPCA-CDNCT.X7    R1  ;   GET PHYSICAL ADDRESS OF LTU
        MOVC  -1                R3  ;   FORCE 'CLEAR TO SEND' LOW
        MODC  2#0010<12             ;      ADDRESS LTU 'CLEAR TO SEND'
        WIO          R3         R1  ;   (ACTIVE ONLY ON INTERNAL LTU'S)

        MOV   CDIBUF-CDNCT.X7   R5  ;   GET CURRENT BUFFER
        IEQ          R5 0           ;   IF LINK ALLREADY ZERO
        JMPI         S4  MXCPEI     ;      (CP ERROR);
        MOVC  1                 R4  ;   TRY BUFFER COUNT = 1
        MOV          R5         R6  ;   SAVE ADDRESS OF FIRST BUFFER
        MOV   CDIMSA-CDNCT.X7   R3  ;   GET SECTION ADDRESS FROM CDT
        SETS         R3  15         ;   FORCE COM-CPU PSW TO BE 2#111
        MON   GNBA       ;(4,6 KEPT)    GET NEXT BUFFER ADDRESS
        JMP              MXCI50     ;   ON ZERO IN LINK: JMP
        ADDC 1                  R4  ;   INCREMENT BUFFER COUNT
        MON   GNBA       ;(4,6 KEPT)    GET NEXT LINK
        JMP              MXCI50     ;   ON LINK ZERO: CONTINUE NORMALLY
        JMPI         S4  MXCPEI     ;      (CP ERROR);

MXCI50:                             ;
        MOV          R4         R3  ;   POSITION BUFFER COUNT
        XCH          R6         R5  ;   POSITION FIRST/LAST BUFFER PNT
        MOV   MXCST             R4  ;   GET CURRENT REL CST PNT.
        MOD   BAS                   ;   ABSOLUTIZE
        ADDC  CSTFIB            R4  ;   GET CURRENT ABS CSTFIB PNT
        MON   LNIQ                  ;   LINK ONE OR TWO BUFFERS INTO QUEUE

        MOVC  2                 R3  ;   SET UP TO GET MUX IDLE BINS
        MON   GNIB                  ;   GET INPUT BUFFERS SPECIFIED
        JMPI&         S4 MXGOBFI     ;      (GO GET FROM OUTPUT BUFS);
        MOVC  15                R7  ;
        CLRS         R3         R7  ;   FORCE MUX PSW TO BE 2#011
        MOV   MXCDT             R7  ;   RE-ESTABLISH CDT POINTER;
        ADDC  CDNCT             R7  ;   POINT CDT INDICATORS
        MOV     R3 CDIMSA-CDNCT.X7  ;   INSTALL INBUF SECTION IN CDT
        MOV     R5 CDIBUF-CDNCT.X7  ;      FIRST BUFFER AS WELL;
        MOV   MXCST             R6  ;   RE-ESTABLISH CST POINTER
        ADDC  CSTCS2            R6  ;      POINT CST FLAGS
        IBZ          X6  CSTOCO     ;   IF OUTPUT CHANNEL CLOSED AS WELL
        RELS         X7  CDOPEN     ;      THEN FLAG BOTH CLOSED;
        JMP              MXGO50     ;   NORMAL RETURN TO CMI
;FF\f


;=======================================================================
; OPEN OUTPUT CHANNEL
;
;    .  CHANNEL MUST HAVE BEEN SET UP PREVIOUSLY, NOT OPEN AND NOT IN
;       TEST MODE FOR THE OPEN OUTPUT SEQUENCE TO BE EXECUTED.
;    .  THE ASSOCIATED LTU IS ENABLED
;    .  THE FIRST AVAILABLE OUTPUT BINS IF ANY ARE CONNECTED TO THE CDT
;       ELSE THE CDT WILL BE SET IN A DRIED UP STATE WITH A DUMMY BIN.
;    .  THE CHANNEL IS DECLARED OPEN TO THE MUX.
;
;       REGISTERS    CALL
;             R5     SUBCOMMAND (TYPE, SEQ.NMB, ETC...)
;             R6     REL TOP OF CST
;             R7     NCT.CDT POINTER
;
; READ:       MXCST, MXCDT, FOB.CST, (PCA, OPBLC).CDT,
;             CS2.CST(CSTCSU, CSTTST)
; WORK:       MXBSA
; WRITE:      CS2.CST(CSTOCO), (OEST, OMSA, OBUF, OBLC, OSTA).CDT,
;             NCT.CDT(CDOPEN)
;
; CALLED BY:  MXLCMI
; CALL TO:    MXGO50 (SUCCESFULL), MXATV, MXCME, MXCPE (ON ERRORS)
;
;-------------------------------------------------------------------------------
MXOPOC:                             ; OPEN OUTPUT CHANNEL, ENTRY
        MOV   CSTCS2.X6         R2  ;   GET CHANNEL STATUS INDICATORS
        SBNP         R2  CSTTST     ;   IF LTU TEST MODE BIT HIGH
        SBN &        R2  CSTOCO     ;      OR CHANNEL ALREADY OPEN
        IBZ &        R2  CSTCSU     ;      OR NOT SET-UP
        JMPI         S4  MXATVI     ;      THEN FLAG VIOLATION ATTEMPT;

        MOV   CDPCA-CDNCT.X7    R1  ;   GET PHYSICAL ADDRESS OF LTU
        IBZ          R2 CSTSYN      ;   IF CHANNEL NOT SYNC
        JMP              MXOO50     ;   GO HANDLE ASYNC CHANNEL
        JMP          S4  SYNCERR    ;   *** TEMPORARY BRAKE  ***  SYNC
MXOO50:
        SIO          R4         R1  ;   SENSE LTU
        MOVC  LTADSS            R3  ;
        CLRS         R4         R3  ;   CLEAR CHANNEL DISABLE BIT
        CIO          R4         R1  ;   CONTRI
        SETS         R2  CSTOCO     ;   SET OUTPUT OPEN IN CSTCS2
        MOV          R2  CSTCS2.X6  ;   PUT CSTCS2 BACK INTO CST
        MOV   CSTFOB.X6         R5  ;   GET CURRENT CSTFOB CONTENTS
        JOZ          R5  MXOO80     ;   IF OUTPUT TO HANDLE
        MON   GBS        ;(4,6 KEPT)       GET BIN SECTION ADDRESS
        MOVC  0                 R0  ;      FLAG OUTPUT READY
        JMP              MXOO90     ;
MXOO80:                             ;   ELSE
        MOVC  1                 R3  ;      SET UP TO GET ONE BIN
        MON   GNOB       ;(NO REGS)        GET AN EMPTY OUTPUT BIN
        JMPI &       S4  MXATVI     ;         (NO BINS AVAIL);
        MOV          R3  MXBSA      ;      SAVE DUMMY BIN PSW;
        MOVC  1                 R3  ;      SET FOR LINKING IN ONE BIN
        MOV   MXCST             R4  ;      POINT REL CURRENT CST RECORD
        MOD   BAS                   ;
        ADDC  CSTFOB            R4  ;      POINT ABS QUEUE CONTROL
        MON   LNIQ                  ;      LINK INTO EMPTY QUEUE
        MOVC  1<MQOBNA          R0  ;      FLAG BIN NOT AVALABLE
        MOV   MXBSA             R3  ;      RE-ESTABLISH BIN PSW
MXOO90:                             ;   END LINKING BIN FOR OUTPUT;
        MOVC  15                R7  ;
        CLRS         R3         R7  ;   FORCE MUX PSW TO BE 2#011
        MOV   MXCDT             R7  ;      RE-ESTABLISH CDT POINTER
        MOV          R0  CDOEST.X7  ;   PRESET OUTPUT STATUS CORRECT;
        MOV          R3  CDOMSA.X7  ;      INSTALL SECTION IN CDT
        MOV          R5  CDOBUF.X7  ;      INSTALL BIN ADDRESS IN CDT
        MOV   CDOPBLC.X7        R2  ;   GET BLK CNT PRESET
        MOV          R2  CDOBLC.X7  ;   PUT BLK CNT PRESET INTO CDT
        CLR              CDOSTA.X7  ;   CLEAR OUTPUT STATUS

        ADDC  CDTYP             R7  ;   GET PNT TO CDT (MXTYP)
        SETS         X7  CDOPEN     ;   FLAG AT LEAST ONE CHANNEL OPEN
        JMP              MXGO50     ;   NORMAL RETURN TO CMI

;=======================================================================
; CLOSE OUTPUT CHANNEL
;
;    THE CHANNELS OUTPUT PART IS SET CLOSED IN CDT
;
;    .  THE OUTPUT BUFFERS ARE LEFT UNCHANGED.
;    .  IF CHANNEL CLOSED FOR INPUT THE CDT WILL BE DECLARED CLOSED
;
;       REGISTERS    CALL
;             R5     SUBCOMMAND (TYPE, SEQ.NMB, ETC...)
;             R6     REL TOP OF CST
;             R7     NCT.CDT POINTER
;
; READ:       CS2.CST(CSTTST, CSTICO)
; WRITE:      (OEST, OMSA, OBUF).CDT, NCT.CDT(CDOPEN), CSI.CST(CSTOCO)
;
; CALLED BY:  MXLCMI
; CALL TO:    MXGO50 (SUCCESFULL), MXATV, MXCME, MXCPE (ON ERRORS)
;
;-----------------------------------------------------------------------
MXCLOC:                             ; CLOSE OUTPUT CHANNEL, ENTRY
        MOV   CSTCS2.X6         R2  ;   GET CHANNEL STATUS INDICATORS
        IBN          R2  CSTTST     ;   IF LTU TEST MODE BIT HIGH
        JMPI         S4  MXATVI     ;      THEN FLAG VIOLATION ATTEMPT;
        MOVC  1<MQOBNA          R0  ;   FORCE CHANNEL DRIED UP
        MOV     R0 CDOEST-CDNCT.X7  ;
        SVS                     R0  ;   GET OWN PSW
        MOVC  15                R1  ;
        CLRS         R0         R1  ;   FORCE MUX PSW TO BE 2#011
        MOV          R7         R1  ;   GET ADDRESS CURRENT CDT RECORD
        MOD   BAS                   ;      MAKE ABS
        ADDC  CDOSTA-CDNCT      R1  ;      EMPTY BIN SIMULATOR
        MOVL   R01 CDOMSA-CDNCT.X7  ;

        ADDC  CSTCS2            R6  ;   GET PNT TO CST (CSTCS2)
        RELS         X6  CSTOCO     ;   CLEAR OUTPUT OPEN BIT IN CST
        IBZ          X6  CSTICO     ;   IF INPUT CLOSED AS WELL
        RELS         X7  CDOPEN     ;      THEN FLAG NO CHANNELS OPEN;
        JMP              MXGO50     ;   NORMAL RETURN TO CMI
;FF\f


;-----------------------------------------------------------------------
; PROCEDURE FOR SERVING LOCAL INTERRUPT
;       A CHECK IS MADE IF TIME OUT AT FIRST LTU ACCESS TO AVOID KILL
;       OF LETTER DRIVEN PART OF MXI SUBMODULE DUE MP COMMAND ERROR.
;
;-----------------------------------------------------------------------
MXHWERR1:
        MOV   LINTCAUS          R3  ;      AND CAUSE OF LOCAL INTERRUPT
        MOV   LINTRET           R4  ;   GET LOC IN ERROR
        IEQP         R4  MXST51     ;   IF LOCATION FOR SIO LTU-ADDRESS
        IEQ          R3  3          ;      AND TIME OUT AT FIRST ACCESS
        JMPI         S6  MXATVI     ;      THEN ATTEMPTED VIOLATION
        MON   ERR                   ;   CALL ON-LINE ERROR PROCESSING;
        JMPI             LINTRET    ;
;=======================================================================
XNAME1= <:MX:>, XNAME2= <:I:>       ;   SUBMODULE ID
XID0=   MXCLPN                      ;
XPRPC0= MXINICPU                    ;   CPU INTERRUPT DRIVEN PROCESS
XTIM0=  100                         ;
XMASK0=#E000                        ;   NO INTERRUPTS ALLOWED
XERROR0=MXHWERR0
XID1=   MXILPN                      ;
XPRPC1= MXINILETT                   ;   LETTER DRIVEN PROCESS
XTIM1=  100                         U_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_DU_RNAE_D