DCC

Table Of Contents

  • [00002] DCC - CCC COMMUNICATOR.
  • [00012] CCC COMMUNICATOR.
  • [00015] CCC COMMUNICATOR.
  • [00113] CHTE - CREATE CHANNEL TABLE ENTRY.
  • [00130] IAN - REDEFINE IAN WITH 25 SET. * [00159] MAIN PROGRAM * [00160] MAIN PROGRAM. * [00181] DNP - DUMP CCC. * [00264] SUBROUTINES. * [00266] ERR - PROCESS ERROR. * [00317] FCN - CHECK FUNCTION COUPLER. * [00373] RNP - READ CCC. * [00411] SFL - SET CCC ADDRESS AND LENGTH. * [00445] WCB - WRITE CIRCULAR BUFFER. * [00527] INITIALIZATION. * [00529] PRS - PRESET PROGRAM. * [00666] CCC - CLEAR CCC COUPLER. * [00702] SBP - SET BUFFER PARAMETERS. * [00796] SDC - SET DATA CHANNEL. * [00851] SEC - SEARCH FOR EQUIPMENT ON CHANNEL. * [00895] CIT - CHANNEL INSTRUCTION TABLE. * [00900] PBF - PPU BUFFER. </WRAP> === Source Code === <file compass DCC.txt [enable_line_numbers=“true”] > 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 25 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

</file>