          IDENT  CLBTP
          CIPPU
          MEMSEL 8
          TITLE  CLBTP IPI CHANNEL LOOPBACK TEST PROGRAM FOR I4.
*
*         WORD 6 OF THE FOLLOWING COMMENT MUST BE THE REVISION NUMBER FOR CTI
*
          COMMENT *SMD* LVL=01
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC. 1992
*
*         THIS IS THE PP DRIVER FOR THE 10 AND 25 MB/S CHANNELS THAT TESTS
*         THE CHANNEL LOOPBACK FEATURE OF THE IPI CHANNEL INTERFACE.
          LIST   -$
          LIST   B,L,N,R
          EJECT
*COPY     DSI$PP_MACROS

*
*         EQUATES FOR IPI ADAPTER
*
 H0000    EQU    0#0000      MASTER CLEAR ADAPTER
 H0009    EQU    0#0009      SET SELECT OUT
 H0029    EQU    0#0029      SELECT OUT, FULL WHEN SLAVE IN IS 1
 H005B    EQU    0#005B      SET SYNC OUT
 H0071    EQU    0#0071      FULL WHEN SLAVE IN IS 0
 H00E1    EQU    0#00E1      READ STATUS REGISTER
 H00F1    EQU    0#00F1      READ ERROR REGISTER
 H0102    EQU    0#0102      READ IPI REVISION REGISTER
 H0122    EQU    0#0122      IPI BUS A OUTPUT PARITY ERROR
 H200     EQU    0#0200      READ CONTROL REGISTER/READ ATTRIBUTES
 H0281    EQU    0#0281      STREAM, READ
 H0300    EQU    0#0300      WRITE CONTROL REGISTER
 H0302    EQU    0#0302      WRITE TRANSMITTER RECEIVER REGISTER
 H0322    EQU    0#0322      IPI BUS A INPUT PARITY ERROR
 H0381    EQU    0#0381      STREAM, WRITE
 H0600    EQU    0#0600      READ DMA ERROR REGISTER
 H0700    EQU    0#0700      READ OPERATIONAL STATUS
 H0711    EQU    0#0711      DROP MASTER OUT
 H0715    EQU    0#0715      REQUEST CLASS 1, 2, OR 3 INTERRUPT
 H0800    EQU    0#0800      DMA TERMINATE/ABORT COMMAND
 H0900    EQU    0#0900      DMA NEW BURST TRANSFER
 H0A00    EQU    0#0A00      READ T REGISTER
 H0B00    EQU    0#0B00      WRITE T PRIME REGISTER
 H0C00    EQU    0#0C00      DMA READ
 H0C22    EQU    0#0C22      ICI OUTPUT PARITY ERROR
 H0D00    EQU    0#0D00      DMA WRITE
 H8025    EQU    0#8025      MASTER OUT, FULL WHEN SLAVE IN IS 1
 H8039    EQU    0#8039      SELECT OUT, FULL WHEN SLAVE IN IS 1
 H8215    EQU    0#8215      SET MASTER OUT, LOGICAL INTERFACE RESET
 H8415    EQU    0#8415      SET MASTER OUT, SLAVE RESET
 H9211    EQU    0#9211      DROP SYNC OUT
 H9213    EQU    0#9213      SET SYNC OUT
          SPACE  5,20
*         ERROR CODES

 E00      EQU    0           CP MUST DETERMINE ERROR CODE
 E01      EQU    1           FUNCTION TIMEOUT
 E02      EQU    2           CHANNEL EMPTY WHEN ACTIVATED
 E03      EQU    3           PERIOD COUNTER PARITY
 E04      EQU    4           PP-IPI PARITY ERROR
 E06      EQU    6           IOU ERROR
 E07      EQU    7           INCOMPLETE I4 TRANSFER
 E08      EQU    8           CHANNEL NOT EMPTY
 E09      EQU    9           CENTRAL MEMORY ERROR
 E10      EQU    10          INVALID CM RESPONSE CODE
 E11      EQU    11          CM RESPONSE CODE PARITY ERROR
 E12      EQU    12          CMI READ DATA PARITY ERROR
 E13      EQU    13          Y DATA ERROR
 E14      EQU    14          BAS PARITY ERROR
 E15      EQU    15          Z ERROR
 E16      EQU    16          Y ERROR
 E17      EQU    17          X ERROR
 E18      EQU    18          DMA TEST MODE FAILURE
 E19      EQU    19          DMA COUNT OVERFLOW
 E20      EQU    20          CANT SELECT CONTROLLER
 E21      EQU    21          BIT SIGNIFICANT RESPONSE ERROR
 E22      EQU    22          NO SYNC IN
 E23      EQU    23          SYNC IN DID NOT DROP
 E24      EQU    24          IPI SEQUENCE ERROR
 E25      EQU    25          IPI CHANNEL PARITY ERROR
 E27      EQU    27          SLAVE IN NOT SET
 E28      EQU    28          SLAVE IN DID NOT DROP
 E29      EQU    29          INCOMPLETE TRANSFER
 E30      EQU    30          CHANNEL STAYED ACTIVE
 E31      EQU    31          BUFFER COUNTER PARITY
 E32      EQU    32          SYNC COUNTER PARITY
 E33      EQU    33          LOST DATA
 E34      EQU    34          BUS PARITY
 E35      EQU    35          COMMAND REJECT
 E36      EQU    36          SYNC OUT NOT EQUAL SYNC INS
 E37      EQU    37          BUS B ACKNOWLEDGE INCORRECT
 E38      EQU    38          NO CONTROLLER RESPONSE
 E39      EQU    39          ENDING STATUS WRONG
 E50      EQU    50          EXECUTING CONTROLLER DIAGNOSTICS
 E51      EQU    51          CONTROLLER DIAGNOSTICS PASSED
 E52      EQU    52          CONTROLLER DIAGNOSTICS PASSES, LAST ERROR CODE RETURNED
 E54      EQU    54          DRIVE ALTERNATE PORT EVENT
 E55      EQU    55          RESTORING DRIVE
 E56      EQU    56          DRIVE RESTORATION COMPLETE
 E57      EQU    57          FORMATTING DRIVE
 E58      EQU    58          FORMAT COMPLETE
 E59      EQU    59          PARITY PROTECTION DISABLED
 E61      EQU    61          DRIVE FAILURE
 E62      EQU    62          MEDIA FAILURE
 E70      EQU    70          LRC ERROR ON READ
 E71      EQU    71          CONTROLLER INTERVENTION REQUIRED
 E72      EQU    72          CONTROLLER MACHINE EXCEPTION
 E73      EQU    73          COMMAND EXCEPTION
 E74      EQU    74          MICROCODE EXECUTION ERROR
 E75      EQU    75          CONTROLLER ALTERNATE PORT EVENT (MAPPED TO 53 BY CP CODE)
 E76      EQU    76          UNEXPECTED RESPONSE
 E110     EQU    110         PP-CONTROLLER DATA INTEGRITY
 E111     EQU    111         CM-DRIVE DATA INTERGRITY
 E120     EQU    120         SOFTWARE FAILURE
 E130     EQU    130         DEFECT MANAGEMENT TASK FAILED
 E140     EQU    140         XXXX CONFIGURED - YYYY FOUND
 E141     EQU    141         DRIVE INITIALIZATION REQUIRED
 E142     EQU    142         CONTROLLER DOES NOT SUPPORT PARALLEL
 E143     EQU    143         CHANNEL ERROR FLAG SET

 DC       EQU    22B         DISK CHANNEL

*         DIRECT CELL DEFINITION.

 T0       EQU    0
 T1       EQU    1
 T2       EQU    2
 T3       EQU    3
 T4       EQU    4
 T5       EQU    5
 T6       EQU    6
 T7       EQU    7
 T8       EQU    10 - 13
 CM       EQU    14 - 17
 D1       EQU    20
 CHAN     EQU    21          CHANNEL TO USE FOR XFER
 JT       EQU    22 - 25
 LF       EQU    26
 OS       EQU    27
 W0       EQU    30          WORKING STORAGE
 W1       EQU    31
 W2       EQU    32
 W3       EQU    33
 W4       EQU    34
 W5       EQU    35
 W6       EQU    36
 W7       EQU    37
 RS       EQU    40 - 43
 BW       EQU    44 - 47
 WC       EQU    50
 ST       EQU    51
 RN       EQU    52
 DO       EQU    53
 DP       EQU    54 - 56
          ORG    70
          CON    0
 DH       EQU    71 - 73
          ORG    74
 ON       CON    1           CONSTANT ONE
 MP       CON    0,0,0
          ORG    100
          TITLE  MAIN LOOP
** NAME-- MAIN
*
** PURPOSE-- MAIN IDLE LOOP.  LOOK FOR REQUESTS FROM CENTRAL MEMORY
*            AND PERFORM CHANNEL LOOPBACK FUNCTIONS.
*
** ENTRY
*         MAIN - AFTER DRIVER IS LOADED, WHEN THE PP IS RESUMED
*         MAIN10 - TO RUN DIAGNOSTICS DURING ERROR RECOVERY
          SPACE  2
          RJM    CHGCH       INITIALIZE CHANNEL INSTRUCTIONS
 MAIN     BSS
          RJM    TRM         TRANSMIT FROM RECEIVERS TO CENTRAL MEMORY
          RJM    DLY         DELAY A SPECIFIED AMOUNT OF TIME
          RJM    TMR         TRANSMIT FROM CENTRAL MEMORY TO RECEIVERS
          RJM    CFC         CHECK IF TO STOP DATA TRANSFERS
          UJN    MAIN
          SPACE  4,10
*         THE FOLLOWING MEMORY DESCRIBES THE PARAMETERS OF THE DMA
*         TRANSFER. NOTE - DO NOT DISTURB BYTC AND RMA ORIENTATION.

 BYTC     CON    0           BYTE COUNT
 RMA      CON    0,0         RMA OF TRANSFER
 SEED     CON    0#1357      SEED VALUE FOR DATA GENERATION
 DELAY    CON    0           TIME TO DELAY BETWEEN DATA XFERS

*         FUNCTION CODES FOR IPI-25 CHANNEL

 TR       DATA   0#FF42      25 MB CHANNEL TRANSFER RATE

 PAS      DATA   0#362       25 MB CHANNEL PORT A SELECT


 WOR      DATA   0#702       25 MB CHANNEL WRITE OPERAND REGISTER FUNCTION

 TMWC     DATA   0#FF9C      25 MB CHANNEL TEST MODE WORD COUNT

 ETMF     CON    H0302       25 MB CHANNEL ENABLE TEST MODE FUNCTION

 EDC      DATA   0#4000      25 MB CHANNEL, USE DOUBLE CMI SLOT

 ETMP     DATA   0#80FF      25 MB CHANNEL, ENABLE TEST MODE PARAMETER

 EOG2     DATA   0           25 MB CHANNEL, EXPECTED OPERAND GENERATOR

 RORF     DATA   0#802       25 MB CHANNEL, READ OPERAND GENERATOR FUNCTION

 CTS      DATA   0           25 MB CHANNEL, CHANNEL TRANSFER SPEED

 EP       SPACE  5,20
**        EP - ERROR PROCESSOR.
*

 EP       SUBR               ENTRY POINT FOR ERROR PROCESSOR
          UJN    *
 CFC      SPACE  4,10
**        CFC - CHECK FOR COMPLETE.
*
*         CHECKS IF A REQUEST TO STOP ACTIVITY HAS BEEN POSTED.
*

 CFC      SUBR
          UJN    CFCX        RETURN


 TIM      SPACE  4,10
**        TIM - MAINTAIN MILLISECOND TIME AND EXECUTE TIMED ROUTINES.
*
*         *TIM* USES THE CHANNEL 14 CLOCK TO ALLOW THE EXECUTION OF
*         CERTAIN ROUTINES ON A TIMED BASIS.  THE ROUTINES TO BE
*         ACTIVATED PERIODICALLY ARE IN *ACTB*.  TO ENSURE ACCURACY,
*         *TIM* SHOULD BE CALLED AT LEAST EVERY TWO MILLISECONDS.
*         *TIMA* SHOULD BE INITIALIZED BEFORE THE FIRST CALL TO *TIM*.
*
*         EXIT   (TIMA) IS WITHIN ONE MILLISECOND OF CHANNEL 14 VALUE.
*
*         USES   T1, T7.
*
*         CALLS  SEE *ACTB*.
*
*         NOTE   CHANGES TO THIS ROUTINE SHOULD BE MADE IN *SCI* ALSO.


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

 TIMA     CON    0
 TIMB     CON    0
 TIMF     BSS    1           FWA OF ENTRY BEING PROCESSED
 ACTB     SPACE  4,10
**        ACTB - ACTIVATION TABLE.
*
*         THE FOLLOWING TABLE IS USED BY ROUTINE *TIM* TO DETERMINE
*         WHICH ROUTINES TO CALL ON A PERIOD OF MILLISECONDS BASIS.
*         THE TABLE CONSISTS OF THREE WORD ENTRIES IN THE FOLLOWING
*         FORMAT.
*
*         16/ROUTINE TO CALL, 16/CALL TIME INTERVAL, 16/ELAPSED TIME.

 ACTB     BSS    0           TABLE OF TIMED ROUTINES

 ACTB1    CON    STF,20,0   DELAY FOR TRANSFERS 20 MILLISECONDS
 ACTBL    EQU    *
          SPACE  5,20
 DLY      SPACE  4,10
**        DLY - DELAY FOR A VARAIBLE PERIOD TO ALLOW DATA TRANSFER VARIABILITY.
*

 DLY      SUBR
          LDN    0
          STML   ACTB1+2
          STML   TFLG
 DLY0     RJM    TIM
          LDM    TFLG
          ZJN    DLY0        IF NOT DONE WITH DELAY
          UJN    DLYX        RETURN
 HTO      SPACE  4,10
**        STF - SET TIMEOUT FLAG.
*

 STF      SUBR
          LDN    1
          STML   TFLG        SET TIMEOUT FLAG
          UJN    STFX        RETURN

 TFLG     CON    0           TIMEOUT FLAG
 FAN      SPACE  4,10
** NAME-- FAN
*
** PURPOSE-- SEND A FUNCTION TO THE IPI CHANNEL.
*

 FAN      SUBR
          DCN    DC+40B      ENSURE THE CHANNEL IS INACTIVE
                              THE CHANNEL MAY HAVE BEEN LEFT ACTIVE
                              BY A MASTER CLEAR, A ROUTINE SUCH AS DCM
                              OR AFTER A REPORTED ERROR.
          FAN    DC          SEND THE FUNCTION
          UJN    FANX
          SPACE  5,20
** NAME-- FUNC
*
** PURPOSE-- ISSUE FUNCTION TO IPI CHANNEL
*
** ENTRY-- A REGISTER = FUNCTION CODE.
          SPACE  2
 FUNC     SUBR
          DCN    DC+40B      ENSURE CHANNEL IS INACTIVE
                              THE CHANNEL MAY HAVE BEEN LEFT ACTIVE
                              BY A MASTER CLEAR, A ROUTINE SUCH AS DCM
                              OR AFTER A REPORTED ERROR.
          FAN    DC          ISSUE THE FUNCTION
          STDL   LF          SAVE FUNCTION CODE
          IJM    FUNCX,DC     EXIT IF CHANNEL INACTIVE
          LDN    E01         FUNCTION TIMEOUT
          RJM    EP          ERROR PROCESSING (NO RETURN)
 TMT      SPACE  5,20
** NAME-- TMT
*
** PURPOSE-- TEST MODE TRANSFER
*
** ENTRY
*         A = 0C00 FOR DMA READ
*             0D00 FOR DMA WRITE
          SPACE  2
 TMT      SUBR
          RJM    FUNC
          LDC    200
          STDL   T8          T8 CONTROLS THE TIMEOUT
          STML   BYTC        BYTE COUNT
          ACN    DC
          LDN    3
          OAM    BYTC,DC     BYTE COUNT, RMA
          RJM    DCN         DISCONNECT THE CHANNEL
 TMT10    BSS
          RJM    ROS         READ OPERATIONAL STATUS
          SFM    TMT40,DC    IF ERROR FLAG SET
          LPN    1
          ZJN    TMTX        IF TRANSFER COMPLETE
          SODL   T8
          NJN    TMT10       IF TIMEOUT NOT EXPIRED
          LDC    H0A00       READ T REGISTER
          RJM    RDRG        READ REGISTER
          SHN    -1
          STDL   WC          SAVE WORD COUNT
          LDC    H0800       DMA TERMINATE
          RJM    FAN
          LDC    H00E1       READ STATUS REGISTER
          RJM    RDRG        READ REGISTER
          STDL   ST          SAVE CONTENTS OF STATUS REGISTER
          LDN    E29         INCOMPLETE TRANSFER
          RJM    EP          ERROR PROCESSING (NO RETURN)
 TMT40    BSS
          LDC    E143        CHANNEL ERROR FLAG SET
          RJM    EP          ERROR FLAG PROCESSING (NO RETURN)
          SPACE  5,20
** NAME-- WOG
*
** PURPOSE-- WRITE OPERAND GENERATOR.  THIS DETERMINES THE NUMBER OF
*            WORDS TO TRANSFER.  FOR READS TO CM IT DETERMINES THE DATA
*            PATTERN AND FOR WRITES IT SETS THE STARTING VALUE FOR ITS
*            CRC CHECK OF THE DATA.
          SPACE  2
 WOG      SUBR
          LDML   WOR
          RJM    FUNC        WRITE OPERAND REGISTER
 WOG10    EQU    *-1         FOR FORCING ERRORS
          LDML   TMWC        TEST MODE WORD COUNT
          STML   WOGP+1
          ACN    DC
          LDN    2
          OAM    WOGP,DC     SEND THE PARAMETERS
          RJM    DCN         DISCONNECT THE CHANNEL
          LDML   ETMF
          STDL   T2          WRITE REGISTER FUNCTION
          LDML   ETMP        ENABLE TEST MODE
          RJM    WR          WRITE REGISTER
          UJN    WOGX
 WOGP     BSS
          DATA   0#1357      STARTING PATTERN
          DATA   0           STREAM 100 PP WORDS (MODIFIED)
          SPACE  5,20
** NAME-- WR
*
** PURPOSE-- WRITE REGISTER
*
** ENTRY--  A = VALUE FOR REGISTER
*          T2 = WRITE REGISTER FUNCTION
          SPACE  2
 WR       SUBR
          STDL   T1
          LDDL   T2          WRITE REGISTER FUNCTION
          RJM    FUNC
          ACN    DC
          LDN    1           OUTPUT ONE WORD
          OAM    T1,DC
          RJM    DCN         DISCONNECT THE CHANNEL
          UJN    WRX
          SPACE  5,20
** NAME-- COG
*
** PURPOSE-- CHECK OPERAND GENERATOR.  THE CRC VALUE GENERATED
*            AFTER A TEST MODE OPERATION IS READ AND COMPARED
*            WITH THE CORRECT VALUE.
*
** NOTE-- THE OPERAND GENERATOR CAN NOT BE READ AFTER A DMA READ
*         ON THE 25 MB CHANNEL
*
** ENTRY  A = EXPECTED OPERAND GENERATOR
          SPACE  2
 COG      SUBR
          STDL   T3
          LDC    H0009
          RJM    FUNC        DROP MASTER OUT
          RJM    DCM         DROP SELECT OUT
          LDML   ETMF
          STDL   T2          WRITE REGISTER FUNCTION
          LDN    0           DISABLE TEST MODE
          RJM    WR          WRITE REGISTER
          LDDL   T3
          ZJN    COGX        IF 25 MB CHANNEL AND DMA READ
          LDML   RORF        READ OPERAND GENERATOR FUNCTION
          RJM    RDRG        READ REGISTER
          LMDL   T3
          ZJN    COGX        IF OPERAND GENERATOR IS CORRECT
          LDN    E18         DMA TEST MODE FAILURE
          RJM    EP          ERROR PROCESSING (NO RETURN)
          SPACE  5,20
** NAME-- TRM
*
** PURPOSE-- TEST DMA PATH FROM RECEIVERS TO CM.
*
** EXIT-- A = 0 IF NO ERROR

          SPACE  2
 TRM      SUBR

*         TRANSFER FROM RECEIVERS TO CENTRAL MEMORY

          RJM    WOG         WRITE OPERAND GENERATOR, ENABLE TEST MODE
          LDN    H0009
          RJM    FUNC        SET SELECT OUT
          LDC    H0281
          RJM    FUNC        IPI TRANSFER FUNCTION (READ)
          LDC    H0C00       DMA READ
          RJM    TMT         TEST MODE TRANSFER
          RJM    COG         DROP MASTER OUT, DESELECT, DISABLE TEST
                              MODE, CHECK OPERAND GENERATOR
          UJN    TRMX        RETURN

 TMR      SPACE  4,10
**        TMR - TRANSMIT FROM CENTRAL MEMORY TO TRANSMITTERS.
*

 TMR      SUBR
          RJM    MCC         MASTER CLEAR CHANNEL.  THIS CLEARS THE LOST DATA
                              ERROR THAT OCCURS ON THE 25 MB CHANNEL WHEN ONLY
                              ONE OF 3 OPERAND GENERATOR WORDS ARE READ.
          RJM    PS          PORT SELECT
          RJM    WOG         WRITE OPERAND GENERATOR, ENABLE TEST MODE
          LDN    H0009
          RJM    FUNC        SET SELECT OUT
          LDC    H0381       IPI TRANSFER FUNCTION (WRITE)
          RJM    FUNC
          LDC    H0D00       DMA WRITE
          RJM    TMT         TEST MODE TRANSFER
          LDML   EOG2        EXPECTED OPERAND GENERATOR
          RJM    COG         DROP MASTER OUT, DESELECT, DISABLE TEST
                              MODE, CHECK OPERAND GENERATOR
          UJP    TMTX
          SPACE  4,10
** NAME-- PS
*
** PURPOSE-- PORT SELECT.  SELECT PORT A OR B OF IPI CHANNEL
          SPACE  2
 PS       SUBR
*         LDML   UNITS,UX
*         SHN    /UN/L.PORT+2
*         PJN    PS5         IF PORT A
*         LDML   PBS,CH      PORT B SELECT
*         UJN    PS10
 PS5      BSS
          LDML   PAS         PORT A SELECT
 PS10     BSS
          RJM    FUNC
          UJN    PSX
          SPACE  5,20
** NAME-- RDRG
*
** PURPOSE-- READ REGISTER
*
** ENTRY--  A = FUNCTION CODE
          SPACE  2
 RDRG10   BSS
          LDN    0
 RDRG     SUBR
          RJM    FAN         SEND FUNCTION
          AJM    RDRG10,DC   IF NO FUNCTION REPLY
          ACN    DC+40B
          EJM    RDRG10,DC   IF WORD COULD NOT BE READ
          IAN    DC
          UJN    RDRGX
          SPACE  5,20
** NAME-- CHGCH
*
** PURPOSE-- SET CHANNEL NUMBER IN CHANNEL INSTRUCTIONS
*
** ENTRY  CHAN = CHANNEL NUMBER
          SPACE  2
 CHGCH    SUBR
          LDN    0
          STDL   T1          CHANGE DISK CHANNEL INSTRUCTIONS
 CHG10    LDML   CONCH,T1    ADDRESS OF CHANNEL INSTRUCTIONS
          ZJN    CHGCHX      END OF LIST
          STDL   T2
          LDIL   T2
          SCN    37B
          LMDL   CHAN        CHANNEL NUMBER
          STIL   T2
          AODL   T1
          UJN    CHG10
 CONCH    BSS                DISK CHANNEL REFERENCES
 TDC+40B  HERE
 T40B+DC  HERE
 TDC      HERE
          CON    0           END OF TABLE
          SPACE  5,20
** NAME-- DCN
*
** PURPOSE-- DISCONNECT THE CHANNEL
          SPACE  2
 DCNX     BSS
          DCN    DC+40B      DISCONNECT THE CHANNEL
          LJM    **
 DCN      EQU    *-1
          STDL   WC          WORDS NOT TRANSFERRED
          SFM    DCN10,DC    IF ERROR FLAG SET
          ZJN    DCN20       IF ALL WORDS TRANSFERRED
          LDN    E07
          UJN    DCN40
 DCN10    BSS
          LDC    E143
          RJM    EP          ERROR FLAG PROCESSING (NO RETURN)
 DCN20    BSS
          EJM    DCNX,DC     IF CHANNEL EMPTY
          LDN    E08         CHANNEL NOT EMPTY
 DCN40    BSS
          RJM    EP          ERROR PROCESSING (NO RETURN)
          SPACE  4,10
** NAME-- DCM
*
** PURPOSE-- DESELECT THE CONTROLLER
          SPACE  2
 DCMX     LJM    **
 DCM      EQU    *-1
          LDC    H0071
          RJM    FUNC        DROP SELECT OUT
          ACN    DC
          LDN    77B
 DCM4     FJM    DCMX,DC     IF SLAVE IN DROPPED
          SBN    1
          NJN    DCM4        IF TIMEOUT NOT EXPIRED
          LDN    E28         SLAVE IN DID NOT DROP
          RJM    EP          ERROR PROCESSING (NO RETURN)
          SPACE  5,20
** NAME-- ROS
*
** PURPOSE-- READ OPERATIONAL STATUS
          SPACE  2
 ROSX     LJM    **
 ROS      EQU    *-1
          LDC    H0700       READ OPERATIONAL STATUS
          RJM    FUNC
          ACN    DC
          EJM    ROS10,DC    IF ERROR
          IAN    DC
          STDL   OS          SAVE OPERATIONAL STATUS
          UJN    ROSX
 ROS10    BSS
          LDN    E02         CHANNEL EMPTY WHEN ACTIVATED
          RJM    EP          ERROR PROCESSING (NO RETURN)
          SPACE  5,20
** NAME-- MCC
*
** PURPOSE-- MASTER CLEAR CHANNEL
          SPACE  2
 MCCX     LJM    **
 MCC      EQU    *-1
          LDN    H0000       MASTER CLEAR CHANNEL
          RJM    FUNC
          LDC    100
          RJM    PAUS        ALLOW CONTROLLER TIME TO DROP LINES
          SFM    MCC10,DC    MASTER CLEAR DOES NOT CLEAR ERROR FLAG ON 25 MB CHANNEL
 MCC10    BSS
          LDN    H0000       MASTER CLEAR CHANNEL
          RJM    FUNC         IN CASE SEQUENCE ERROR OCCURRED
          LDML   TR
          RJM    FUNC        SET IPI CHANNEL TRANSFER RATE
          LDC    H0300
          STDL   T2          WRITE CONTROL REGISTER FUNCTION
          LDML   EDC         ENABLE DOUBLE CMI SLOT IF 25 MB CHANNEL
          RJM    WR          WRITE REGISTER
          UJN    MCCX
          SPACE  5,20
** NAME-- PAUS
*
** PURPOSE-- DELAY PROGRAM EXECUTION FOR A SPECIFIED NUMBER OF
*            MICROSECONDS.
*
** ENTRY  A REGISTER SPECIFIES NUMBER OF MICROSECONDS
*          TO BE DELAYED.
          SPACE  2
 PAUS     SUBR
 PAUS10   SBN    1           EACH ITERATION OF THIS LOOP
          STDL   T1           IS ONE MICROSECOND (I4 ONLY)
          NJN    PAUS10
          UJN    PAUSX

*         THE LAST CARD IN THE DECK MUST BE /EOR SO THAT COMS CAN
*         ASSEMBLE MULTIPLE DECKS.

          END
/EOR
