DCC 
          IDENT  DCC,DCC
          TITLE  DCC - CCC COMMUNICATOR.
*COMMENT  DCC - CCC COMMUNICATOR. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
  
  
          PERIPH
          BASE   MIXED
          SST 
 QUAL$    EQU    1           DEFINE UNQUALIFIED COMMOM DECKS
          SPACE  4
***       DCC - CCC COMMUNICATOR. 
*         L. E. LOVETT       84/04/01.
          SPACE  4,10 
***       DCC - CCC COMMUNICATOR. 
* 
*         CALL -
* 
*T IR     18/ *DCC* 1/1, 23/ 0, 18/ ADDR
* 
*         ADDR   - *FET* ADDRESS. 
* 
*T ADDR   6/ 0, 6/ CH, 18/ LWA, 18/FWA, 12/ 0 
*T,       42/ 0, 18/ FIRST
*T,       42/ 0, 18/ IN 
*T,       42/ 0, 18/ OUT
*T,       42/ 0, 18/ LIMIT
* 
*         CH     - CHANNEL NUMBER.
*         LWA    - *CCC* LAST WORD ADDRESS. 
*         FWA    - *CCC* FIRST WORD ADDRESS.
          SPACE  4,10 
***       DAYFILE AND ERRLOG MESSAGES 
* 
*         * CCC, CHXX.  DCC - CHANNEL ACTIVE BEFORE FUNCTION.*
*                CHANNEL XX WAS ALREADY ACTIVE WHEN *DCC* TRIED TO SEND 
*                A FUNCTION CODE TO THE CCC.
* 
*         * CCC, CHXX.  DCC - NO RESPONSE. CHECK CABLES.* 
*                THERE WAS A FUNCTION TIMEOUT ON THE FIRST ATTEMPT TO 
*                SEND A FUNCTION CODE NNNN TO THE CCC ON CHANNEL XX.
* 
*         * CCC, CHXX.  DCC - FUNCTION NNNN REJECT.*
*                THERE WAS A FUNCTION TIMEOUT ON AN ATTEMPT TO SEND 
*                A FUNCTION CODE NNNN TO THE CCC ON CHANNEL XX. 
* 
*         * CCC, CHXX.  DCC - INPUT INCOMPLETE.*
*                DCC ENCOUNTERED AN INCOMPLETE INPUT ON ATTEMPTING TO 
*                READ DATA FROM THE CCC ON CHANNEL XX.
* 
*         * CCC, CHXX.  DCC - LOAD ADDRESS ERROR.*
*                THERE WAS AN CHANNEL HANG ON A LOAD ADDRESS FUNCTION 
*                ATTEMPT ON THE CCC ON CHANNEL XX.
* 
*         * CCC, CHXX.  DCC - CHANNEL NOT AVAILABLE.* 
*                CHANNEL XX WAS NOT AVAILABLE WHEN DCC ATTEMPTED TO 
*                ACCESS IT TO DUMP THE CCC. 
* 
*         * CCC, CHXX.  DCC - CONSTANT CHANNEL FULL.* 
*                AN ATTEMPT TO CLEAR THE CCC ON CHANNEL XX
*                TIMED OUT WITH A CHANNEL FULL CONDITION. 
* 
*         * DCC - INCORRECT USER ACCESS.* 
*                USER IS NOT VALIDATED FOR SYSTEM ORIGIN PRIVILEGES 
*                OR SYSTEM IS NOT IN ENGINEERING MODE.
* 
*         * DCC - INCORRECT ORIGIN TYPE.* 
*                USER MUST BE SYSTEM ORIGIN TO USE DCC AND IS NOT.
* 
*         * DCC - PARAMETER ADDRESS ERROR.* 
*                THE CCC ADDRESSES PASSED WITH THE CALL TO DCC
*                ARE NOT IN THE VALID ADDRESS RANGE.
* 
*         * DCC - LWA+1 OUT OF RANGE.*
*                THE CCC LAST WORD ADDRESS SPECIFIED IN THE CALL TO 
*                DCC IS BEYOND THE CCC LIMIT ADDRESS. 
* 
*         * DCC - FWA .GE. LWA+1.*
*                THE SPECIFIED CCC ADDRESSES ARE NOT IN THE CORRECT 
*                RELATIONSHIP. THEY MAY BE REVERSED.
* 
*         * DCC - INCORRECT REQUEST.* 
*                THE REQUEST SPECIFIED IN THE CALL TO DCC IS INCORRECT. 
* 
*         * DCC - NOT CONTROLWARE CHANNEL.* 
*                THE CHANNEL SPECIFIED IN THE CALL TO DCC IS NOT A
*                CHANNEL WITH CONTROLWARE.
* 
*         * DCC - INCORRECT CCC CONTROLWARE TYPE.*
*                THE CONTROLWARE TYPE ASSOCIATED WITH THE SPECIFIED 
*                CHANNEL IS NOT ONE THAT DCC IS ALLOWED TO DUMP.
* 
*         * DCC - CIRCULAR BUFFER ADDRESS ERROR.* 
*                ONE OF THE CIRCULAR BUFFER POINTERS *FIRST*, *IN*, 
*                *OUT* OR *LAST* POINTS OUTSIDE THE FIELD LENGTH, 
*                *LAST IS NOT GREATER THAN *FIRST*, OR *IN* OR *OUT*
*                IS NOT WITHIN THE BUFFER LIMITS. 
*         * DCC - INCOMPLETE *CCC* DUMP.* 
*                THE CM BUFFER SIZE IN THE CALLING PROGRAM WAS NOT
*                LARGE ENOUGH TO HOLD THE ENTIRE *CCC* MEMORY.
* 
*         * DCC INCORRECT REQUEST.* 
*                *DCC* WAS NOT CALLED WITH RECALL.
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPMAC 
*CALL     COMPCHM 
*CALL     COMSDSL 
*CALL     COMSPIM 
          SPACE  4,10 
**        CHTE - CREATE CHANNEL TABLE ENTRY.
* 
* 
*         CHTE   CH,ADDRESS 
* 
*         ENTRY  (ADDRESS) = ADDRESS TO INSERT IN CHANNEL TABLE.
  
  
          PURGMAC CHTE
 CHTE     MACRO  D,B
          LOCAL  A
 A        EQU    B
 CT_D     RMT 
          CON    A
          RMT 
          ENDM
 IAN      SPACE  4,10 
**        IAN - REDEFINE IAN WITH 2**5 SET. 
  
  
          CHIN   IAN,7040 
          SPACE  4
**        ASSEMBLY CONSTANTS. 
  
  
 NWC      EQU    100*5/2     CCC WORD COUNT 
 EORS     EQU    22          END OF RECORD RETURN STATUS
 FSLA     EQU    500         SELECT CCC LOAD ADDRESS AND LENGTH 
 FSRD     EQU    701         SELECT CCC READ MEMORY 
 FSMC     EQU    740         SELECT CCC MASTER CLEAR INTERFACE
          SPACE  4,10 
          SPACE  4
**        DIRECT LOCATION ASSIGNMENTS.
  
  
 NA       EQU    20 - 21     CCC ADDRESS
 NL       EQU    22 - 23     CCC LIMIT ADDRESS
 NC       EQU    24          CCC WORD COUNT 
 WC       EQU    25          BLOCK WORD COUNT 
 EB       EQU    27          ERROR BUFFER ADDRESS 
 RQ       EQU    30 - 34     REQUEST WORD 
 DA       EQU    40 - 44     DATA ADDRESS 
 FT       EQU    60 - 61     FIRST
 IN       EQU    62 - 63     IN 
 OT       EQU    64 - 65     OUT
 LM       EQU    66 - 67     LIMIT
          TITLE  MAIN PROGRAM 
**        DCC - MAIN PROGRAM. 
  
  
          ORG    PPFW 
 DCC      RJM    PRS         PRESET PROGRAM 
          RJM    DNP         DUMP CCC 
          LDD    RQ+4        SET OPERATION COMPLETE 
          SCN    1
          LMN    1
          STD    RQ+4 
          LDD    IR+3        WRITE REQUEST
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          CWD    RQ 
          LDD    T4          DROP CHANNEL 
          DCHAN 
 DPP      MONITOR DPPM
          LJM    PPR
 DNP      SPACE  4
**        DNP - DUMP CCC. 
* 
*         THIS ROUTINE IS CALLED TO DUMP *CCC* MEMORY.
* 
*         ENTRY  (NA, NA+1) = STARTING ADDRESS FOR DUMP.
*                (IN, IN+1) = INPUT BUFFER IN POINTER.
*                (NL, NL+1) = ENDING ADDRESS FOR DUMP.
*                (NC) = DUMP BLOCK *CCC* WORD COUNT.
*                (IR+3, IR+4) = DUMP *FET* ADDRESS. 
*                (FT, FT+1) = INPUT BUFFER FIRST WORD ADDRESS.
*                (LM, LM+1) = INPUT BUFFER LIMIT. 
* 
*         EXIT   (RQ+4) = END OF RECORD STATUS (*EORS*) IF
*                         DUMP IS COMPLETE. 
* 
*         USES   NC, WC, CM - CM+4, DA+3 - DA+4, OT - OT+1. 
* 
*         CALLS  DV5, RNP, WCB. 
  
  
 DNP9     LDN    EORS        SET END OF RECORD
          STD    RQ+4 
  
 DNP      SUBR               ENTRY/EXIT 
          LDD    IN          DATA ADDRESS = IN
          STD    DA+3 
          LDD    IN+1 
          STD    DA+4 
 DNP1     LDD    NL          CHECK CCC ADDRESS
          SBD    NA 
          SHN    14 
          ADD    NL+1 
          SBD    NA+1 
          ZJN    DNP9        IF END OF DUMP 
          SBD    NC 
          PJN    DNP2        IF ENOUGH DATA FOR FULL BLOCK
          RAD    NC          SET SHORT BLOCK COUNT
 DNP2     RJM    RNP         READ CCC 
          LDD    NC          SET CPU WORD COUNT 
          SHN    1
          ADN    4
          RJM    DV5         DIVIDE *PP* WORD COUNT BY FIVE 
          STD    WC          SAVE *CP* WORD COUNT 
 DNP3     LDD    IR+3        READ OUT 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          ADN    3
          CRD    CM 
          LDD    CM+3        SET OUT
          LPN    37 
          STD    OT 
          SHN    14 
          LMD    CM+4 
          STD    OT+1 
          SHN    -6 
          SBD    FL 
          MJN    DNP5        IF IN BOUNDS 
 DNP4     LJM    DNPX        RETURN 
  
 DNP5     LDD    OT          CHECK CIRCULAR BUFFER
          SBD    DA+3 
          SHN    14 
          ADD    OT+1 
          SBD    DA+4 
          SBN    1
          PJN    DNP6        IF OUT WILL NOT HIT BUFFER LIMIT 
          SHN    6
          ADD    LM 
          SBD    FT 
          SHN    14 
          ADD    LM+1 
          SBD    FT+1 
 DNP6     SBD    WC 
          MJN    DNP7        IF NO ROOM IN BUFFER 
          RJM    WCB         WRITE CIRCULAR BUFFER
          LJM    DNP1        CONTINUE WITH DUMP 
  
 DNP7     LDC    =C+ DCC - INCOMPLETE *CCC* DUMP.+
          RJM    DFM
          LJM    DNP9 
  
          TITLE  SUBROUTINES. 
 ERR      SPACE  4
**        ERR - PROCESS ERROR.
* 
*         ERR DAYFILES AN ERROR MESSAGE AND ABORTS THE JOB.  THE
*         CHANNEL TO THE *CCC* WILL BE DROPPED IF RESERVED. 
* 
*         ENTRY  (A) = ERROR MESSAGE ADDRESS. 
*                (ERRA) = *LDN 1* IF CHANNEL IS RESERVED. 
*                (T4) = CHANNEL.
* 
*         EXIT   *PPR* ENTERED. 
* 
*         USES   T1, T7.
* 
*         CALLS  C2D, DFM, PPR. 
* 
*         MACROS CHTE, DCHAN, MONITOR.
  
  
 ERR      STD    T7          SAVE MESSAGE ADDRESS 
 ERRA     LDN    0           CHANNEL RESERVED FLAG
*         LDN    1           (CHANNEL RESERVED) 
          ZJN    ERR1        IF CHANNEL NOT RESERVED
          DCN    CH 
          LDD    T4          DROP CHANNEL 
          DCHAN 
 ERR1     CHTE   CH,* 
          LDN    CH          CONVERT CHANNEL NUMBER 
          RJM    C2D         CONVERT OCTAL TO DISPLAY 
          STM    ERRB+5 
          LDD    T4 
          LPN    40 
          ZJN    ERR1.1      IF NOT A CONCURRENT CHANNEL
          LDC    2R C        SET CONCURRENT MESSAGE 
          STM    ERRB+3 
 ERR1.1   LDC    ERRC 
          STD    T1 
 ERR2     LDI    T7          COPY MESSAGE 
          STI    T1 
          ZJN    ERR3        IF MOVE IS COMPLETE
          AOD    T7 
          AOD    T1 
          UJN    ERR2        MOVE NEXT WORD OF MESSAGE
  
 ERR3     LDC    ERRB        ISSUE DAYFILE MESSAGE
 ABT      RJM    DFM         DAYFILE ERROR MESSAGE
          MONITOR ABTM       ABORT JOB
          LJM    PPR         TERMINATE PROGRAM
  
 ERRB     DATA   H*  CCC,  CH00. *
 ERRC     BSS    0
 FCN      SPACE  4,10 
**        FCN - CHECK FUNCTION COUPLER. 
* 
*         THIS ROUTINE FUNCTIONS THE EQUIPMENT WITH THE REQUESTED 
*         FUNCTION CODE.  THE FUNCTION WILL BE TIMED OUT TO CHECK 
*         COUPLER RESPONSE. 
* 
*         ENTRY  (A) = FUNCTION CODE. 
*                (FCNA) = 1 IF NOT FIRST FUNCTION REQUEST.
* 
*         EXIT   FUNCTION ACCEPTED. 
* 
*         ERROR  *ERR* CALLED IF CHANNEL ACTIVE OR TIMEOUT. 
*                (A) = ERROR MESSAGE ADDRESS. 
* 
*         USES   T1, T7.
* 
*         CALLS  C2D, ERR.
  
  
 FCN4     LDN    1           FLAG FIRST ENTRY TO *FCN* COMPLETED
          STM    FCNA 
  
 FCN      SUBR               ENTRY/EXIT 
          STD    T1 
          AJM    FCN2,CH
          FAN    CH          FUNCTION COUPLER 
          LCN    0           SET TIMEOUT WAIT COUNT 
 FCN1     IJM    FCN4,CH     IF NO FUNCTION TIMEOUT 
          SBN    1
          NJN    FCN1        IF NOT FUNCTION TIMEOUT
          LDC    0
*         LDC    1           (AFTER FIRST FUNCTION) 
 FCNA     EQU    *-1
          ZJN    FCN3        IF FIRST ENTRY 
          LDD    T1          CONVERT FUNCTION 
          STD    T7 
          SHN    -6 
          RJM    C2D         CONVERT OCTAL TO DISPLAY 
          STM    FCNC        *0000 REJECT.* 
          LDD    T7 
          LPN    77 
          RJM    C2D         CONVERT OCTAL TO DISPLAY 
          STM    FCNC+1 
          LDC    FCNB        *FUNCTION 0000 REJECT.*
          LJM    ERR         PROCESS ERROR
  
 FCN2     LDC    =C* DCC - CHANNEL ACTIVE BEFORE FUNCTION.* 
          LJM    ERR         PROCESS ERROR
  
 FCN3     LDC    =C* DCC - NO RESPONSE, CHECK CABLES.*
          LJM    ERR
  
  
 FCNB     DATA   H*FUNCTION * 
 FCNC     DATA   C*0000 REJECT.*
 RNP      SPACE  4
**        RNP - READ CCC. 
* 
*         RNP READS A BLOCK OF DATA FROM THE *CCC* INTO 
*         THE *PP* BUFFER.  AN ERROR IS GENERATED IF THE INPUT
*         IS INCOMPLETE.
* 
*         ENTRY  (NC) = COUNT OF *CCC* WORDS TO RRAD. 
*                (NA, NA+1) = STARTING ADDRESS OF RRAD. 
* 
*         EXIT   (NA, NA+1) = UPDATED *CCC* ADDRESS.
*                (PBF) = *PP* BUFFER READ FROM DEVICE.
* 
*         ERROR  *ERR* CALLED IF READ IS INCOMPLETE.
*                (A) = ERROR MESSAGE ADDRESS. 
* 
*         USES   NONE.
* 
*         CALLS  ERR, FCN, SAL, SNA.
  
  
 RNP      SUBR               ENTRY/EXIT 
          RJM    SFL
          RJM    FCN
          ACN    CH 
          LDD    NC          READ BLOCK 
          SHN    1
          IAM    PBF,CH 
          NJN    RNP1        IF INCOMPLETE INPUT
          DCN    CH 
          LDD    NC          ADVANCE CCC ADDRESS
          RAD    NA+1 
          SHN    -14
          RAD    NA 
          UJN    RNPX        RETURN 
  
 RNP1     LDC    =C* DCC - INPUT INCOMPLETE.* 
          LJM    ERR         PROCESS ERROR
 SFL      SPACE  4,10 
**        SFL - SET CCC ADDRESS AND LENGTH. 
* 
*         ENTRY  (NC) = LENGTH. 
*                (NA, NA+1) = CCC START ADDRESS.
* 
*         EXIT   (A) = READ MEMORY FUNCTION.
*                TO *ERR* IF CHANNEL HUNG.
* 
*         CALLS  ERR, FCN.
  
  
 SFL      SUBR               ENTRY/EXIT 
          LDC    FSLA 
          ADD    NA 
          RJM    FCN         ISSUE LOAD ADDRESS + UPPER 6 OF ADDRESS
          ACN    CH 
          LDD    NA+1 
          OAN    CH          OUTPUT LOWER 12 OF ADDRESS 
 SFL1     ADN    1
          MJN    SFL3        IF TIMEOUT 
          IJM    SFL3,CH     IF INACTIVE
          FJM    SFL1,CH     IF NOT ACCEPTED
          LDD    NC 
          OAN    CH          OUTPUT LENGTH
 SFL2     ADN    1
          MJN    SFL3        IF HUNG
          FJM    SFL2,CH     IF NOT ACCEPTED
          DCN    CH 
          LDC    FSRD        CCC READ MEMORY FUNCTION CODE
          UJN    SFLX        RETURN 
  
 SFL3     LDC    =C* DCC - LOAD ADDRESS ERROR.* 
          LJM    ERR         PROCESS ERROR
 WCB      SPACE  4
**        WCB - WRITE CIRCULAR BUFFER.
* 
*         WCB WRITES THE *PP* BUFFER TO THE *CM* CIRCULAR BUFFER. 
* 
*         ENTRY  (WC) = *CM* WORD COUNT TO WRITE. 
*                (FT, FT+1) = FIRST WORD ADDRESS OF *CM* BUFFER.
*                (LM, LM+1) = LIMIT OF *CM* BUFFER. 
*                (DA+3, DA+4) = START ADDRESS OF DATA WRITE.
*                (IR+3, IR+4) = INPUT *FET* ADDRESS.
*                (PBF) = *PP* BUFFER TO BE WRITTEN. 
* 
*         EXIT   (DA+3, DA+4) = UPDATED BUFFER POINTER. 
*                INPUT *FET* IN POINTER UPDATED AND BUFFER WRITTEN. 
* 
*         USES   T1, T2.
  
  
 WCB4     LDD    IR+3        WRITE IN 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          ADN    2
          CWD    DA 
  
 WCB      SUBR               ENTRY/EXIT 
          LDD    WC          SET FIRST PART WORD COUNT
          STD    T1 
          LDD    LM          CHECK WORDS TO LIMIT 
          SBD    DA+3 
          SHN    14 
          ADD    LM+1 
          SBD    DA+4 
          SBD    WC 
          PJN    WCB1        IF NOT LESS THAN WORD COUNT
          RAD    T1          SET FIRST PART WORD COUNT
 WCB1     LDD    DA+3        WRITE FIRST PART 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    DA+4 
          CWM    PBF,T1 
          LDD    T1          ADVANCE IN 
          RAD    DA+4 
          SHN    -14
          RAD    DA+3 
          LMD    LM 
          SHN    14 
          LMD    DA+4 
          LMD    LM+1 
          ZJN    WCB2        IF IN = LIMIT
          LJM    WCB4        RETURN 
  
 WCB2     LDD    WC          SET SECOND PART WORD COUNT 
          SBD    T1 
          STD    T2 
          ZJN    WCB3        IF NO SECOND PART
          LDD    T1          SET PP BUFFER ADDRESS
          SHN    2
          ADD    T1 
          ADC    PBF
          STM    WCBA 
          LDD    FT          WRITE SECOND PART
          SHN    6
          ADD    RA 
          SHN    6
          ADD    FT+1 
          CWM    **,T2
 WCBA     EQU    *-1
 WCB3     LDD    T2          SET OUT
          ADD    FT+1 
          STD    DA+4 
          SHN    -14
          ADD    FT 
          STD    DA+3 
          LJM    WCB4        RETURN 
          SPACE  4
**        COMMON DECKS. 
  
  
*CALL     COMPC2D 
*CALL     COMPDV5 
          TITLE  INITIALIZATION.
 PRS      SPACE  4
**        PRS - PRESET PROGRAM. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          RJM    CRS         CHECK RECALL STATUS
          NJN    PRS0        IF RECALL SET
          LDC    =C* DCC INCORRECT REQUEST.*
          LJM    ABT
  
 PRS0     RJM    CUA         CHECK USER ACCESS
          ZJN    PRS1        IF VALID USER
          LDD    CM 
          ZJN    PRS1        IF ENGINEERING ACCESS ALLOWED
          LDC    =C* DCC - INCORRECT USER ACCESS.*
          LJM    ABT         ABORT JOB
  
 PRS1     LDD    CP          CHECK ORIGIN TYPE
          ADN    JOTW 
          CRD    CM 
          LDD    CM+3 
          LPN    77 
          LMC    SYOT 
          ZJN    PRS2        IF SYSTEM ORIGIN 
          LDC    =C* DCC - INCORRECT ORIGIN TYPE.*
          LJM    ABT         ABORT
  
 PRS2     LDC    NWC         SET CCC WORD COUNT 
          STD    NC 
          LDD    IR+3        CHECK ADDRESS
          LPN    37 
          SHN    14 
          ADD    IR+4 
          ADN    5
          SHN    -6 
          SBD    FL 
          MJN    PRS3        IF ADDRESS IN RANGE
          LDC    =C* DCC - PARAMETER ADDRESS ERROR.*
          LJM    ABT         ABORT
  
 PRS3     RJM    SBP         SET BUFFER PARAMETERS
          LDN    ZERL        CLEAR DATA ADDRESS 
          CRD    DA 
          LDD    IR+3        READ REQUEST 
          LPN    37 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          CRD    RQ 
          LDD    RQ+3        SET CCC FWA
          STD    NA+1 
          LDD    RQ+2 
          LPN    77 
          STD    NA 
          LDD    RQ+2        SET CCC LWA+1
          SCN    77 
          SHN    6
          LMD    RQ+1 
          SHN    6
          STD    NL+1 
          SHN    -14
          STD    NL          *CCC* LIMIT ADDRESS
          SHN    14 
          ADD    NL+1 
          ZJN    PRS4        IF ADDRESS OUT OF RANGE
          ADC    -0#4001
          MJN    PRS5        IF IN RANGE
 PRS4     LDC    =C* DCC - LWA+1 OUT OF RANGE.* 
          LJM    ABT         ABORT
  
 PRS5     LDD    NA          CHECK *CCC* ADDRESS
          SBD    NL 
          SHN    14 
          ADD    NA+1 
          SBD    NL+1 
          MJN    PRS6        IF *LWA+1* GREATER THAN *FWA*
          LDC    =C* DCC - FWA .GE. LWA+1.* 
          LJM    ABT         ABORT
  
 PRS6     LDD    RQ+4        CHECK *DCC* REQUEST
          SHN    -1 
          SBN    2
          MJN    PRS7        IF VALID REQUEST 
          LDC    =C* DCC - INCORRECT REQUEST.*
          LJM    ABT         ABORT
  
 PRS7     LDD    RQ          SET DATA CHANNEL 
          LPN    77 
          STD    T2          SAVE DATA CHANNEL
          RJM    SEC         SEARCH FOR EQUIPMENT ON CHANNEL
          NJN    PRS8        IF EQUIPMENT FOUND 
          LDC    =C* DCC - NOT CONTROLWARE CHANNEL.*
          LJM    ABT         ABORT JOB
  
 PRS8     LDN    0
          STD    T3 
 PRS9     LDM    PRSB,T3
          ZJN    PRS10       IF END OF TABLE
          LMD    CM+3        COMPARE DEVICE MNEMONIC
          ZJN    PRS11       IF CCC CONTROLWARE CHANNEL 
          AOD    T3 
          UJN    PRS9        CONTINE SEARCH 
  
 PRS10    LDC    =C* DCC - INCORRECT CCC CONTROLWARE TYPE.* 
          LJM    ABT         ABORT JOB
  
 PRS11    LDD    T3          CHECK FOR CMTS 
          SBN    EMTD 
          PJN    PRS11.1     IF NOT MT/NT DEVICE TYPE 
          LDD    CM 
          LPN    4
          ZJN    PRS10       IF NOT 698 (CMTS) EQUIPMENT
 PRS11.1  LDD    T2          RESTORE DATA CHANNEL 
          RJM    SDC         SET DATA CHANNEL 
          NJN    PRS12       IF CHANNEL AVAILABLE 
          LDC    =C* DCC - CHANNEL NOT AVAILABLE.*
          LJM    ERR         PROCESS ERROR
  
 PRS12    AOM    ERRA        SET CHANNEL RESERVED 
          DCN    CH 
          RJM    CCC         CLEAR *CCC* COUPLER
          LJM    PRSX        RETURN 
  
**        TABLE OF CCC CONTROLLER TYPES.
  
 PRSB     BSS    0
          CON    2RMT        698 (CMTS) 
          CON    2RNT        698 (CMTS) 
 EMTD     EQU    *-PRSB      END OF MT/NT DEVICE TYPES
          CON    2RCT        CTS
          CON    2RAT        ATS
          CON    2RSS        7990 
          CON    2RLX        5870 
          CON    2RLY        5970 
          CON    2RDC        895/7165 
          CON    0           END OF TABLE 
 CCC      SPACE  4,20 
**        CCC - CLEAR CCC COUPLER.
* 
*         CCC ISSUES THE CLEAR COUPLER FUNCTION AND CHECKS CHANNEL
*         ACTIVITY.  AN ERROR MESSAGE IS RETURNED IF THE FUNCTION 
*         DOES NOT TAKE OR THE CHANNEL REMAINS FULL.
* 
*         ENTRY  CHANNEL INSTRUCTIONS MODIFIED. 
* 
*         EXIT   CHANNEL DISCONNECTED.
* 
*         ERROR  *ERR* CALLED IF CHANNEL REMAINS FULL.
*                (A) = ERROR MESSAGE ADDRESS. 
* 
*         USES   T1.
* 
*         CALLS  ERR, FCN.
  
  
 CCC      SUBR               ENTRY/EXIT 
          LDC    1000 
          STD    T1 
          ACN    CH 
          EJM    CCC2,CH     IF CHANNEL EMPTY OR INACTIVE 
          IAN    CH 
          DCN    CH 
          ACN    CH 
 CCC1     EJM    CCC2,CH     IF CHANNEL EMPTY OR INACTIVE 
          IAN    CH 
          SOD    T1 
          NJN    CCC1        IF NOT CHANNEL FULL TIMEOUT
          LDC    =C* DCC - CONSTANT CHANNEL FULL.*
          LJM    ERR         PROCESS ERROR
  
 CCC2     DCN    CH 
          UJN    CCCX        RETURN 
 SBP      SPACE  4
**        SBP - SET BUFFER PARAMETERS.
* 
*         THIS ROUTINE READS THE *CM* CIRCULAR BUFFER POINTERS. 
*         THE POINTERS ARE CHECKED TO BE WITHIN THE JOB-S FIELD LENGTH
*         AND IN AND OUT WITHIN THE BUFFER LIMITS.  THE JOB IS
*         ABORTED IF THESE CONDITIONS ARE NOT MET.
* 
*         ENTRY  (IR+3, IR+4) = FILE *CM* ADDRESS OF *FET*. 
* 
*         EXIT   (FT, FT+1) = FIRST WORD ADDRESS OF BUFFER. 
*                (IN, IN+1) = INPUT POINTER TO BUFFER.
*                (OT, OT+1) = OUTPUT POINTER TO BUFFER. 
*                (LM, LM+1) = LIMIT OF BUFFER.
* 
*         ERROR  *ABT* CALLED IF BUFFER POINTER OUT OF RANGE. 
*                (A) = ERROR MESSAGE ADDRESS. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  ABT. 
  
  
 SBP      SUBR               ENTRY/EXIT 
          LDD    IR+3        READ LIMIT 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          ADN    4           READ LIMIT 
          CRD    LM-3 
          SBN    1           READ OUT 
          CRD    OT-3 
          SBN    1           READ IN
          CRD    IN-3 
          SBN    1           READ FIRST 
          CRD    CM 
          LDD    LM          SET LIMIT
          LPN    77 
          STD    LM 
          LDD    CM+4        SET FIRST
          STD    FT+1 
          LDD    CM+3 
          LPN    77 
          STD    FT 
          SCN    37          CHECK UPPER PART OF ADDRESSES
          ADD    LM 
          SCN    37 
          ADD    IN 
          SCN    37 
          ADD    OT 
          SCN    37 
          NJN    SBP1 
          LDD    LM          CHECK LIMIT
          SHN    14 
          ADD    LM+1 
          SBN    1
          SHN    -6 
          SBD    FL 
          PJN    SBP1        IF LIMIT GREATER THAN *FL* 
          LDD    FT          CHECK FIRST
          SBD    LM 
          SHN    14 
          ADD    FT+1 
          SBD    LM+1 
          MJN    SBP2        IF FIRST LESS THAN LIMIT 
 SBP1     LDC    =C* DCC - CIRCULAR BUFFER ADDRESS ERROR.*
          LJM    ABT         ABORT JOB
  
 SBP2     LDD    IN          CHECK IN 
          SBD    FT 
          SHN    14 
          ADD    IN+1 
          SBD    FT+1 
          MJN    SBP1        IF IN LESS THAN FIRST
          LDD    IN 
          SBD    LM 
          SHN    14 
          ADD    IN+1 
          SBD    LM+1 
          PJN    SBP1        IF IN NOT LESS THAN LIMIT
          LDD    OT          CHECK OUT
          SBD    FT 
          SHN    14 
          ADD    OT+1 
          SBD    FT+1 
          MJN    SBP1        IF OUT LESS THAN FIRST 
          LDD    OT 
          SBD    LM 
          SHN    14 
          ADD    OT+1 
          SBD    LM+1 
          PJN    SBP1        IF OUT NOT LESS THAN LIMIT 
          LJM    SBPX        RETURN 
 SDC      SPACE  4
**        SDC - SET DATA CHANNEL. 
* 
*         THIS ROUTINE MODIFIES ALL INSTRUCTIONS WHICH CONTAIN A
*         CHANNEL NUMBER.  THE CHANNEL IS RESERVED. 
* 
*         ENTRY  (A) = CHANNEL NUMBER.
* 
*         EXIT   (A) = ZERO IF CHANNEL NOT RESERVED.
*                    = NON-ZERO IF CHANNEL RESERVED.
*                (T4) = CHANNEL.
*                CHANNEL INSTRUCTIONS MODIFIED. 
* 
*         USES   CM - CM+4, T1 - T4.
* 
*         MACROS MONITOR, PAUSE.
  
  
 SDC      SUBR               ENTRY/EXIT 
          STD    T4 
          LPN    37 
          STD    T1          SET CHANNEL
          LDC    CTCH        SET CHANNEL TABLE ADDRESS
          STD    T2 
 SDC1     LDI    T2          SET NEXT INSTRUCTION ADDRESS 
          ZJN    SDC2        IF ALL CHANNELS MODIFIED 
          STD    T3 
          LDI    T3 
          SCN    37 
          LMD    T1 
          STI    T3 
          AOD    T2 
          UJN    SDC1        MODIFY NEXT INSTRUCTION
  
 SDC2     LDN    CTALL       CHANNEL TABLE LENGTH 
          STD    T2 
          LDC    0           FWA OF CHANNEL STATUS TABLE
 SDCB     EQU    *-1
          CRM    PBF,T2 
          LDM    PBF,T1 
          LMC    7777 
          ZJN    SDC6        IF CHANNEL NOT AVAILABLE 
 SDC5     LDD    T4          SET CHANNEL NUMBER 
          STD    CM+1 
          MONITOR  CCHM      REQUEST CHANNEL
          LDD    CM+2 
          NJN    SDC7        IF ASSIGNED
          LDN    77          DELAY
          SBN    1
          NJN    *-1         IF MORE DELAY
          PAUSE 
          LDD    CM+1 
          ZJN    SDC5        IF NO ERROR FLAGS
 SDC6     LDN    0           RETURN WITH A = 0
 SDC7     LJM    SDCX        RETURN 
 SEC      SPACE  4,15 
**        SEC - SEARCH FOR EQUIPMENT ON CHANNEL.
* 
*         ENTRY  (T2) = CHANNEL.
* 
*         EXIT   (A) = 0, IF NO EQUIPMENT FOUND.
*                (CM - CM+4) = *EQDE* WORD OF EQUIPMENT ON CHANNEL. 
* 
*         USES   T3, T5, CM - CM+4. 
* 
*         MACROS SFA. 
  
  
 SEC      SUBR               ENTRY/EXIT 
          LDK    ESTP 
          CRD    CM 
          LDD    CM+2        LAST EST ORDINAL + 1 
          STD    T3 
          LDN    NOPE-1      SET EST ORDINAL
          STD    T5 
 SEC1     AOD    T5          CHECK NEXT EST 
          LMD    T3 
          ZJN    SECX        IF END OF EST
          SFA    EST,T5 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+1        CHECK FIRST CHANNEL
          ZJN    SEC2        IF FIRST CHANNEL NOT PRESENT 
          LPN    77 
          LMD    T2 
          ZJN    SEC3        IF FIRST CHANNEL MATCHES 
 SEC2     LDD    CM+2        CHECK SECOND CHANNEL 
          ZJN    SEC1        IF SECOND CHANNEL NOT PRESENT
          LPN    77 
          LMD    T2 
          NJN    SEC1        IF SECOND CHANNEL DOES NOT MATCH 
 SEC3     LDN    1           INDICATE SUCCESS 
          UJN    SECX        RETURN 
          SPACE  4,10 
**        PRESET COMMON DECKS.
  
  
*CALL COMPCRS 
*CALL     COMPCUA 
 CIT      SPACE  4
**        CIT - CHANNEL INSTRUCTION TABLE.
  
  
          CHTB   CH 
 PBF      SPACE  4
**        PBF - PPU BUFFER. 
  
  
          USE    BUFFER 
  
 PBF      BSS    0           *PP* BUFFER TO READ/WRITE *CCC*
 PBFL     MAX    NWC*2,CTALL*5
          ERRNG  7777-PBF-PBFL  PP OVERFLOW 
          SPACE  4,10 
          OVERFLOW
          END 
