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

⟦764b18e48⟧ TextFile

    Length: 69248 (0x10e80)
    Types: TextFile
    Names: »EDMSOD«

Derivation

└─⟦7c4388e5c⟧ Bits:30005071 8" CR80 Floppy CR80FD_0009 ( EDM SYS 1 PJ DEC 3,80 )
    └─⟦193e12850⟧ 
        └─ ⟦this⟧ »EDMSOD« 

TextFile

LIST
;-----------------------------------------------------------------------
;
;  PROJECT:  NICS-TARE/CP
;
;  MODULE IDENTIFICATION:  NIC/290
;
;  CPS NAME:     ERROR DETECTION AND CORRECTION (EDC) SUBMODULE
;                EDC MAIN PROGRAM SECTION (EDM).
;
;  MERGE FILES: SEE LIST BELOW
;
;  MODULE FILES: EDMSOD,EDMMOD,EDMHOD,EDMNOD,EDMVOD
;
;  REFERENCES:   NIC/200/PSP/0006
;
;-----------------------------------------------------------------------
BEGIN MODULE EDMSYS
USE BASE
XDATE:=#$OC
;-----------------------------------------------------------------------
;
;        MERGE FILE MESSAGES
;
;-----------------------------------------------------------------------
NOLIST
MESSAGE <:CALL XPDNOD:> $XPDNOD
MESSAGE <:CALL SYSNOD:> $SYSNOD
MESSAGE <:CALL MNNNOD:> $MNNNOD
MESSAGE <:CALL CCONOD:> $CCONOD
MESSAGE <:CALL ADANOD:> $ADANOD
MESSAGE <:CALL GDSNOD:> $GDSNOD
MESSAGE <:CALL LETNOD:> $LETNOD
MESSAGE <:CALL PCFNOD:> $PCFNOD
MESSAGE <:CALL CDTNOD:> $CDTNOD
MESSAGE <:CALL ECFNOD:> $ECFNOD
MESSAGE <:CALL EOCNOD:> $EOCNOD
MESSAGE <:CALL EDCNOD:> $EDCNOD
MESSAGE <:CALL EDINOD:> $EDINOD
MESSAGE <:CALL EDONOD:> $EDONOD
MESSAGE <:CALL CSTNOD:> $CSTNOD
MESSAGE <:CALL GSTNOD:> $GSTNOD
MESSAGE <:CALL MQXNOD:> $MQXNOD
MESSAGE <:CALL BINNOD:> $BINNOD
MESSAGE <:CALL MSBNOD:> $MSBNOD
MESSAGE <:CALL COPNOD:> $COPNOD
MESSAGE <:CALL DBPNOD:> $DBPNOD
MESSAGE <:CALL DANNOD:> $DANNOD
LIST
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
;
; RETURN LINKS (RL)/WORK.
;
;-----------------------------------------------------------------------
LOC=EMBASE
INTSTA: LOC=LOC+1                   ;   INT._DRIVEN_PROCESS STATE (IDLE/]1>!)
;-----------------------------------------------------------------------
;
; THE FOLLOWING ARE RETURN LINKS FOR VARIOUS ROUTINES
;
;-----------------------------------------------------------------------
RL1000: LOC=LOC+1                   ;
RL1050: LOC=LOC+1                   ;
RL1055: LOC=LOC+1                   ;
RL1060: LOC=LOC+1                   ;
RL1100: LOC=LOC+1                   ;
RL1220: LOC=LOC+1                   ;
RL1230: LOC=LOC+1                   ;
RL1250: LOC=LOC+1                   ;
RL1252: LOC=LOC+1                   ;
RL1260: LOC=LOC+1                   ;
RL1390: LOC=LOC+1                   ;
RL1400: LOC=LOC+1                   ;
RL1410: LOC=LOC+1                   ;
RL1460: LOC=LOC+1                   ;
RL1470: LOC=LOC+1                   ;
RL1510: LOC=LOC+1                   ;
RL1520: LOC=LOC+1                   ;
RL1540: LOC=LOC+1                   ;
RL1550: LOC=LOC+1                   ;
RL1560: LOC=LOC+1                   ;
RL1600: LOC=LOC+1                   ;
RL1650: LOC=LOC+1                   ;
RL3200: LOC=LOC+1                   ;
RL3210: LOC=LOC+1                   ;
RL3300: LOC=LOC+1                   ;
RL3310: LOC=LOC+1                   ;
RL3500: LOC=LOC+1                   ;
RL3600: LOC=LOC+1                   ;
RL3380: LOC=LOC+1                   ;
;-----------------------------------------------------------------------
;
; ASSIGNED CONSTANTS
;
;-----------------------------------------------------------------------
PCIDLE:=-1                          ;   PROCESS IDLE.
                                    ;
                                    ; BITS:
BIT7:=  7                           ;
                                    ; CAUSE CODES:
TIMEOUT:=3                          ;   TIMEOUT
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
;
; EDC MAIN PROGRAM SECTION.
;
;-----------------------------------------------------------------------
USE PROG
LOC=EMPROG
EI1650:ED1650                       ;
;-----------------------------------------------------------------------
; INITIALIZE THE INTERRUPT PROCESS (EDI)
;
; CALLED BY: ED2000
;
; CALLS: ED1050, ED1055, ED1060
;
; ENTRIES: ED1000
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3        -                  DESTROYED
; R4                 LINK               DESTROYED
; R5,R6,R7           -                  DESTROYED
;-----------------------------------------------------------------------
ED1000:                             ;
        MOV          R4  RL1000     ;
        JMP          S4  ED1050     ;   INITIALIZE PROCESS DESCRIPTOR
        JMP          S4  ED1055     ;   SET UP GENERAL AREA OF ECF
        JMP          S4  ED1060     ;   CREATE ECR'S
        MON   GLET                  ;   GET A LETTER
        JMPI         S4  EI1940    &;E  NO LETTER - REPORT ERROR
        MOV          R5  ECIITL     ;   SAVE LOCATION OF LETTER
        JMPI             RL1000     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; INITIALIZE POINTERS IN THE PROCESS DESCRIPTOR
;
; CALLED BY: ED1000, ED1100
;
; CALLS: NONE
;
; ENTRIES: ED1050
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0                 -                  DESTROYED
; R4                 LINK               DESTROYED
; R5                 -                  GSTP (REL)
; R7                 -                  DESTROYED
; R1, R2, R3, R6     -                  UNCHANGED
;-----------------------------------------------------------------------
ED1050:                             ;
        MOV          R4  RL1050     ;
        MOV   XBASE             R7  ;
        MOV   XGSTPR            R5  ;   INITIALIZE GST POINTERS
        MOV          R5  GSTPTA     ;
        SUB          R7         R5  ;
        MOV          R5  XGSTPR     ;
        MOV   GSTECF.X5         R0  ;   INITIALIZE ECF POINTERS
        MOV          R0  ECFPTA     ;
        SUB          R7         R0  ;
        MOV          R0  ECFPTR     ;
        MOV   GSTPCF.X5         R0  ;   INITIALIZE PCF POINTERS
        MOV          R0  PCFPTA     ;
        SUB          R7         R0  ;
        MOV          R0  PCFPTR     ;
        MOV   GSTMQE.X5         R0  ;   INITIALIZE MQE POINTERS
        MOV          R0  MQEPTA     ;
        SUB          R7         R0  ;
        MOV          R0  MQEPTR     ;
        MOV          R0  NMQEPT     ;
        MOV   GSTMQI.X5         R0  ;   INITIALIZE MQI POINTERS
        MOV          R0  MQIPTA     ;
        SUB          R7         R0  ;
        MOV          R0  MQIPTR     ;
        MOV          R0  NMQIPT     ;
        MOV   GSTMQO.X5         R0  ;   INITIALIZE MQO POINTERS
        MOV          R0  MQOPTA     ;
        SUB          R7         R0  ;
        MOV          R0  MQOPTR     ;
        MOV          R0  NMQOPT     ;
        JMPI             RL1050     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; INITIALIZE GENERAL ECF AREA
;
; CALLED BY: ED1000
;
; CALLS: NONE
;
; ENTRIES: ED1055
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R3           -                  DESTROYED
; R2,R7              -                  UNCHANGED
; R4                 LINK               DESTROYED
; R5                 -                  GSTP (REL)
; R6                 -                  ECFP (REL)
;-----------------------------------------------------------------------
ED1055:                             ;
        MOV          R4  RL1055     ;
        MOV   ECFPTR            R6  ;
        MOVC  EOCHMT            R0  ;   PRESET HALTED MS TIMER.
        MOV          R0  ECGHMT.X6  ;
        MOVC  EOCRCL            R0  ;   PRESET RETRANSMISSION CONTER
        MOV          R0  ECGRCL.X6  ;
        MOVC  EOARMB            R0  ;
        MOV          R0 ECGARMB.X6  ;   SETUP ALLOWED MISSING BID RANGE
        MOD          R6             ;
        MOVC  ECGAKA            R4  ;
        MOVC  ECGAK0            X4  ;   PRESET ACK_ARRAY
        ADDC  ECGALA-ECGAKA     R4  ;
        MOVC  ECGAL0            X4  ;   PRESET ACKL_ARRAY
        MOV   XGSTPR            R5  ;
        MOV   GSTTCC.X5         R0  ;
        MOD          R0             ;   LOOKUP CST ENTRY ADDRESSES
        ADDC  GSTCDY-2          R5  ;   OF THE TWO HIGHEST LOGICAL
        MOVL  0.     X5         R01 ;   NUMBERED CST ENTRIES
        MOVL         R01 ECGCIM.X6  ;   SETUP TD&M CST ENTRY POINTERS
        JMPI             RL1055     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; CREATE ECR'S AT INITIALIZATION
;
; CALLED BY: ED1000
;
; CALLS: NONE
;
; ENTRIES: ED1060
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0,R3              -                  DESTROYED
; R1,R2              -                  UNCHANGED
; R4                 LINK               DESTROYED
; R5                 -                  GSTP (REL)
; R6,R7              -                  DESTROYED
;-----------------------------------------------------------------------
ED1060:                             ;
        MOV          R4  RL1060     ;
        MOV   XGSTPR            R5  ;   GET RELATIVE GST POINTER
        MOV   ECFPTR            R6  ;   GET RELATIVE ECF POINTER
        ADDC  ECGSIZ-ECRSIZ     R6  ;   SET TO POINT AT 1ST ECR
                                    ;   AFTER ADDING AT ED1062
        MOV   GSTNSE.X5         R0  ;   NO. OF EDC CHANNELS (COUNTER)
        MOV          R0         R3  ;
ED1062:                             ;
        ADDC  ECRSIZ            R6  ;   INCREMENT TO NEXT ECR
        MOV          R6         R7  ;
        MOD   XBASE                 ;
        ADDC  ECRSIZ            R7  ;   GET LOC. OF FOLLOWING ECR
        MOV          R7  ECCLNK.X6  ;   SET LINK TO FOLLOWING ECR
        SOB          R0  ED1062     ;   CONTINUE TILL ECR LINKS DONE
        CLR              ECCLNK.X6  ;   SET LAST LINK TO ZERO
        ADD   XBASE             R6  ;   ABS. LOC. OF LAST ECR
        MOV   ECFPTR            R4  ;
        MOD   ECFPTA                ;
        MOVC  ECGSIZ            R7  ;   LOCATION OF 1ST ECR
        MOV   R7  ECGFQH+QCFQE. X4  ;   SET LOC. OF 1ST ECR IN QUEUE
        MOV   R6  ECGFQH+QCLQE. X4  ;   SET LOC. OF LAST ECR IN QUEUE
        MOV   R3  ECGFQH+QCCQE. X4  ;   SET NO. OF ECR'S IN QUEUE
        MOD   ECFPTA                ;
        MOVC  ECGUQH+QCFQE      R0  ;   SET UP QCB FOR USED ECR'S
        MOV   R0  ECGUQH+QCLQE. X4  ;
        JMPI             RL1060     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; INITIALIZE LETTER DRIVEN PROCESS (EDL)
;
; CALLED BY: ED3000
;
; CALLS: ED1050, ED1920, ED1950
;
; ENTRIES: ED1100
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3        -                  DESTROYED
; R4                 LINK               DESTROYED
; R5,R6,R7           -                  DESTROYED
;-----------------------------------------------------------------------
ED1100:                             ;
        MOV          R4  RL1100     ;
        JMP          S4  ED1050     ;   INITIALIZE PROCESS DESCRIPTOR
                                    ;-----------------------------------
                                    ;   CONSTRUCT AND SEND A LETTER
                                    ;   TO RTC TO CAUSE PERIODIC
                                    ;   ACTIVATION OF THE LETTER PROCESS
                                    ;-----------------------------------
        MON   GLET                  ;   GET A LETTER
        JMPI         S4  EI1950    &;E  NO LETTER - REPORT ERROR
        MOV          R5  LETPTA     ;
        MOV          R5         R7  ;
        SUB   XBASE             R7  ;   REL. POINTER TO LETTER
        MOVC  EDCRTC            R0  ;   LETTER TYPE = EDCRTC
        MOVC  RTCLPN            R2  ;   RECEIVER  = RTC
        MOVC  EDLLPN            R3  ;   SENDER = EDL
        MOV          R0  LTTYP. X7  ;
        MOVL         R23 LTRCV. X7  ;
        MOVC  LTMST1            R0  ;     MSG_TYPE=LTMST1
        MOVC  EOCRTE            R1  ;   TIME BETWEEN LETTERS
        MOV          R0  LTMS1. X7  ;
        MOV          R1  LTMS4. X7  ;
        MON   SLET                  ;   SEND THE LETTER
        JMPI         S4  EI1920    &;E  REPORT LETTER SENDING ERROR
        JMPI             RL1100     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; GET POINTERS TO CST, CDT, ECR, DEPENDING ON ENTRY
;
; CALLED BY: ED1500, ED1510, ED8600, ED8610
;
; CALLS: NONE
;
; ENTRIES: ED1200 GETS ALL POINTERS
;          ED1201 GETS CDT AND ECR ONLY
;
; RETURNS: LINK   - NO CDT OR NO ECR
;          LINK+1 - DONE
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3,R5     -                  UNCHANGED
; R4                 LINK               DESTROYED
; R6                 LCN                ECRP (REL)
; R7                 (CSTP (REL))       CSTP (REL)
;-----------------------------------------------------------------------
ED1200:                             ;
        MOV   XGSTPR            R7  ;
        MOD          R6             ;
        MOV   GSTCDY.X7         R7  ;   GET CST ADDR. FOR GIVEN LCN
        MOV          R7  CSTPTA     ;   SAVE ABSOLUTE LOCATION
        SUB   XBASE             R7  ;
        MOV          R7  CSTPTR     ;   SAVE RELATIVE CST LOCATION
ED1201:                             ;
        MOV   CSTCDT.X7         R6  ;   GET CDT POINTER FROM CST
        IEQ          R6  0          ;   IF NO CDT EXISTS - THEN
        JMP              0.     X4  ;   RETURN TO LINK
        MOV          R6  CDTPTA     ;   SAVE ABSOLUTE CDT POINTER
        SUB   XBASE             R6  ;
        MOV          R6  CDTPTR     ;   SAVE RELATIVE CDT POINTER
        MOV   CSTECR.X7         R6  ;   GET ECR POINTER FROM CST
        IEQ          R6  0          ;   IF NO ECR EXISTS - THEN
        JMP              0.     X4  ;   RETURN TO LINK
        MOV          R6  ECRPTA     ;   SAVE ABSOLUTE ECR POINTER
        SUB   XBASE             R6  ;
        MOV          R6  ECRPTR     ;   SAVE RELATIVE ECR POINTER
        JMP              1.     X4  ;   RETURN TO LINK+1
;-----------------------------------------------------------------------
;FF\f


;----------------------------------------------------------------------
; ENABLE INTERRUPTS MOMENTARILY
;
; THIS SUBROUTINE IS ENTERRED FROM A VARIETY OF PLACES FOR THE
; PURPOSE OF OPENING A "WINDOW" FOR INTERRUPTS TO BE SERVICED.
;
; CALLED BY: ED2100, ED2200, ED2500, ED3340, ED3600
;
; CALLS: NONE
;
; ENTRIES: ED1210 - RESERVES CPU INTERRUPT BEFORE ENABLING INTERRUPTS
;          ED1212 - ENABLES INTERRUPTS ONLY
;
; RETURNS: LINK
;
; REGISTERS:         ENTRY              EXIT
; R0,R1,R5,R6        -                  UNCHANGED
; R2,R3,R7           -                  DESTROYED (ED1210 ENTRY ONLY)
; R4                 LINK               DESTROYED
;----------------------------------------------------------------------
ED1210:                             ;
        MON   RCPU                  ;   RESERVE CPU INTERRUPT
ED1212:                             ; ENABLE WITHOUT RESERVE
        LDM   2#100                 ;   INT. WINDOW
        LDM   2#111                 ;
        MODN         R4             ;   INTSTA<>IDLE
        CLR              INTSTA.X4  ;
        JMP              0.     X4  ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; ALLOCATE AN ECR
;
; AN EMPTY ECR IS ALLOCATED, I.E. REMOVED FROM THE LIST OF EMPTIES
; AND ADDED TO THE LIST OF THOSE IN USE. VARIOUS DATA WITHIN THE ECR
; AND ITS ASSOCIATED CST ARE INITIALIZED.
;
; CALLED BY: ED3350
;
; CALLS: NONE
;
; ENTRIES: ED1220
;
; RETURNS: LINK   - NO ECR IN LIST OF EMPTIES
;          LINK+1 - DONE
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3        -                  DESTROYED
; R4                 LINK               DESTROYED
; R5                 -                  DESTROYED
; R6                 -                  ECRP (REL)
; R7                 -                  CSTP (REL)
;-----------------------------------------------------------------------
ED1220:                             ;
        MOV          R4  RL1220     ;
                                    ; 1. GET AN ECR
        MOD   ECFPTA                ;
        MOVC  ECGFQH            R4  ;   PREPARE TO GET AN ECR FROM
        MOVC  1                 R3  ;   THE EMPTY LIST
        MON   LNOQ                  ;   DEQUEUE AN ECR FROM EMPTY LIST
        JMPI             RL1220    &;E  NO ECR - RETURN TO LINK
        SUB   XBASE             R6  ;
        MOV          R5  ECRPTA     ;   STORE ABSOLUTE ECR ADDRESS
        MOV          R6  ECRPTR     ;   STORE RELATIVE ECR ADDRESS
        MOD   ECFPTA                ;
        MOVC  ECGUQH            R4  ;
        MON   QDLE                  ;   QUEUE ECR ON THE USED LIST
        MOV   CSTPTA            R0  ;
        MOV   CSTPTR            R7  ;
        MOV   ECRPTA            R1  ;
        MOV          R0  ECCCST.X6  ;   SET POINTER TO CST IN ECR
        MOV          R1  CSTECR.X7  ;   SET POINTER TO ECR IN CST
                                    ;
                                    ; 2. INITIALIZE ECR COMMON SECTION
        MOV   CSTCS1.X7         R0  ;
                                        IF CSTLAD NE 0 THEN
        SRL          R0  CSTLAD         FI
        XTR          R0  CSTLAX     ;
        MOV          R0  ECCLCN.X6  ;   SAVE LCN IN ECR
        MOVC  ECCIQH            R0  ;
        JMP          S4  ED1224     ;   INITIALIZE INPUT BIN QUEUE
        MOVC  ECCAQH            R0  ;
        JMP          S4  ED1224     ;   INITIALIZE ACK QUEUE
        MOVC  ECCNQH            R0  ;
        JMP          S4  ED1224     ;   INITIALIZE NAK QUEUE
        MOVC  ECCALQH           R0  ;
        JMP          S4  ED1224     ;   INITIALIZE ACKL QUEUE
                                    ;
                                    ; 3. INITIALIZE ECR INPUT SECTION
        MOVC  1<ECISCQ          R0  ;
        MOV          R0  ECIFLG.X6  ;   SET SETBD COMMAND REQUIRED
                                    ;   (ALL OTHER ECIFLG'S CLEAR)
        MOVC  ECISAD            R0  ;
        MOV          R0  ECISBC.X6  ;   SETUP_INPUT_ARRAY_DIMENTION
                                    ;
                                    ; 4. INITIALIZE ECR OUTPUT SECTION
        MOVC  1<ECOSCQ          R0  ;
        MOV          R0  ECOFLG.X6  ;   SET SETBD COMMAND REQUIRED
                                    ;   (ALL OTHER ECOFLG'S CLEAR)
        MOV   RL1220            R4  ;
        JMP              1.     X4  ;   RETURN TO LINK+1
;-----------------------------------------------------------------------
                                    ;   LOCAL SUBROUTINE USED TO
                                    ;   INITIALIZE QUEUES.
                                    ;        R0 = QCB LOCATION
                                    ;        R6 = ECRPTR
                                    ;-----------------------------------
ED1224:                             ;
        MOVC  0                 R3  ;
        MOV          R6         R5  ;
        ADD          R0         R5  ;
        ADD   ECRPTA            R0  ;
        MOV          R3  QCFQE. X5  ;   SET 1ST QUEUE ELEMENT TO ZERO
        MOV          R0  QCLQE. X5  ;   LST QUEUE ELE. = ADDR. OF 1ST
        MOV          R3  QCCQE. X5  ;   SET ELEMENT COUNT TO ZERO
        JMP              0.     X4  ;     RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; OPEN THE OUTPUT AREA OF AN ECR
;
; THE OUTPUT SECTION OF AN ECR IS PREPARED FOR THE START OF OUTPUT.
; THE OUTPUT AREA AND STATUS ARRAYS ARE CLEARED AND VARIOUS FLAGS
; AND POINTERS ARE INITIALIZED.
;
; CALLED BY: ED3360
;
; CALLS: NONE
;
; ENTRIES: ED1240
;
; RETURNS: LINK
;
; REGISTERS:         ENTRY          EXIT
; R0                 BID            DEST
; R1,R2,R5,R7        -              UNCH
; R3                 -              DEST
; R4                 LINK           UNCH
; R6                 ECRP(REL)      UNCH
;----------------------------------------------------------------------
ED1240:                             ;
        MOV          R0  EDWRK0     ;
        MOD   ECRPTA                ;
        MOVC  ECOOFS            R0  ;   ABS. LOC. OF ECR OUTPUT AREA
        MOVC  ECOCSZ            R3  ;   CLEAR OUTPUT PART OF ECR
        MON   CLEAR                 ;
        MOD   ECRPTA                ;
        MOVC  ECOSTA            R0  ;   ABS. LOC. OF OUTPUT STAT ARRAY
        MOVC  2*ECOASZ          R3  ;
        MON   CLEAR                 ;   CLEAR ENTIRE ARRAY
        MOV   EDWRK0            R0  ;
        XTR          R0  EOCBDX     ;   MAKE SURE BID IS MODULO 128
        MOV          R0  ECOPSB.X6  ;   INITIALIZE PREV. SEGMENT BID
        MOV          R0  ECOFSB.X6  ;   INITIALIZE 1ST SEGMENT BID
        MOV          R0  ECOSSB.X6  ;   INITIALIZE 2ND SEGMENT BID
        ADDC  1                 R0  ;
        MOV          R0  ECONIX.X6  ;   INITIALIZE NXT ARRAY INDEX
        MOV          R0  ECONTX.X6  ;   INITIALIZE NXT TO XMIT BID
                                    ;-----------------------------------
                                    ;   INITIALIZE OUTPUT FLAGS TO SHOW:
                                    ;        SETBD MODE
                                    ;        OUTPUT PROCESSING REQ'D
                                    ;        ACK TIMEOUT
                                    ;        ACKL TIMEOUT
                                    ;-----------------------------------
        MOVC  1<ECOSBM+1<ECOATO%    ;
            +1<ECOALTO+1<ECOPCQ R0  ;
        MOV          R0  ECOFLG.X6  ;
        JMP              0.     X4  ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; RELEASE DATA FROM QUEUES
;
; THIS SUBROUTINE HAS TWO ENTRIES. ED1251 RELEASES ALL DATA CONNECTED
; WITH ACK, NAK AND ACKL QUEUES. ED1250 DOES THE SAME AS ED1251 BUT IN
; ADDITION RELEASES DATA FROM THE INPUT BIN QUEUE.
;
; CALLED BY: ED3330,ED5300
;
; CALLS: NONE
;
; ENTRIES: ED1250 - RELEASE  DATA FROM ALL QUEUES
;          ED1251 - RELEASE ALL INPUT GENERATED OUTPUT
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3        -                  DESTROYED
; R4                 LINK               DESTROYED
; R5,R6,R7           -                  DESTROYED
;-----------------------------------------------------------------------
ED1250:                             ;
        MOV          R4  RL1250     ;
        MOVC  ECCIQH            R4  ;
        JMP          S6  ED1252     ;   RELEASE INPUT BIN QUEUE
        JMP              LOC+2      ;
ED1251:                             ;   BEGIN RELEASE OF OUTPUT DATA
        MOV          R4  RL1250     ;
        MOVC  ECCAQH            R4  ;
        JMP          S6  ED1252     ;   RELEASE ACK QUEUE
        MOVC  ECCNQH            R4  ;
        JMP          S6  ED1252     ;   RELEASE NAK QUEUE
        MOVC  ECCALQH           R4  ;
        JMP          S6  ED1252     ;   RELEASE ACKL QUEUE
        JMPI             RL1250     ;   RETURN
;-----------------------------------------------------------------------
                                    ;   LOCAL SUBROUTINE PERFORMS THE
                                    ;   ACTUAL RELEASE.
                                    ;-----------------------------------
ED1252:                             ;
        MOV          R6  RL1252     ;
        MOVC  255               R3  ;
        ADD   ECRPTA            R4  ;
        MON   LNOQ                  ;   DEQUEUE ALL BINS
        NOP                         ;
        MON   RNBN                  ;   RELEASE ALL BINS
        JMPI             RL1252     ;     RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; RELEASE OUTPUT DATA
;
; THIS ROUTINE IS USED TO RELEASE ALL OUTPUT DATA FOR A GIVEN ECR.
;
; CALLED BY: ED3340, ED3360, ED3600
;
; CALLS: ED6520
;
;ENTRIES: ED1260
;
; RETURNS: LINK
;
; REGISTERS:         ENTRY          EXIT
; R0,R1,R2,R3,R5,R7  -              DESTROYED
; R4                 LINK           DESTROYED
; R6                 ECRP (REL)     ECRP (REL)
;-----------------------------------------------------------------------
ED1260:                             ;
        MOV          R4  RL1260     ;
        MOVC  0                 R0  ;
        MOVC  ECOSAZ            R1  ;   R1 = ARRAY SIZE = 32
        JMPI         S4  EI6520     ;   CLEAN OUT STATUS ARRAY
        MOV   ECOQCW.X6         R0  ;   GET QUEUE CONTROL WORD
        IBN          R0  ECOLTX     ;   IF BLOCK IS NOT AN LCB OR
        IBN          R0  ECOLIT     ;   IF THE LCB IS IN TRANSMISSION
        JMP              ED1262     ;   THEN GO RELEASE DATA
        MOVC  NT%                   ;
        (1<ECOLCP+1<ECOLTX)     R0  ;
        AND          R0  ECOQCW.X6  ;   CLEAR ALL BUT LCB BITS INECOQCW
        MOVC  1                 R3  ;
        MOV   ECOLER.X6         R5  ;
        MON   RNBN                  ;   RELEASE LCB BLOCK
ED1262:                             ;
        MOV   CSTPTR            R6  ;
        MON   RODCST                ;   RELEASE OUTPUT DATA FROM CST
        MOV   ECRPTR            R6  ;   BEGIN DISCARD MQO'S IN PROGRESS
        MOVC  EOCTDC            R0  ;     I.E.
        MOV          R0 ECOTQI0.X6  ;   SET QUEUE TYPES TO "DISCARD"
        MOV          R0 ECOTQI1.X6  ;
        JMPI             RL1260     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;----------------------------------------------------------------------
; GET AN MQE ENTRY
;
; THIS SUBROUTINE IS CALLED TO ACCESS AN MQE ENTRY WHICH IS READY
; TO BE PROCESSED. THE FLAG AND STATUS WORDS ARE MOVED TO LOCAL
; STORAGE AND MQE TABLE BOOKKEEPING IS DONE.
;
; CALLED BY: ED2090
;
; CALLS: ED19F1
;
; ENTRIES: ED1390
;
; RETURNS: LINK   - NON-EDC MQE
;          LINK+1 - EDC MQE
;          LINK+2 - MQE TABLE EMPTY
;
; REGISTERS:         ENTRY          EXIT
; R0,R1,R2,R6        -              DESTROYED
;R3,R5,R7            -              UNCHANGED
; R4                 LINK           DESTROYED
;----------------------------------------------------------------------
ED1390:                             ;
        MOV          R4  RL1390     ;
        MOV   NMQEPT            R6  ;   GET NXT MQE RELATIVE ADDRESS
        MOVL  MQEFLG.X6         R01 ;   GET MQE FLAGS AND STATUS
        MOVC  NT(1<MQEEND)      R2  ;
        AND          R0         R2  ;   MASK OUT "MQE'S END" FLAG
        IEQ          R2  0          ;   IF REMAINING FLAGS = ZERO - THEN
        JMP              2.     X4  ;   TAKE "EMPTY" EXIT
        IBZ          R0  MQEEDC     ;   IF NOT AN EDC MQE - THEN
        JMP              ED1392     ;   GO NOTIFY MXI
        ADDC  1                 R4  ;   SET UP "EDC MQE" EXIT
        IBZ          X6  MQERDY     ;   IF MQE NOT READY TO PROCESS
        JMPI         S4  EI19F1     ;E  REPORT AN ERROR
        RELS         X6  MQERDY     ;   CLEAR "READY TO PROCESS" FLAG
        MOV          R0  CEFLG      ;   MOVE FLAGS AND STATUS TO
        MOV          R1  CEEST      ;   LOCAL STORAGE
        JMP              ED1394     ;
ED1392:                             ;
        MOVC  DAMXI             R0  ;
        INT          R0             ;   *** TRIGGER MXI ***
ED1394:                             ;
        IBZP         X6  MQEHLD     ;   IF MXI HAS NOT SEEN THIS MQE
        SETS         X6  MQEHLD     ;   SET "HANDLED ONCE" FLAG
        JMP              ED1396     ;
        MOVC  1<MQEEND          R0  ;   CLEAR THE MQE - DONE WITH IT
        AND          R0  MQEFLG.X6  ;
ED1396:                             ;
        IBZP         X6  MQEEND     ;   IF NOT END OF MQE'S - THEN
         ADDC MQEESZ            R6  ;   SET UP FOR NEXT MQE
        JMP              LOC+2      ;   ELSE
        MOV   MQEPTR            R6  ;   USE START OF MQE'S AS NEXT
        MOV          R6  NMQEPT     ;
        JMP              0.     X4  ;   RETURN LINK+0/1
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; GET AN MQI ENTRY
;
; THIS SUBROUTINE IS CALLED TO ACCESS THE NEXT MQI TABLE ENTRY WHICH
; IS READY TO BE PROCESSED. MQI ENTRY CONTENTS ARE MOVED TO LOCAL
; STORAGE AND MQI TABLE BOOKKEEPING IS DONE.
;
; CALLED BY: ED2100
;
; CALLS: ED19F1
;
; ENTRIES: ED1400
;
; RETURNS: LIN5   - MQI TABLE EMPTY
;          LINK+1 - NON-EDC MQI
;          LINK+2 - DONE
;
; REGISTERS          ENTRY              EXIT
; R0,R2              -                  DESTROYED
; R1,R3,R5,R6        -                  UNCHANGED
; R4                 LINK               DESTROYED
; R7                 -                  DESTROYED
;-----------------------------------------------------------------------
ED1400:                             ;
        MOV          R4  RL1400     ;
        MOV   NMQIPT            R4  ;   GET NEXT MQI RELATIVE ADDRESS
        MOVL  MQIFLG.X4         R01 ;   GET FLAG AND STATUS WORDS
        MOVC  NT 1<MQIEND       R2  ;
        AND          R0         R2  ;   MASK OUT "END OF MQI'S" FLAG
        IEQ          R2  0          ;   IF OTHER FLAG BITS = ZERO THEN
        JMPI             RL1400     ;   TAKE THE EMPTY RETURN
        MOVC  RL1400            R7  ;
        IBZP         R0  MQIEDC     ;   IF A NON-EDC MQI - THEN
        INC              0.     X7  ;   SET FOR NON-EDC MQI RETURN
        JMP              ED1401     ;   GO DO BOOKKEEPING
        IBZ          X4  MQIRDY     ;   IF MQI NOT READY TO PROCESS
        JMPI         S4  EI19F1     ;E  REPORT AN ERROR
        RELS         X4  MQIRDY     ;   CLEAR "READY TO PROCESS" FLAG
        MOVC  CIFLG             R5  ;
        MODC  MQIESZ                ;   MOVE MQI CONTENTS TO
        MOVM         X4         X5  ;   LOCAL STORAGE
        INC              0.     X7  ;   SET UP FOR "DONE" RETURN
        INC              0.     X7  ;
ED1401:                             ;
        MOV   NMQIPT            R4  ;
        IBN          X4  MQIHLD     ;   IF MXI HAS SEEN THE MQI THEN
        JMP              ED1403     ;   GO CLEAN OUT THE MQI
        SETS         X4  MQIHLD     ;   SET "HANDLED ONCE" FLAG
        IBNP         R0  MQISYN     ;   IF SYNCH NON-EDC CHANNEL - THEN
        IBZ          R0  MQIEDC     ;
        JMP              ED1402     ;   GO TRIGGER MXI
        MOVC  1<MQIBML+1<MQISTC R2  ;
        AND          R2         R1  ;
        INE          R1  0          ;   IF NO STUCK TAPE OR BIN MISLNK
        IBN          R0  MQIEDC     ;   OR MQI IS EDC - THEN
        JMP              ED1404     ;   GO SET UP FOR NEXT MQI
ED1402:                             ;
        MOVC  DAMXI             R0  ;   *** TRIGGER MXI ***
        INT          R0             ;
        JMP              ED1404     ;
ED1403:                             ;
        MOVC  1<MQIEND          R0  ;   CLEAR FLAGS EXCEPT "END OF MQI"
        AND          R0  MQIFLG.X4  ;
ED1404:                             ;
        IBZP         X4  MQIEND     ;   IF NOT END OF MQI TABLE
        ADDC  MQIESZ            R4 &;   SET UP FOR NEXT MQI
        JMP              LOC+2     &;   ELSE
        MOV   MQIPTR            R4 &;   USE MQI TABLE START ADDRESS
        MOV          R4  NMQIPT     ;
        JMPI             RL1400     ;   RETURN(1/2)
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; GET AN MQO ENTRY
;
; CALLED BY: ED2200
;
; CALLS: ED19F1
;
; ENTRIES: ED1410
;
; RETURNS: LINK   - MQO TABLE EMPTY
;          LINK+1 - NON-EDC MQO
;          LINK+2 - DONE
;
; REGISTERS          ENTRY              EXIT
; R0,R2              -                  DESTROYED
; R1,R3,R5,R6        -                  UNCHANGED
; R4                 LINK               DESTROYED
; R7                 -                  DESTROYED
;-----------------------------------------------------------------------
ED1410:                             ;
        MOV          R4  RL1410     ;
        MOV   NMQOPT            R4  ;   GET NEXT MQO RELATIVE ADDRESS
        MOVL  MQOFLG.X4         R01 ;   GET FLAG AND STATUS WORDS
        MOVC  NT 1<MQOEND       R2  ;
        AND          R0         R2  ;   MASK OUT "END OF MQO'S" FLAG
        IEQ          R2  0          ;   IF OTHER FLAG BITS = ZERO - THEN
        JMPI             RL1410     ;   TAKE "EMPTY" RETURN
        MOVC  RL1410            R7  ;
        IBZP         R0  MQOEDC     ;   IF NON-EDC MQO - THEN
        INC              0.     X7  ;   SET UP "NON-EDC MQO" RETURN
        JMP              ED1411     ;   AND GO DO BOOKKEEPING
        IBZ          X4  MQORDY     ;   IF MQO NOT READY TO PROCESS
        JMPI         S4  EI19F1     ;E  THEN REPORT AN ERROR
        RELS         X4  MQORDY     ;   CLEAR "READY TO PROCESS" FLAG
        MOVC  COFLG             R5  ;
        MODC  MQOESZ                ;
        MOVM         X4         X5  ;   MOVE MQO TO LOCAL STORAGE
        INC              0.     X7  ;   SET UP "DONE" RETURN
        INC              0.     X7  ;
ED1411:                             ;
        MOV   NMQOPT            R4  ;
        IBN          X4  MQOHLD     ;   IF MXI HAS SEEN THIS MQO - THEN
        JMP              ED1413     ;   GO CLEAN IT OUT
        SETS         X4  MQOHLD     ;   SET "HANDLED ONCE" FLAG
        IBNP         R0  MQOSYN     ;   IF A SYNCH NON-EDC CHANNEL THEN
        IBZ          R0  MQOEDC     ;
        JMP              ED1412     ;   GO TRIGGER MXI
        MOVC  1<MQOBML+1<MQOSER R2  ;
        AND          R2         R1  ;
        INE          R1  0          ;   IF NO SEC. OR BIN LINK. ERRORS
        IBN          R0  MQOEDC     ;   OR IT IS AN EDC MQO
        JMP              ED1414     ;   THEN GO SET U- NE0T M-O ADDRESS
ED1412:                             ;
        MOVC  DAMXI             R0  ;   *** TRIGGER MXI ***
        INT          R0             ;
        JMP              ED1414     ;
ED1413:                             ;
        MOVC  1<MQOEND          R0  ;   CLEAR FLAGS EXCEPT "END OF MQO"
        AND          R0  MQOFLG.X4  ;
ED1414:                             ;
        IBZP         X4  MQOEND     ;   IF NOT END OF MQO TABLE - THEN
        ADDC  MQOESZ            R4 &;   SET UP FOR NEXT MQO
        JMP              LOC+2     &;   ELSE
        MOV   MQOPTR            R4 &;   USE MQO START AS NEXT ADDRESS
        MOV          R4  NMQOPT     ;
        JMPI             RL1410     ;   RETURN(1/2)
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; UPDATE CSTVF1
;
; THIS SUBROUTINE UPDATES CSTVF1 FROM STATUS BITS IN AN MQI.
;        SETS "STATUS CHANGE"
;        SETS "TRANSMIT OVERRUN"
;        SETS "RECEIVE OVERRUN/INTERRUPT"
; IF "STATUS CHANGE" IS ON, THEN SEND AND RECEIVE STATUS ARE ADDED
; TO CSTVF1. IF THERE IS A MUX LINKAGE ERROR, CSTBML IS SET AND THE
; ERROR IS REPORTED.
;
; CALLED BY: ED1510
;
; CALLS: ED19C0
;
; ENTRIES: ED1450
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0                 -                  DESTROYED
; R1,R2,R5,R6        -                  UNCHANGED
; R3                 -                  BIN STATUS WORD
; R4                 LINK               DESTROYED
; R7                 CSTP (REL)         CSTP (REL)
;-----------------------------------------------------------------------
ED1450:                             ;
        MOV   CIEST             R3  ;   GET STATUS
        MOVC  1<CSTSCH+%            ;
              1<CSTTXO+1<CSTRXO R0  ;
        AND          R3         R0  ;   UNPACK 3 FLAGS SHOWN ABOVE
        IOR          R0  CSTVF1.X7  ;   PUT THEM IN CSTVF1
        ADDC  CSTVF1            R7  ;
        IBN          R0  CSTSCH     ;   IF STATUS CHANGE IS ON - THEN
        MODC  1<CSTRCS+1<CSTSNS     ;   ADD SEND AND RECEIVE STATUS
        PUT          R3         X7  ;   TO CSTVF1
        IBNP         R3  CDIBML     ;   IF  A BIN LINKAGE ERROR
        SETS         X7  CSTBML     ;   THEN SET FLAG IN CSTVF1
        JMPI         S4  EI19C0     ;E  AND REPORT THE ERROR
        ADDC  -CSTVF1           R7  ;   RESTORE R7
        JMP              0.     X4  ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; UPDATE STATUS IN A BIN
;
; THIS SUBROUTINE CHECKS FOR A HALTED MESSAGE (VIA ED1470), STUCK TAPE
; OR INPUT OVERRUN. CORRESPONDING FLAGS ARE SET IN THE BIN STATUS WORD.
; IF ANY OF THE ABOVE ERRORS ARE FOUND THEN THE TERMINATION ERROR FLAG
; IS SET IN LOCAL STATUS (CIEST).
;
; CALLED BY: ED1510
;
; CALLS: ED1470
;
; ENTRIES: ED1460
;
; RETURNS: LINK   - BIN EMPTY
;          LINK+1 - BIN NOT EMPTY OR HALTED MESSAGE OR STUCK TAPE
;
; REGISTERS          ENTRY              EXIT
; R0,R1              -                  DESTROYED
; R2                 -                  BIN STATUS FLAGS
; R3                 -                  DESTROYED
; R4                 LINK               DESTROYED
; R5                 -                  BUFP (ABS)
; R6                 -                  CSTP (REL)
; R7                 -                  DESTROYED
;-----------------------------------------------------------------------
ED1460:                             ;
        MOV          R4  RL1460     ;
        MOV   CIBUF             R5  ;   GET BIN ADDRESS
        MOV   CSTPTR            R6  ;
        JMP          S4  ED1470     ;   CHECK HALTED MS
        MODC  1<BINHMS             &;   HALTED MESSAGE DETECTED
        MOVC  0                 R2  ;
        MOV          R0  EDWRK0     ;   SAVE CHAR. COUNT FROM ED1470
        MOV   CIEST             R3  ;
        IBN          R3  CDISTC     ;   IF STUCK TAPE DETECTED - THEN
        SETS         R2  BINSTP     ;   SET STUCK TAPE FLAG
        IBNP         R3  CDIINT     ;   IF OVERRUN DETECTED - THEN
        SETS         R2  BINSTP     ;   SET STUCK TAPE AND
        SETS         R2  BINHMS     ;   HALTED MESSAGE FLAGS
        MOV   CIBUF             R5  ;   GET BIN ADDRESS
        MOVC  BINSTA            R0  ;   GET STATUS POSITION IN A BIN
        MOVC  BINIFM            R1  ;   GET BIT MASK
        MON   PBUF                  ;   PUT STATUS FLAGS IN THE BIN
        MOV   EDWRK0            R0  ;
        MOV   RL1460            R4  ;
        AND          R2         R1  ;
        JON          R1  ED1464     ;   IF ERRORS FOUND GO SET TERM ERR
        IEQ          R0  0          ;   IF CHAR_COUNT=0 THEN
        JMP              0.     X4  ;   TAKE EMPTY BIN RETURN
        JMP              1.     X4  ;     RETURN(1)
ED1464:                             ;
        MOVC  CIEST             R7  ;
        SETS         X7  CDITME     ;   SET TERMINATION ERROR
        JMP              1.     X4  ;     RETURN(1)
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; CHECK FOR A HALTED MESSAGE (ED1470). OR
; RESET HALTED MESSAGE TIMER (ED1475)
;
; IF THE CHARACTER COUNT IS NON ZERO IT IMPLIES THAT THE MESSAGE IS
; NOT HALTED. IF THE COUNT IS ZERO THE TIME SINCE LAST FULL BIN IS
; CALCULATED. IF TIME CALCULATED IS LESS THAN THE HALTED MESSAGE TIME
; NO HALTED MESSAGE CAN BE ASSUMED.
; OTHERWISE THE HALTED MESSAGE EXIT IS TAKEN    .
;
; CALLED BY: ED1460, ED5100, ED5200, ED5300
;
; CALLS: NONE
;
; ENTRIES: ED1470 - CHECK FOR HALTED MESSAGE
;
;          ED1475 - RESET HALTED MESSAGE TIMER
;
; REGISTERS:         ENTRY          EXIT
; R0                 -              COUNT
; R1                 -              DEST
; R2                 -              DEST
; R3                 -              DEST
; R4                 LINK           LINK
; R5                 BUFP(ABS)      BUFP(ABS)
; R7                 -              DEST
;-----------------------------------------------------------------------
ED1470:                             ;
        MOV          R4  RL1470     ;
        MON   GBSM                  ;   GET PAGE OF BIN
        MOV   XBASE             R1  ;
        SVS          R2             ;   SAVE CURRENT PAGE
        LDS          R3             ;   SET FOR BIN PAGE
        MODN         R1             ;
        MOV   BINSTA.X5         R0  ;   GET STATUS WORD FROM BIN
        LDS          R2             ;   RESTORE CURRENT PAGE
        XTR          R0  BINCNX     ;   UNPACK CHARACTER COUNT
        MOV   RL1470            R4  ;
        INE          R0  0          ;   IF CHARACTER COUNT IS NON ZERO
        JMP              1.     X4  ;   TAKE MESSAGE OK RETURN
        MODN  XBASE                 ;
        MOV   ADCLK             R3  ;
        MOV   ECRPTR            R7  ;
        MOV   ECICLK.X7         R1  ;       CALCULATE  TIME ELAPSED
        SUB          R1         R3  ;       SINCE PREVIOUS DATA BUFFER.
        MOD   ECFPTR                ;
        MOV   ECGHMT            R1  ;
        ILO          R3         R1  ;       IF TIME<HALTED MS  THEN
        JMP              1.     X4  ;       TAKE "OK" RETURN
ED1475:                             ;
        MODN  XBASE                 ;
        MOV   ADCLK             R1  ;
        MOD   ECRPTR                ;
        MOV          R1  ECICLK     ;   RESET HALTED MESSAGE TIMER
        JMP              0.     X4  ;   RETURN TO LINK
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; PROCESS STATUS FROM AN MQI
;
; THIS ROUTINE CHECK VALIDITY OF THE INPUT.
;       IF THERE IS NO ECR OR IF THE CHANNEL IS NOT OPEN OR IF THE
;       BIN IS EMPTY, THE INPUT BIN IS RELEASED (IF IT ISN'T THE DUMMY).
;       WE SHOULD NEVER SEE THE DUMMY.
;       THE ROUTINE UPDATES CSTVF1 VIA ED1450.
;       THE ROUTINE WILL IGNORE A DUMMY BIN ON AN OPEN CHANNEL.
;       A NEW BIN IS GIVEN TO THE MUX VIA MONITOR CALL XMIBUF.
;       BIN STATUS IS UPDATED FROM THE MQI VIA ED1460.
;
; CALLED BY: ED1550
;
; CALLS: ED1450, ED1460, ED1970, ED1200
;
; ENTRIES: ED1510
;
; RETURNS: LINK   - NO BIN
;          LINK+1 - DISCONNECTED BIN RELEASED
;          LINK+2 - DISCONNECTED BIN IS READY TO PROCESS.
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2           -                  DESTROYED
; R3                 -                  DESTROYED
; R4                 LINK               DESTROYED
; R5                 -                  DESTROYED
; R6                 LCN                DESTROYED
; R7                 -                  DESTROYED
;-----------------------------------------------------------------------
ED1510:                             ;
        MOV          R4  RL1510     ;
        JMP          S4  ED1200     ;   GET POINTERS TO CST, CDT AND ECR
        JMP              ED1512     ;   NO ECR - GO RELEASE BIN
        MOV   CSTCS2.X7         R0  ;
        IBZ          R0  CSTICO     ;   IF CHANNEL NOT OPEN - THEN
        JMP              ED1512     ;   GO RELEASE THE BIN
        JMP          S4  ED1450     ;   UPDATE CSTVF1
                                    ;   SETS R3 = BIN STATUS ON EXIT
        MOV   CIBUF             R5  ;   GET BIN ADDRESS
        MOD   GSTPTR                ;
        MOV   GSTDIB            R4  ;   GET DUMMY BIN ADDRESS
        INE          R4         R5  ;   IF BIN IS THE DUMMY OR
        IBZ          R3  CDIBDS     ;   BIN NOT RELEASED BY MXP - THEN
        JMPI             RL1510     ;   TAKE "NO BIN" RETURN
        MON   XMIBUF                ;   EXCHANGE MUX INPUT BINS
        JMP              ED1514    &;   NO FREE BIN TO GIVE MUX
        JMP              ED1516    &;   BIN SWITCHING ERROR
        JMP          S4  ED1460     ;   UPDATE BIN STATUS
        JMP              ED1512    &;   GO RELEASE EMPTY BIN
        MOV   RL1510            R4  ;
        JMP              2.     X4  ;   BIN "READY" RETURN
ED1512:                             ;
        MOV   CIEST             R3  ;   GET MQI STATUS
        MOV   CIBUF             R5  ;   GET BIN LOCATION
        MOD   GSTPTR                ;
        MOV   GSTDIB            R4  ;   GET DUMMY BIN LOCATION
        INE          R4         R5  ;   IF BIN IS THE DUMMY OR
        IBZ          R3  CDIBDS     ;   BIN NOT RELEASED BY MXP - THEN
        JMPI             RL1510     ;   TAKE "NO BIN" RETURN
        MOVC  1                 R3  ;
        MOV          R5         R6  ;
        MON   RNBN                  ;   RELEASE THE BIN
        MOV   RL1510            R4  ;
        JMP              1.     X4  ;   TAKE "BIN RELEASED" RETURN
ED1514:                             ;
        MOV   CSTPTR            R6  ;
        MOVC  1<CSTLAC          R0  ;   SET FLAG TO TELL MP THAT
        IOR          R0  CSTVF1.X6  ;   THERE ARE NO FREE BINS
        JMPI             RL1510     ;   TAKE "NO BIN" RETURN
ED1516:                             ;
        JMP          S4  ED1970     ;E  REPORT BIN SWITCH ERROR
        JMPI             RL1510     ;   TAKE "NO BIN" RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; PROCESS STATUS FROM AN MQO
;
; THIS ROUTINE CHECKS FOR A SECURITY OR BUFFER MISLINKAGE ERROR.
; IF EITHER ERROR IS FOUND AN ERROR BIT IS SET IN CSTVF1 AND THE
; ERROR IS REPORTED (ED19C0).
;
; CALLED BY: ED1560
;
; CALLS: ED19C0, ED19D0
;
; ENTRIES: ED1520
;
; RETURNS: LINK   - BLOCK INCOMPLETE
;          LINK+1 - BLOCK COMPLETE
;
; REGISTERS          ENTRY              EXIT
; R0                 -                  DESTROYED
; R1,R2,R5,R6        -                  UNCHANGED
; R3                 -                  DESTROYED
; R4                 LINK               DESTROYED
; R7                 -                  DESTROYED
;-----------------------------------------------------------------------
ED1520:                             ;
        MOV          R4  RL1520     ;
        MOV   COEST             R3  ;   GET STATUS FROM MQO
        MOVC  1<CDOSER+1<CDOBML R0  ;   CHK FOR SECURITY/MISLINK ERROR
        AND          R3         R0  ;
        JON          R0  ED1522     ;   JUMP TO PROCESS ERROR IF FOUND
        MOVC  1<CDOEDS          R0  ;
        AND          R0         R3  ;
        INE          R0         R3  ;   IF BLOCK DISCONNECTED BY MXP
        JMP              ED1524     ;   THEN GO FLAG THE ERROR
        JMP              1.     X4  ;   "BLOCK COMPLETE" RETURN
ED1522:                             ;
        MOV   CSTPTR            R7  ;
        MOVC  1<CSTMBE          R0  ;
        IOR          R0  CSTVF1.X7  ;   SET ERROR  IN CSTVF1
        JMP          S4  ED19C0     ;E  REPORT THE ERROR
ED1524:                             ;
        JMP          S4  ED19D0     ;E  REPORT BLK DISCONNECT ERROR
        JMPI             RL1520     ;
;-----------------------------------------------------------------------
;FF\f


;----------------------------------------------------------------------
; PROCESS AN MQE
;
; FOR AN INPUT OR OUTPUT MQE FOR WHICH THERE HAS BEEN AN INTERRUPT,
; ONLY AN LTU TIMEOUT CHECK IS MADE.  FOR AN OUTPUT MQE WITH AN
; INTERRUPT, TRANSMISSION STATUS IS UPDATED BEFORE THE LTU TIMEOUT
; CHECK IS MADE.
;
; CALLED BY: ED2090
;
; CALLS: ED1200
;
; ENTRIES: ED1540
;
; RETURNS: LINK
;
; REGISTERS:         ENTRY          EXIT
; R0,R2,R3,R5        -              UNCHANGED
; R1,R4,R6,R7        -              DESTROYED
;----------------------------------------------------------------------
ED1540:                             ;
        MOV          R4  RL1540     ;
        MOV   CEEST             R1  ;   GET STATUS FROM MQE
        IBN          R1  MQETYP     ;   IF AN INPUT MQE OR
        IBZ          R1  MQEONT     ;   NO OUTPUT INTERRUPT - THEN
        JMP              ED1544     ;   GO CHECK LTU TIMEOUT
        MOV   CEFLG             R6  ;   GET FLAG BITS FROM MQE
        SWP          R6             ;
        XTR          R6  MQELAX     ;   UNPACK LCN
        JMP          S4  ED1200     ;   GET CST, CDT, ECR POINTERS
        NOP                         ;
        ADDC  ECOFLG            R6  ;   OUTPUT FLAG LOCATION IN ECR
        IBNP         R1  MQEDIS     ;   IF OUTPUT DISABLED - THEN
        SETS         X6  ECOTXO     ;   SET XMIT STATUS OFF
        JMP              LOC+2      ;
        RELS         X6  ECOTXO     ;   SET XMIT STATUS ON
ED1544:                             ;
        MOV   CSTPTR            R6  ;
        IBN          R1  MQELTO     ;   IF LTU TIMEOUT
        MON   LTUTMO                ;   THEN PROCESS IT
        JMPI             RL1540     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; PROCESS AN MQI
;
; PROCESSES MQI STATUS VIA ED1510. IF A BIN DOESN'T EXIST, NO FURTHER
; WORK IS DONE. IF A BIN EXISTS IT IS QUEUED TO THE ECR'S INPUT QUEUE.
; IF A TERMINATION ERROR IS FOUND (IN ED1510) IT IS PROCESSED BY ED5700.
; IF AN END OF EDC BLOCK IS FOUND THEN THE TYPE AND BID ARE
; STORED LOCALLY.
;
; CALLED BY: ED2100
;
; CALLS: ED1510, ED5700
;
; ENTRIES: ED1550
;
; RETURNS: LINK   - EDC BLOCK INCOMPLETE
;          LINK+1 - EDC BLOCK COMPLETE (END OF BLOCK FOUND)
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3        -                  DESTROYED
; R4                 LINK               DESTROYED
; R5,R6,R7           -                  DESTROYED
;-----------------------------------------------------------------------
ED1550:                             ;
        MOV          R4  RL1550     ;
        MOV   CIFLG             R6  ;   GET FLAGS FROM MQI
        SWP          R6             ;
        XTR          R6  MQILAX     ;   UNPACK LCN
        JMP          S4  ED1510     ;   PROCESS MQI STATUS
        JMPI             RL1550    &;   NO BIN - "INCOMPLETE" RETURN
        JMP              ED1551    &;   BIN RELEASED - SKIP QUEUEING
        MOVC  1                 R3  ;
        MOD   ECRPTA                ;
        MOVC  ECCIQH            R4  ;   ADD THE INPUT BIN TO
        MOV   CIBUF             R5  ;   THE INPUT BIN QUEUE WHICH
        MOV          R5         R6  ;   COLLECTS BINS INTO
        MON   LNIQ                  ;   EDC BLOCKS
ED1551:                             ;
        MOV   CIEST             R0  ;
        IBN          R0  CDITME     ;   IF A TERM. ERROR WAS FOUND THEN
        JMP              ED1554     ;   GO PROCESS IT
        IBZ          R0  CDIBEB     ;   IF NOT END OF EDC BLOCK - THEN
        JMPI             RL1550     ;   TAKE "BLOCK INCOMPLETE" RETURN
        MOV   CITAB             R0  ;   GET TYPE AND BID OF BLOCK
        MOV          R0         R1  ;
        SWP          R0             ;
        XTR          R0  8          ;
        XTR          R1  8          ;   TYPE AND BID UNPACKED
        MOV          R0  CITYPE     ;   SAVE TYPE LOCALLY
        MOV          R1  CIBID      ;   SAVE BID LOCALLY
        MOV   RL1550            R4  ;
        JMP              1.     X4  ;   TAKE "BLOCK COMPLETE" RETURN
ED1554:                             ;
        JMPI         S4  EI5700     ;   GO PROCESS TERMINATION ERROR
        JMPI             RL1550     ;   TAKE "BLOCK INCOMPLETE" RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; PROCESS AN MQO
;
; THIS SUBROUTINE IS CALLED TO PROCESS MQO'S. IT IS USED MAINLY
; AS AN ENTRY TO THE STATUS PROCESSING ROUTINE (ED1520).
;
; CALLED BY: ED2200
;
; CALLS: ED1200, ED1520, ED1980
;
; ENTRIES: ED1560
;
; RETURNS: LINK   - NO ECR OR BLOCK DISCONNECTED BY MXP
;          LINK+1 - DONE
;
; REGISTERS          ENTRY              EXIT
; R0,R3,R7           -                  DESTROYED
; R1,R2,R5           -                  UNCHANGED
; R4                 LINK               DESTROYED
; R6                 -                  ECRP (REL)
;-----------------------------------------------------------------------
ED1560:                             ;
        MOV          R4  RL1560     ;
        MOV   COFLG             R6  ;   GET FLAGS FROM MQO
        SWP          R6             ;
        XTR          R6  MQOLAX     ;   UNPACK LCN
        JMP          S4  ED1200     ;   GET CST, CDT, ECR POINTERS
        JMP              ED1562     ;   NO ECR - GO REPORT ERROR
        JMP          S4  ED1520     ;   PROCESS MQO STATUS
        JMPI             RL1560    &;   TAKE "BLOCK DISCONNECTED" RETURN
        MOV   RL1560            R4  ;
        JMP              1.     X4  ;   TAKE "DONE" RETURN
ED1562:                             ;
        JMP          S4  ED1980     ;E  REPORT "NO ECR" ERROR
        JMPI             RL1560     ;
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; ACTIVATE A TRANSMISSION QUEUE
;
; THE ENTRY CHOSEN DETERMINES THE QUEUE TO BE ACTIVATED.
;
; CALLED BY: ED4100, ED4200, ED4910, ED4920, ED4930, ED4950, ED5400
;            ED7060, ED7070, ED7080
;
; CALLS: NONE
;
; ENTRIES: ED1600 - DATA QUEUE
;          ED1601 - ACK  QUEUE
;          ED1602 - NAK  QUEUE
;          ED1603 - ACKL QUEUE
;          ED1604 - LCB  QUEUE
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0                 -                  DESTROYED
; R1,R2,R3,R5,R7     -                  UNCHANGED
; R4                 LINK               LINK
; R6                 ECRP (REL)         ECRP (REL)
;-----------------------------------------------------------------------
ED1600: MODC  1<ECODTP-1<ECOAKP     ;
ED1601: MODC  1<ECOAKP-1<ECONKP     ;
ED1602: MODC  1<ECONKP-1<ECOALP     ;
ED1603: MODC  1<ECOALP-1<ECOLCP     ;
ED1604: MOVC  1<ECOLCP          R0  ;
        IOR          R0  ECOQCW.X6  ;   SET REQUIRED BIT IN THE
                                    ;   OUTPUT QUEUE CONTROL WORD
        IBZ          R0  ECODTP     ;
        IBN          R0  ECOLCP     ;   FOR DATA OR LCB ALSO SET ECOOEP
        MODC  1<ECOOEP              ;   SET OUTPUT FLAGS TO TRIGGER
        MOVC  1<ECOEBP+1<ECOPCQ R0  ;   PROPER PROCESSING
        IOR          R0  ECOFLG.X6  ;
        JMP              0.     X4  ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; PROCESS AN EDC MQO
;
; THIS ROUTINE DOES FINAL PROCESSING OF AN EDC BLOCK FOR WHICH AN MQO
; HAS BEEN RECEIVED.
;
; CALLED BY: ED2200, ED3340
;
; CALLS: ED7110, ED7120, ED7130, ED7140, ED7150, ED7160, ED7170, ED7190
;          THE ABOVE ARE ALL CALLED VIA A TABLE (ED0500) IN EDC.
;
; ENTRIES: ED1650
;
; RETURNS: LINK
;
; REGISTERS:         ENTRY          EXIT
; R0,R1,R2,R5,R7     -              DESTROYED
; R3                 EBR(MQO)       DESTROYED
; R4                 LINK           DESTROYED
; R6                 ECRP (REL)     DESTROYED
;-----------------------------------------------------------------------
ED1650:                             ;
        MOV          R4  RL1650     ;
        IOZ              ECOOSW.X6  ;
        MOVL ECOTQI0.X6         R01 ;   GET PROPER XMIT QUEUE DATA
        ION              ECOOSW.X6  ;
        MOVL ECOTQI1.X6         R01 ;
        INV              ECOOSW.X6  ;   SWITCH TRANSMIT QUEUES
        DEC              ECOTEC.X6  ;   REDUCE EDC BLOCK XMIT COUNT
        MOVC  1<ECOPCQ          R2  ;
        IOR          R2  ECOFLG.X6  ;   SET "PROCESSING REQ'D" FLAG
        MOD          R0             ;   USE XMIT QUEUE I.D. TO GET TO
        JMPI         S4  ED0500     ;   PROCESSING PGM (VIA ED0500)
        JMPI             RL1650     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; REPORT ERRORS VIA CSTVF4
;
; CALLED BY: ED2100, ED4400, ED7086 THRU ED7098, ED7380
;
; CALLS: NONE
;
; ENTRIES: ED1800
;
; RETURNS: LINK   - UNRECOVERABLE ERROR
;          LINK+1 - RECOVERABLE ERROR
;
; REGISTERS          ENTRY              EXIT
; R0                 ERROR CODE         ERROR CODE (SHIFTED)
; R1,R2,R3,R5        -                  UNCHANGED
; R4                 LINK               LINK
; R6                 -                  DESTROYED
; R7                 -                  CSTP (REL)
;-----------------------------------------------------------------------
ED1800:                             ;
        MOV   CSTPTR            R7  ;   GET RELATIVE CST POINTER
        SLL          R0  EECECX     ;   POSITION ERROR CODE
        ADDC  CSTVF4            R7  ;
        MOD8  #FF                   ;   TO STORE ERROR CODE
        PUT          R0         X7  ;
        MOV   CSTPTR            R7  ;   SET R7 FOR EXIT
                                    ;
        IBZ          R0  EECURE     ;   IF ERROR IS RECOVERABLE - THEN
        JMP              1.     X4  ;   TAKE "RECOVERABLE" RETURN
        MOV   ECRPTR            R6  ;
ED1804:                             ;
        MOVC  1<ECOSCQ+1<ECOATO+%   ;   SET "SETBD REQ'D" PLUS BOTH
              1<ECOALTO         R0  ;   "TIME-OUTS OCCURRED" IN
        IOR          R0  ECOFLG.X6  ;   THE OUTPUT FLAG
        JMP              0.     X4  ;   TAKE "UNRECOVERABLE" RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; GROSS ERROR HANDLING
;
; THIS ROUTINE IS ENTERRED FOR ERRORS WHICH QUESTION THE INTEGRITY
; OF THE SOFTWARE. THE ERROR REPORTED DEPENDS ON THE PARTICULAR
; ENTRY POINT. ALL ERRORS ARE REPORTED VIA MON ERR. CURRENT DESIGN
; OF MON ERR DOES NOT INCLUDE A RETURN TO THE CALLER. IT IS A SYSTEM
; HALT. THEREFORE THIS ROUTINE DOES NOT RETURN DESPITE THE CODING.
;
; CALLED BY: NUMEROUS ROUTINES AND SUBROUTINES
;
; CALLS: NONE
;
; ENTRIES: SHOWN BELOW IN CODE
;
; RETURNS: NONE
;
; REGISTERS: SINCE THIS ROUTINE HAS NO ENTRY PARAMETERS AND DOES NOT
;            RETURN, REGISTER CONTENTS ARE UNIMPORTANT.
;-----------------------------------------------------------------------
ED1900: MODC  GSTCPF - GSTCPE       ;   ERROR0 (GENERAL CP ERROR)
ED1910: MODC  GSTCPE - GSTLME       ;   ERROR1 (CREATE PROCESS):
ED1920: MODC  GSTLME - GSTUXS       ;   ERROR2 (LETTER MECHANISM):
ED1930: MODC  GSTUXS - GSTLTE       ;   ERROR3 (UNEXPECTED SENDER):
ED1940: MODC  GSTLTE - GSTNLT       ;   ERROR4 (LETTER TYPE ERROR):
ED1950: MODC  GSTNLT - GSTNBF       ;   ERROR5 (NO LETTER):
ED1960: MODC  GSTNBF - GSTNNE       ;   ERROR6 (NO BUFFER):
ED1970: MODC  GSTNNE - GSTNEC       ;   ERROR7 (NO NEXT BUFFER):
ED1980: MODC  GSTNEC - GSTCPF       ;   ERROR8 (NO ECR FOUND):
ED1990: MODC  GSTCPF - GSTCRF       ;   ERROR9 (GENERAL CP FAULT):
ED19A0: MODC  GSTCRF - GSTFLE       ;   ERRORA (CDT RESERVATION FAULT):
ED19B0: MODC  GSTFLE - GSTOSE       ;   ERRORB (FIFO LPN ERROR):
ED19C0: MODC  GSTOSE - GSTMDE       ;   ERRORC (MUX OUTPUT SECURITY):
ED19D0: MODC  GSTMDE - GSTEBM       ;   ERRORD (MUX BUF DISC ERROR):
ED19E0: MODC  GSTEBM - GSTUTQ       ;   ERRORE (EB-BIN MISMATCH):
ED19F0: MODC  GSTUTQ - GSTMOF       ;   ERRORF (UNDEFINED TX QUEUE):
ED19F1: MOVC  GSTMOF            R0  ;   ERRORF1(MMQ OVERFLOW):
        MOV          R0  XLICC      ;     XLICC:=CAUSE
        MOV          R4  XLIRP      ;     XLIRP:=RETURN
        MON   ERR                   ;E    CALL ONLINE ERROR PROCESSING
        JMP              0.     X4  ;   NOT EXECUTED
;----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
;
; INTERRUPT DRIVEN MAIN PROGRAM INITIALIZATION
;
;-----------------------------------------------------------------------
ED2000:                             ;
        JMP          S4  ED1000     ;   INITIALIZE INTERRUPT PROCESS
        MOVC  EDILPN            R3  ;
        MOV   XBASE             R4  ;   GET BASE OF INTERRUPT PROCESS
        MON   CRP                   ;   CREATE INTERRUPT PROCESS
        JMP          S4  ED1910    &;E  CREATION ERROR - REPORT
        MON   RCPU                  ;   RESERVE_CPU_INTERRUPT
        MON   RTI                   ;   RETURN TO INITIATOR (DBA)
;-----------------------------------------------------------------------
                                    ;   THE FIRST INTERRUPT WILL START
                                    ;   THE PROGRAM HERE.
                                    ;-----------------------------------
        MOVC  PBEXPR            R0  ;
        MON   INQ                   ;   LINK PROCESS INTO EXPRESS QUEUE
        JMPI         S4  EI1990     ;E  REPORT QUEUE LINKAGE ERROR
;-----------------------------------------------------------------------
;
; START INTERRUPT_SERVICE HERE.
;
; THIS IS THE MAIN LINE OF CODE USED BY THE INTERRUPT PROCESS. ALL
; INTERRUPT RELATED ACTIVITIES ARE CONTROLLED FROM HERE.
;
;-----------------------------------------------------------------------
ED2050:                             ;
        MOVC  PCIDLE            R0  ;
        MOV          R0  INTSTA     ;   SET "IDLE" FLAG TO "IDLE"
                                    ;   IF ANY WORK IS DONE THIS FLAG
                                    ;   WILL BE CLEARED. WHEN THE PROC-
                                    ;   CESSING LOOP IS COMPLETE THE
                                    ;   FLAG IS TESTED. IF IT'S ZERO
                                    ;   THE CYCLE WILL BE RESTARTED
                                    ;   HERE. THIS CAUSES THE PROCESS
                                    ;   TO RUN TILL THERE IS ABSOLUTELY
                                    ;   NO MORE WORK TO DO.
;----------------------------------------------------------------------
;
; BEGIN MQE SERVICE
;
; ALL AVAILABLE MQE'S ARE SCANNED FOR SERVICE UNTIL THEY ARE EXHAUSTED.
; ONLY THEN ARE MQI'S (ED2100) ADDRESSED.
;
;-----------------------------------------------------------------------
ED2090:                             ;
        JMP          S4  ED1390     ;   GET AN MQE
        JMP              ED2090     ;   X0: NON_EDC_MQE
        JMP          S4  ED1540 &   ;   X1: EDC_MQE
        JMP              ED2100     ;   X2: END MQE_SERVICE
;-----------------------------------------------------------------------
;
; BEGIN MQI SERVICE
;
; ALL AVAILABLE MQI'S ARE SCANNED FOR SERVICE UNTIL THEY ARE EXHAUSTED.
; ONLY THEN ARE MQO'S (ED2200) ADDRESSED.
;
;-----------------------------------------------------------------------
ED2100:                             ;
        JMP          S4  ED1400     ;   GET AN MQI
        JMP              ED2190    &;     X0: NO MQI'S
        JMP              ED2100    &;     X1: GOTO_REPEAT (NON-EDC MQI)
                                    ;     X2: EDC MQI FOUND
        JMP          S4  ED1550     ;   INITIAL MQI PROCESSING
        JMP              ED2100    &;     X0: REPEAT BLOCK INCOMPLETE
                                    ;     X1: EDC BLOCK COMPLETE
;-----------------------------------------------------------------------
                                    ;   WHEN WE GET HERE A COMPLETE EDC
                                    ;   BLOCK HAS BEEN RECEIVED
                                    ;-----------------------------------
        MOV   ECRPTR            R6  ;   THIS CODE PREPARES FOR ENTRY TO
        MOV   ECCIQH.X6         R1  ;   MON EDITST. EDITST IS THE
        MOV   CIEST             R3  ;   HOOK USED BY THE TEST DRIVE
        MOV   CIBID             R4  ;   SYSTEM TO ALTER EDC INPUTS.
        MOV   CITYPE            R5  ;   THE DATA IN REGISTERS ARE
        MOV   CSTPTR            R6  ;   PROVIDED TO THE TDS FOR POSSIBLE
        MON   EDITST                ;TC MODIFICATION.
        JMP              ED2150    &;   TDS SAYS DISCARD THE BLOCK
        MOV          R3  CIEST      ;   RESTORE DATA POSSIBLY
        MOV          R4  CIBID      ;   MODIFIED BY THE TDS.
        MOV          R5  CITYPE     ;
        MOV   CSTCS7.X6         R0  ;
        IBNP         R0  CSTEMM     ;   IF EDC MONITORING IS ON - THEN
        MON   EDCTMI                ;TM TAKE CARE OF INPUT MONITORING
        JMPI         S4  EI1960    &;E  REPORT MONITORING ERROR
        MOV   CITYPE            R0  ;   GET BLOCK TYPE
        IBN          R0  BIT7       ;   IF TYPE PARITY ERROR - THEN
        JMP              ED2130     ;   REPORT PARITY ERROR
        ADDC  -<:A:>            R0  ;
        IHS   R0     <:K:>-<:A:>+1  ;   IF TYPE IS UNDEFINED - THEN
        JMP              ED2140     ;   REPORT RANGE ERROR
        MOV   ECRPTR            R6  ;
        MOD          R0             ;   USE TYPE TO INDEX PROPER
        JMPI         S4  ED0300     ;   PROCESSING ROUTINE
        JMP          S4  ED1210     ;I  OPEN INTERRUPT WINDOW
        JMP              ED2100     ;   GET NEXT MQI
                                    ;-----------------------------------
                                    ;   PARITY AND RANGE ERRORS ARE
                                    ;   REPORTED AND THE BLOCK IS
                                    ;   DISCARDED.
                                    ;-----------------------------------
ED2130:                             ;
        MODC  EEC030-EEC031         ;   TYPE PARITY ERROR
ED2140:                             ;
        MOVC  EEC031            R0  ;   TYPE RANGE ERROR
        JMP          S4  ED1800     ;E  REPORT THE ERROR
        NOP                         ;
ED2150:                             ;   READY TO RELEASE THE EDC BLOCK
        MOVC  1000              R3  ;
        MOD   ECRPTA                ;
        MOVC  ECCIQH            R4  ;
        MON   LNOQ                  ;   DEQUEUE BLOCK FROM INPUT BIN QUE
        NOP                         ;
        MON   RNBN                  ;   RELEASE BLOCK TO FREE BIN POOL
        JMP              ED2100     ;   GET NEXT MQI
ED2190:                             ; END MQI_SERVICE.
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
;
; BEGIN MQO SERVICE
;
; ALL AVAILABLE MQO'S ARE SCANNED FOR SERVICE UNTIL THEY ARE EXHAUSTED.
; ONLY THEN ARE PROCESSING REQUESTS (ED2500) ADDRESSED.
;
;-----------------------------------------------------------------------
ED2200:                             ;
        JMP          S4  ED1410     ;   GET AN MQO
        JMP              ED2290    &;     X0: GOTO END_MQO_SERVICE
        JMP              ED2200    &;     X1: GOTO REPEAT (NON-EDC MQO)
                                    ;     X2: EDC MQO FOUND
        JMP          S4  ED1560     ;   MQO STATUS PROCESSING
        JMP              ED2200    &;       X0: MQO N.G. - GET NEXT ONE
                                    ;       X1: STATUS OK
        MOV   ECRPTR            R6  ;   GET ECR POINTER
        MOV   COBUF             R3  ;   GET EDC BLOCK POINTER
        JMP          S4  ED1650     ;   FINAL MQO PROCESSING
        JMP          S4  ED1210     ;I  OPEN INTERRUPT WINDOW
        JMP              ED2200     ;   GET NEXT MQO
ED2290:                             ;
;-----------------------------------------------------------------------
;
; PROCESS REQUEST HANDLING
;
; IN ORDER TO REDUCE THE TIME REQUIRED TO CYCLE THE MQO TABLE, SOME
; PROCESSING IS PUT OFF UNTIL NOW. EACH ECR IS CHECKED TO SEE IF
; ADDITIONAL PROCESSING WAS REQUESTED WHEN THE MQO'S WERE BEING CHECKED.
;
;-----------------------------------------------------------------------
ED2500:                             ;
        MOV   ECFPTR            R5  ;
        MOV   ECGUQH+QCFQE.X5   R6  ;   GET ADDRESS OF 1ST USED ECR
        MOV   ECGUQH+QCCQE.X5   R0  ;   GET NUMBER OF USED ECR'S
        IEQ          R0  0          ;   IF NO USED ECR'S - THEN
        JMP          ED2590         ;   THERE IS NO WORK TO DO
ED2502:                             ;
        MOV          R0  LOOPCT     ;   SAVE LOOP COUNT
        SUB   XBASE             R6  ;   RELATIVIZE ECR ADDRESS
        MOV   ECOFLG.X6         R0  ;   GET THE ECR'S OUTPUT FLAGS
        IBZ          R0  ECOPCQ     ;   IF NO PROCESSING NEEDED - THEN
        JMP              ED2504     ;   GO GET NEXT ECR
        MOVC  NT(1<ECOPCQ)      R0  ;
        AND          R0  ECOFLG.X6  ;   CLEAR "PROCESSING REQ'D" FLAG
        MOV   ECCLCN.X6         R6  ;   GET ECR'S LCN
        JMP          S4  ED1200     ;   GET CST, CDT POINTERS
        JMPI         S4  EI1980     ;   POINTER MISSING - REPORT ERROR
        JMPI         S4  EI7290     ;   DO REQUIRED PROCESSING
        JMP          S4  ED1210     ;I  OPEN INTERRUPT WINDOW
        JMP              ED2500     ;   RESTART PROCESSING LOOP. THIS
                                    ;   MAKES SURE THAT ALL PROCESSING
                                    ;   IS DONE WHEN THE ROUTINE EXITS.
                                    ;----------------------------------
ED2504:                             ;
        MOV   ECCFLK.X6         R6  ;   GET NEXT ECR IN THE CHAIN
        MOV   LOOPCT            R0  ;
        SOB          R0  ED2502     ;   DECREMENT LOOP CTR AND CONTINUE
                                    ;   WHILE PROCESSING REQUIRED.
ED2590:                             ;
        MOV   INTSTA            R0  ;
        INE          R0  PCIDLE     ;   IF ANY WORK WAS DONE - THEN
        JMP              ED2050     ;   GO CHECK ONE MORE TIME
;-----------------------------------------------------------------------
;
; RESERVE CPU INTERRUPT
;
; AT THE COMPLETION OF THE PROCESSING CYCLE THE CPU INTERRUPT IS
; RESERVED TO ENABLE THE NEXT CYCLE. EDC RETURNS FROM INTERRUPT AND
; WAITS FOR THE NEXT CPU INTERRUPT TO START A NEW CYCLE.
;
;-----------------------------------------------------------------------
ED2900:                             ;
        LDM   2#111                 ;   DISABLE_INTERRUPTS
        MON   RCPU                  ;   RESERVE_CPU_INTERRUPT
        MON   RFI                   ;   RETURN_FROM_INTERRUPT
        JMPI         S4  EI1990     ;E  REPORT INVALID PROCESS I.D. ERR
        JMP              ED2050     ;   NEW INTERRUPT STARTS HERE
;-----------------------------------------------------------------------
;
; LOCAL INTERRUPT SERVICE.
;
;-----------------------------------------------------------------------
ED2990:                             ;
        MOV   XLIRP             R4  ;
        MON   ERR                  &;E   CALL ONLINE ERROR PROCESSING
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
;
; THIS IS THE MAIN LINE CODE USED BY THE LETTER DRIVEN PROCESS. ALL
; LETTER RELATED PROCESSING IS CONTROLLED FROM HERE.
;
;-----------------------------------------------------------------------
;
; LETTER DRIVEN MAIN PROGRAM INITIALIZATION
;
;-----------------------------------------------------------------------
ED3000:                             ;
        JMP          S4  ED1100     ;   INIT. LETTER PROCESS BASE AREA
        MOVC  EDLLPN            R3  ;   PROCESS NO. FOR EDL
        MOV   XBASE             R4  ;   GET ABS. BASE OF EDL
        MON   CRP                   ;   CREATE EDL PROCESS
        JMP          S4  ED1910    &;E  REPORT CREATION ERROR
        MON   RTI                   ;   RETURN FROM INITIALIZATION
;-----------------------------------------------------------------------
;
; WAIT FOR A LETTER HERE
;
;-----------------------------------------------------------------------
ED3100:                             ;
        MON   WL                    ;   WAIT HERE
        MOV          R5  LETPTA     ;   SAVE ABS. ADDRESS OF LETTER
        MOV          R7  LETPTR     ;   SAVE REL. ADDRESS OF LETTER
        MOV   LTRCV. X7         R0  ;   GET LETTER SENDER - MONITOR PUTS
                                    ;   SENDER IN RECEIVER POSITION
        MOV   LETPTR            R7  ;
        IEQP         R0  RTCLPN     ;   IF SENDER  = REAL TIME CLOCK
        JMP          S4  ED3200     ;   THEN PROCESS RTC LETTER
        JMP              ED3110     ;
        IEQP         R0  CMILPN     ;   IF SENDER IS CMI - THEN
        JMP          S4  ED3300     ;   PROCESS CMI LETTER
        JMP              ED3110     ;
        IEQP         R0  TQMLPN     ;   IF SENDER = TIME QUEUE MONITOR
        JMPI         S4  EI3500     ;   PROCESS TQM LETTER
        JMP              ED3110     ;
        IEQP         R0  ODPLPN     ;   IF SENDER IS ODP - THEN
        JMPI         S4  EI3600     ;   PROCESS ODP LETTER
        JMP              ED3110     ;
        JMP          S4  ED1930     ;   REPORT UNEXPECTED SENDER
ED3110:                             ;     RETURN FROM LETTER PROCESSOR
        JMP              ED3100     ;   GO WAIT FOR NEXT LETTER
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; PROCESS_RTC_LETTER
;
; THIS ROUTINE PROCESSES LETTERS FROM THE REAL TIME CLOCK EVERY 100 MS.
; IT CONTROLLS THE THROTTLING STATE AND MAKES SURE THAT THE INTERRUPT
; PROCESS (EDI) IS ACTIVATED AT LEAST EVERY 100 MS.
;
; CALLED BY: ED3100
;
; CALLS: ED4300, ED1920, ED1940
;
; ENTRIES: ED3200
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3,R5,R6  -                  DESTROYED
; R4                 LINK               DESTROYED
; R7                 LETP (REL)         DESTROYED
;-----------------------------------------------------------------------
ED3200:                             ;
        MOV          R4  RL3200     ;
        MOV   LTMS1. X7         R4  ;   GET MESSAGE TYPE
        INE          R4  LTMST1     ;   IF MESSAGE TYPE NOT 1 - THEN
        JMP              ED3208     ;   IT'S AN ERROR
        MON   GSST                  ;   GET NO. OF VACANT SECTORS IN R0
        MOV   ECFPTR            R4  ;   GET POINTERS TO ECF AND GST
        MOV   XGSTPR            R5  ;
        MOV   ECGFLG.X4         R1  ;   GET GLOBAL ECF FLAGS
        IBN          R1  ECGTHR     ;   IF THROTTLING IS ON - THEN
        JMP              ED3202     ;   GO CHECK ITS STATUS
                                    ;----------------------------------
                                    ;   THROTTLING IS NOT ON
                                    ;----------------------------------
        MOV   GSTTL1.X5         R2  ;   GET LOWER THROTTLING LIMIT
        SLT          R0         R2  ;   IF NO. VACANT SECTORS > LIMIT
        JMP              ED3204     ;   THEN ALL OK - SEND LETTER TO RTC
        SETS         R1  ECGTHR     ;   SET THROTTLING FLAG ON
        MOVC  CCBCT2            R2  ;   GET 10 SEC. BUFFER CONN. TIME
        MOVC  TRUE              R3  ;   FOR GST THROTTLING FLAG
        JMP              ED3203     ;
                                    ;-----------------------------------
                                    ;   THROTTLING IS ON
                                    ;-----------------------------------
ED3202:                             ;
        MOV   GSTTL2.X5         R2  ;   GET UPPER THROTTLING LIMIT
        ILT          R0          R2 ;   IF NO. VACANT SECTORS < LIMIT
        JMP              ED3204     ;   THEN LEAVE THROTTLING ALONE
        MOVC  ECGTHR             R2 ;
        CLRS         R1         R2  ;   CLEAR ECF THROTTLING FLAG
        MOVC  CCBCT1            R2  ;   GET .8 SEC. CONNECT TIME
        MOVC  FALSE             R3  ;   FOR GST THROTTLING FLAG
ED3203:                             ;
        MOV          R1  ECGFLG.X4  ;   STORE ECF THROTTLING FLAG
        MOV          R3  GSTTHR.X5  ;   STORE GST THROTTLING FLAG
        MOD   GSTPCF.X5             ;
        MODN  XBASE                 ;
        MOV          R2  PCPBCT     ;   SET CONNECT TIME FOR MXP
        JMPI         S4  EI4300     ;       PROCESS_MP_ACK
ED3204:                             ;
        MOV   LETPTA            R5  ;
        MOVC  EOCRTE            R0  ;   GET 100 MS TIME TILL NEXT LETTER
        MODN  XBASE                 ;
        MOV          R0  LTMS4. X5  ;   PUT 100 MS TIME IN RTC LETTER
        MON   SLET                  ;   SEND LETTER TO RTC
        JMP          S4  ED1920    &;E  REPORT LETTER HANDLING ERROR
        CPU                         ;  ***  TRIGGER EDI PROCESS ***
        JMPI             RL3200     ;     RETURN
ED3208:                             ;
        JMP          S4  ED1940     ;E  REPORT MESSAGE TYPE ERROR
        JMPI             RL3200     ;     RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; PROCESS_CMI_LETTER
;
; THIS ROUTINE PROCESSES LETTERS FROM CMI WHICH RELATE TO COMMANDS
; RECEIVED FROM THE MP.
;
; CALLED BY: ED3100
;
; CALLS: ED3310, ED3320, ED3330, ED3340, ED3350, ED3360, ED3370,
;        ED3380, ED4300, ED1920, ED3430, ED3410, ED1201, ED6420
;
; ENTRIES: ED3300
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3,R5,R6  -                  DESTROYED
; R4                 LINK               DESTROYED
; R7                 LETP               DESTROYED
;-----------------------------------------------------------------------
ED3300:                             ;
        MOV          R4  RL3300     ;
        MOVL  LTMS1. X7         R01 ;   GET MESS. TYPE AND SUB-COM. LOC.
        MOV          R1         R5  ;
        INE          R0  LTMST1     ;   IF MESSAGE TYPE NOT 1 - THEN
        JMP              ED3306     ;   GO CHECK FOR 2
        SUB   XBASE             R5  ;   RELATIVIZE SUB-COMMAND LOC.
        MOVL  OCSCTS.X5         R01 ;   R0 = SC TYPE, R1 = PAD/LAD
        XTR          R0  OCSCTX     ;
        MOV          R0  CSCTYP     ;   UNPACK AND STORE TYPE
        MOV          R1  CSCPLA     ;   STORE PAD AND LAD
        SWP          R1             ;
        XTR          R1  CSTLAX     ;   UNPACK LAD (LCN)
        MON   GETCST                ;   GET CST LOC. FOR THE LCN
        JMPI         S4  EI3430    &;V  REPORT ERROR FINDING CST
        MOV          R4  CSTPTA     ;   SAVE CST LOC.
        MOV          R6  CSTPTR     ;
        MOV   CSCTYP            R0  ;   GET SUBCOMMAND TYPE
        IEQP         R0  OCS5       ;   IF TYPE IS 5 - THEN
        JMP          S4  ED3350     ;   GO DO CHANNEL SETUP
        JMP              ED3303     ;   AND RETURN LETTER TO CMI
        MOV   CSTCS6.X6         R0  ;
        MOVC  1<CSTTST+%            ;   UNPACK TEST, SYNCH AND EDC FLAGS
              1<CSTSYN+1<CSTEDC R3  ;
        AND          R0         R3  ;
        INE   R3 1<CSTSYN+1<CSTEDC  ;   IF LCN IN TEST OR NOT SYNCH EDC
        JMPI         S4  EI3410     ;V  THEN REPORT A VIOLATION
        MOV          R6         R7  ;
        JMP          S4  ED1201     ;   GET CDT AND ECR POINTERS
        JMPI         S4  EI3410     ;E  NO POINTERS - REPORT VIOLATION
        MOV   CSCTYP            R0  ;
        INEP         R0  OCS1       ;   IF SC TYPE = 1 OR 2 - THEN
        INE          R0  OCS2       ;
        JMP              ED3301     ;
        JMP          S4  ED3310     ;   OPEN INPUT AND
        JMP          S4  ED3320     ;   OPEN OUTPUT
        JMP              ED3303     ;   GO RETURN LETTER TO CMI
ED3301:                             ;
        INEP         R0  OCS3       ;   IF SC TYPE = 3 OR 4 - THEN
        INE          R0  OCS4       ;
        JMP              ED3302     ;
        JMP          S4  ED3330     ;   CLOSE INPUT AND
        JMP          S4  ED3340     ;   CLOSE OUTPUT
        JMPI         S4  EI6420     ;   DEACTIVATE ACK TIME OUT
        JMPI         S4  EI6440     ;   DEACTIVATE ACKL TIME OUT
        JMP              ED3303     ;   RETURN LETTER TO CMI
ED3302:                             ;
        IEQP         R0  OCS12      ;   IF SC TYPE = 12 - THEN
        JMP          S4  ED3360     ;   GENERATE A SETBD
        JMP              ED3303     ;   AND RETURN LETTER TO CMI
        INE          R0  OCS13      ;   TEST FOR START /STOP OF
        IEQP         R0  OCS14      ;   NORMAL MONITORING
        JMP          S4  ED3370     ;   GO PROCESS NORMAL MONITORING
        JMP              ED3303     ;   AND RETURN CMI LETTER
        INE          R0  OCS15      ;   TEST FOR START/STOP OF
        IEQP         R0  OCS16      ;   EDC MONITORING
        JMP          S4  ED3380     ;   GO PROCESS EDC MONITORING
        JMP              ED3303     ;   AND RETURN CMI LETTER
        JMPI         S4  EI3410     ;   BAD SC TYPE - REPORT VIOLATION
ED3303:                             ;
        MOVC  0                 R0  ;   SET COMMAND COMPLETE CODE
                                    ;-----------------------------------
                                    ;   THIS ROUTINE IS
                                    ;   ENTERED FROM ED3400 ALSO
                                    ;-----------------------------------
ED3304:                             ;
        MOV   LETPTA            R5  ;
        MODN  XBASE                 ;
        MOV          R0  LTMS4. X5  ;   STORE COMPLETION CODE IN LETTER
        MON   SLET                  ;   SEND LETTER BACK TO CMI
        JMPI         S4  EI1920    &;E  REPORT LETTER HANDLING ERROR
        JMPI             RL3300     ;       RETURN
;-----------------------------------------------------------------------
ED3306:                             ;
        INE          R0  LTMST2     ;   IF MSG TYPE NOT = 2 - THEN
        JMP              ED3308     ;   GO REPORT THE ERROR
        MOV   LETPTR            R7  ;
        CLR              LTMS4. X7  ;
        JMPI         S4  EI4300     ;   PROCESS MP ACKS
        JMPI             RL3300     ;
ED3308:                             ;
        JMP          S4  ED1940     ;E  REPORT BAD LETTER TYPE
        JMPI             RL3300     ;     RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; SUB-COMMAND_HANDLING_PROCEDURES.
;
; CALLED BY: ED3300
;
; CALLS: ED1240, ED1250, ED1260, ED1210, ED1650, ED3410
;
; ENTRIES: ED3310 - OPEN INPUT
;          ED3320 - OPEN OUTPUT
;          ED3330 - CLOSE INPUT
;          ED3340 - CLOSE OUTPUT
;          ED3350 - SET UP CHANNEL
;          ED3360 - SETBD HANDLING
;          ED3370 - START/STOP NORMAL MONITORING
;          ED3380 - START/STOP EDC MONITORING
;
; RETURNS: LINK   - COMPLETE
;          ED3410 - VIOLATION DETECTED
;
; REGISTERS          ENTRY              EXIT
; R0                 SC_TYPE            SC_TYPE
; R1,R2,R3,R5,R6,R7  -                  DESTROYED
; R4                 LINK               DESTROYED
;-----------------------------------------------------------------------
                                    ;
ED3310:                             ; BEGIN OPEN_INPUT
                                    ;----------------------------------
        MOV          R4  RL3310     ;
        MOV   CSTPTR            R6  ;
        MOV   CSTCS2.X6         R0  ;
        IBZ          R0  CSTCSU     ;   IF CHANNEL NOT SET UP - THEN
        JMP          S4  ED3410     ;V  REPORT VIOLATION
        IBN          R0  CSTICO     ;   IF CHANNEL ALREADY OPEN - THEN
        JMP              0.     X4  ;   EXIT - DONE
        MON   OEICDT                ;   OPEN_EDC_INPUT_CDT
        JMP          S4  ED3410     ;V  CDT OPENING ERROR - VIOLATION
        MOV   CSTPTR            R6  ;
        MON   PIPCST                ;   PRESET_IDP_CST_PARAMETERS
        MOVC  1<CSTICO          R0  ;
        IOR          R0  CSTCS2.X6  ;   SET "INPUT CHANNEL OPEN" FLAG
        MON   BEQCST                ;   PUT CHANNEL IN BAUD RATE QUEUE
        JMPI             RL3310     ;
;-----------------------------------------------------------------------
ED3320:                             ; BEGIN OPEN_OUTPUT
                                    ;----------------------------------
        MOV          R4  RL3310     ;
        MOV   CSTPTR            R6  ;
        MOV   CSTCS2.X6         R0  ;
        IBZ          R0  CSTCSU     ;   IF CHANNEL NOT SET UP - THEN
        JMP          S4  ED3410     ;V  REPORT A VIOLATION
        IBN          R0  CSTOCO     ;   IF CHANNEL ALREADY OPEN - THEN
        JMP              0.     X4  ;   EXIT - DONE
        MON   OEOCDT                ;   OPEN_EDC_OUTPUT_CDT(CDTP)
        JMP          S4  ED3410    &;V  CDT OPEN ERROR - VIOLATION
        MOV   CSTPTR            R6  ;
        MOVC  1<CSTOCO          R0  ;
        IOR          R0  CSTCS2.X6  ;   SET OUTPUT CHANNEL OPEN
        MOV   ECRPTR            R6  ;
        MOVC  1<ECOSCQ+1<ECOALTO+%  ;   SET "SETBD REQ'D", "ACK TIMEOUT"
              1<ECOATO          R0  ;   "ACKL TIMEOUT"
        MOV          R0  ECOFLG.X6  ;   IN ECR'S OUTPUT FLAG
        CPU                         ;   ***TRIGGER INTERRUPT PROCESS***
        JMPI             RL3310     ;   RETURN
;-----------------------------------------------------------------------
ED3330:                             ; BEGIN CLOSE_INPUT
                                    ;----------------------------------
        MOV          R4  RL3310     ;
        MOV   CSTPTR            R6  ;
        MOV   CSTCS2.X6         R0  ;
        IBZ          R0  CSTICO     ;   IF CHANNEL ALREADY CLOSED - THEN
        JMP              0.     X4  ;   EXIT - DONE
        MOVC  NT 1<CSTICO       R0  ;
        AND          R0  CSTCS2.X6  ;   SET CHANNEL CLOSED FOR INPUT
        MON   CGICDT                ;   CLOSE_GENERAL_INPUT_CDT
        NOP                         ;
        MOV   CSTPTR            R6  ;
        MON   BDQCST                ;   REMOVE CST FROM BAUD RATE QUEUE
        MOV   ECRPTR            R6  ;
        JMP          S4  ED1250     ;   RELEASE_ECC_INPUT_DATA.
                                    ;
        JMPI         S4  EI5600     ;   RELEASE_ECI_DATA.
                                    ;
        JMPI             RL3310     ;   RETURN
;-----------------------------------------------------------------------
ED3340:                             ; BEGIN CLOSE_OUTPUT
                                    ;----------------------------------
        MOV          R4  RL3310     ;
        MOV   CSTPTR            R6  ;
        MOV   CSTCS2.X6         R0  ;
        IBZ          R0  CSTOCO     ;   IF CHANNEL ALREADY CLOSED - THEN
        JMP              0.     X4  ;   EXIT - DONE
        MOVC  NT 1<CSTOCO       R0  ;
        AND          R0  CSTCS2.X6  ;   SET OUTPUT CHANNEL CLOSED
        MOV   ECRPTR            R6  ;
        JMP          S4  ED1260     ;   RELEASE_OUTPUT_DATA.
ED3342:                             ;   UNTIL CTD_CLOSED DO
        MOV   CSTPTR            R6  ;
        MON   CEOCDT                ;       CLOSE_GENERAL_OUTPUT_CDT.
        JMPI         S4  EI19A0     ;E      X0: RESERVATION ERROR.
        JMP              ED3344     ;       X1: EB RETREIVED FROM CDT
                                    ;           AND CDT NOT CLOSED.
                                    ;           GOTO SIM_MQO.
                                    ;           (R3:=EB_REF.)
        JMP              ED3346     ;       X2: CDT CLOSED,AWAIT_OUT-
                                    ;           STANDING MQO'S.
ED3344:                             ;
        MOV   ECRPTR            R6  ;       BEGIN SIM_MQO.
        MOV   ECOTEC.X6         R0  ;   GET OUTPUT BLOCK COUNT
        ILT          R0  2          ;   IF < 2 OUTSTANDING BLOCKS THEN
        JMP              ED3345     ;   GO HANDLE 0 OR 1 PSEUDO MQO'S
        INV              ECOISW.X6  ;         SIM THE LAST MQO,I.E.
        INV              ECOOSW.X6  ;         SWITCH OOSW/OISW
ED3345:                             ;
        JMPI         S4  EI1650     ;   PROCESS THE EDC BLOCK
        JMP              ED3342     ;   GO TRY CLOSING AGAIN
ED3346:                             ;
        MON   RODCST                ;   RELEASE_OUTPUT_DATA_CST.
        JMP          S4  ED1251     ;   RELEASE_ECC_OUTPUT_DATA.
        MOV   ECRPTR            R6  ;
ED3348:                             ;   WAIT TILL ALL MQO'S REC'D
        IOZ              ECOTEC.X6  ;   IF NO OUTSTANDING BLOCKS - THEN
        JMP              ED3349     ;   EXIT
        CPU                         ;   ***TRIGGER INTERRUPT PROCESS***
        JMP          S4  ED1212     ;   OPEN INTERRUPT WINDOW
        JMP              ED3348     ;   KEEP WAITING
ED3349:                             ;
        JMPI             RL3310     ;   RETURN
;-----------------------------------------------------------------------
ED3350:                             ; BEGIN SETUP_CHANNEL
                                    ;----------------------------------
        MOV          R4  RL3310     ;   SAVE RETURN LINK
        MOV   CSTPTR            R6  ;   GET CST POINTER
        MON   PRGCST                ;   PROGRAM CST
        JMP   &      S4  ED3430     ;V  OPEN CST RETURN
        MON   DECR                  ;   DEALLOCATE ECR
        JMP   &      S4  ED3410     ;E  OPEN/BAD RETURN
        NOP                         ;   NONE WAS ALLOCATED
        MON   DCDT                  ;   DEALLOCATE POSSIBLE CDT
        JMP   &      S4  ED3410     ;E  OPEN CDT RETURN
        NOP                         ;   NO ONE ALLOCATED
        MON   CKPCST                ;   CHECK PROGRAMMING
        JMP   &      S4  ED3430     ;V  WRONG CONTENTS RETURN
        MON   PGPCST                ;   PRESET CST PARAMETERS
        MOV   CSTCS1.X6         R3  ;
                                        IF CSTPAD NE 0 THEN
        SRL          R3  CSTPAD         FI
        XTR          R3  CSTPAX     ;   GET PAD(CS1)
ED3352: SIO          R0         R3  ;   CHECK, THAT LTU EXISTS
        MON   CHKLTU                ;   CHECK LTU TYPE
        JMP   &      S4  ED3430     ;V  WRONG TYPE
        MON   PRGLTU                ;   PROGRAM LTU
ED3354:                             ; NO LTU RETURN - CONTINUE:
        MON   ACDT                  ;   ALLOCATE CDT
        JMP   &      S4  ED3410     ;E  GOT AN OPEN ONE
        JMP   &      S4  ED3430     ;V  NONE AVAILABLE
        MON   PGPCDT                ;   PRESET GENERAL CDT PARAMETERS
        JMP   &      S4  ED3410     ;E  NOT RESERVABLE
        MON   PEPCDT                ;   PRESET SYNC EDC CDT
        JMP   &      S4  ED3410     ;E  NOT RESERVABLE
        JMP          S4  ED1220     ;   ALLOCATE ECR
        JMP   &      S4  ED3430     ;V  NONE AVAILABLE
        MOV          R6         R0  ;
        ADDC  CSTCS2            R0  ;
        SETS         X0  CSTCSU     ;   DECLARE CHANNEL SETUP
        JMPI             RL3310     ;   RETURN
;----------------------------------------------------------------------
ED3360:                             ; BEGIN SETB_SC_HANDLING.
                                    ;----------------------------------
        MOV          R4  RL3310     ;
        MOV   CSTPTR            R6  ;
        MOV   CSTCS2.X6         R3  ;
        MOVC  1<CSTICO+1<CSTOCO R0  ;
        AND          R0         R3  ;
        INE          R0         R3  ;   IF CHANNEL NOT OPEN - THEN
        JMP          S4  ED3430     ;   REPORT A VIOLATION
        MOV   ECRPTR            R6  ;
        JMP          S4  ED1260     ;   RELEASE_OUTPUT_DATA
        JMPI         S4  EI6420     ;   DEACTIVATE ACK TIMEOUT
        JMPI         S4  EI6440     ;   DEACTIVATE ACKL TIMEOUT
        MOV   ECONIX.X6         R0  ;
        JMP          S4  ED1240     ;   PREPARE ECR OUTPUT AREA
        MOD   CSTPTR                ;
        MOVC  CSTVF4            R7  ;   GET CSTVF4 LOCATION
        SETS         X7  EECSRA     ;   SET SETBD COMMAND IN PROGRESS
        CPU                         ;   ***TRIGGER INTERRUPT PROCESS***
        JMPI             RL3310     ;   RETURN
;-----------------------------------------------------------------------
                                    ;
ED3370:                             ; BEGIN START/STOP NORMAL MONITORING
                                    ;-----------------------------------
        MOV   CSTPTR            R6  ;
        ADDC  CSTCS7            R6  ;
        MOVC  CSTNMM            R2  ;
        CLRS         X6         R2  ;   CLEAR CSTNMM (STOP) BUT
        IEQ          R0  OCS13      ;   IF ITS START
        SETS         X6  CSTNMM     ;   THEN TURN CSTNMM ON
        JMP                     X4  ;   RETURN
;-----------------------------------------------------------------------
                                    ;
ED3380:                             ; BEGIN START/STOP EDC MONITORING
                                    ;-----------------------------------
        MOV   CSTPTR            R6  ;
        ADDC  CSTCS7            R6  ;
        SETS         X6  CSTEMM     ;   SET CSTEMM (START)
        INE          R0  OCS16      ;   IF SC NOT STOP - THEN
        JMP                     X4  ;   RETURN FROM START
        MOV          R4  RL3380     ;   SAVE RETURN LINK
                                    ;-----------------------------------
                                    ;   PROCESS STOP EDC MONITORING
                                    ;-----------------------------------
        MOVC  CSTEMM            R2  ;
        CLRS         X6         R2  ;   CLEAR CSTEMM (STOP)
        MOV   XGSTPR            R6  ;
        MOV   GSTECF.X6         R6  ;
        SUB   XBASE             R6  ;   REL. LOCATION OF ECF IN R6
        MOV   ECGCIM.X6         R5  ;   REL. LOC. OF CST THAT
        SUB   XBASE             R5  ;   IS USED FOR INPUT MONITORING
        MOV   CSTIP2.X5         R7  ;
        SBZ          R7  CSTISA     ;   IF A SECTOR IS ALLOCATED THEN
        JMP          S4  ED3383     ;   QUEUE IT FOR THE MP
        MOV   XGSTPR            R6  ;
        MOV   GSTECF.X6         R6  ;
        SUB   XBASE             R6  ;   REL. LOCATION OF ECF IN R6
        MOV   ECGCOM.X6         R5  ;   REL. LOCATION OF CST THAT
        SUB   XBASE             R5  ;   IS USED FOR OUTPUT MONITORING
        MOV   CSTIP2.X5         R7  ;
        SBZ          R7  CSTISA     ;   IF A SECTOR IS ALLOCATED THEN
        JMP          S4  ED3383     ;   QUEUE IT FOR THE MP
        JMPI             RL3380     ;   RETURN
ED3383:                             ;
        SVS          R3             ;   SAVE PSW
        LDM   2#111                 ;   DISABLE INTERRUPTS
        MOV          R5  XHWRK6     ;   PUT CSTPTR IN EDCQMS WORK AREA
        MON   EDCQMS                ;   QUEUE THE MESSAGE SECTOR
        LDS          R3             ;   RESTORE PSW
        JMP                     X4  ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; SUBCOMMAND ERROR HANDLING
;
; CALLED BY: ED3310, ED3320, ED3350, ED3360
;
; CALLS: NONE
;
; ENTRIES: ED3410 - CP ERROR
;          ED3420 - SUBCOMMAND ERROR
;          ED3430 - ATTEMPTED VIOLATION
;
; RETURNS: ED3304 - SUBCOMMAND COMPLETION
;
; REGISTERS          ENTRY              EXIT
; R0                 -                  CMC
; R1                 -                  DESTROYED
; R2,R3,R7           -                  UNCHANGED
; R4                 LINK               DESTROYED
; R5                 -                  GSTP (REL)
; R6                 -                  CSTP (REL)
;-----------------------------------------------------------------------
ED3410: MODC  CMCCPE-CMCCME         ;   CP ERROR
ED3420: MODC  CMCCME-CMCATV         ;   SUBCOMMAND ERROR
ED3430: MOVC  CMCATV            R0  ;   ATTEMPTED VIOLATION
        MOVC  1<CSTSUE          R1  ;
        MOV   CSTPTR            R6  ;
        IOR          R1  CSTVF1.X6  ;   SET ERROR BITS IN CSTVF1
        MOV   XGSTPR            R5  ;
        MOV          R4  GSTSBR.X5  ;   SAVE ERROR DETECTION ADDR IN GST
        JMP              ED3304     ;   GOTO SC_COMPLETION.
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; PROCESS_TQM_LETTERS
;
; TIME QUEUE MONITOR LETTERS ARE RECEIVED WHEN TIMEOUTS EXPIRE.  THE
; TIMEOUTS IN QUESTION ARE THE ACK AND ACKL TIMEOUTS.
;
; CALLED BY: ED3100
;
; CALLS: ED1200, ED1604
;
; ENTRIES: ED3500
;
; RETURNS: DONE
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3,R5,R6  -                  DESTROYED
; R4                 LINK               DESTROYED
; R7                 LETP (REL)         DESTROYED
;-----------------------------------------------------------------------
ED3500:                             ;
        MOV          R4  RL3500     ;
        MOV          R7  LETPTR     ;   SAVE POINTER TO TQM LETTER
        MOV   LETPTR            R7  ;
        MOV   LTMS1. X7         R4  ;
        INE          R4  LTMST0     ;   IF MSG TYPE IS NOT 0 - THEN
        JMP              ED3506     ;   GO RELEASE THE LETTER
        MOV   LTMS4. X7         R6  ;   GET LCN AND FLAGS
        MOV          R6         R3  ;
        XTR          R6  CSTLAX     ;   UNPACK LCN
        JMPI         S4  EI1200     ;   GET CST, CDT AND ECR FOR LCN
        JMP              ED3506    &;   NO ECR - GO RELEASE LETTER
        MOV   ECOFLG.X6         R0  ;   GET OUTPUT FLAGS FOR THE LCN
        SETS         R0  ECOPCQ     ;   SET "PROCESSING REQ'D" FLAG
        IBZ          R3  EOCLTF     ;   IF ACKL TIMEOUT NOT ON - THEN
        JMP              ED3502     ;   GO CHECK ACK TIMEOUT
        IONP             ECOXLT.X6  ;   IF ACKL CTR NOT ZERO THEN
        DEC              ECOXLT.X6  ;   DECREMENT IT AND
        JMP              ED3506     ;   EXIT
        IBZ          R0  ECOPALT    ;   IF NO PENDING ACKL TIMEOUT THEN
        JMP              ED3506     ;   EXIT
        MOVC  ECOPALT           R1  ;
        CLRS         R0         R1  ;   CLEAR PENDING ACKL TIMEOUT
        MOV   ECOLCT.X6         R1  ;   GET LCB COUNT
        ILT          R1  EOCLCL     ;   IF LCB COUNT < LCB LIMIT - THEN
        JMP              ED3501     ;   GO SET TIMEOUT
        MOVC  EEC10C            R0  ;
        JMPI         S4  EI1800     ;   REPORT LCB COUNT EXCESS
        NOP                         ;
        JMP              ED3506     ;   EXIT
ED3501:                             ;
        SETS         R0  ECOALTO    ;   SET "ACKL TIMEOUT" FLAG
        MOV          R0  ECOFLG.X6  ;
        JMPI         S4  EI1604     ;   ACTIVATE LCB OUTPUT QUEUE
        JMP              ED3504     ;   GO TRIGGER INTERRUPT PROCESS
ED3502:                             ;
        IBZ          R3  EOCATF     ;   IF ACK TIMEOUT NOT ON - THEN
        JMP              ED3506     ;   EXIT
        IONP             ECOXAT.X6  ;   IF ACK COUNTER NON ZER - THEN
        DEC              ECOXAT.X6  ;   DECREMENT IT AND
        JMP              ED3506     ;   EXIT
        IBZP         R0  ECOPAT1    ;   IF NO PENDING ACK TIMEOUTS THEN
        IBZ          R0  ECOPAT2    ;
        JMP              ED3506     ;   EXIT
        SETS         R0  ECOATO     ;   SET ACK TIMEOUT ON
        MOVC  NT%                   ;
        (1<ECOPAT1+1<ECOPAT2)   R1  ;   CLEAR PENDING ACK TIMEOUT FLAGS
        AND          R1         R0  ;
        MOV          R0  ECOFLG.X6  ;
ED3504:                             ;
        CPU                         ;I  ***TRIGGER INTERRUPT PROCESS***
ED3506:                             ;
        MOV   LETPTA            R5  ;
        MON   RLET                  ;   RELEASE THE LETTER
        JMPI             RL3500     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
; PROCESS_ODP_LETTERS
;
; THIS ROUTINE PROCESSES LETTERS FROM ODP WHICH DEAL WITH
; PRE-EMPTION, INITIATION OF OUTPUT OR CHANNEL CLOSING.
;
; CALLED BY: ED3100
;
; CALLS: ED1200, ED1212, ED1260, ED7200, ED3330, ED6420, ED6440,
;        ED1980, ED1920
;
; ENTRIES: ED3600
;
; RETURNS: LINK
;
; REGISTERS          ENTRY              EXIT
; R0,R1,R2,R3,R5,R6  -                  DESTROYED
; R4                 LINK               DESTROYED
; R7                 LETP (REL)         DESTROYED
;-----------------------------------------------------------------------
ED3600:                             ;
        MOV          R4  RL3600     ;
        MOV          R7  LETPTR     ;
        MOV   LETPTR            R7  ;
        MOV   LTMS1. X7         R4  ;
        INE          R4  LTMST1     ;   IF MSG TYPE IS NOT 1 - THEN
        JMP              ED3610     ;   GO CHECK PRE-EMPTION
        MOV   ECFPTR            R5  ;
        MOV   ECGUQH.X5         R6  ;   GET TOP OF USED ECR QUEUE
        MOV   ECGUQH+%              ;
              QCCQE. X5         R0  ;   GET NO. OF USED ECR'S
        IEQ          R0  0          ;   IF NO ECR'S THEN
        JMP              ED3606     ;   EXIT
ED3602:                             ;
        MOV          R0  LOOPCT     ;   CYCLE USED ECR'S
        MOV          R6  ECRPTA     ;
        SUB   XBASE             R6  ;
        MOV   ECCCST.X6         R7  ;   GET ABS. CST PTR FROM ECR
        MOV          R7  CSTPTA     ;
        SUB   XBASE             R7  ;   RELATIVIZE CST POINTER
        IOZ        QCCQE+CSTOBQ.X7  ;   IF OUTPUT BIN QUEUE EMPTY - THEN
        JMP              ED3604     ;   GO CHECK NEXT CHANNEL
        MOD          R6             ;
        MOVC  ECOFLG            R5  ;   GET ADDRESS OF OUTPUT FLAGS
        RELS         X5  ECOEMP     ;   SET OUTPUT BIN QUEUE NOT EMPTY
        MOV          R6  ECRPTR     ;   SAVE POINTERS
        MOV          R7  CSTPTR     ;
        IBZP         X5  ECOSCQ     ;   IF NOT IN SETBD MODE - THEN
        JMPI         S4  EI7200     ;   GO DO SOME OUTPUT
        JMP              ED3604     ;   THEN GET NEXT CHANNEL
        MOV   CSTPTR            R6  ;
        MON   RODCST                ;   RELEASE CST OUTPUT DATA
        MOV   ECRPTR            R6  ;
ED3604:                             ;
        CPU                         ;   ***TRIGGER INTERRUPT PROCESS***
        JMP          S4  ED1212     ;I  OPEN INTERRUPT WINDOW
        MOV   ECCFLK.X6         R6  ;   GET LINK TO NEXT ECR
        MOV   LOOPCT            R0  ;
        SOB          R0  ED3602     ;   PROCESS NEXT ECR UNLESS DONE
ED3606:                             ;     CLEAR_FLAG:
        MOV   LETPTA            R5  ;
        MODN  XBASE                 ;
        CLR              LTMS4. X5  ;
        JMPI             RL3600     ;   RETURN
;-----------------------------------------------------------------------
                                    ;   PRE-EMPTION
ED3610:                             ;-----------------------------------
        INE          R4  LTMST2     ;   IF MSG TYPE NOT 2 - THEN
        JMP              ED3620     ;   GO CHECK CHANNEL CLOSING
        MOV   LTMS3. X7         R6  ;
        SWP          R6             ;
        XTR          R6  CSTLAX     ;   UNPACK LCN
        JMPI         S4  EI1200     ;   GET CST, CDT, ECR POINTERS
        JMPI         S4  EI1980    &;E  NO ECR - REPORT ERROR
        MOV   CSTPTR            R6  ;
        CLR              CSTNOC.X6  ;   CLEAR O/P CHAR. COUNT
        MOV   ECRPTR            R6  ;
        JMP          S4  ED1260     ;   RELEASE OUTPUT DATA
        MOVC  1<ECOSCQ+1<ECOATO+%   ;
              1<ECOALTO         R0  ;
        IOR          R0  ECOFLG.X6  ;   SET FLAGS AS IF JUST OPENED
        MOV   LETPTR            R7  ;
        MOVC  CMILPN            R0  ;
        MOV          R0  LTRCV. X7  ;   LETTER RECEIVER = CMI
        CLR              LTMS4. X7  ;
        MOV   LETPTA            R5  ;
        MON   SLET                  ;   SEND LETTER TO CMI
        JMPI         S4  EI1920    &;E  REPORT LETTER HANDLING ERROR
        JMPI             RL3600     ;   RETURN
;-----------------------------------------------------------------------
                                    ;   REQUEST TO CLOSE CHANNEL
ED3620:                             ;-----------------------------------
        INE          R4  LTMST3     ;   IF MSG TYPE NOT 3 - THEN
        JMP              ED3630     ;   REPORT MESSAGE TYPE ERROR
        MOV   LTMS3. X7         R6  ;
        SWP          R6             ;
        XTR          R6  CSTLAX     ;   UNPACK LCN
        JMPI         S4  EI1200     ;   GET CST, CDT, ECR POINTERS
        JMP              ED3624     ;   NO ECR - RETURN
        JMP          S4  ED3330     ;   CLOSE INPUT
        JMP          S4  ED3340     ;   CLOSE OUTPUT
        JMPI         S4  EI6420     ;   DEACTIVATE ACK TIMEOUT
        JMPI         S4  EI6440     ;   DEACTIVATE ACKL TIMEOUT
ED3624:                             ;
        MOV   LETPTA            R5  ;
        MON   SLET                  ;   RETURN THE LETTER
        JMPI         S4  EI1920     ;E  REPORT LETTER HANDLING ERROR
        JMPI             RL3600     ;   RETURN
ED3630:                             ;
        JMPI         S4  EI1940    &;E  REPORT LETTER TYPE ERROR
        MOV   LETPTA            R5  ;
        MON   RLET                  ;   RELEASE LETTER
        JMPI             RL3600     ;   RETURN
;-----------------------------------------------------------------------
;FF\f


;-----------------------------------------------------------------------
;
; LOCAL INTERRUPT SERVICE
;
; THE ONLY LEGAL ENTRY TO THIS ROUTINE IS AS A RESULT OF AN LTU
; TIMEOUT WHEN STATUS IS READ DURING PROCESSING OF A SETUP SUBCOMMAND
;
;-----------------------------------------------------------------------
ED3990:                             ;
        MOV   XLIRP             R4  ;   GET RETURN ADDRESS
        MOV   XLICC             R0  ;   GET INTERRUPT CAUSE
        SNE          R4  ED3352     ;   IF NOT TIMEOUT ON SIO INSTR.
        INE          R0  TIMEOUT    ;   ADDR.  THEN
        MON   ERR                   ;   CALL MON ERR ELSE
        SVS                     R7  ;
        MOVC  NT #1800          R3  ;   CLEAR LOCAL INTERRUPT AND
        AND          R3         R7  ;   TIMEOUT BITS
        LDS                     R7  ;   IN PSW
        MOVC  0                 R3  ;
        MOV          R3  XLICC      ;   CLEAR LOCAL INTERRUPT CAUSE
        JMP              ED3354     ;   SKIP LTU PROGRAMMING
;-----------------------------------------------------------------------
;
; EXTERNAL NAMES.
;
;-----------------------------------------------------------------------
BEGIN
        EXTERNAL ED1251,ED1475,ED1200
        EXTERNAL ED1600,ED1601,ED1602,ED1603,ED1604,ED1800
        EXTERNAL ED1900,ED1910,ED1920,ED1930,ED1940,ED1950,ED1960,ED1970
        EXTERNAL ED1980,ED1990,ED19A0,ED19B0,ED19C0,ED19D0,ED19E0,ED19F0
        EXTERNAL ED2000,ED2990,ED3000,ED3990
        EXTERNAL ED19F1,ED3410,ED3420,ED3430,ED3500,ED3600
NAMES
END
;-----------------------------------------------------------------------
;
; END OF EDC MAIN PROGRAM SECTION.
;
;-----------------------------------------------------------------------
END
«eof»