*COMDECK,COMPIPA
*CALL,COMSIPA 
 RICHI$   EQU    0
          LIST   -L 
*CALL,COMPCHI 
*CALL,COMPMAC 
          LIST   *
*IF DEF,LISTDOC,1 
          LIST   X
          CTEXT  COMPIPA - IPI COMMON DAS DRIVER
          BASE   MIXED
*IF -DEF,NOS,4
*IF -DEF,MVE
          IF     -DEF,QUAL$,1 
          QUAL   IPI
*ENDIF
  
          EJECT 
  
*         DIRECT CELL EQUATES 
  
 CHANN    EQU    10B         CURRENT CHANNEL REGISTER 
 CMMSK    EQU    11B         CONTROLLER ADDRESS MASK
 COUNTER  EQU    12B         GENERAL COUNTER
 MAJORST  EQU    13B         MAJOR CONTROLLER STATUS CELL 
 SLAVE    EQU    14B         SHIFTED CONTROLLER BIT-ADDRESS 
 TEMP1    EQU    15B         TEMPORARY SCRATCH REGISTER 
 TEMP2    EQU    16B
 TOWC     EQU    17B         TRANSFER OUT WORD COUNT
 VFW      EQU    20B         VARIABLE FUNCTION WORD 
 RUP      EQU    21B         R-REG UPPER FOR CENTRAL MEMORY TRANSFER
 RLW      EQU    22B         R-REG LOWER FOR CENTRAL MEMORY TRANSFER
 AREG     EQU    23B         A-REGISTER 
 LOOPCTR  EQU    24B         GENERAL LOOP COUNTER 
 EXPCLI   EQU    25B         EXPECTED CLASS INTERRUPT 
 BURDIR   EQU    26B         BURST DIRECTION FLAG 
 BURBCW   EQU    27B         BURST BUS CONTROL WORD 
 CHGXSM   EQU    30B         CHANGE TRANSFER MODE FLAG
 TSW      EQU    31B         TRANSFER SETTING WORD
 CURTSK   EQU    32B         CURRENT TASK NUMBER
 CURMO    EQU    33B         CURRENT MAJOR OPERATION
 TSFOA    EQU    34B         TRANSFER OUTPUT ADDRESS CELL 
 OPENFL   EQU    35B         OPERATION ENABLE FLAG STORAGE
 IBC      EQU    36B         INTERVAL BURST SECTOR COUNT
 SREG1    EQU    37B         SCRATCH REGISTER 1 
 SREG2    EQU    40B         SCRATCH REGISTER 2 
 DBLW     EQU    42B         DATA BLOCK LENGTH IN WORDS 
 DBLB     EQU    43B         DATA BLOCK LENGTH IN BYTES 
 RSPLCTR  EQU    44B         RESPONSE HANDLER LOOP COUNTER
 SECCTR   EQU    45B         TOTAL DATA BLOCK COUNTER 
  
          EJECT 
  
*         FUNCTION WORD EQUATES 
  
 BMSFW    EQU    0#39        BAD MASTER STATUS
 CKRG10   EQU    0#7E42      CLOCK REGISTER INPUT (10 MB-INTERNAL)
 CKRG25   EQU    0#7F42      CLOCK REGISTER INPUT (25 MB-INTERNAL)
 CLK10    EQU    0#FE42      CLOCK REGISTER INPUT (10 MB-EXTERNAL)
 CLK25    EQU    0#FF42      CLOCK REGISTER INPUT (25 MB-EXTERNAL)
 CLREI4   EQU    0#100       CLEAR ERROR STATUS REGISTER
 CLRLSI   EQU    0#22        CLEAR LSI/IPI ERROR REGISTER 
 CSRFW    EQU    0#0A81      CENTRAL STREAMING READ 
 CSWFW    EQU    0#0B81      CENTRAL STREAMING WRITE
 DITFW    EQU    0#C05B      DATA INPUT TRANSFER (BUS CONTROL)
 DMARD    EQU    0#C00       DMA/I4 READ FUNCTION 
 DMAWRT   EQU    0#D00       DMA/I4 WRITE FUNCTION
 DMATRM   EQU    0#800       I4 DMA TERMINATE FUNCTION
 DMOF     EQU    1           DROP MASTER OUT
 DOTFW    EQU    0#805B      DATA OUT TRANSFER (BUS CONTROL)
 DSFW     EQU    0#71        DESELECT CONTROLLER
 DSRMF    EQU    5           DROP SYNC OUT,KEEP MASTER OUT UP 
 DSOF     EQU    0#69        DROP SYNC OUT
 FIFW     EQU    1           FORCE IDLE STATE 
 GMSFW    EQU    0#8039      MASTER STATUS
 LIRFW    EQU    0#8200      LOGICAL INTERFACE RESET
 MCI4     EQU    0           MASTER CLEAR I4 ADAPTER
 MTFW     EQU    0#A1        MASTER TRANSFER TERMINATION
 PSELA10  EQU    0#62        I4 PORT A SELECT FUNCTION (10 MB)
 PSELA25  EQU    0#362       I4 PORT A SELECT FUNCTION (25 MB)
 PSELB10  EQU    0#862       I4 PORT A SELECT FUNCTION (10 MB)
 PSELB25  EQU    0#B62       I4 PORT B SELECT FUNCTION (25 MB)
 RDERST   EQU    0#600       READ ERROR STATUS REGISTER 
 RDEVST   EQU    0#1E        READ ENVIROMENT STATUS 
 RDTREG   EQU    0#A00       READ T-REGISTERS 
 RIPIST   EQU    0#E1        READ IPI STATUS FROM ADAPTER 
 RIERFW   EQU    0#F1        READ IPI ERROR REGISTER
 RMSOF    EQU    7           RAISE MASTER OUT AND SYNC OUT
 ROPLS    EQU    0#700       READ OPERATIONAL STATUS FUNCTION 
 RPTFW    EQU    0#405B      RESPONSE PACKET TRANSFER (BUS CONTROL) 
 RSOFW    EQU    0#9213      RAISE SYNC OUT FOR MASTER RESET
 RSTFW    EQU    0#15        RESET FUNCTION WORD
 RTSFW    EQU    0#8035      REQUEST TRANSFER SETTINGS
 RQIFW    EQU    0#715       REQUEST INTERRUPTS 
 SCTFW    EQU    0#5B        SEND COMMAND TRANSFER (BUS CONTROL)
 SLF      EQU    0#29        SELECT CONTROLLER FUNCTION 
 SRTFW    EQU    0#281       STREAMING READ TRANSFER
 SVRFW    EQU    0#8400      SLAVE RESET
 SWTFW    EQU    0#381       STREAMING WRITE TRANSFER 
 WDMACR   EQU    0#300       WRITE DMA CONTROL REGISTER 
  
          EJECT 
  
*         CONDITIONAL ASSEMBLY TASK EQUATES 
  
          IF     DEF,ESEEK
 SEEKO    EQU    1
          ELSE
 SEEKO    EQU    0
          ENDIF 
          IF     DEF,EBUFRD 
 BUFRDO   EQU    1
          ELSE
 BUFRDO   EQU    0
          ENDIF 
          IF     DEF,EBUFWR 
 BUFWRO   EQU    1
          ELSE
 BUFWRO   EQU    0
          ENDIF 
          IF     DEF,ECMDG
 CMDGO    EQU    1
          ELSE
 CMDGO    EQU    0
          ENDIF 
          IF     DEF,EDRDG
 DRDGO    EQU    1
          ELSE
 DRDGO    EQU    0
          ENDIF 
          IF     DEF,ERQTC
 RQTCO    EQU    1
          ELSE
 RQTCO    EQU    0
          ENDIF 
          IF     DEF,EIFMT
 IFMTO    EQU    1
          ELSE
 IFMTO    EQU    0
          ENDIF 
          IF     DEF,ELCIML 
 LCIMLO   EQU    1
          ELSE
 LCIMLO   EQU    0
          ENDIF 
          IF     DEF,ESCAB
 SCABO    EQU    1
          ELSE
 SCABO    EQU    0
          ENDIF 
          IF     DEF,ESCSP
 SCSPO    EQU    1
          ELSE
 SCSPO    EQU    0
          ENDIF 
          IF     DEF,ERDPFL 
 RDPLO    EQU    1
          ELSE
 RDPLO    EQU    0
          ENDIF 
          IF     DEF,ERADST 
 RADST    EQU    1
          ELSE
 RADST    EQU    0
          ENDIF 
          IF     DEF,ECLSUN 
 CLSUN    EQU    1
          ELSE
 CLSUN    EQU    0
          ENDIF 
  
          EJECT 
  
*         IOU ENABLE EQUATES
  
          IF     DEF,EI4
 I4ON     EQU    1           TURN I4 CONDITIONAL ASSEMBLY CODE ON 
          ELSE
 I4ON     EQU    0           TURN I4 CONDITIONAL ASSEMBLY CODE OFF
          ENDIF 
          IF     DEF,EI0
 I0ON     EQU    1           TURN I0 CONDITIONAL ASSEMBLY CODE ON 
          ELSE
 I0ON     EQU    0           TURN I0 CONDITIONAL ASSEMBLY CODE OFF
          ENDIF 
          IFNE   I0ON+I4ON,0
 IOUOFF   EQU    0           TURN NO-IOU-SPECIFIED FLAG OFF 
          ELSE
 IOUOFF   EQU    1           TURN NO-IOU-SPECIFIED FLAG ON
          ENDIF 
  
          EJECT 
  
*         MISCELLANEOUS CONSTANT EQUATES
  
 ADPERR   EQU    0#400       IPI ADAPTER ERROR FOR GENERAL STATUS 
 ARMS     EQU    0#40        ASYNCRONOUS RESPONSE MAJOR STATUS
 ASYNEXP  EQU    8D          EXPECTED ASYNC INTERRUPT BIT 
 ATTRCWL  EQU    7           ATTRIBUTE COMMAND WORD LENGTH
 BUSYF    EQU    0#40        BUSY FAILURE BIT 
 CDCL     EQU    9D          CONTROLLER DIAGNOSTICS COMMAND LENGTH
 CEPID    EQU    0#17        COMMAND EXCEPTION PARAMETER ID 
 CGXSFM   EQU    4000B       CHANGE TRANSFER MODE BIT/SEL FAST MODE 
 CH       EQU    0           DEFAULT IPI CHANNEL NUMBER 
 CHMSK    EQU    37B         CHANNEL MASK 
 CLASS1   EQU    1           CLASS 1 INTERRUPT BIT
 CLASS2   EQU    2           CLASS 2 INTERRUPT BIT
 CLASS3   EQU    4           CLASS 3 INTERRUPT BIT
 CL3RSP   EQU    3           CLASS 3 RESPONSE CODE
 CMDEXPM  EQU    0#0931      COMMAND EXCEPTION PARAMETER ID WORD
 CNSCS    EQU    0#800       CONDITIONAL SUCCESS BIT
 CSMS     EQU    2           CONDITIONAL SUCCESS BIT FOR MAJOR STATUS 
 CTCPWL   EQU    7           CM PACKET READ/WRITE COMMAND WORD LENGTH 
 CTWRL8   EQU    10B         CEN MEM XFER R-REG LOWER BURST WORD COUNT
 CTW512   EQU    10000B      CEN MEM XFER LOWER BYTE BURST WORD COUNT 
 DB4      EQU    -2          DIVIDE BY 4 CONSTANT 
 DBPORTS  EQU    0#300       DOUBLE (BOTH 0 & 1) PORTS MASK 
 DCBERR   EQU    0#2000      DCB INPUT ERROR BIT
 DCBSTCT  EQU    12D         DCB STATUS WORD COUNT
 DDOM     EQU    0#8100      DRIVE DIAGNOSTICS OPCODE MODIFIER
 DGPROG   EQU    0#4000      DIAGNOSTICS IN PROGRESS BIT
 DGEND    EQU    0#2000      DIAGNOSTICS ENDED BIT
 DLINACT  EQU    172044B     CHANNEL INACTIVE DELAY LOOP LENGTH 
 DL1MS    EQU    2570B       1 MS DELAY FOR FULL CH SUBROUTINE TIMER
 DMALPCT  EQU    10467B      DMA TRANSFER SINGLE-BURST LOOP COUNT 
 DMEXID   EQU    0#26        DRIVE MACHINE EXCEPTION PARAMETER ID 
 DNOF     EQU    0#20        DRIVE NOT OPERATIONAL FAILURE BIT
 DNRF     EQU    0#10        DRIVE NOT READY FAILURE BIT
 DPINDX   EQU    3           DIAGNOSTIC IN PROGRESS PARAMETER INDEX 
 DRSV     EQU    0#800       DRIVE RESERVE
 EDCMIS   EQU    040000B     ENABLE DOUBLE CMI SLOT (25 MB) 
 EIGHT    EQU    8D          DECIMAL 8
 EN10MB   EQU    0#0F02      ENABLE 10 MB TRANSFER ALL PORTS (DAS)
 EN25MB   EQU    0#0000      ENABLE 25 MB TRANSFER ALL PORTS (DAS)
 ERREG    EQU    400000B     ENABLE (R)+(A) CENTRAL MEMORY ADDRESS
 E1ID     EQU    0#E1        REPORT ADDRESSEE FACILITY STATUS 
 E2ID     EQU    0#E2        REPORT ADDRESSEE CONDITION 
 FACBSY   EQU    2           FACILITY BUSY
 FIVE     EQU    5           DECIMAL 5
 FMTCWL   EQU    8D          FORMAT COMMAND WORD LENGTH 
 FOUR     EQU    4           DECIMAL 4
 FOURTN   EQU    14D         DECIMAL 14 
 FTLCLR   EQU    0#7BFF      MASK FOR CLEARING FATAL AND IPI ERROR
 FTLERR   EQU    0#8000      FATAL ERROR BIT FOR GENERAL STATUS 
 GSSCMSK  EQU    0#BFFF      MASK FOR CLEARING THE STATUS ERROR BIT 
 IRPID    EQU    0#24        INTERVENTION REQUIRED PARAMETER ID 
 LBMSK    EQU    0#FF        LOWER BYTE MASK
 LCICL    EQU    15D         LOAD CONTROLLER IML COMMAND LENGTH 
 LEFT8    EQU    8D          SHIFT LEFT COUNT = 8 
 LEFT12   EQU    12D         SHIFT LEFT COUNT = 12
 LNMSK    EQU    0#0F        LOWER NIBBLE MASK
 LIS      EQU    9D          LOWER INTERRUPT SIZE 
 LBS      EQU    11D         LOWER BURST SIZE 
 LSZ      EQU    6D          LOWER SECTOR (LOGICAL) SIZE
 MASK3    EQU    7B          MASK FOR LOWER 3 BITS
 MASK4    EQU    17B         MASK FOR LOWER 4 BITS
 MAXCA1   EQU    8D          MAXIMUM CONTROLLER + 1 
 MAXDA1   EQU    32D         MAXIMUM DRIVE ADDRESS + 1
 MEXPID   EQU    0#16        MACHINE EXCEPTION PARAMETER ID 
 MINUS1   EQU    -1          CONSTANT -1
 MINUS2   EQU    -2          CONSTANT -2
 MINUS4   EQU    -4          CONSTANT -4
 MINUS8   EQU    -8D         CONSTANT -8
 MINUS6   EQU    -6D         CONSTANT -6
 MINUS12  EQU    -12D        CONSTANT -12 
 MINUS16  EQU    -16D        CONSTANT -16 
 MMEXID   EQU    0#13        MESSAGE/MICRCODE EXCEPTION PARAMETER ID
 MRSBW    EQU    43D         MAX REMAINING SB WORDS AFTER MAJOR STATUS
 MRSBW1   EQU    44D         MAXIMUM REMAINING SB WORDS + 1 
 MXTSK1   EQU    24D         MAXIMUM TASK PLUS 1
 NCWL     EQU    9D          STANDARD COMMAND PACKET WORD COUNT 
 NINE     EQU    9D          DECIMAL 9
 NMDATA   EQU    0#10        NO MORE DATA IN ENDING STATUS
 NOTOP    EQU    0#A         NOT OPERATIONAL BIT
 NOTRDY   EQU    5           NOT READY BIT
 ONE      EQU    1           DECIMAL 1
 ONES     EQU    77B         ONES FLAG
 ONEUS    EQU    1           1 USEC DELAY COUNT 
 OPLRDYT  EQU    0#6000      OPERATIONAL AND READY TRANSITION STATUS
 PAUSE    EQU    0#30        PAUSE BIT FOR ENDING STATUS
 PCCL     EQU    6           PATH CONTROL COMMAND PACKET LENGTH 
 PCD1     EQU    5           PERFORM CONTROLLER DIAG PARAMETER 1
 PCD2     EQU    6           PERFORM CONTROLLER DIAG PARAMETER 2
 PCD3     EQU    7           PERFORM CONTROLLER DIAG PARAMETER 3
 PCD4     EQU    8D          PERFORM CONTROLLER DIAG PARAMETER 4
 PLTH     EQU    0#6D        PARAMETER LENGTH PARAMETER 
 PMPID    EQU    0#50        PORT MASK COMMAND PARAMETER ID 
 POM      EQU    0#4105      OPCODE MODIFIER FOR POSITION COMMAND 
 PORT0    EQU    0#100       PORT 0 MASK
 PORT1    EQU    0#200       PORT 1 MASK
 PPBSZ    EQU    2000B       PP BUFFER SIZE 
 PRVOP    EQU    0#0402      PRIORITY RESERVE OPCODE/MODIFIER WORD
 RADE1    EQU    0#302       REPORT ADDRESSEE FACILITY STATUS 
 RADE2    EQU    0#301       REPORT ADDRESSEE CONDITION 
 RCPOM    EQU    0#5200      READ CONTROLLER BUFFER OPCODE MODIFIER 
 RLOP     EQU    0#0401      RELEASE COMMAND OPCODE MODIFIER
 RDOM     EQU    0#1007      READ COMMAND OPCODE MODIFIER 
 RDOMAR   EQU    0#1005      READ COMMAND OPCODE MODIFIER W/AUTO RETRY
 RPHDRLG  EQU    5           RESPONSE PACKET HEADER LENGTH
          IFNE   RDPLO,0,1
 RPLCPL   EQU    4D          READ PERFORMANCE LOG CMD PACKET LENGTH 
 RADSTL   EQU    6D          REPORT ADDRESSEE STATUS PACKET LENGTH
 RQIINLC  EQU    0#92D9      REQ INTERRUPTS 1/2 SEC INNER LOOP COUNT
 RRPF     EQU    1           RECEIVE RESPONSE PACKET FAILURE BIT
 RSTCMMK  EQU    0#FEE0      RESET COMPLETE STATUS MASK 
 RVOP     EQU    0#0400      RESERVE COMMAND OPCODE MODIFIER
 RWCMDL   EQU    16D         STANDARD R/W COMMAND PACKET LENGTH 
 RWDF     EQU    2           READ/WRITE DATA FAILURE BIT
 SACP5    EQU    0#C080      ATTRIBUTE COMMAND PARAMAMETER 1
 SCCMS    EQU    0#18        STANDARD COMMAND COMPLETION MAJOR STATUS 
 SCCR     EQU    0#10        STANDARD COMMAND COMPLETION RESPONSE 
 SCPF     EQU    4           SEND COMMAND PACKET FAILURE BIT
 SCWL     EQU    4           SHORT COMMAND PACKET LENGTH (WORDS)
 SDLI     EQU    103010B     STARTING D-CELL LOAD INSTRUCTION 
 SDRSEQF  EQU    0#8         SELECT, DESELECT, OR RESET SEQ FAILURE BIT 
 SDSI     EQU    103410B     STARTING D-CELL STORAGE INSTRUCTION
 SELCTRL  EQU    2           SELECT CONTROLLER TASK NUMBER
 SEVEN    EQU    7           DECIMAL 7
 SHFTINS  EQU    1000B       SHIFT INSTRUCTION
 SITS     EQU    0#80        SUCCESSFUL INFORMATION TRANSFER STATUS 
 SIX      EQU    6           DECIMAL 6
 SIXMIN   EQU    360D        6 MINUTE REQUEST INTERRUPTS LOOP COUNT 
 SIXTEEN  EQU    16D         DECIMAL 16 
 SIXUS    EQU    6           6 USEC CONSTANT
 SLOB     EQU    -8D         SHIFT LEFT ONE BYTE
          IFNE   SCABO,0,1
 SPFL     EQU    0#80        SERIAL PARALLEL LOWER BYTE 
          IFNE   SCABO,0,1
 SSCPL    EQU    8D          SET CONTROLLER ATTRIBUTES CMD PACKET LENGTH
 STERR    EQU    0#4000      STATUS ERR BIT FOR GENERAL STATUS WORD 
 STERMSK  EQU    0#E0        MASK FOR STATUS ERROR TYPE 
 SVISHF   EQU    6           SLAVE-IN STATUS SHIFT COUNT
 TEN      EQU    10D         DECIMAL 10 
 TENUS    EQU    10D         10 USEC COUNT
 THREE    EQU    3           DECIMAL 3
 TIPMSK   EQU    1           TRANSFER-IN-PROGRESS MASK
 TKBUSY   EQU    0#1000      TASK BUSY BIT FOR GENERAL STATUS 
 TNMS     EQU    0#58        TRANSFER NOTIFICATION MAJOR STATUS 
 TREGCT   EQU    3           T-REGISTER COUNT 
 TRSNOT   EQU    0#50        TRANSFER NOTIFICATION (MAJOR STATUS) 
 TSBIT    EQU    0#10        TRANSFER SETTINGS BIT
 TSK9CS   EQU    9D          TASK 9 CONSTANT
 TSK10CS  EQU    10D         TASK 10 CONSTANT 
 TSK21CS  EQU    21D         TASK 21 CONSTANT 
          IFNE   SCSPO,0,2
 TTFCPL   EQU    8D          10/25 MB SET ATTRIBUTES CMD PACKET LENGTH
 TTSCPL   EQU    4D          10/25 MB SAVE ATTRIBUTES CMD PACKET LENGTH 
 TWENTY   EQU    20D         DECIMAL 20 
 TWENUS   EQU    20D         20 USEC DELAY COUNT
 TWO      EQU    2           DECIMAL 2
 UBMSK    EQU    0#FF00      UPPER BYTE MASK
 UNBMSK   EQU    0#F0        UPPER NIBBLE MASK
 UNH      EQU    40B         UN-HANG BIT FOR CHANNEL INSTRUCTIONS 
 US100    EQU    100D        100 USEC DELAY CONSTANT
 US50000  EQU    50000D      50,000 USEC DELAY CONSTANT 
 WBOM     EQU    0#6200      WRITE BUFFER OPCODE MODIFIER 
 WCLASS1  EQU    401B        2 SEC TIME-OUT CLASS 1 COUNT 
 WCLASS2  EQU    402B        2 SEC TIME-OUT CLASS 2 COUNT 
 WCLASS3  EQU    204B        1 SEC TIME-OUT CLASS 3 COUNT 
 WCLSS1A  EQU    411B        2 SEC TIME-OUT/CLASS 1 ASYNC COUNT 
 WDOM     EQU    0#2005      WRITE COMMAND OPCODE MODIFIER
 WLCL1A   EQU    132011B     6 MIN TIME-OUT/CLASS 1 ASYNC COUNT 
 WMCLSS1  EQU    40401B      2 MIN, 10 SEC TIME-OUT/CLASS 1 COUNT 
 WLCLSS1  EQU    702001B     30 MINUTE TIME-OUT/CLASS 1 ASYNC COUNT 
 XSFPN    EQU    0#50        TRANSFER PENDING STATUS
 ZERO     EQU    0           DECIMAL 0
  
          EJECT 
  
*         ERROR CODE EQUATES
  
 ICHAAC   EQU    0#A         CHANNEL IS INACTIVE AFTER ACTIVATE 
 ECHFLL   EQU    0#B         CHANNEL IS FULL AFTER T-REGS LOADED
 EC       EQU    0#C         DMA/I4 TRANSFER-IN-PROGRESS TMO ERROR
 ED       EQU    0#D         DMA/I4 ERROR STATUS PRESENT
 FCNERRB  EQU    0#E         CH ACTIVE BEFORE A FUNCTION OUTPUT 
 FCNERRA  EQU    0#F         CH ACTIVE 1 USEC AFTER A FUNCTION OUTPUT 
 E11      EQU    0#11        ASYN RESP NOT FND DURING SELECT RESET
 E21      EQU    0#21        SLAVE-IN RISE TIME-OUT ERROR 
 E22      EQU    0#22        UNKNOWN CONTROLLER ADDRESS RECEIVED
 E23      EQU    0#23        CH ERR AFTER SELECT STATUS BYTE RECEIVED 
 E31      EQU    0#31        SYNC-IN RISE TIME-OUT ERROR
 E32      EQU    0#32        WRONG BUS ACKNOWLEDGE BYTE RECEIVED
 E33      EQU    0#33        CH ERR FLAG SET AFTER INPUT OF BUS ACK 
 E34      EQU    0#34        SYNC-IN FALL TIME-OUT ERROR
 E40      EQU    0#40        BASE FOR ADAPTER FUNCTION ERROR
 E41      EQU    0#41        WORD COUNT RESIDUE AFTER INFO TRANSFER OUT 
 E42      EQU    0#42        CH WAS EMPTY WHEN ADAPTER INPUT WORD 
 E51      EQU    0#51        SLAVE-IN RISE TIME-OUT ERROR 
 E52      EQU    0#52        CH ERROR FLAG AFTER ENDING SLAVE STATUS
 E53      EQU    0#53        INFORMATION TRANSFER NOT SUCCESSFUL
 E61      EQU    0#61        SLAVE INTERRUPT BYTE NOT PRESENT 
 E62      EQU    0#62        CH ERROR AFTER SLAVE INTERRUPT RECEIVED
 E63      EQU    0#63        NO CONTROLLER INTERR WITHIN ALLOTTED TIME
 E70      EQU    0#70        BASE FOR ADAPTER FUNCTION ERROR
 E71      EQU    0#71        WORD COUNT RESIDUE AFTER INFO TRANSFER IN
 E72      EQU    0#72        CH EMPTY WHEN ADAPTER INPUT EXPECTED 
 E81      EQU    0#81        SLAVE-IN FALL TIME-OUT ERROR 
 E91      EQU    0#91        SLAVE-IN RISE TIME-OUT ERROR 
 E92      EQU    0#92        CH ERROR AFTER TRANSFER SET BYTE RECEIVED
 E93      EQU    0#93        SLAVE-IN FALL TIME-OUT ERROR 
 ONSERR   EQU    0#E0        OPERATION NOT SUCCESSFUL 
 TSKBSY   EQU    0#E1        TASK IS BUSY (NO RESPONSE PACKET YET)
 DTSITMO  EQU    0#E2        DATA TRANSFER/SLAVE-IN TIME-OUT ERROR
 UC2REC   EQU    0#E3        UNEXPECTED CLASS 2 INTERRUPT RECEIVED
 UC1REC   EQU    0#E4        UNEXPECTED CLASS 1 INTERRUPT RECEIVED
 URTREC   EQU    0#E5        UNKNOWN RESPONSE TYPE WAS RECEIVED 
 UARREC   EQU    0#E6        UNEXPECTED ASYNC RESPONSE WAS RECEIVED 
 CNDSUCC  EQU    0#E7        COMMAND HAD CONDITIONAL SUCCESS
 CRITERR  EQU    0#E8        CRITICAL ERR DURING ENDING STATUS SEQUENCE 
 UNSCDBT  EQU    0#E9        UNSUCCESSFUL DATA BURST TRANSFER 
 DNOR     EQU    0#EA        DRIVE NOT OPERATIONAL AND READY
 CNOR     EQU    0#EB        CONTROLLER NOT OPERATIONAL AND READY 
 UNRCERR  EQU    0#EC        UNRECOVERABLE DATA ERROR 
 INVTK    EQU    0#F0        INVALID TASK SPECIFIED 
 INVCA    EQU    0#F1        INVALID CONTROLLER ADDRESS SPECIFIED 
 INVDA    EQU    0#F2        INVALID DRIVE ADDRESS SPECIFIED
 ZTLERR   EQU    0#F3        NO DATA TRANSFER LENGTH SPECIFIED
  
          EJECT 
*** 
* 
*         E R R O R    H A N D L I N G    N O T E S 
* 
* 
*         WHEN EACH DEEPER-LEVEL SUBROUTINE IS CALLED AND EXECUTED,  ANY
*         ERROR CONDITION THAT ARISES WILL STOP THE  SUBROUTINE  AT  THE
*         POINT OF  ERROR AND PASS AN ERROR CODE TO IT'S CALLING ROUTINE
*         (VIA  THE  A-REG)  THAT  DESCRIBES  AND  PINPOINTS  THE  ERROR
*         CONDITION.  THERE  WILL BE NO STATE RECOVERY OR RESETS DONE TO
*         THE  IPI  HARDWARE  AFTER  AN  ERROR OCCURS.  THIS WILL BE THE
*         RESPONSIBILITY  OF  THE  OFF-LINE  PROGRAM THAT CALLED THE IPI
*         DRIVER.  A  LOGICAL  RESET  MUST  BE  PERFORMED BEFORE ANY I/O
*         OPERATIONS CAN BE RUN.  TO DO THIS, THE  OFF-LINE PROGRAM MUST
*         CALL THE IPI  DRIVER WITH A TASK CODE OF 1; A MASTER/SELECTIVE
*         (LOGICAL) RESET.
* 
*         WHEN THE PREVIOUS CALLING ROUTINE WITHIN THE IPI DRIVER NOTICE
*         THAT (A) IS NON-ZERO,  IT  WILL ABORT WITH THE SAME ERROR CODE
*         BY  PASSING  IT  UP  TO  ITS  OWN  CALLING  ROUTINE OR MODULE.
*         (SOMETIME  IT  WILL  TACK ON AN IDENTIFIER TO FURTHER PINPOINT
*         THE ERROR.) 
* 
*         WHEN  CONTROL  RETURNS  TO  THE INITIALIZATION (OR ENTRY/EXIT)
*         MODULE OR ROUTINE ANY ERROR CODE IS STORED IN DCB+LLE, AND THE
*         FAILING TASK IS STORED IN DCB+FTSK. THE MULTI-TASK TASKS (11 &
*         12) WILL NOT BE REFERENCED SINCE THEY ARE MADE UP OF THE OTHER
*         EXISTING TASKS. THE GENERAL STATUS WORD IS UPDATED ACCORDINGLY. 
*         WHEN EACH TASK ROUTINE IS EXECUTING  THE "CURRENT TASK" MEMORY
*         LOCATION IS LOADED WITH THE NUMBER OF THE CURRENT  TASK.  WHEN
*         EACH OF THE MAJOR DAS/DRIVE OPERATIONS  ARE  RUN, THE "CURRENT
*         MAJOR OPERATION"  LOCATION  IS  LOADED  WITH  THE  PROPER  BIT
*         SIGNIFICANT CODE. 
* 
*         THE  FOLLOWING  DESCRIPTION  EXPLAINS  THE  MEANING OF THE TWO
*         DIGIT  LOW-LEVEL  ERROR  CODES...(ALL  ERROR  CODES ARE IN THE
*         HEXADECIMAL NOTATION)...
* 
*                   X   Y 
*                   -   - 
*                   !   ! 
*              ---------------              ------------------
*                     !                              !
*                     V                              V
*           CODE NUMBER OF FAILING      CODE NUMBER OF FAILING CONDITION
*           LOW-LEVEL SEQUENCE          WITHIN LOW-LEVEL SEQUENCE (0-F) 
*                  (0-F)                (SEE ERROR CODE EQUATES FOR 
*                    !                  MORE DETAILS) 
*                    V
*           LOW-LEVEL SEQUENCE
*              CODE NUMBER           SEQUENCE/ERROR TITLE 
*           ------------------       ---------------------------------
*                  0.................IPI ADAPTER FUNCTION ERROR 
*                  1.................MASTER/SELECTIVE RESET (MSR) 
*                  2.................SELECT (SEL) 
*                  3.................BUS CONTROL (BSC)
*                  4.................INFORMATION TRANSFER OUT (ITO) 
*                  5.................ENDING STATUS (EDS)
*                  6.................RESPONSE HANDLER (RSPHDL)
*                  7.................INFORMATION TRANSFER IN (ITI)
*                  8.................DESELECT (DSL) 
*                  9.................REQUEST TRANSFER SETTINGS (RQTS) 
* 
*         THE RANGE FOR CURRENT IPI DRIVER TASK NUMBERS IS 1 - 18 ... 
* 
*                  1.......P.........MASTER/SELECTIVE RESET (CONT RESET)
*                  2.......P.........SELECT CONTROLLER
*                  3.......P.........DESELECT CONTROLLER
*                  4.......P.........RESERVE DRIVE
*                  5.......P.........RELEASE DRIVE
*                  6.......O.........SEEK (TO A CYLINDER) 
*                  7.......P.........SEEK-READ
*                  8.......P.........SEEK-WRITE 
*                  9.......O.........READ DATA FROM CONTROLLER BUFFER 
*                  10......O.........WRITE DATA TO CONTROLLER BUFFER
*                  11......P.........SELECT/SEEK-READ/DESELECT
*                  12......P.........SELECT/SEEK-WRITE/DESELECT 
*                  13......O.........PERFORM CONTROLLER DIAGNOSTICS 
*                  14......O.........PERFORM DRIVE DIAGNOSTICS
*                  15......P.........REQUEST DRIVE TYPE 
*                  16......O.........REQUEST TASK COMPLETE
*                  17......O.........INITIAL FORMAT 
*                  18......O.........LOAD CONTROLLER IML DATA 
*                  19......O.........READ/SET CONTROLLER SPEED ATTRIBS
*                  20......O.........READ PERFORMANCE LOG 
*                  22......O.........READ ADDRESSEE STATUS
*                  ( P= PERMANENT, O= OPTIONAL )
************************************************************************
  
 ECHMCRO  TITLE  ENABLE CHANNEL MACROS
**        ENABLE CHANNEL MACROS 
* 
          RICHI        ENABLE ALL CHANNEL MACROS
  
*         DELAY MACRO  (MOSTLY IN MICROSECONDS) 
  
          LIST   -L 
          PURGMAC DELAY 
 DELAY    MACRO  X
 M        IFLE   X,77B
 M        IFGE   X,0
          LDN    X
 M        ELSE
          LDC    X
 M        ENDIF 
          HOLD
          ENDM         END OF DELAY MACRO 
          LIST   *
 IPIDEN   TITLE  IPI DRIVER ENTRY POINT 
**        IPIDEN - IPI DRIVER ENTRY POINT 
* 
 IPIDEN   CONL   IPID        DRIVER ENTRY POINT 
          CONL   SB          FWA OF THE STATUS BUFFER 
  
*         DRIVER CONTROL BLOCK
  
 DCB      BSSZ   31D         DRIVER CONTROL BLOCK AREA
  
*         SUBSYSTEM STATUS BUFFER 
  
 SB       BSSZ   48D         STATUS BUFFER AREA 
 SBEND    EQU    *-1         LAST ADDRESS OF THE STATUS BUFFER
* 
*                  DRIVER CONTROL BLOCK LAYOUT  (DCB) 
*               I--------------------------------------I
* DCB+TSK     1 I  TASK NUMBER         (1-18)          I
*               I--------------------------------------I
* DCB+CHN     2 I  IPI CHANNEL NUMBER                  I
*               I--------------------------------------I
* DCB+CA      3 I  CONTROLLER ADDRESS  (0-7)           I
*               I--------------------------------------I
* DCB+DA      4 I  DRIVE ADDRESS       (0-1F)          I
*               I--------------------------------------I
* DCB+CYL     5 I  CYLINDER ADDRESS                    I
*               I--------------------------------------I
* DCB+HD      6 I  HEAD ADDRESS                        I
*               I--------------------------------------I
* DCB+SEC     7 I  SECTOR ADDRESS                      I
*               I--------------------------------------I
* DCB+OEF     8 I  OPERATIONAL ENABLE FLAGS            I
*               I--------------------------------------I
* DCB+CDG1    9 I  TASK 13  CONTROLLER DIAG GROUP 1    I
*               I--------------------------------------I
* DCB+PHDA      I  TASK 14  PHYSICAL DRIVE ADDRESS     I
*               I--------------------------------------I
* DCB+IBCU      I  TASK 18  IML BYTE COUNT UPPER       I
*               I--------------------------------------I
* DCB+CDG2   10 I  TASK 13  CONTROLLER DIAG GROUP 2    I
*               I--------------------------------------I
* DCB+IBCL      I  TASK 18  IML BYTE COUNT LOWER       I
*               I--------------------------------------I
* DCB+CDG3   11 I  TASK 13  CONTROLLER DIAG GROUP 3    I
*               I--------------------------------------I
* DCB+CDG4   12 I  TASK 13  CONTROLLER DIAG GROUP 4    I
*               I--------------------------------------I
* DCB+FWA1   13 I  PP FWA / DMA (R-REG) UPPER          I
*               I--------------------------------------I
* DCB+FWA2   14 I  DMA (R-REG) LOWER                   I
*               I--------------------------------------I
* DCB+FWA3   15 I  DMA (A-REG)                         I
*               I--------------------------------------I
* DCB+STC    16 I  SECTOR TRANSFER COUNT               I
*               I--------------------------------------I
* DCB+IBSC   17 I  INTERVAL BURST SECTOR COUNT         I
*               I--------------------------------------I
* DCB+BIDS   18 I  BURST/INTERRUPT/DATA BLOCK SIZE     I
*               I--------------------------------------I
* DCB+GS     19 I  GENERAL STATUS                      I
*               I--------------------------------------I
* DCB+FTSK   20 I  FAILING TASK                        I
*               I--------------------------------------I
* DCB+LLE    21 I  LOW-LEVEL ERROR                     I
*               I--------------------------------------I
* DCB+PLLE   22 I  FIRST ERROR CAPTURED                I
*               I--------------------------------------I
* DCB+LFCN   23 I  LATEST FUNCTION SENT                I
*               I--------------------------------------I
* DCB+LSS    24 I  LATEST SELECT STATUS                I
*               I--------------------------------------I
* DCB+LBAS   25 I  LATEST BUS ACKNOWLEDGE STATUS       I
*               I--------------------------------------I
* DCB+LSVS   26 I  LATEST SLAVE STATUS                 I
*               I--------------------------------------I
* DCB+LRIS   27 I  LATEST INTERRUPT STATUS             I
*               I--------------------------------------I
* DCB+LIER   28 I  LSI ADAPTERS IPI ERROR REGISTER     I
*               I--------------------------------------I
* DCB+LESR   29 I  I4 DMA ERROR STATUS REGISTER        I
*               I--------------------------------------I
* DCB+LOSR   30 I  I4 DMA OPERATIONAL STATUS REGISTER  I
*               I--------------------------------------I
* DCB+LISR   31 I  LSI ADAPTERS IPI STATUS REGISTER    I
*               I--------------------------------------I
* 
  
 ALLCP    TITLE  ALL COMMAND PACKETS
**        ALLCP - ALL COMMAND PACKETS 
* 
*         ATTRIBUTE COMMAND PACKET
  
 ACP      CONL   12D         COMMAND PACKET LENGTH IN BYTES 
          CONL   1           REFERENCE NUMBER 
          CONL   0#200       OPCODE/MODIFIER (WILL BE CHANGED)
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          CONL   0#056C 
          CONL   0#8050      REQUESTED PARAMETER IN INPUT BUFFER
          CONL   0#5168      REQUESTED PARAMETER IN INPUT BUFFER
  
*         SEEK, READ, AND WRITE COMMAND PACKET
  
 CP       CONL   16D         COMMAND PACKET LENGTH IN BYTES 
          CONL   2           REFERENCE NUMBER 
          CONL   0           OPCODE/MODIFIER (WILL BE CHANGED)
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          CONL   0#0931      PARAMETER ID WORD FOR COMMAND EXTENT PARAM 
          CONL   0           COUNT UPPER
          CONL   0           COUNT LOWER
          CONL   0           DATA ADDRESS UPPER 
          CONL   0           DATA ADDRESS LOWER 
  
*         RESERVE COMMAND PACKET
  
 RCP      CONL   6           COMMAND PACKET LENGTH IN BYTES 
          CONL   3           COMMAND REFERENCE NUMBER 
          CONL   0           OPCODE/MODIFIER
          CONL   0           SLAVE/DEVICE ADDRESS 
          CONL   0           EXTRA WORD 
          CONL   0           EXTRA WORD 
  
          IFNE   IFMTO,0
*         FORMAT (INITIAL) COMMAND PACKET 
  
 FCP      CONL   14D         COMMAND PACKET LENGTH IN BYTES 
          CONL   4           COMMAND REFERENCE NUMBER 
          CONL   0#280E      OPCODE/MODIFIER
          CONL   0           SLAVE/DEVICE ADDRESS (WILL BE CHANGED) 
          CONL   0#053B      PARAMETER ID WORD
          CONL   0           UPPER SECTOR SIZE
          CONL   0#1000      LOWER SECTOR SIZE 4096 BYTES 
          CONL   0#01E5      FORMAT WITH HEADER VERIFY DISABLE
          CONL   0           EXTRA WORD 
          ENDIF 
  
          IFNE   LCIMLO,0 
*         LOAD CONTROLLER IML COMMAND PACKET
  
 LCICP    CONL   28D         COMMAND PACKET LENGTH IN BYTES 
          CONL   5           COMMAND REFERENCE NUMBER 
          CONL   0#6600      OPCODE/MODIFIER
          CONL   0           SLAVE/DEVICE ADDRESS (WILL BE CHANGED) 
          CONL   0#0531      PARAMETER ID WORD
          CONL   0           UPPER IML BYTE COUNT 
          CONL   0           LOWER IML BYTE COUNT 
          CONL   0#0951      PARAMETER ID WORD
          CONL   0           UPPER INTERRUPT BYTE COUNT 
          CONL   0#1000      4096-BYTE INTRPT SIZE
          CONL   0           UPPER BURST BYTE COUNT 
          CONL   0#1000      4096-BYTE BURST SIZE 
          CONL   0#046E      PARAMETER ID WORD
          CONL   0#0280      DATA STREAMING MODE
          CONL   0
          ENDIF 
  
          IFNE   SCSPO,0
*         10/25 MB SET ATTRIBUTE COMMAND PACKET 
  
 TTFCP    CONL   14D         COMMAND PACKET LENGTH IN BYTES 
          CONL   6           COMMAND REFERENCE NUMBER 
          CONL   0#0209      OPCODE/MODIFIER
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          CONL   0#07D6      PARAMETER ID WORD
          CONL   0#0001      PORT A AND B CONTROLLER ADDRESSES
          CONL   0#0203      PORT C AND D CONTROLLER ADDRESSES
 TTFCP2   CONL   0#0F02      ALL PORTS RUN 10 MB (MAY BE CHANGED
*                            TO 0000 FOR ALL PORTS RUN 25 MB).
  
*         10/25 MB SAVE ATTRIBUTE COMMAND PACKET
  
 TTSCP    CONL   6D          COMMAND PACKET LENGTH IN BYTES 
          CONL   11D         COMMAND REFERENCE NUMBER 
          CONL   0#020A      OPCODE/MODIFIER
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          ENDIF 
  
          IFNE   BUFRDO+BUFWRO,0
*         READ, WRITE CONTROLLER BUFFER COMMAND PACKET
  
 CTCP     CONL   12D         COMMAND PACKET LENGTH IN BYTES 
          CONL   7           COMMAND REFERENCE NUMBER 
          CONL   0           OPCODE/MODIFIER
          CONL   0           SLAVE/DEVICE ADDRESS 
          CONL   0#0531      PARAMETER ID WORD FOR COMMAND EXTENT PARAM 
          CONL   0           COUNT UPPER
          CONL   0#1000      COUNT LOWER (4096D)
          ENDIF 
  
          IFNE   CMDGO,0
*         PERFORM CONTROLLER DIAGNOSTIC COMMAND PACKET
  
 PCDCP    CONL   16D         COMMAND PACKET LENGTH IN BYTES 
          CONL   8D          COMMAND REFERENCE NUMBER 
          CONL   0#8000      OPCODE/MODIFIER
          CONL   0           SLAVE/DEVICE ADDRESS (WILL BE CHANGED) 
          CONL   0#0850      PARAMETER ID WORD
          CONL   0           FIRST 16 SUBTESTS
          CONL   0           NEXT 16 SUBTESTS 
          CONL   0           NEXT 16 SUBTESTS 
          CONL   0           LAST 8 SUBTESTS
          ENDIF 
  
          IFNE   SCSPO,0
*         READ ATTRIBUTE COMMAND PACKET 
  
 RACP     CONL   12D         COMMAND PACKET LENGTH IN BYTES 
          CONL   9D          REFERENCE NUMBER 
          CONL   0#200       OPCODE/MODIFIER (WILL BE CHANGED)
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          CONL   0#056C      PARAM ID FOR ATTRIBUTES
          CONL   0#80D6      READ CONTROLLER ATTRIBUTES SPEED AND NUMBER
          CONL   0#6EDA      STREAM/INTERLOCK AND SERIAL/PARALLEL 
  
*         SET ATTRIBUTE COMMAND PACKET
  
 SACP     CONL   12D         COMMAND PACKET LENGTH IN BYTES 
          CONL   10D         REFERENCE NUMBER 
          CONL   0#209       OPCODE/MODIFIER (WILL BE CHANGED)
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          CONL   0#046E      PARAM ID FOR SET ATTRIBUTES
          CONL   0#C080      INTERLOCK OR STREAMING MODE
          CONL   0#0000      SECOND PARAMETER ALL ZEROS 
          ENDIF 
  
          IFNE   SCABO,0
*         SET CONTROLLER ATTRIBUTE COMMAND PACKET 
  
 SSCP     CONL   14D         COMMAND PACKET LENGTH IN BYTES 
          CONL   11D         REFERENCE NUMBER 
          CONL   0#209       OPCODE/MODIFIER (WILL BE CHANGED)
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          CONL   0#06EA      PARAM ID FOR SERIAL/PARALLEL 
          CONL   0#0080      SERIAL OR PARALLEL 
          CONL   0#0713      SECOND PARAMETER WORD
          CONL   0#8900      THIRD PARAMETER WORD 
          ENDIF 
  
          IFNE   RDPLO,0
*         SET ATTRIBUTE COMMAND PACKET
  
 RPLCP    CONL   6D          COMMAND PACKET LENGTH IN BYTES 
          CONL   12D         REFERENCE NUMBER 
          CONL   0#8400      OPCODE/MODIFIER (WILL BE CHANGED)
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          ENDIF 
  
          IFNE   RADST,0
  
*         REPORT ADDRESSEE STATUS COMMAND PACKET
  
 RASCP    CONL   10D         COMMAND PACKET LENGTH IN BYTES 
          CONL   14D         REFERENCE NUMBER 
          CONL   0#0302      OPCODE/MODIFIER (WILL BE CHANGED)
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          CONL   0#02D5      PARAM ID FOR PHYSICAL ADDRESS
          CONL   0#0000      DEVICE PHYSICAL ADDRESS
  
*         PERFORM DRIVE DIAGNOSTICS TO PHYSICAL DEVICE COMMAND PACKET 
  
 PDDCP    CONL   10D         COMMAND PACKET LENGTH IN BYTES 
          CONL   15D         REFERENCE NUMBER 
          CONL   0#8100      OPCODE/MODIFIER
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          CONL   0#02D5      PARAM ID FOR PHYSICAL ADDRESS
          CONL   0#0000      DEVICE PHYSICAL ADDRESS
          ENDIF 
          IFNE   CLSUN,0
  
*         CLUSTER UNIT AS 1X COMMAND PACKET 
  
 CLUCP    CONL   12D         COMMAND PACKET LENGTH IN BYTES 
          CONL   16D         REFERENCE NUMBER 
          CONL   0#0209      OPCODE/MODIFIER (WILL BE CHANGED)
          CONL   0           SLAVE/DRIVE ADDRESS (WILL BE CHANGED)
          CONL   0#0568      PARAM ID FOR CLUSTER UNIT
          CONL   0#0000      DEVICE PHYSICAL ADDRESS
          CONL   0#8A00      SABRE DRIVE CHANGED FOR SSD
          ENDIF 
  
 INIT     TITLE  INITIALIZATION MODULE
**        INIT - INITIALIZATION MODULE   (BEGINNING OF PROGRAM) 
* 
*         DIRECT CELL STORAGE FOR CALLING PROGRAM 
* 
 DCSTR    BSSZ   SECCTR-CHANN+1    24 DIRECT CELL STORAGE LOCATIONS 
  
*         DIRECT CELL STORAGE FOR IPI DRIVER
  
 DCELLS   BSSZ   SECCTR-CHANN+1    24 DIRECT CELL STORAGE LOCATIONS 
  
*         SAVE CALLING PROGRAM'S D-CELLS 10B-37B
  
 IPID     SUBR               ENTRY/EXIT 
          LDDL   CHANN       STARTING D-CELL INSTRUCTION ADDR FOR TEST
          STML   DCSTR       STORE IT IN 1ST WORD OF D-CELL BUFFER
          LDN    CMMSK       2ND D-CELL STORAGE LOCATION
          STDL   CHANN       STORE IN 1ST FREED D-CELL
 STLOOP   LDIL   CHANN       CONTENTS OF D-CELL TO BE SAVED 
          STML   DCSTR-CHANN,CHANN   STORE IN MEMORY BUFFER 
          AODL   CHANN       INCREMENT D-CELL FETCH ADDRESS 
          SBN    SECCTR+1    COMPARE W/MAX D-CELL ADDRESS + 1 
          MJN    STLOOP      IF NOT AT MAX YET
  
*         CLEARING STATUS AND ERROR REGISTERS 
  
          LDC    SBEND-DCB-GS 
          STDL   LOOPCTR     SET LOOP COUNTER = DCB OUTPUT AND SB 
 CLRLP    LDN    ZERO 
          STML   DCB+GS,LOOPCTR   CLEAR A DCB STATUS WORD 
          SODL   LOOPCTR     DECREMENT LOOP COUNTER 
          PJN    CLRLP       IF NOT DONE
  
*         RESUME INTERVAL BURSTING CHECK
  
          IFNE   SCSPO,0,4
          LDML   DCB+OEF     OPERATIONAL ENABLE FLAGS 
          LPC    ILE         CHECK IF INTERLOCK MODE ENABLED
          SHN    MINUS2      SHIFT TO 1000B IF SET
          STML   STRF        SAVE IN INTERLOCK/STREAMING FLAG 
          LDML   DCB+OEF     OPERATIONAL ENABLE FLAGS 
          STDL   OPENFL      SAVE FOR QUICK REFERENCE 
          LPC    BRE         CHECK IF BURST RELEASE ENABLE SET
          ZJN    IPID10      IF NOT SET CLEAR TASK ENABLE CELLS 
          LDML   DCB+IBSC    INTERVAL BURST SECTOR COUNT
          ZJP    IPIDZTL     IF ZERO ERROR EXIT 
          STDL   IBC         SAVE THE BURST COUNT 
          LDML   DBIPRG      DATA-BURSTING-IN-PROGRESS FLAG 
          ZJN    IPID10      IF NOT SET CLEAR TASK ENABLE CELLS 
  
*         RESTORE IPI DRIVER D-CELLS
  
          LDN    CHANN       STARTING D-CELL ADDRESS
          STDL   SECCTR      STORE IN LAST D-CELL 
 RSLOOP2  LDML   DCELLS-CHANN,SECCTR   SAVED D-CELL CONTENTS
          STIL   SECCTR      RESTORE IN PROPER D-CELL 
          AODL   SECCTR      INCREMENT D-CELL FETCH ADDRESS 
          SBN    SECCTR      COMPARE W/LAST D-CELL ADDRESS
          NJN    RSLOOP2     IF ALL CELLS NOT DONE
          LDML   DCELLS-CHANN,SECCTR  LAST D-CELL TO BE SAVED 
          STDL   SECCTR      RESTORE LAST D-CELL
          RJM    DFWASTR     STORE DATA FWA'S 
          LDN    ONES 
          STML   RSMIB       SET THE RESUME INTERVAL BURSTING FLAG
          LDML   DCB+IBSC    INTERVAL BURST SECTOR COUNT
          STDL   IBC         STORE IN D-CELL
          LJM    RESUME      RESUME DATA BURSTING 
  
 IPID10   LDN    ZERO 
          STDL   CURMO       CLEAR TASK INFORMATION CELLS 
          STDL   CURTSK 
  
*         INVALID DCB ENTRY INVESTIGATION 
  
          LDML   DCB+TSK     CURRENT TASK NUMBER
          SBN    MXTSK1      COMPARE W/MAXIMUM VALUE
          MJN    IPID15      IF VALID TASK GET CONTROLLER ADDRESS 
          LDC    INVTK       INVALID TASK ERROR 
          UJN    IPID23      EXIT 
  
 IPID15   LDML   DCB+CA      CURRENT CONTROLLER ADDRESS 
          SBN    MAXCA1      MAXIMUM DAS CONTROLLER ADDRESS + 1 
          MJN    IPID20      IF VALID CONTROLLER ADDRESS GET CURR TASK
          LDC    INVCA       INVALID CONTROLLER ADDRESS ERROR 
          UJN    IPID23      EXIT 
  
 IPID20   LDML   DCB+TSK     CURRENT TASK 
          SBN    RESDR
          MJN    IPID25      IF TASK < 4 SKIP VALID DRIVE CHECK 
          SBN    RQDT-RESDR 
          ZJN    IPID25      IF TASK 15 
          IFNE   LCIMLO,0 
          SBN    RQTC-RQDT
          ZJN    IPID25      IF TASK 16 REQUEST TASK COMPLETE 
          SBN    LCIML-RQTC 
          ZJN    IPID25      IF TASK 18 LOAD CONTROLLER IML 
          ENDIF 
          LDML   DCB+DA      CURRENT DRIVE ADDRESS
          SBN    MAXDA1 
          MJN    IPID25      VALID DRIVE ADDRESS UPDATE CHANNELS
          LDC    INVDA       INVALID DRIVE ADDRESS ERROR
 IPID23   LJM    TKEND       EXIT 
  
*         CHANNEL ADDRESS UPDATE AREA 
  
 IPID25   LDML   SMPCH       A CURRENT CHANNEL NUMBER 
          LPN    CHMSK       SAVE JUST CHANNEL NUMBER 
          STDL   TEMP1       SAVE CURRENT IPI CHANNEL ADDRESS 
          LDML   DCB+CHN     DESIRED IPI CHANNEL ADDRESS
          LPN    CHMSK       MASK OFF ANY UPPER BITS
          STDL   CHANN       SAVE IN CHANNEL D-CELL 
          SBD    TEMP1       COMPARE WITH CURRENT VALUE 
          ZJN    IPID40      IF EQUAL DCN CHANNEL 
  
*         UPDATE ALL CHANNEL ADDRESS REFERENCES 
  
          LDC    CHTA        FWA OF CHANNEL TABLE 
          STDL   TEMP1       SAVE IN TEMP 
 IPID30   LDIL   TEMP1       LOAD INSTRUCTION ADDRESS 
          ZJN    IPID40      IF 0 - EXIT LOOP 
          STDL   TEMP2       SAVE INSTRUCTION ADDRESS 
          LDIL   TEMP2       ACTUAL INSTRUCTION 
          SCN    CHMSK       REMOVE OLD CHANNEL NUMBER
          ADDL   CHANN       ADD NEW CHANNEL NUMBER 
          STIL   TEMP2       RESTORE MODIFIED INSTRUCTION 
          AODL   TEMP1       INCREMENT INSTRUCTION ADDRESS
          UJN    IPID30      NEXT INSTRUCTION 
  
*         IPI CHANNEL AND ADAPTER INITIALIZATION
  
 IPID40   DCN    CH+UNH 
          LDML   IPICHN      LAST IPI CHANNEL 
          SBML   DCB+CHN     SUBTRACT CURRENT 
          ZJN    IPID41      IF THE SAME CHECK MULTI-PASS 
          LDN    0           ELSE CLEAR MULTI-PASS
          STML   MLTIPASS 
 IPID41   LDML   MLTIPASS    MULTI-PASS FLAG
          ZJN    IPID41A     IF MULTI-PASS NOT SET SET IT 
          LJM    IPID50      CURRENT TASK 
  
 IPID41A  AOML   MLTIPASS    SET MULTI-PASS FLAG
          LDML   DCB+CHN
          STML   IPICHN      SAVE CURRENT CHANNEL FOR NEXT PASS 
          IFNE   IOUOFF,0,3 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK IF I4 DRIVER ENABLED 
          NJN    IPID42      IF ENABLED DO I4 MASTER CLEAR
          IFNE   I0ON+IOUOFF,0,1
          MCLR   CH          MASTER CLEAR THE IPI CHANNEL 
          IFNE   IOUOFF,0,1 
          UJN    IPID43 
  
          IFNE   I4ON+IOUOFF,0,2
 IPID42   LDN    MCI4        MASTER CLEAR I4 ADAPTER FUNCTION 
          RJM    SENDFCN     ISSUE ADAPTER FUNCTION 
          IFNE   I0ON,0 
 IPID43   DELAY  ONEUS       DELAY 1 USEC 
          ELSE
 IPID43   LDN    ONEUS
          RJM    DELUS       DELAY 1 USEC 
          ENDIF 
          DCN    CH+UNH 
  
*         TEST FOR 10 OR 25 MB CH, AND SETUP CONTROLLER ACCORDINGLY 
  
          LDC    RDEVST      READ ENVIRONMENTAL STATUS
          FAN    CH          SEND FUNCTION
          IFNE   I0ON,0 
          DELAY  ONEUS       DELAY 1 USEC 
          ELSE
          LDN    ONEUS
          RJM    DELUS       DELAY 1 USEC 
          ENDIF 
          AJM    IPID43A,CH  ACTIVE CHANNEL MEANS 10MB CHANNEL
          ACN    CH 
          IJM    IPID125,CH  CHANNEL IS INACTIVE AFTER ACTIVATE 
          IAN    CH 
          IAN    CH          INPUT 2 ENVIRONMENT STATUS WORDS 
          DCN    CH 
          LDC    WDMACR      WRITE DMA CONTROL REGISTER 
          RJM    SENDFCN
          ACN    CH 
          LDC    EDCMIS      ENABLE DOUBLE CMI SLOT 
          OAN    CH 
          DCN    CH+UNH 
          LDN    1
          UJN    IPID44      ADAPTER IS 25 MB 
  
 IPID43A  DCN    CH+UNH 
          LDN    0
 IPID44   STD    LOOPCTR     CLEAR INDEX FOR CHANNEL TYPE 
          LDML   ENMB,LOOPCTR 
          IFNE   SCSPO,0,1
          STML   TTFCP2      SET ATTRIBUTE CP FOR 10/25 MB
          LDML   CLK12,LOOPCTR
          STML   CLKIE       SET FOR 10/25 MB 
          LDML   PSEL12,LOOPCTR 
          STML   PSEL        SET FOR 10/25 MB 
          IFNE   I4ON+IOUOFF,0
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4PB 
          SHN    ONE
          RAML   PSEL        SET FOR 10/25 MB 
          ENDIF 
  
 IPID45   LDML   CLKIE       SET INTERNAL CLOCK (10 OR 25 MB) 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER/CHECK FOR ERR 
          NJN    IPID63      IF 'A' REGISTER NON ZERO ERROR EXIT
  
*         DATA TRANSFER TASK INQUIRY
  
 IPID50   LDML   DCB+TSK     CURRENT TASK NUMBER
          SBN    SEKRD       COMPARE W/SEEK-READ TASK 
          MJN    IPID70      TSK = (1 TO 6) COMMON COMMAND PACKET SETUP 
          SBN    CMDG-SEKRD  IF TASK IS (7 TO 12) 
          MJN    IPID60      DATA TRANSFER INITIALIZATION 
          SBN    LCIML-CMDG  COMPARE TASK W/18
          NJN    IPID70      IF NOT 18 COMMON COMMAND PACKET SETUP
  
*         TASK INVOLVES DATA TRANSFER / DATA TRANSFER INITIALIZATION
  
 IPID60   LDML   DCB+STC     SECTOR COUNT 
          NJN    IPID70      IF NOT 0 CONTINUE
 IPIDZTL  LDC    ZTLERR      ZERO TRANSFER LENGTH ERROR 
 IPID63   LJM    TKEND       EXIT 
  
*         COMMON COMMAND PACKET SET-UP
  
 IPID70   LDML   DCB+CA      CONTROLLER ADDRESS 
          SHN    LEFT8       SHIFT 1 BYTE LEFT
          LMML   DCB+DA      XOR WITH DRIVE ADDRESS 
          STML   ACP+SA      STORE IN ACP'S ADDRESS WORD
          STML   CP+SA       STORE IN CP'S ADDRESS WORD 
          STML   RCP+SA      STORE IN RCP'S ADDRESS WORD
          IFNE   IFMTO,0,1
          STML   FCP+SA      STORE IN FCP'S ADDRESS WORD
          IFNE   RADST,0,2
          STML   RASCP+SA    STORE IN RASCP'S ADDRESS WORD
          STML   PDDCP+SA    STORE IN PDDCP'S ADDRESS WORD
          IFNE   CLSUN,0,1
          STML   CLUCP+SA    STORE IN RASCP'S ADDRESS WORD
          LDML   DCB+CA      CONTROLLER ADDRESS 
          SHN    LEFT8       SHIFT LEFT 8 BITS
          LMC    LBMSK       OR IN AN 'FF'
          IFNE   BUFRDO+BUFWRO,0,1
          STML   CTCP+SA     STORE IN CTCP'S ADDRESS WORD 
          IFNE   LCIMLO,0,1 
          STML   LCICP+SA    STORE IN LCICP'S ADDRESS WORD
          IFNE   CMDGO,0,1
          STML   PCDCP+SA    STORE IN PCDCP'S ADDRESS WORD
          IFNE   SCSPO,0,4
          STML   SACP+SA     STORE IN SACP'S ADDRESS WORD 
          STML   RACP+SA     STORE IN RACP'S ADDRESS WORD 
          STML   TTFCP+SA    STORE IN TTFCP'S ADDRESS WORD
          STML   TTSCP+SA    STORE IN TTSCP'S ADDRESS WORD
          IFNE   SCABO,0,1
          STML   SSCP+SA     STORE IN SSCP'S ADDRESS WORD 
          IFNE   RDPLO,0,1
          STML   RPLCP+SA    STORE IN RACP'S ADDRESS WORD 
          LDML   DCB+BIDS    LOAD DATA BLOCK SIZE 
          STDL   DBLW        SET DATA BLOCK LENGTH IN WORDS 
          SHN    1           FORM BYTE COUNT
          IFNE   LCIMLO,0,2 
          STML   LCICP+LIS   STORE IN LCICP'S INTERRUPT SIZE
          STML   LCICP+LBS   STORE IN LCICP'S BURST SIZE
          IFNE   IFMTO,0,1
          STML   FCP+LSZ     STORE IN FORMAT COMMAND PACKET 
          STDL   DBLB        SET DATA BLOCK LENGTH IN BYTES 
          LDN    ZERO 
          STML   CP+CT1      CLEAR UPPER COUNT WORD 
          LDML   DCB+STC     SECTOR COUNT 
          STML   CP+CT2      STORE IN CP COUNT2 LOCATION
          LDML   DCB+CYL     CYLINDER ADDRESS 
          STML   CP+DA1      STORE IN 1ST DATA ADDRESS WORD 
          LDML   DCB+HD      HEAD ADDRESS 
          SHN    LEFT8       SHIFT LEFT 1 BYTE
          LMML   DCB+SEC     XOR WITH SECTOR ADDRESS
          STML   CP+DA2      STORE IN 2ND DATA ADDRESS WORD 
          LDN    RWCMDL      STANDARD R/W COMMAND LENGTH
          STML   CP          STORE IN 1ST WORD OF COMMAND PACKET
          LDC    CMDEXPM     COMMAND EXCEPTION PARAMETER WORD 
          STML   CP+PM       STORE IN COMMAND PACKET
  
          RJM    DFWASTR     STORE THE DATA FWA'S 
  
*         I4 ADAPTER PORT SELECTION 
  
          IFNE   IOUOFF,0,3 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          IF I4 DRIVER IS NOT ENABLED
          ZJN    IPID82      CONTROLLER ADDRESS MASK SETUP
          IFNE   I4ON+IOUOFF,0
          LDML   PSEL        GET PORT SELECTION FUNCTION
 IPID80   RJM    SENDFCN     SELECT AN I4 PORT
          NJN    TKEND       EXIT IF ERROR
          ENDIF 
  
*         CONTROLLER ADDRESS MASK SET-UP
  
 IPID82   LDML   DCB+CA      CONTROLLER ADDRESS 
          SHN    LEFT12      SHIFT LEFT 12 BITS 
          STDL   SLAVE       STORE SHIFTED ADDRESS
          LDN    ONE
          STDL   CMMSK       STORE INITIAL CONTROLLER MASK
          LDML   DCB+CA      CONTROLLER ADDRESS 
          ZJN    IPID85      IF ZERO SKIP MASKING 
          ADC    SHFTINS     ADD ADDRESS TO SHIFT INSTRUCTION 
          STML   VARSHFT     STORE ADJUSTED SHIFT INSTRUCTION 
          PSN                DELAY ONE INSTRUCTION
          LDDL   CMMSK       CONTROLLER MASK
 VARSHFT  SHN    ZERO        SHIFT CONTROLLER MASK LEFT X BITS
          STDL   CMMSK       SAVE CONTROLLER MASK ADDRESS 
  
*         TASK ENTRANCE AND EXIT CONTROL
* 
*         TASK CALL CONTROL SECTION 
  
 IPID85   LDML   DCB+TSK     CURRENT TASK 
          STDL   CURTSK      STORE IN CURRENT TASK CELL 
          SBN    ONE         DECREMENT IT 
          STDL   TEMP1       STORE INDEX FOR JUMP 
          LDML   TSKTBL,TEMP1   TASK RETURN JUMP ADDRESS
          STDL   TEMP1       SAVE 
          RJM    ZERO,TEMP1  RUN SELECTED TASK
  
*         END-OF-TASK PROCESSING
  
 TKEND    DCN    CH+UNH      DISCONNECT IPI CHANNEL FOR EXIT
          NJN    IPID90      IF ERROR EXISTS SAVE LOW LEVEL EC
          LDML   DCB+PLLE    PREVIOUS ERROR CODE
          ZJN    IPID93      IF PLLE NOT SET EXIT 
  
*         ERROR EXIT PATH 
  
 IPID90   STML   DCB+LLE     STORE CURRENT LOW-LEVEL ERROR CODE 
          STDL   TEMP1       SAVE ERROR CODE
          LDML   DCB+TSK     LATEST TASK
          STML   DCB+FTSK    STORE IN DCB 
  
*         DCB INPUT ERROR CHECK 
  
          LDDL   TEMP1       ERROR CODE 
          LPC    UNBMSK      AND WITH UPPER NIBBLE MASK 
          LMC    UNBMSK      CHECK IF ERROR = F0
          NJN    IPID95      STATUS ERROR CHECK 
          LDC    DCBERR      DCB ERROR BIT
          RJM    GSUPD       SET IT IN GENERAL STATUS WORD
 IPID93   UJN    IPID101     EXIT 
  
*         STATUS ERROR CHECK
  
 IPID95   LDDL   TEMP1       ERROR CODE 
          LPC    STERMSK     MASK FOR 'E0'
          LMC    STERMSK     COMPARE W/ E0
          NJP    IPIE        FATAL ERROR BIT
          LDC    STERR       'STATUS ERROR' BIT 
          RJM    GSUPD       SET 'STATUS ERROR' BIT IN GENERAL STATUS 
  
*         CONDITIONAL SUCCESS CHECK 
  
          LDDL   TEMP1       ERROR CODE 
          LMC    CNDSUCC     COMPARE W/ CONDITIONAL SUCCESS ERROR 
          NJN    IPID102     TASK BUSY CHECK
          LDML   DCB+OEF     OPERATION FLAGS
          LPC    CSD         IF CONDITIONAL SUCCESS IS DISABLED 
          NJN    IPID100     CLEAR GENERAL STATUS 
          LDC    CNSCS
          RJM    GSUPD       SET CONDITIONAL SUCCESS IN GENERAL STATUS
          UJN    IPID102
  
 IPID100  LDN    ZERO 
          STML   DCB+GS      CLEAR GENERAL STATUS 
 IPID101  LJM    IPIDEND
  
*         TASK BUSY CHECK 
  
 IPID102  LDDL   TEMP1       ERROR CODE 
          LMC    TSKBSY      CHECK IF TASK BUSY CODE
          NJN    IPID104     IF NOT MASTER TERM ERROR CHECK 
          LDC    TKBUSY      TASK BUSY BIT
          STML   DCB+GS      SET 'TASK BUSY' BIT IN GENERAL STATUS
          UJN    IPID101     RESTORE CALLING PROGRAMS D-CELLS 
  
*         MASTER TERMINATION ERROR CHECK
  
 IPID104  LDDL   TEMP1       ERROR CODE 
          LMC    DTSITMO     IF = TRANSFER SLAVE-IN TMO ERROR 
          ZJP    IPIE        SET FATAL ERROR BIT
  
*         CRITICAL CLASS 3 INTERRUPT CHECK
  
          LDDL   TEMP1       ERROR CODE 
          LMC    CRITERR     IF CLASS 3 INTERRUPT ERROR 
          ZJN    IPID106     DESLECT CONTROLLER 
  
*         UNRECOVERABLE DATA ERROR PRESENT
  
          LDDL   TEMP1       ERROR CODE 
          LMC    UNRCERR     IF UNRECOVERED DATA ERROR
          ZJN    IPID105     INPUT COMMAND COMPLETE RESPONSE PACKET 
          LDDL   TEMP1       ERROR CODE 
          LMC    UNSCDBT     IF UNSUCCESSFUL DATA BURST TRANSFER
          NJN    IPID108     CHECK BUSY/RESERVED
 IPID105  LDC    WCLASS1     CLASS 1 EXPECTED INTERRUPT 
          RJM    RSPHDL      INPUT COMMAND COMPLETE RESPONSE PACKET 
          NJN    IPIDCRT     ERROR DELSELECT THE CONTROLLER 
          LJM    IPID140     SELECT OPERATION FAILURE 
  
*         CRITICAL RESPONSE PACKET PRESENT
  
 IPID106  RJM    DSL         DESELECT CONTROLLER
          NJN    IPIDCRT     ERROR CLEAR GENERAL STATUS ERROR 
          LDC    WCLASS3     EXPECTED CLASS 3 INTERR FLAG 
          RJM    RSPHDL      GET CLASS 3 RESPONSE PACKET
          NJN    IPIDCRT     ERROR CLEAR GENERAL STATUS ERROR 
          UJN    IPIE        SET FATAL ERROR BIT
  
 IPIDCRT  LDML   DCB+GS      GENERAL STATUS 
          LPC    GSSCMSK     CLEAR STATUS ERROR 
          STML   DCB+GS      RESTORE GENERAL STATUS 
 IPIE     LJM    IPID130     INCLUDE FATAL ERROR BIT
  
*         BUSY/RESERVED CHECK 
  
 IPID108  LDN    CEPID       COMMAND EXCEPTION PARAMETER ID 
          RJM    LPW         FIND THAT PARAMETER WORD IN THE SB 
          NJN    IPID110     IF NOT FOUND GET INTERVENTION REQ
          LDN    THREE
          RADL   TEMP1       POINT TO DESIRED COMMAND EXCEPTION WORD
          LDML   SB+PMW,TEMP1   EXCEPTION STATUS
          LPC    DRSV        CHECK FOR DRIVE RESERVED BIT 
          ZJN    IPID110     IF NOT SET CHECK DRIVE BUSY
 DRVBUSY  LDC    BUSYF       BUSY BIT 
          UJN    IPID135     JUMP AHEAD 
  
*         DRIVE BUSY, NOT OPERATIONAL CHECK 
  
 IPID110  LDN    IRPID       INTERVENTION REQUIRED PARAMETER ID 
          RJM    LPW         FIND THAT ID 
          NJN    IPID140     IF NOT FOUND CHECK FAIL MAJOR OPER 
          AODL   TEMP1       ADD 1 TO PARAMETER OFFSET
          LDML   SB+PMW,TEMP1   INTERVENTION STATUS PARAMETER WORD
          SHN    MINUS12     RIGHT-JUSTIFY UPPER 4 BITS 
          STDL   TEMP2       SAVE STATUS
          LPN    NOTOP       CHECK IF NOT OPERATIONAL 
          ZJN    IPID115     IF NOT CHECK FACILITY BUSY 
          LDN    DNOF        'DRIVE NOT OPERATIONAL' FAILURE BIT
          RJM    GSUPD       SET THAT BIT IN GENERAL STATUS WORD
 IPID115  LDDL   TEMP2       UPPER INTERVENTION STATUS
          LPN    FACBSY      CHECK FOR FACILITY BUSY
          NJN    DRVBUSY     SET DRIVE BUSY STATUS
  
*         DRIVE NOT READY CHECK 
  
 IPID120  LDDL   TEMP2       INTERVENTION STATUS
          LPN    NOTRDY      DRIVE NOT READY BIT
          ZJN    IPID140     IF READY CHECK FAILING MAJOR OPER
          LDN    DNRF        'DRIVE NOT READY' FAILURE BIT
          UJN    IPID135     SET BIT IN GENERAL STATUS
  
*         FATAL ERROR SET-UP
  
 IPID125  LDN    ICHAAC      INACTIVE CHANNEL AFTER ACTIVATE
          STML   DCB+LLE     STORE FUNCTION ERROR 
 IPID130  LDC    FTLERR      FATAL ERROR BIT
 IPID135  RJM    GSUPD       SET IT IN THE GENERAL STATUS WORD
  
*         FAILING MAJOR OPERATION CHECK 
  
 IPID140  LDDL   CURMO       FAILING MAJOR OPERATION
          NJN    IPID150     IF NOT ZERO SET ERR BIT IN GS WORD 
          LDN    SDRSEQF     (SEL,DESEL,RESET) SEQ FAILURE BIT
 IPID150  RJM    GSUPD       SET ERR BIT IN GENERAL STATUS WORD 
  
*         CALLING PROGRAM'S DIRECT CELL RESTORATION (10B - 37B) 
  
 IPIDEND  LDN    CHANN       STARTING D-CELL ADDRESS
          STDL   SECCTR      STORE IN LAST D-CELL 
 RSLOOP   LDML   DCSTR-CHANN,SECCTR   SAVED D-CELL CONTENTS 
          STIL   SECCTR      RESTORE IN PROPER D-CELL 
          AODL   SECCTR      INCREMENT D-CELL FETCH ADDRESS 
          SBN    SECCTR      COMPARE W/LAST D-CELL ADDRESS
          NJN    RSLOOP      DO ALL CELLS 
          LDML   DCSTR-CHANN,SECCTR   LAST D-CELL TO BE SAVED 
          STDL   SECCTR      RESTORE LAST D-CELL
  
*         IPI DRIVER EXIT 
  
 DRVEXIT  LDML   DCB+GS      GENERAL STATUS 
          LJM    IPIDX       EXIT W/GS IN THE A-REGISTER
  
*         TASK ADDRESS TABLE
  
 TSKTBL   CONL   TA1         JUMP TABLE FOR TASK CALLS
          CONL   TA2
          CONL   TA3
          CONL   TA4
          CONL   TA5
          IFEQ   SEEKO,0,1
          CONL   TSKNS
          IFNE   SEEKO,0,1
          CONL   TA6
          CONL   TA7
          CONL   TA8
          IFEQ   BUFRDO,0,1 
          CONL   TSKNS
          IFNE   BUFRDO,0,1 
          CONL   TA9
          IFEQ   BUFWRO,0,1 
          CONL   TSKNS
          IFNE   BUFWRO,0,1 
          CONL   TA10 
          CONL   TA11 
          CONL   TA12 
          IFEQ   CMDGO,0,1
          CONL   TSKNS
          IFNE   CMDGO,0,1
          CONL   TA13 
          IFEQ   DRDGO,0,1
          CONL   TSKNS
          IFNE   DRDGO,0,1
          CONL   TA14 
          CONL   TA15 
          IFEQ   RQTCO,0,1
          CONL   TSKNS
          IFNE   RQTCO,0,1
          CONL   TA16 
          IFEQ   IFMTO,0,1
          CONL   TSKNS
          IFNE   IFMTO,0,1
          CONL   TA17 
          IFEQ   LCIMLO,0,1 
          CONL   TSKNS
          IFNE   LCIMLO,0,1 
          CONL   TA18 
          IFEQ   SCSPO,0,1
          CONL   TSKNS
          IFNE   SCSPO,0,1
          CONL   TA19 
          IFEQ   SCABO,0,1
          CONL   TSKNS
          IFNE   SCABO,0,1
          CONL   TA20 
          IFEQ   RDPLO,0,1
          CONL   TSKNS
          IFNE   RDPLO,0,1
          CONL   TA21 
          IFEQ   RADST,0,1
          CONL   TSKNS
          IFNE   RADST,0,1
          CONL   TA22 
          IFEQ   CLSUN,0,1
          CONL   TSKNS
          IFNE   CLSUN,0,1
          CONL   TA23 
  
*         10/25 MB TABLE
  
 ENMB     CONL   EN10MB,EN25MB
 CLK12    CONL   CKRG10,CLK25 
 PSEL12   CONL   PSELA10,PSELA25
  
 ESCRTN   TITLE  INTERVAL DATA BURST ESCAPE TO CALLING PROGRAM
**        ESCRTN - INTERVAL DATA BURST ESCAPE TO CALLING PROGRAM
* 
 ESCRTN   LDN    ONES 
          STML   DBIPRG      SET THE DATA BURSTING IN PROGRESS FLAG 
  
*         SAVE IPI DRIVER D-CELLS 
  
          LDDL   CHANN       STARTING D-CELL INSTRUCTION ADDR FOR TEST
          STML   DCELLS      STORE IT IN 1ST WORD OF D-CELL BUFFER
          LDN    CMMSK       2ND D-CELL STORAGE LOCATION
          STDL   CHANN       STORE IN 1ST FREED D-CELL
 STLOOP2  LDIL   CHANN       CONTENTS OF D-CELL TO BE SAVED 
          STML   DCELLS-CHANN,CHANN   STORE IN MEMORY BUFFER
          AODL   CHANN       INCREMENT D-CELL FETCH ADDRESS 
          SBN    SECCTR+1    COMPARE W/MAX D-CELL ADDRESS + 1 
          MJN    STLOOP2     IF NOT AT MAX YET
          LDC    TSKBSY      TASK BUSY STATUS 
          LJM    IPID90      PROCESS STATUS AND EXIT
  
*         CENTRAL MEMORY TRANSFER WORD COUNT
  
          IFNE   I0ON+IOUOFF,0,1
 CMTWC    CONL   ZERO        CENTRAL MEMORY TRANSFER WORD COUNT 
  
*         MULTI-PASS FLAG 
  
 MLTIPASS CONL   ZERO        MULTI-PASS FLAG
 IPICHN   CONL   ZERO        IPI CHANNEL FLAG 
  
*         10 MB AND 25 MB CLOCK AND PORT SELECTS
  
 CLKIE    CONL   ZERO        CLOCK SELECT (MODIFIED)
 PSEL     CONL   ZERO        I4 PORT SELECT (MODIFIED)
  
*         DATA-BURSTING-IN-PROGRESS FLAG
  
 DBIPRG   CONL   ZERO        DATA-BURSTING-IN-PROGRESS FLAG 
  
*         RESUME INTERVAL BURSTING FLAG 
  
 RSMIB    CONL   ZERO        RESUME INTERVAL BURSTING FLAG
  
*         TEN TWENTY FIVE MEGABYTE CHANNEL FLAG 
  
          IFNE   SCSPO,0,2
 STRF     CONL   ZERO        0=STREAMING 1000B=INTERLOCK
 CHSPF    CONL   ZERO        CHANGE SPEED FLAG IN TASK 19 
  
*         T-REGISTERS FOR I4 DMA TRANSFERS
  
          IFNE   I4ON+IOUOFF,0,3
 TREGS    CONL   4096D       SINGLE-BURST BYTE COUNT
 RMAUP    CONL   0           RMA UPPER BYTE ADDRESS 
 RMALW    CONL   0           RMA LOWER BYTE ADDRESS 
  
 ALLTSK   TITLE  TASK ROUTINES
**        TASK ROUTINES 
* 
*         IMPORTANT STANDARD ENTRY PREREQUISITES FOR ALL FUNCTIONS
*         ********* ******** ***** ************* *** *** *********
* 
*         (DCB+TSK) = TASK NUMBER    (DCB+CA)  = CONTROLLER ADDRESS 
*         (DCB+CHN)= IPI CHANNEL ADDR 
* 
*         IMPORTANT STANDARD EXIT CONDITIONS THAT ARE USED BY EVERY 
*         MODULE AND SUBROUTINE IN THIS IPI COMMON DRIVER 
*         ********************************************************* 
* 
*         (A) = 0        ... ROUTINE RAN ERROR-FREE 
*         (A) = NON-ZERO ... ERROR CODE OF FAILING CONDITION
* 
*         NOTE -- THE ONLY SUBROUTINE THAT  DOES  NOT RETURN TO THE 
*                 CALLING  ROUTINE  UPON  DISCOVERY  OF AN ERROR IS 
*                 SENDFCN.  THIS  IS BECAUSE OF THE LARGE AMOUNT OF 
*                 MEMORY THAT THIS METHOD SAVES, AND BECAUSE OF THE 
*                 SEVERITY OF THE ERROR THAT THE SENDFCN SUBROUTINE 
*                 WILL REPORT.
* 
  
 TSKNS    TITLE  TSKNS  - TASK NOT SUPPORTED
**        TASK NOT SUPPORTED
* 
 TSKNS    SUBR               ENTRY/EXIT 
          LDC    INVTK       INVALID TASK ERROR CODE
          UJN    TSKNS       RETURN 
  
 TA1      TITLE  TASK 1 - MASTER/SELECTIVE RESET
**        TA1 - TASK 1 - MASTER/SELECTIVE RESET 
* 
*         THIS MODULE WILL FIRST MASTER CLEAR THE IPI ADAPTER, THEN 
*         WILL PERFORM THE FOLLOWING RESET;  BASED ON THE STATE OF
*         THE SLAVE RESET ENABLE BIT IN WORD DCB+OEF... 
*           SLR      RESET PERFORMED
*           ---      -------------------
*            0 ..... MASTER/LOGICAL 
*            1 ..... MASTER/SLAVE 
* 
*         ENTRY - SEE STANDARD
* 
*         CALLS - MSR, SENDFCN
* 
*         USES - VFW
* 
 TA1      SUBR               ENTRY/EXIT 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    SLR         CHECK IF SLAVE RESET ENABLED 
          ZJN    TA1A        LOGICAL RESET
          LDDL   SLAVE       SHIFTED CONTROLLER ADDRESS 
          LMC    SVRFW       OR IN THE SLAVE RESET CODE 
          UJN    TA1B 
  
 TA1A     LDDL   SLAVE       SHIFTED CONTROLLER ADDRESS 
          LMC    LIRFW       XOR WITH LOGICAL INTF RESET FUNCTION WORD
 TA1B     STDL   VFW         SAVE RESET FUNCTION WORD 
          RJM    MSR         MASTER/SELECTIVE RESET 
 TA1EXT   UJN    TA1X        RETURN/EXIT
  
 TA2      TITLE  TASK 2 - SELECT CONTROLLER 
**        TA2 - TASK 2 - SELECT CONTROLLER
* 
*         THIS MODULE WILL SELECT THE DRIVE CONTROLLER (DAS). 
* 
*         ENTRY - SEE STANDARD
* 
*         CALLS - SELCT 
* 
*         USES - CURTSK, CURMO
* 
 TA2      SUBR               ENTRY/EXIT 
          LDN    SELCTRL
          STDL   CURTSK      SET CURRENT TASK = 2 
          LDN    ZERO 
          STDL   CURMO       SET MAJOR OPERATION TO ZERO
          RJM    SELCT       SELECT THE CONTROLLER
          UJN    TA2X        RETURN/EXIT
  
 TA3      TITLE  TASK 3 - DESELECT CONTROLLER 
**        TA3 - TASK 3 - DESELECT CONTROLLER
* 
*         THIS MODULE WILL DESELECT THE DRIVE CONTROLLER. 
* 
*         ENTRY - SEE STANDARD. 
* 
*         CALLS - DSL 
* 
*         USES - CURTSK, CURMO
* 
 TA3      SUBR               ENTRY/EXIT 
          LDN    DESEL
          STDL   CURTSK      SET CURRENT TASK = 3 
          LDN    ZERO 
          STDL   CURMO       SET MAJOR OPERATION TO ZERO
          RJM    DSL         DESELECT THE CONTROLLER
 TA3EXT   UJN    TA3X        RETURN/EXIT
  
 TA4      TITLE  TASK 4 - RESERVE DRIVE 
**        TA4 - TASK 4 - RESERVE DRIVE
* 
*         THIS MODULE WILL ISSUE A COMMAND TO RESERVE THE SPECIFIED 
*         DRIVE.
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS
* 
*         CALLS - CORI, SCP, RSPHDL, ORTCHK 
* 
*         USES - CURTSK, RCP+OM, TSFOA
* 
 TA4      SUBR               ENTRY/EXIT 
          LDN    RESDR
          STDL   CURTSK      SET CURRENT TASK = 4 
          LDC    RCP         RESERVE COMMAND PACKET ADDRESS 
          STDL   TSFOA       STORE IN ITO'S TRANSFER OUT ADDRESS
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    PRE         CHECK IF PRIORITY RESERVE IS SET 
          NJN    TA4A        SET PRIORITY RESERVE CODE
          LDC    RVOP        RESERVE OPCODE 
          STML   RCP+OM      STORE OPCODE/MODIFIER IN COMMAND PACKET
          LDN    SCWL        SHORT COMMAND PACKET WORD COUNT
          RJM    CORI        ISSUE COMMAND/RECEIVE RESPONSE 
 TA4EXT   UJN    TA4X        RETURN/EXIT
  
 TA4A     LDC    PRVOP       PRIORITY RESERVE OPCODE
          STML   RCP+OM      STORE OPCODE/MODIFIER IN COMMAND PACKET
          LDN    SCWL        SHORT COMMAND PACKET WORD COUNT
          RJM    SCP         SEND COMMAND PACKET
          NJN    TA4EXT      EXIT IF ERROR
          LDC    WMCLSS1     CLASS 1/WAIT INTERRUPT FLAG
          RJM    RSPHDL      WAIT/RECEIVE RESPONSE PACKET 
          NJN    TA4EXT      EXIT IF ERROR
          RJM    CSCHK       CHECK IF COMMAND WAS SUCCESSFUL
          NJN    TA4EXT      EXIT IF ERROR
          LDN    TEN         CONSTANT FOR 10-PASS COUNTER 
          STDL   COUNTER     STORE INITIAL COUNT
          IFNE   I0ON,0 
 TA4LOOP  DELAY  US50000     DELAY 50,000 USEC
          ELSE
 TA4LOOP  LDC    US50000
          RJM    DELUS       DELAY 50,000 USEC
          ENDIF 
          SODL   COUNTER     DECREMENT COUNT
          NJN    TA4LOOP     IF NOT 10 PASSES 
          UJN    TA4EXT      EXIT 
  
 TA5      TITLE  TASK 5 - RELEASE DRIVE 
**        TA5 - TASK 5 - RELEASE DRIVE
* 
*         THIS MODULE WILL ISSUE A COMMAND TO RELEASE THE SPECIFIED 
*         DRIVE.
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS
* 
*         CALLS - CORI
* 
*         USES - CURTSK, RCP+OM, TSFOA
* 
 TA5      SUBR               ENTRY/EXIT 
          LDN    RELDR
          STDL   CURTSK      SET CURRENT TASK = 5 
          LDC    RLOP        RELEASE OPCODE 
          STML   RCP+OM      STORE OPCODE/MODIFIER IN COMMAND PACKET
          LDC    RCP         RESERVE COMMAND PACKET ADDRESS 
          STDL   TSFOA       STORE IN ITO'S TRANSFER OUT ADDRESS
          LDN    SCWL        SHORT COMMAND PACKET WORD COUNT
          RJM    CORI        ISSUE COMMAND/RECEIVE RESPONSE 
 TA5EXT   UJN    TA5X        RETURN/EXIT
  
          IFNE   SEEKO,0
 TA6      TITLE  TASK 6 - SEEK
**        TA6 - TASK 6 - SEEK 
* 
*         THIS MODULE WILL COMMAND THE SPECIFIED DRIVE TO SEEK TO THE 
*         SPECIFIED CYLINDER ADDRESS. 
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS
*                 (DCB+CYL)= TARGET CYLINDER ADDRESS
* 
*         CALLS - CORI
* 
*         USES - CP+OM, TSFOA, CP+CT2 
* 
 TA6      SUBR               ENTRY/EXIT 
          LDC    POM         POSITION OPCODE/MODIFIER 
          STML   CP+OM       STORE IN COMMAND PACKET
          LDN    1
          STML   CP+CT2      DAS REQUIRES A DATA COUNT OF 1 
          LDC    CP          COMMAND PACKET ADDRESS 
          STDL   TSFOA       STORE IN ITO'S TRANSFER OUT ADDRESS
          LDN    NCWL        STANDARD COMMAND WORD COUNT
          RJM    CORI        ISSUE SEEK COMMAND AND RECEIVE RESPONSE
 TA6EXT   UJN    TA6X        RETURN/EXIT
          ELSE
 TA6      TITLE  TASK 6 - SEEK
**        TASK 6 NOT SUPPORTED
* 
          ENDIF 
  
 TA7      TITLE  TASK 7 - SEEK-READ DATA
**        TA7 - TASK 7 - SEEK-READ DATA 
* 
*         THIS MODULE WILL PERFORM AN IMPLIED SEEK-READ OF A SPECIFIED
*         NUMBER OF SECTORS FROM THE SPECIFIED CYLINDER, HEAD, AND
*         SECTOR ON THE DRIVE AND TRANSFER THEM INTO THE SPECIFIED PP 
*         OR CENTRAL MEMORY AREA STARTING AT THE SPECIFIED FWA. 
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS, 
*                 (DCB+CYL)=CYLINDER, (DCB+HD)=HEAD, (DCB+SEC)=SECTOR,
*                 (DCB+FWA1)=1ST WORD ADDRESS, OR (R-REG) UPPER 
*                 (DCB+FWA2)=(R-REG) LOWER FOR CM DATA TRANSFERS
*                 (DCB+FWA3)=(A-REG) FOR CM DATA TRANSFERS
*                 (DCB+STC)= NUMBER SECTORS TO TRANSFER 
* 
*         CALLS - WRDO
* 
*         USES - CURTSK, CP+OM
* 
 TA7      SUBR               ENTRY/EXIT 
          LDN    SEKRD
          STDL   CURTSK      SET CURRENT TASK = 7 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    AR 
          NJN    TA7A        IF AUTO RETRY IS ON
          LDC    RDOM        READ OPCODE/MODIFIER 
          UJN    TA7B 
  
 TA7A     LDC    RDOMAR      READ OPCODE/MODIFIER W/AUTO RETRY
 TA7B     STML   CP+OM       STORE IN COMMAND PACKET
          LDN    0           READ FLAG
          RJM    WRDO        PERFORM READ DATA OPERATION
          UJN    TA7X        RETURN/EXIT
  
 TA8      TITLE  TASK 8 - SEEK-WRITE DATA 
**        TA8 - TASK 8 - SEEK-WRITE DATA
* 
*         THIS MODULE WILL PERFORM AN IMPLIED SEEK-WRITE TRANSFER OF A
*         SPECIFIED NUMBER OF SECTORS FROM A SPECIFIED STARTING PP OR 
*         CENTRAL MEMORY ADDRESS ONTO THE SPECIFIED DISK DRIVE AT THE 
*         SPECIFIED STARTING CYLINDER, HEAD, AND SECTOR ADDRESS.
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS, 
*                 (DCB+CYL)=CYLINDER, (DCB+HD)=HEAD, (DCB+SEC)=SECTOR,
*                 (DCB+FWA1)=1ST WORD ADDRESS, OR (R-REG) UPPER 
*                 (DCB+FWA2)=(R-REG) LOWER FOR CM DATA TRANSFERS
*                 (DCB+FWA3)=(A-REG) FOR CM DATA TRANSFERS
*                 (DCB+STC)= NUMBER SECTORS TO TRANSFER 
* 
*         CALLS - WRDO
* 
*         USES - CURTSK, CP+OM
* 
 TA8      SUBR               ENTRY/EXIT 
          LDN    SEKWR
          STDL   CURTSK      SET CURRENT TASK = 8 
          LDC    WDOM        WRITE OPCODE/MODIFIER
          STML   CP+OM       STORE IN COMMAND PACKET
          LDN    ONES        WRITE FLAG 
          RJM    WRDO        PERFORM WRITE DATA OPERATION 
          UJN    TA8X        RETURN/EXIT
  
          IFNE   BUFRDO,0 
 TA9      TITLE  TASK 9 - READ DATA FROM CONTROLLER BUFFER
**        TA9 - TASK 9 - READ DATA FROM CONTROLLER BUFFER 
* 
*         THIS MODULE WILL TRANSFER ONE SECTOR OF DATA (4098 BYTES) 
*         FROM THE SELECTED CONTROLLER'S DATA BUFFER TO THE SPECIFIED 
*         PP OR CENTRAL MEMORY DATA BUFFER. 
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS, 
*                 (DCB+FWA1)=1ST WORD ADDRESS, OR (R-REG) UPPER 
*                 (DCB+FWA2)=(R-REG) LOWER FOR CM DATA TRANSFERS
*                 (DCB+FWA3)=(A-REG) FOR CM DATA TRANSFERS
*                 (DCB+STC)= 1 ... DOES 4K BURST ONLY 
* 
*         CALLS - WRDO
* 
*         USES - CP 
* 
 TA9      SUBR               ENTRY/EXIT 
          LDC    RCPOM       READ CONTROLLER BUFFER OPCODE MODIFIER 
          STML   CTCP+OM     STORE OPCODE/MODIFIER IN COMMAND PACKET
          LDN    ONE
          STM    DCB+STC     FORCE SECTOR COUNT TO 1
          LDC    4000B
          STDL   DBLW        FORCE WORD COUNT TO 4000 
          SHN    1           FORM BYTE COUNT
          STDL   DBLB        FORCE BYTE COUNT TO 10000
          LDN    0           READ FLAG
          RJM    WRDO        PERFORM READ DATA OPERATION
          UJN    TA9X        RETURN/EXIT
          ELSE
 TA9      TITLE  TASK 9 - READ DATA FROM CONTROLLER BUFFER
**        TASK 9 NOT SUPPORTED
* 
          ENDIF 
  
          IFNE   BUFWRO,0 
 TA10     TITLE  TASK 10 - WRITE DATA TO CONTROLLER BUFFER
**        TA10 - TASK 10 - WRITE DATA TO CONTROLLER BUFFER
* 
*         THIS MODULE WILL TRANSFER ONE SECTOR OF DATA (4096 BYTES) 
*         FROM PP OR CENTRAL MEMORY TO THE SELECTED CONTROLLER'S
*         DATA BUFFER.
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS, 
*                 (DCB+FWA1)=1ST WORD ADDRESS, OR (R-REG) UPPER 
*                 (DCB+FWA2)=(R-REG) LOWER FOR CM DATA TRANSFERS
*                 (DCB+FWA3)=(A-REG) FOR CM DATA TRANSFERS
*                 (DCB+STC)= 1 ... DOES 4K BURST ONLY 
* 
*         CALLS -  WRDO 
* 
*         USES - NONE 
* 
 TA10     SUBR               ENTRY/EXIT 
          LDC    WBOM        WRITE CONTROLLER BUFFER OPCODE MODIFIER
          STML   CTCP+OM     STORE OPCODE/MODIFIER IN COMMAND PACKET
          LDN    ONE
          STM    DCB+STC     FORCE SECTOR COUNT TO 1
          LDC    4000B
          STDL   DBLW        FORCE WORD COUNT TO 4000 
          SHN    1           FORM BYTE COUNT
          STDL   DBLB        FORCE BYTE COUNT TO 10000
          LDN    ONES        WRITE FLAG 
          RJM    WRDO        PERFORM WRITE DATA OPERATION 
          UJN    TA10X       RETURN/EXIT
          ELSE
 TA10     TITLE  TASK 10 - WRITE DATA TO CONTROLLER BUFFER
**        TASK 10 NOT SUPPORTED 
* 
          ENDIF 
  
 TA11     TITLE  TASK 11 - SELECT/SEEK-READ/DESELECT
**        TA11 - TASK 11 - SELECT/SEEK-READ/DESELECT
* 
*         THIS MODULE WILL PERFORM TASKS 2, 7, AND 3.  IF (DCB+OEF--
*         DRS AND/OR DRL) ARE SET, THEN TASKS 4 AND/OR 5 WILL ALSO BE 
*         CALLED. 
* 
*         ENTRY - (SEE TASKS 2, 3, 4, 5, AND 7) 
* 
*         CALLS - TA2, TA3, TA4, TA5, TA7 
* 
*         USES - NONE 
* 
 TA11     SUBR               ENTRY/EXIT 
          RJM    TA2         SELECT CONTROLLER
          NJN    TA11EXT     EXIT IF ERROR
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    DRS
          ZJN    TA11A       IF DRIVE RESERVE NOT ENABLED 
          RJM    TA4         RESERVE DRIVE
          NJN    TA11EXT     EXIT IF ERROR
 TA11A    RJM    TA7         PERFORM SEEK-READ DATA 
          NJN    TA11EXT     EXIT IF ERROR
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    DRL
          ZJN    TA11B       IF DRIVE RELEASE NOT ENABLED 
          RJM    TA5         RELEASE DRIVE
          NJN    TA11EXT     EXIT IF ERROR
 TA11B    RJM    TA3         DESELECT CONTROLLER
 TA11EXT  UJN    TA11X       RETURN/EXIT
  
 TA12     TITLE  TASK 12 - SELECT/SEEK-WRITE/DESELECT 
**        TA12 - TASK 12 - SELECT/SEEK-WRITE/DESELECT 
* 
*         THIS MODULE WILL PERFORM TASKS 2, 8, AND 3. IF (DCB+OEF-- 
*         DRL) ARE SET, THEN TASKS 4 AND 5 WILL ALSO BE CALLED. 
* 
*         ENTRY - (SAME AS TASKS 2, 3, 4, 5, AND 8) 
* 
*         CALLS - TA2, TA3, TA4, TA5, TA8 
* 
*         USES - NONE 
* 
 TA12     SUBR               ENTRY/EXIT 
          RJM    TA2         SELECT CONTROLLER
          NJN    TA12EXT     EXIT IF ERROR
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    DRS
          ZJN    TA12A       IF DRIVE RESERVE NOT ENABLED 
          RJM    TA4         RESERVE DRIVE
          NJN    TA12EXT     EXIT IF ERROR
 TA12A    RJM    TA8         PERFORM SEEK-WRITE DATA
          NJN    TA12EXT     EXIT IF ERROR
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    DRL
          ZJN    TA12B       IF DRIVE REL NOT ENAB DESELECT CONTROLLER
          RJM    TA5         RELEASE DRIVE
          NJN    TA12EXT     EXIT IF ERROR
 TA12B    RJM    TA3         DESELECT CONTROLLER
 TA12EXT  UJN    TA12X       RETURN/EXIT
  
          IFNE   CMDGO,0
 TA13     TITLE  TASK 13 - PERFORM CONTROLLER DIAGNOSTICS 
**        TA13 - TASK 13 - PERFORM CONTROLLER DIAGNOSTICS 
* 
*         THIS MODULE WILL ISSUE THE PERFORM CONTROLLER DIAGNOSTICS 
*         COMMAND TO THE CONTROLLER AND WAIT TO RECIEVE THE STATUS
*         PACKET; CHECKING FOR A SUCCESSFUL OPERATION.
* 
*         ENTRY - (SEE STANDARD)
* 
*         CALLS - COWMRI
* 
*         USES - TSFOA, PCDCP+PCD1, PCDCP+PCD2
* 
 TA13     SUBR               ENTRY/EXIT 
          LDML   DCB+CDG1    2ND PARAMETER WORD 
          STML   PCDCP+PCD1  STORE IN COMMAND PACKET
          LDML   DCB+CDG2    3RD PARAMETER WORD 
          STML   PCDCP+PCD2  STORE IN COMMAND PACKET
          LDML   DCB+CDG3    4TH PARAMETER WORD 
          STML   PCDCP+PCD3  STORE IN COMMAND PACKET
          LDML   DCB+CDG4    5TH PARAMETER WORD 
          STML   PCDCP+PCD4  STORE IN COMMAND PACKET
          LDC    PCDCP       PERFORM CONTROLLER DIAG PACKET ADDRESS 
          STDL   TSFOA       STORE IN ITO'S TRANSFER OUT ADDRESS
          LDN    CDCL        CONTROLLER DIAGNOSTICS COMMAND LENGTH
          RJM    COWMRI      ISSUE CONTROLLER DIAG CMD/RECEIVE RESPONSE 
          UJN    TA13X       RETURN/EXIT
          ELSE
 TA13     TITLE  TASK 13 - PERFORM CONTROLLER DIAGNOSTICS 
**        TASK 13 NOT SUPPORTED 
* 
          ENDIF 
  
          IFNE   DRDGO,0
 TA14     TITLE  TASK 14 - PERFORM DRIVE DIAGNOSTICS
**        TA14 - TASK 14 - PERFORM DRIVE DIAGNOSTICS
* 
*         THIS MODULE WILL ISSUE THE PERFORM DRIVE DIAGNOSTICS COMMAND
*         TO THE CONTROLLER AND WAIT TO RECEIVE THE STATUS PACKET;
*         CHECKING FOR A SUCCESSFUL OPERATION.
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS
* 
*         CALLS - COWMRI
* 
*         USES - RCP+OM, TSFOA
* 
 TA14     SUBR               ENTRY/EXIT 
          IFNE   RADST,0,10 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    PDE         CHECK IF PHYSICAL DRIVE ENABLED
          ZJN    TA141       IF NOT PHYSICAL
          LDML   DCB+PHDA    GET PHYSICAL DRIVE ADDRESS 
          SHN    LEFT8       SHIFT TO CORRECT POSITION
          STML   PDDCP+CT1   STORE IN PDDCP'S PHYSICAL ADDRESS WORD 
          LDC    PDDCP       PERFORM DRIVE DIAGNOSTICS FRO PHYSICAL 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    RADSTL      PHYSICAL COMMAND'S WORD LENGTH 
          UJN    TA142       ISSUE DRIVE DIAG 
 TA141    LDC    DDOM        DRIVE DIAGNOSTICS OPCODE MODIFIER
          STML   RCP+OM      STORE MODIFIER 
          LDC    RCP         RESERVE COMMAND PACKET ADDRESS 
          STDL   TSFOA       STORE IN ITO'S TRANSFER OUT ADDRESS
          LDN    SCWL        DRIVE DIAGNOSTICS COMMAND LENGTH 
 TA142    RJM    COWMRI      ISSUE DRIVE DIAG CMD/RECEIVE RESPONSE
          UJN    TA14X       RETURN/EXIT
          ELSE
 TA14     TITLE  TASK 14 - PERFORM DRIVE DIAGNOSTICS
**        TASK 14 NOT SUPPORTED 
* 
          ENDIF 
  
 TA15     TITLE  TASK 15 - REQUEST DRIVE TYPE 
**        TA15 - TASK 15 - REQUEST DRIVE TYPE 
* 
*         THIS MODULE WILL ISSUE AN ATTRIBUTE COMMAND TO RETREIVE THE 
*         DRIVE TYPE INFO FROM THE SPECIFIED DRIVE.  INFO WILL BE IN
*         THE DATA BUFFER AFTER THE TASK COMPLETES SUCCESSFULLY.
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS
* 
*         CALLS - CORI, INPA
* 
*         USES - TSFOA
* 
 TA15     SUBR               ENTRY/EXIT 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    CMT         CHECK IF CENTRAL MEMORY TRANSFER 
          NJN    TA151       IF CENTRAL MEMORY TRANSFER 
          LDML   DCB+FWA1    LOAD PP FWA
          STML   INPA7       STORE IN INPUT ROUTINE 
          LDC    ACP         ADDRESS OF ATTRIBUTE COMMAND PACKET
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    ATTRCWL     ATTRIBUTE COMMAND'S WORD LENGTH
          RJM    INPA        INPUT DRIVE ATTRIBUTES 
 TA15EX   UJN    TA15X       EXIT 
  
 TA151    LDC    INVTK       INVALID TASK ERROR CODE
          UJN    TA15X       RETURN 
  
          IFNE   RQTCO,0
 TA16     TITLE  TASK 16 - REQUEST TASK COMPLETE
**        TA16 - TASK 16 - REQUEST TASK COMPLETE
* 
*         THIS MODULE WILL PERFORM A REQUEST INTERRUPTS SEQUENCE ONCE 
*         TO SEE IF A PREVIOUSLY INITIATED TASK IS COMPLETE.  IF AN 
*         INTERRUPT IS PRESENT, THE RESPONSE PACKET WILL BE INPUTTED AND
*         SUCCESSFUL WILL BE CHECKED.  OTHERWISE, A TASK BUSY IS ISSUED.
* 
*         CALLS - RSPHDL, DSL, CSCHK
* 
 TA16     SUBR               ENTRY/EXIT 
          LDN    CLASS1      CLASS 1 INTERRUPT FLAG 
          RJM    RSPHDL      HANDLE ANY INTERRUPTS ARRIVING 
          NJN    TA16EXT     EXIT IF ERROR OR BUSY
          RJM    DSL         DESELECT THE CONTROLLER
          NJN    TA16EXT     EXIT IF ERROR
          RJM    CSCHK       CHECK FOR SUCCESSFUL 
 TA16EXT  UJN    TA16X       RETURN/EXIT
          ELSE
 TA16     TITLE  TASK 16 - REQUEST TASK COMPLETE
**        TASK 16 NOT SUPPORTED 
* 
          ENDIF 
  
          IFNE   IFMTO,0
 TA17     TITLE  TASK 17 - INITIAL FORMAT 
**        TA17 - TASK 17 - INITIAL FORMAT 
* 
*         THIS MODULE WILL ISSUE A COMMAND TO DO AN INITIAL FORMAT OF 
*         THE ENTIRE IPI DRIVE'S HDA WITH 4096-BYTE SECTORS.
* 
*         ENTRY - STANDARD AND (DCB+DA)= DRIVE ADDRESS
* 
*         CALLS - SCP, RSPHDL, CSCHK
* 
*         USES - TSFOA
* 
 TA17     SUBR               ENTRY/EXIT 
          LDC    FCP         ADDRESS OF FORMAT COMMAND PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    FMTCWL      FORMAT COMMAND'S WORD LENGTH 
          RJM    SCP         SEND THE FORMAT COMMAND
          NJN    TA17EXT     EXIT IF ERROR
          LDC    WLCLSS1     WAIT RESPONSE CONSTANT 
          RJM    RSPHDL      WAIT UP TO 30 MIN FOR RESPONSE 
          NJN    TA17EXT     EXIT IF ERROR
          RJM    CSCHK       CHECK IF COMMAND WAS SUCCESSFUL
 TA17EXT  UJN    TA17X       RETURN/EXIT
          ELSE
 TA17     TITLE  TASK 17 - INITIAL FORMAT 
**        TASK 17 NOT SUPPORTED 
* 
          ENDIF 
  
          IFNE   LCIMLO,0 
 TA18     TITLE  TASK 18 - LOAD CONTROLLER IML
**        TA18 - TASK 18 - LOAD CONTROLLER IML
* 
*         THIS MODULE WILL ISSUE THE COMMAND WHICH WILL DOWNLOAD (DATA
*         STREAM) A GIVEN AMOUNT OF IML DATA FROM CENTRAL MEMORY. 
*         A POWER-UP SEQUENCE IS THEN RUN BY THE CONTROLLER.
* 
*         ENTRY - SEE STANDARD
* 
*         CALLS - SCP, RSPHDL, SDS, CSCHK 
* 
*         USES - TSFOA, LCICP+CT1, LCICP+CT2
* 
 TA18     SUBR               ENTRY/EXIT 
          LDN    ONES 
          STML   RESBUR      SET THE RESIDUE BURST FLAG 
          LDML   DCB+IBCU    UPPER IML BYTE COUNT 
          LPN    LNMSK       MASK OFF THE RESIDUE BYTE COUNT
          STML   LCICP+CT1   STORE IN COMMAND PACKET
          LDML   DCB+IBCL    LOWER IML BYTE COUNT 
          STML   LCICP+CT2   STORE IN COMMAND PACKET
          LDC    LCICP       ADDRESS LOAD CONTROLLER IML COMMAND PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    LCICL       LOAD CONTROLLER IML COMMAND WORD LENGTH
          RJM    SCP         SEND THE FORMAT COMMAND
          NJN    TA18EXT     EXIT IF ERROR
          LDC    WCLASS2     THE CLASS 2 WAIT CONSTANT
          RJM    RSPHDL      WAIT FOR TRANSFER NOTIFICATION 
          NJN    TA18EXT     EXIT IF ERROR
          LDN    ONES 
          STDL   BURDIR      SET BURST DIRECTION FOR OUTPUT 
          RJM    SDS         WRITE/STREAM IML DATA TO CONTROLLER
          NJN    TA18EXT     EXIT IF ERROR
          LDC    WLCL1A      WAIT RESPONSE CONSTANT 
          RJM    RSPHDL      WAIT FOR 2 MIN FOR CLASS 1 INTERRUPT 
          NJN    TA18EXT     EXIT IF ERROR
          LDN    MEXPID      MACHINE EXCEPTION PARAMETER ID 
          RJM    ORTCHK      CHECK FOR OPERATIONAL AND READY
          NJN    TA18EXT     IF NOT OPERATIONA AND READY ERROR EXIT 
          RJM    DSL         DESELECT FROM THE CONTROLLER 
          NJN    TA18EXT     EXIT IF ERROR
          LDC    WLCL1A      6 MIN ASYNC DELAY COUNT
          RJM    RSPHDL      WAIT DESIRED DRIVE'S ASYNC RESPONSE
          NJN    TA18EXT     EXIT IF ERROR
          LDN    DMEXID      DRIVE MACHINE EXCEPT PARAMETER ID
          RJM    ORTCHK      CHECK FOR DRIVE OPER/READY TRANSITION
 TA18EXT  LJM    TA18X       RETURN/EXIT
          ELSE
 TA18     TITLE  TASK 18 - LOAD CONTROLLER IML
**        TASK 18 NOT SUPPORTED 
* 
          ENDIF 
  
          IFNE   SCSPO,0
 TA19     TITLE  TASK 19 - READ/SET CONTROLLER SPEED ATTRIBUTES 
**        TA19 - TASK 19 - READ/SET CONTROLLER SPEED ATTRIBUTES 
* 
*         THIS MODULE WILL READ THE CONTROLLER ATTRIBUTES AND DETERMINE 
*         IF THE CONTROLLER SPEED MATCHES THE SPEED OF THE CHANNEL. IF
*         IT MATCHES THE SPEED FLAG WILL BE CLEARED AND AN EXIT IS MADE.
*         IF NO MATCH THE MODULE WILL SET THE NEW SPEED AND SET THE PORT
*         EQUIPMENT NUMBERS IN THE COMMAND PACKET THE SAME AS READ FROM 
*         THE CONTROLLER AND THEN SET THE CHANGED SPEED FLAG. 
* 
*         ENTRY - STANDARD AND (DCB+OEF) OPERATIONAL ENABLE FLAG INTER- 
*                 LOCK ENABLE MUST BE SET. CONTROLLER SELECTED IN INTER-
*                 LOCK MODE.
* 
*         CALLS - CORI, INPA, SCAP
* 
*         USES - TSFOA, CHSPF 
* 
 TA19     SUBR               ENTRY/EXIT 
          LDN    ONE         SET INTERLOCK MODE 
          RJM    SCAP        SET ATTRIBUTES 
          NJN    TA19X       EXIT IF ERROR
  
          LDML   DCB+FWA1    LOAD INPUT BUFFER ADDRESS
          STML   INPA7       STORE IN INPUT ROUTINE 
          LDC    RACP        ADDRESS OF READ ATTRIBUTE COMMAND PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    ATTRCWL     ATTRIBUTE COMMAND'S WORD LENGTH
          RJM    INPA        ISSUE ATTRIBUTE COMMAND
          NJN    TA19X       EXIT IF ERROR
  
          LDML   DCB+FWA1    LOAD INPUT BUFFER ADDRESS
          ADN    3           BUMP ADDRESS BY THREE
          STDL   TEMP2       SAVE FOR USE IN PORT NUMBERS 
          LDML   TTFCP2      GET CHANNEL SPEED FROM INITIALIZATION
          LPC    EN10MB      MASK 10MB ENABLE 
          STML   TTFCP2      CLEAR ALL BUT SPEED
          LDIL   TEMP2       GET CHANNEL SPEED FROM CONTROLLER
          LPC    EN10MB      MASK 10MB ENABLE 
          SBML   TTFCP2      SUBTRACT CHANNEL SPEED FROM INITIALIZATION 
          ZJP    TA19EXT     EXIT IF THE SAME NO NEED TO CHANGE 
          LDIL   TEMP2       GET CHANNEL SPEED FROM CONTROLLER
          LPN    15B         MASK OUT SPEED 
          RAML   TTFCP2      SAVE ALL BUT SPEED 
          SODL   TEMP2       INDEX FOR PORT C AND D EQUIPMENT NUMBERS 
          LDIL   TEMP2       GET PORT C AND D EQUIPMENT NUMBERS 
          STML   TTFCP+CT2   SAVE PORT C AND D EQUIPMENT NUMBERS
          SODL   TEMP2       INDEX FOR PORT A AND B EQUIPMENT NUMBERS 
          LDIL   TEMP2       GET PORT A AND B EQUIPMENT NUMBERS 
          STML   TTFCP+CT1   SAVE PORT A AND B EQUIPMENT NUMBERS
          LDC    TTFCP       ADDRESS OF 10/25 SET ATTRIBUTE CMD PACKET
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    TTFCPL      10/25 ATTRIBUTE COMMAND'S WORD LENGTH
          RJM    CORI        ISSUE COMMAND/RECEIVE RESPONSE 
          NJN    TA19EX      EXIT IF ERROR
          LDC    TTSCP       ADDRESS OF 10/25 SAVE ATTRIBUTE CMD PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    TTSCPL      10/25 ATTRIBUTE COMMAND'S WORD LENGTH
          RJM    CORI        ISSUE COMMAND/RECEIVE RESPONSE 
          NJN    TA19EX      EXIT IF ERROR
  
          LDN    ONES        SET CHANGE SPEED FLAG
 TA19EXT  STML   CHSPF       SET/CLEAR CHANGE SPEED FLAG
          LDN    ZERO        SET STREAMING MODE 
          RJM    SCAP        SET ATTRIBUTES 
 TA19EX   LJM    TA19X       EXIT 
  
          ELSE
 TA19     TITLE  TASK 19 - SELECT/READ CONTROLLER ATTRIBUTES/DESELECT 
**        TASK 19 NOT SUPPORTED 
* 
          ENDIF 
  
          IFNE   SCABO,0
 TA20     TITLE  TASK 20 - CHANGE CONTROLLER ATTRIBUTES 
**        TA20 - TASK 20 - CHANGE CONTROLLER ATTRIBUTES 
* 
*         THIS MODULE WILL CHANGE CONTROLLER ATTRIBUTES.
* 
*         ENTRY - STANDARD
* 
*         CALLS - CORI
* 
*         USES - TSFOA
* 
 TA20     SUBR               ENTRY/EXIT 
          LDDL   OPENFL      GET OPERATIONAL FLAGS
          LPC    SPE         CHECK IF SERIAL OR PARALLEL
          SHN    MINUS4      SHIFT TO CORRECT BIT 
          ADC    SPFL        ADD LOWER BYTE 
          STML   SSCP+CT1    SAVE IN PARAM WORD 1 
          LDC    SSCP        ADDRESS OF SET ATTRIBUTE CMD PACKET
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    SSCPL       ATTRIBUTE COMMAND'S WORD LENGTH
          RJM    CORI        ISSUE COMMAND/RECEIVE RESPONSE 
 TA20EX   UJN    TA20X       EXIT 
  
          ELSE
 TA20     TITLE  TASK 20 - CHANGE CONTROLLER ATTRIBUTES 
**        TASK 20 NOT SUPPORTED 
* 
          ENDIF 
  
          IFNE   RDPLO,0
 TA21     TITLE  TASK 21 - READ PERFORMANCE LOG 
**        TA21 - TASK 21 - READ PERFORMANCE LOG 
* 
*         THIS MODULE WILL READ PERFORMANCE LOG.
* 
*         ENTRY - STANDARD
* 
*         CALLS - INPA
* 
*         USES - TSFOA
* 
 TA21     SUBR               ENTRY/EXIT 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    CMT         CHECK IF CENTRAL MEMORY TRANSFER 
          NJN    TA211       IF CENTRAL MEMORY TRANSFER 
          LDML   DCB+FWA1    LOAD PP FWA
          STML   INPA7       STORE IN INPUT ROUTINE 
          LDC    RPLCP       ADDRESS OF READ PERFORMANCE LOG COMMAND PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    RPLCPL      READ PERFORMANCE LOG COMMAND'S WORD LENGTH 
          RJM    INPA        INPUT DRIVE ATTRIBUTES 
 TA21EX   UJN    TA21X       EXIT 
 TA211    LDN    ONE
          STM    DCB+STC     FORCE SECTOR COUNT TO 1
          LDC    4000B
          STDL   DBLW        FORCE WORD COUNT TO 4000 
          SHN    1           FORM BYTE COUNT
          STDL   DBLB        FORCE BYTE COUNT TO 10000
          LDN    0           READ FLAG
          RJM    WRDO        PERFORM READ DATA OPERATION
          UJN    TA21EX      EXIT 
  
          ELSE
 TA21     TITLE  TASK 21 - READ PERFORMANCE LOG 
**        TASK 21 NOT SUPPORTED 
* 
          ENDIF 
  
          IFNE   RADST,0
 TA22     TITLE  TASK 22 - REPORT ADDRESSEE STATUS
**        TA22 - TASK 22 - REPORT ADDRESSEE STATUS
* 
*         THIS MODULE WILL REPORT ADDRESSEE STATUS. 
* 
*         ENTRY - STANDARD AND (DCB+OEF). 
* 
*         CALLS - CORI, INPA
* 
*         USES - TSFOA, CHSPF 
* 
 TA22     SUBR               ENTRY/EXIT 
          LDC    RADE1       READ ADDRESSEE STATUS E1 PARAM 
          STML   RASCP+OM    STORE IN RASCPS OPMOD
          STML   RCP+OM      STORE MODIFIER 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    PDE         CHECK IF PHYSICAL DRIVE ENABLED
          ZJN    TA221       IF NOT PHYSICAL
          LDML   DCB+PHDA    GET PHYSICAL DRIVE ADDRESS 
          SHN    LEFT8       SHIFT TO CORRECT POSITION
          STML   RASCP+CT1   STORE IN RASCP'S PHYSICAL ADDRESS WORD 
          LDC    RASCP       REPORT ADDRESSEE STATUS COMMAND PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    RADSTL      REPORT COMMAND'S WORD LENGTH 
          UJN    TA221A 
  
 TA221X   UJN    TA22X       ERROR EXIT 
  
 TA221    LDC    RCP         REPORT ADDRESSEE STATUS COMMAND PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    SCWL        REPORT COMMAND'S WORD LENGTH 
 TA221A   RJM    CORI        ISSUE COMMAND/RECEIVE RESPONSE 
          LDC    E1ID        READ ADDRESSEE STATUS
          RJM    LPW         LOCATE E1 PARAM ID 
          NJN    TA221X      IF PARAMETER ID NOT FOUND
          LDML   DCB+FWA1    GET PP BUFFER ADDRESS
          STDL   TEMP2
 TA22A    LDML   SB+PMW,TEMP1  GET RESPONSE WORD
          STIL   TEMP2       SAVE IN PP BUFFER
          AODL   TEMP1       INCREMENT ADDRESS
          AODL   TEMP2       INCREMENT ADDRESS
          SBML   DCB+FWA1    SUBTRACT PP BUFFER ADDRESS 
          SBN    SEVEN       CHECK FOR END OF BUFFER
          NJN    TA22A       IF NOT DONE
          LDC    RADE2       READ ADDRESSEE STATUS E2 PARAM 
          STML   RASCP+OM    STORE IN RASCPS OPMOD
          STML   RCP+OM      STORE MODIFIER 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    PDE         CHECK IF PHYSICAL DRIVE ENABLED
          ZJN    TA222       IF NOT PHYSICAL
          LDC    RASCP       REPORT ADDRESSEE STATUS COMMAND PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    RADSTL      REPORT COMMAND'S WORD LENGTH 
          UJN    TA222A 
  
 TA222    LDC    RCP         REPORT ADDRESSEE STATUS COMMAND PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    SCWL        REPORT COMMAND'S WORD LENGTH 
 TA222A   RJM    CORI        ISSUE COMMAND/RECEIVE RESPONSE 
          LDC    E2ID        READ ADDRESSEE STATUS
          RJM    LPW         LOCATE E1 PARAM ID 
          NJN    TA22EX      IF PARAMETER ID NOT FOUND
          LDML   DCB+FWA1    GET PP BUFFER ADDRESS
          ADN    SEVEN       SET FIRST WORD TO STORE
          STDL   TEMP2
 TA22B    LDML   SB+PMW,TEMP1  GET RESPONSE WORD
          STIL   TEMP2       SAVE IN PP BUFFER
          AODL   TEMP1       INCREMENT ADDRESS
          AODL   TEMP2       INCREMENT ADDRESS
          SBML   DCB+FWA1    SUBTRACT PP BUFFER ADDRESS 
          SBN    TEN         CHECK FOR END OF BUFFER
          NJN    TA22B       IF NOT DONE
 TA22EX   LJM    TA22X       EXIT 
  
          ELSE
 TA22     TITLE  TASK 22 - REPORT ADDRESSEE STATUS
**        TASK 22 NOT SUPPORTED 
* 
          ENDIF 
  
          IFNE   CLSUN,0
 TA23     TITLE  TASK 23 - CLUSTER UNIT TO 1X 
**        TA23 - TASK 23 - CLUSTER UNIT TO 1X 
* 
*         THIS MODULE WILL CLUSTER UNIT TO 1X.
* 
*         ENTRY - STANDARD AND (DCB+OEF). 
* 
*         CALLS - CORI, INPA
* 
*         USES - TSFOA, CHSPF 
* 
 TA23     SUBR               ENTRY/EXIT 
          LDML   DCB+DA      DRIVE ADDRESS
          SHN    LEFT8       SHIFT TO CORRECT POSITION
          ADN    1
          STML   CLUCP+CT1   STORE IN CLUCP'S PHYSICAL ADDRESS WORD 
          LDML   DCB+PHDA    GET PHYSICAL DRIVE ADDRESS 
          ZJN    TA231       IF A SABRE DRIVE 
          LDC    0#8600      CLUSTER SSD UNIT TO 1X 
          UJN    TA232
  
 TA231    LDC    0#8A00      CLUSTER SABRE UNIT TO 1X 
 TA232    STML   CLUCP+CT2   STORE IN CLUCP'S FACILITY CLUSTER ID 
          LDC    CLUCP       CLUSTER COMMAND PACKET ADDRESS 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    ATTRCWL     CLUSTER COMMAND'S WORD LENGTH
          RJM    CORI        ISSUE COMMAND/RECEIVE RESPONSE 
          RJM    DSL         DELSELECT THE CONTROLLER 
          LDC    WCLSS1A     20 SEC/CLASS 1 ASYNC COUNT 
          RJM    RSPHDL      WAIT/RECEIVE ASYNC 
 TA23EX   UJN    TA23X       EXIT 
          ELSE
 TA23     TITLE  TASK 23 - CLUSTER UNIT TO 1X 
**        TASK 23 NOT SUPPORTED 
* 
          ENDIF 
  
 BBBDT    TITLE  BURST-BY-BURST DATA TRANSFER 
**        BBBDT - BURST-BY-BURST DATA TRANSFER
* 
*         THIS SUBROUTINE WILL R/W FROM THE CONTROLLER ONE SECTOR OF
*         DATA AT A TIME, UNTIL THE SPECIFIED NUMBER OF SECTORS HAS 
*         BEEN TRANSFERRED, OR UNTIL THE INTERVAL BURST COUNT = 0 AND 
*         THE BURST RELEASE ENABLE IS USED. A CLASS 2 INTERR IS CHECKED 
*         FOR BURST BOUNDARY.  FINALLY, THE CONTROLLER IS DESELECTED. 
* 
*         ENTRY - (A)= BURST BUS CONTROL WORD 
* 
*         CALLS - BSC, ITO, ITI, EDS, DSL, RSPHDL 
* 
*         USES - SECCTR,BURBCW,TIDA,TSFOA,RLW,RUP,TEMP1,RESBUR,RSMIB, 
*          DBIPRG,CMTWC,IBC 
* 
 BBBDT    SUBR               ENTRY/EXIT 
          STDL   BURBCW      STORE BURST BUS CONTROL WORD 
          LDML   DCB+STC     NUMBER OF SECTORS
          STDL   SECCTR      SAVE IT
 BBBLOOP  LDDL   BURBCW      BURST BUS CONTROL WORD 
          RJM    BSC         PERFORM BUS CONTROL SEQUENCE 
          NJN    BBB20       EXIT IF ERROR
          LDDL   BURDIR      BURST DIRECTION
          NJN    BBB10       IF OUTPUT (77) 
          LDN    ONES 
          RJM    ITI         INFORMATION TRANSFER IN (READ DATA)
          UJN    BBB20
  
 BBB10    RJM    ITO         INFORMATION TRANSFER OUT (WRITE DATA)
 BBB20    NJN    BBBEXT1     EXIT IF ERROR
          LDC    GMSFW       GOOD MASTER STATUS FUNCTION
          RJM    EDS         ENDING STATUS SEQUENCE 
 BBBEXT1  NJN    BBBEXT2     EXIT IF ERROR
          IFNE   I0ON+IOUOFF,0,2
          LDDL   DBLW        LOAD WORD COUNT
          STML   CMTWC       SET CMW COUNT TO SINGLE BURST SIZE 
          IFNE   I4ON+IOUOFF,0,2
          LDDL   DBLB 
          STML   TREGS       SET I4/DMA T-REGS FOR SINGLE BURST BY BURST
          SODL   SECCTR      DECREMENT TOTAL TRANSFER SECTOR COUNT
          IFNE   LCIMLO,0 
          ZJP    BBB50       IF SECTOR COUNT 0 EXIT 
          ELSE
          ZJP    BBB60       IF SECTOR COUNT 0 EXIT 
          ENDIF 
 BPEB     LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    BRE         CHECK IF BURST-RELEASE IS ENABLED
          ZJN    RESUME      IF NOT GET LATEST SLAVE ENDING STATUS
          SODL   IBC         DECREMENT THE INTERVAL BURST COUNT 
          ZJP    ESCRTN      IF 0 ESCAPE TO CALLING PROGRAM 
 RESUME   LDML   ISSS        LATEST SLAVE ENDING STATUS 
          LPN    PAUSE       CHECK FOR PAUSE
          ZJN    BBB25       IF NO PAUSE LOOP BACK FOR MORE DATA
          RJM    DSL         DESELECT CONTROLLER
          NJN    BBBEXT2     EXIT IF ERROR
          LDC    WCLASS2     CLASS 2 INTERRUPT BIT
          RJM    RSPHDL      WAIT/RECEIVE RESPONSE PACKET 
          ZJN    BBB25       IF NO ERROR
 BBBEXT2  LJM    BBBEXT      EXIT IF ERROR
 BBB25    LDML   RSMIB       THE RESUME INTERVAL BURSTING FLAG
          ZJN    BBB30       IF NOT SET CHECK OPERATION ENABLE FLG
          LDN    ZERO 
          STML   RSMIB       CLEAR THE RESUME INTERVAL BURST FLAG 
          UJN    BBBLB       TO LOOP BACK 
  
 BBB30    LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    CMT         CHECK FOR CENTRAL MEMORY TRANSFER
          IFNE   IOUOFF,0,1 
          NJN    BBBCMT      IF CENTRAL MEMORY TRANSFER 
          IFNE   I0ON,0,1 
          NJN    BBBCMI0     IF CENTRAL MEMORY TRANSFER 
          IFNE   I4ON,0,1 
          NJN    BBB40       CENTRAL MEMORY WORD COUNT
*         LDDL   DBLW        DATA WORD COUNT FOR SINGLE BURST 
*         RAML   TIDA        REPLACE/ADD IN STORAGE ADDRESSES 
*         LDDL   DBLW        DATA WORD COUNT FOR SINGLE BURST 
*         RADL   TSFOA       REPLACE/ADD IN TRANSFER OUT ADDRESS
          UJN    BBBLB       ANOTHER LOOP 
  
          IFNE   IOUOFF,0,3 
 BBBCMT   LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK FOR I4 DRIVER SELECTION
          NJN    BBB40       CENTRAL MEMORY WORD COUNT
          IFNE   I0ON+IOUOFF,0,4
 BBBCMI0  LDN    CTWRL8      CENTRAL MEMORY WORDS PER BURST 
          RAD    RLW         REPLACE/ADD IN R-REGISTER LOWER
          SHN    MINUS12     RIGHT-JUSTIFY ANY OVERFLOW 
          RAD    RUP         REPLACE/ADD IN R-REGISTER UPPER
          IFNE   IOUOFF,0,1 
          UJN    BBBLB       LOOP BACK FOR ANOTHER BURST
  
          IFNE   I4ON+IOUOFF,0,4
 BBB40    LDC    CTW512      CENTRAL MEMORY WORDS PER BURST 
          RAML   RMALW       REPLACE/ADD IN RMA LOWER 
          SHN    MINUS16     RIGHT-JUSTIFY ANY OVERFLOW 
          RAML   RMAUP       REPLACE/ADD IN RMA UPPER 
 BBBLB    LJM    BBBLOOP     LOOP BACK FOR ANOTHER BURST
  
          IFNE   LCIMLO,0 
 BBB50    LDML   RESBUR      RESIDUE BURST FLAG 
          ZJN    BBB60       IF NOT, DESELECT CONTROLLER
          LDDL   DBLB        GET DATA BUFFER BYTES
          SHN    MINUS12     MASK TO 2K 
          STDL   SECCTR      SAVE IN SECTOR COUNT 
          LDML   BBBTAB,SECCTR
          STML   BBB55
          LDN    ONE
          STDL   SECCTR      SET SECTOR COUNT FOR LAST SECTOR 
          LDN    ZERO 
          STML   RESBUR      CLEAR RESIDUE BURST FLAG 
          LDML   DCB+IBCL    LOWER BYTE COUNT 
          LPC    7777B       CHECK RESIDUE BYTE COUNT 
 BBB55    EQU    *-1         **MODIFIED FOR CORRECT BYTE COUNT
          ZJN    BBB60       IF NOT, DESELECT CONTROLLER
          IFNE   I4ON+IOUOFF,0,1
          STML   TREGS       STORE IN T-REGISTER
          ADN    ONE         ADD 1 BEFORE CONVERTING
          SHN    MINUS1      CONVERT BYTE COUNT TO WORD COUNT 
          IFNE   I0ON+IOUOFF,0,1
          STML   CMTWC       SAVE I0 CENTRAL MEM WORD COUNT 
          STDL   TOWC        SAVE PP TRANSFER WORD COUNT
          LJM    BPEB        BACK 
  
 BBBTAB   CONL   3777B       MASK FOR 2K BURST
          CONL   7777B       MASK FOR 4K BURST
          CONL   17777B      MASK FOR 8K BURST
          ENDIF 
  
 BBB60    RJM    DSL         DESELECT THE CONTROLLER
 BBBEXT   STDL   TEMP1       SAVE EXIT ERROR IF ANY 
          LDN    ZERO 
          STML   DBIPRG      CLEAR DATA-BURSTING-IN-PROGRESS FLAG 
          STML   RSMIB       CLEAR RESUME INTERVAL BURSTING FLAG
          LDDL   TEMP1       GET EXIT ERROR IF ANY
          LJM    BBBDTX      RETURN 
  
*         RESIDUE BURST FLAG FOR LOAD CONTROLLER IML COMMAND
  
 RESBUR   CONL   ZERO        RESIDUE BURST FLAG 
  
*         INTERVAL SLAVE-ENDING STATUS STORAGE
  
 ISSS     CONL   ZERO        LATEST SLAVE STAT FOR INTERVAL BURST 
  
 BSC      TITLE  BUS CONTROL SEQUENCE 
**        BSC - BUS CONTROL SEQUENCE
* 
*         THIS SUBROUTINE WILL READY THE IPI BUS INTERFACE FOR A
*         SPECIFIC TYPE OF INFORMATION TRANSFER, INPUT AND STORE
*         THE BUS ACKNOWLEDGE BYTE, AND COMPARE IT WITH THE 
*         EXPECTED VALUE. 
* 
*         ENTRY - (A)= BUS CONTROL FUNCTION WORD
* 
*         CALLS - SENDFCN, FCLT 
* 
*         USES - DCB+LBAS 
* 
 BSC      SUBR               ENTRY/EXIT 
          RJM    SENDFCN     SEND BUS CONTROL FUNCTION TO IPI ADAPTER 
          ACN    CH 
          RJM    FCLT        WAIT FOR SYNC IN TO COME UP
          NJN    BSCER1      EXIT IF ERROR
          IAN    CH          INPUT BUS ACKNOWLEDGE BYTE 
          LPC    LBMSK       MASK LOWER BYTE
          STML   DCB+LBAS    SAVE IT
          NJN    BSCER2      EXIT IF ERROR
          DCN    CH+UNH 
          SFM    BSCER3,CH   IF CHANNEL ERROR EXIT
          LDC    DSOF        DROP SYNC-OUT FUNCTION 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          ACN    CH 
          RJM    FCLT        WAIT FOR SYNC-IN TO DROP 
          NJN    BSCER4      EXIT IF ERROR
          DCN    CH+UNH 
 BSCEXT   UJN    BSCX        RETURN 
  
*         ERROR EXITS 
  
 BSCER1   LDN    E31         SYNC-IN UP TMO ERROR CODE
          UJN    BSCEXT      EXIT 
  
 BSCER2   LDN    E32         UNEXP BUS ACK BYTE ERROR 
          UJN    BSCEXT      EXIT 
  
 BSCER3   LDN    E33         CHANNEL ERROR FLAG SET ERROR CODE
          RJM    RIPIER      LOG ERROR AND READ IPI ERROR REGISTER
          UJN    BSCEXT      EXIT 
  
 BSCER4   LDN    E34         SYNC-IN DROP TMO ERROR CODE
          UJN    BSCEXT      EXIT 
  
 CMWR     TITLE  CENTRAL MEMORY WRITE READ ROUTINE
**        CMWR - CENTRAL MEMORY WRITE READ ROUTINE
* 
*         THIS SUBROUTINE WILL DO THE CENTRAL MEMORY TRANSFERS FOR I0 
*         OR I4.
* 
* 
*         CALLS - SENDFCN, EDS, DSL 
* 
*         USES - LOOPCTR, CMTWC, DCB+PLLE 
* 
 CMWR0    STML   CMWRSAV
          LDML   CMWR20 
          ZJN    CMWR00 
          LDML   CMWRSAV
          LJM    CMWR20X
  
 CMWR00   LDML   CMWRSAV
 CMWR     SUBR               ENTRY/EXIT 
  
          LDN    ZERO        CLEAR OUT LAST RETURN JUMP 
          STML   CMWR20 
  
*         CENTRAL MEMORY TRANSFERS
  
          IFNE   IOUOFF,0,3 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK FOR I4/IPI DRIVER SELECTION
          NJN    CMWR10      IF I4 SEND FUNCTION
  
          IFNE   I0ON+IOUOFF,0
          LDDL   BURDIR 
          NJN    CMWR1       IF A WRITE 
          LDC    CSRFW       CENTRAL STREAMING READ FUNCTION
          UJN    CMWR3       SEND FUNCTION
 CMWR1    LDC    CSWFW       CENTRAL STREAMING WRITE FUNCTION 
 CMWR3    RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          LDDL   BURDIR 
          NJN    CMWR5       IF A WRITE 
          ACN    CH 
          LRD    RUP         LOAD R-REGISTERS 
          LDDL   AREG        CONTENTS OF A-REGISTER 
          ADC    ERREG       SET BIT 17 FOR (R)+(A) USAGE 
          CHCM   CMTWC,CH    INPUT BURST OF CENTRAL MEMORY DATA 
          UJN    CMWR7
 CMWR5    ACN    CH 
          LRD    RUP         LOAD R-REGISTERS 
          LDDL   AREG        CONTENTS OF A-REGISTER 
          ADC    ERREG       SET BIT 17 FOR (R)+(A) USAGE 
          CMCH   CMTWC,CH    OUTPUT BURST OF CENTRAL MEMORY DATA
 CMWR7    LDML   CMTWC       FETCH REMAINING TRANSFER WORD COUNT
          LJM    CMWR2A      SAVE TRANSFER RESIDUE
          ENDIF 
  
*         I4/IPI DMA TRANSFER 
  
          IFNE   I4ON+IOUOFF,0
 CMWR10   LDDL   BURDIR 
          NJN    CMWR11      IF A WRITE 
          LDC    SRTFW       STREAMING READ TRANSFER FUNCTION 
          RJM    SENDFCN     ISSUE FUNCTION TO ADAPTER
          LDC    DMARD       DMA/I4 READ FUNCTION 
          UJN    CMWR13 
 CMWR11   LDC    SWTFW       STREAMING WRITE TRANSFER FUNCTION
          RJM    SENDFCN     ISSUE FUNCTION TO ADAPTER
          LDC    DMAWRT      DMA/I4 WRITE FUNCTION
 CMWR13   RJM    DMAI4       PERFORM DMA TRANSFER 
          ZJP    CMWREXT     EXIT IF NO ERROR 
          STML   DCB+PLLE    STORE AS PREVIOUS LOW-LEVEL ERROR
          LDDL   BURDIR 
          NJN    CMWR15      IF A WRITE 
          LDML   DCB+PLLE    GET ERROR CODE SAVED 
          LMC    E70         ADD TO BASE TRANSFER ERROR 
          UJN    CMWR17 
 CMWR15   LDML   DCB+PLLE    GET ERROR CODE SAVED 
          LMC    E40         ADD TO BASE TRANSFER ERROR 
 CMWR17   STML   DCB+PLLE    STORE AS PREVIOUS LOW-LEVEL ERROR
          LDC    RDTREG      THE READ T-REGISTERS FUNCTION
          RJM    SENDFCN     ISSUE READ T-REGISTERS FUNCTION
          ACN    CH 
          EJM    CMWRER2,CH  CHANNEL EMPTY AFTER READ REGISTER FUNCTION 
          IAN    CH          INPUT THE T-REGISTER BYTE COUNT RESIDUE
          DCN    CH+UNH 
          ADN    ONE         ADD 1 BEFORE CONVERTING
          SHN    MINUS1      SHIFT TO CONVERT TO WORD COUNT 
          STDL   TEMP1       SAVE RESIDUE WORD COUNT
          LDC    RIPIST      THE READ IPI STATUS FUNCTION 
          RJM    SENDFCN     ISSUE THE FUNCTION 
          ACN    CH 
          EJM    CMWRER2,CH  CHANNEL EMPTY AFTER READ REGISTER FUNCTION 
          IAN    CH          INPUT THE IPI STATUS 
          STML   DCB+LIER    SAVE LSI ERROR STATUS
          SHN    SVISHF      SHIFT THE SLAVE-IN STATUS TO UPPER BIT 
          MJN    CMWRSIT     IF SLAVE-IN SET ERROR EXIT 
          UJN    CMWRTMO1    ENDING STATUS SEQUENCE 
          ENDIF 
  
*         END OF ALL TRANSFERS
  
 CMWR20   SUBR               ENTRY EXIT 
 CMWR2A   STDL   TEMP1       SAVE ANY RESIDUE 
          NJN    CMWRER1     IF RESIDUE ERROR EXIT
          LDC    DLINACT     INPUT DELAY COUNT
 CMWRLP   IJM    CMWRGOOD,CH  IF CHANNEL INACTIVE GOOD EXIT 
          SBN    ONE         DECREMENT COUNT
          NJN    CMWRLP      LOOP BACK UNTIL ZERO 
 CMWRSIT  LDC    DTSITMO     SLAVE-IN TIME-OUT ERROR
          UJN    CMWREXT     EXIT 
  
 CMWRGOOD LDN    ZERO 
 CMWREXT  LJM    CMWR0       RETURN 
  
*         ERROR EXITS 
  
 CMWRER1  LDDL   BURDIR 
          NJN    CMWR19      IF A WRITE 
          LDC    E71         INPUT TRANSFER LENGTH ERROR
          UJN    CMWRTMO
 CMWR19   LDC    E41         OUTPUT TRANSFER LENGTH ERROR 
 CMWRTMO  STML   DCB+PLLE    STORE FOR PREVIOUS ERROR 
          DCN    CH+UNH 
 CMWRTMO1 LDN    BMSFW       UNSUCCESSFUL MASTER STATUS FUNCTION
          RJM    EDS         PERFORM ENDING STATUS SEQUENCE 
          NJN    CMWREXT      EXIT IF ERROR 
          RJM    DSL         DESELECT FROM CONTROLLER 
          NJN    CMWREXT     EXIT IF ERROR
 CMWRTMO2 LDDL   TEMP1       TRANSFER RESIDUE COUNT 
          LMDL   DBLW        COMPARE RESIDUE WITH WORD COUNT
          NJN    CMW2EXT     IF ANY WORDS TRANSFERRED ERROR EXIT
          LDML   DCB+LSVS    LATEST ENDING STATUS 
          LPC    PAUSE       CLEAR ALL BITS EXCEPT PAUSE BITS 
          LMN    NMDATA      COMPARE WITH NO MORE DATA
          NJN    CMW2EXT     IF NOT NO MORE DATA ERROR EXIT 
          LDC    UNRCERR     UNRECOVERABLE DATA ERROR 
 CMWREXT1 UJN    CMWREXT     EXIT 
  
 CMW2EXT  LDML   DCB+PLLE    PRIMARY ERROR CODE 
          UJN    CMWREXT1    EXIT 
  
 CMWRER2  LDDL   BURDIR 
          NJN    CMWR21      IF A WRITE 
          LDC    E72         CHANNEL EMPTY WHEN ADAPTER INPUT EXPECTED
          UJN    CMWREXT1     EXIT
 CMWR21   LDC    E42         CHANNEL EMPTY WHEN ADAPTER INPUT EXPECTED
          UJN    CMWREXT1     EXIT
  
 CMWRSAV  CONL   0           SAVE ERROR CODE IF ENTERED FROM OTHER ROUTINE
  
 CORI     TITLE  COMMAND OUT / RESPONSE IN
**        CORI - COMMAND OUT / RESPONSE IN
* 
*         THIS SUBROUTINE WILL SEND THE CONTENTS OF THE COMMAND PACKET
*         TO THE CONTROLLER AND INPUTS THE CONTROLLER'S RESPONSE PACKET 
*         TO COMPLETE THE SPECIFIED OPERATION.  IT ALSO CHECKS FOR
*         SUCCESSFUL MAJOR STATUS.
* 
*         ENTRY - (A)= COMMAND PACKET LENGTH IN 16-BIT WORDS
* 
*         CALLS - SCP, RSPHDL, CSCHK
* 
 CORI     SUBR               ENTRY/EXIT 
          RJM    SCP         SEND COMMAND PACKET
          NJN    CORIEXT     EXIT IF ERROR
          LDC    WCLASS1     CLASS 1 INTERRUPT FLAG 
          RJM    RSPHDL      WAIT/RECEIVE RESPONSE PACKET 
          NJN    CORIEXT     EXIT IF ERROR
          RJM    CSCHK       CHECK IF COMMAND WAS SUCCESSFUL
 CORIEXT  UJN    CORIX       RETURN 
  
          IFNE   CMDGO+DRDGO,0
 COWMRI   TITLE  COMMAND OUT/RESPONSE IN (WITH 2 MINUTE RESPONSE TMO) 
**        COWMRI - COMMAND OUT/RESPONSE IN (WITH 2 MINUTE RESPONSE TMO) 
* 
*         THIS SUBROUTINE WILL SEND THE CONTENTS OF THE COMMAND PACKET
*         TO THE CONTROLLER AND THEN WAIT UP TO 2 MINUTES FOR AN
*         INTERRUPT FROM THE CONTROLLER.  IF NO INTERRUPT APPEARS,
*         AN ERROR IS GENERATED;  OTHERWISE THE RESPONSE PACKET IS
*         INPUTTED AND THE SUCCESSFUL STATUS IS CHECKED.
* 
*         ENTRY - (A)= COMMAND PACKET LENGTH IN 16-BIT WORDS
* 
*         CALLS - SCP, RSPHDL, CSCHK
* 
 COWMRI   SUBR               ENTRY/EXIT 
          RJM    SCP         SEND COMMAND PACKET
          NJN    COWMEXT     EXIT IF ERROR
          LDC    WMCLSS1     CLASS 1/WAIT INTERRUPT FLAG
          RJM    RSPHDL      WAIT/RECEIVE RESPONSE PACKET 
          NJN    COWMEXT     EXIT IF ERROR
          RJM    CSCHK       CHECK IF COMMAND WAS SUCCESSFUL
 COWMEXT  UJN    COWMRIX     RETURN 
          ENDIF 
  
 CSCHK    TITLE  COMMAND SUCCESSFUL CHECK 
**        CSCHK - COMMAND SUCCESSFUL CHECK
* 
*         THIS SUBROUTINE WILL CHECK THE MAJOR STATUS WORD OF THE SB FOR
*         SUCCESSFUL OR CONDITIONAL SUCCESS BITS SET.  IF NOT SUCCESSFUL
*         OR CONDITIONAL SUCCESS IS SET, THEN (A) WILL BE ZERO UPON 
*         EXIT. 
* 
*         EXIT - (A) = 0   ... COMMAND WAS SUCCESSFUL 
*          (A) NOT 0 ... ERROR CODE FOR FAILING CONDITION 
* 
*         USES - DCB+PLLE 
* 
 CSCHK    SUBR               ENTRY/EXIT 
          LDDL   MAJORST     MAJOR STATUS 
          LPC    LBMSK       LOWER BYTE 
          LMN    SCCMS       CHECK STANDARD COMMAND COMPLETION STATUS 
          ZJN    CSCEXT      IF TRUE GOOD EXIT
          LDDL   MAJORST     MAJOR STATUS 
          LPN    LNMSK       MAJOR CODE 
          SBN    CSMS 
          ZJN    CSCER       IF CONDITIONAL SUCCESS ERROR EXIT
          LDC    ONSERR      OPERATION NOT SUCCESSFUL ERROR 
 CSCEXT   UJN    CSCHKX      RETURN 
  
 CSCER    LDC    CNDSUCC     CONDITIONAL SUCCESS ERROR
          STML   DCB+PLLE    STORE THE ERROR
          LDN    ZERO        SET INDICATOR TO CONTINUE
          UJN    CSCEXT      EXIT 
  
          IFNE   IOUOFF+I4ON,0
 DELUS    TITLE  DELAY MICROSECONDS 
**        DELUS - DELAY MICROSECONDS
* 
*         THIS SUBROUTINE WILL DELAY THE NUMBER OF MICROSECONDS 
*         INDICATED BY THE CONTENTS OF REGISTER A ON ENTRY. 
* 
*         ENTRY - (A)= NUMBER OF MICROSECONDS TO DELAY
* 
 DELUS    SUBR               ENTRY/EXIT 
 DELOOP   PSN                DELAY 150-250 USECS
          PSN                DELAY 150-250 USECS
          SBN    ONE         DECREMENT DELAY COUNT
          NJN    DELOOP      IF NOT EXHAUSTED 
          UJN    DELUSX      RETURN 
          ENDIF 
  
 DFWASTR  TITLE  DATA FWA STORAGE 
**        DFWASTR - DATA FWA STORAGE
* 
*         THIS SUBROUTINE WILL STORE THE CURRENT DCB FWA'S INTO THE 
*         INPUT/OUTPUT PP INSTRUCTIONS.  (HANDLES BOTH I0 AND I4
*         FWA'S)
* 
*         CALLS - NONE
* 
*         USES - RUP, RLW, AREG, RMAUP, RMALW 
* 
 DFWASTR  SUBR               ENTRY/EXIT 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    CMT         CHECK FOR CENTRAL MEMORY TRANSFER
          IFNE   IOUOFF,0,1 
          NJN    DFWA10      IF CENTRAL MEMORY TRANSFER 
          IFNE   I0ON,0,1 
          NJN    DFWA20      IF CENTRAL MEMORY TRANSFER 
          IFNE   I4ON,0,1 
          NJN    DFWA30      IF CENTRAL MEMORY TRANSFER 
          LDML   DCB+FWA1    PP FWA 
          STDL   TSFOA       STORE IN TRANSFER OUTPUT WORD
          STML   TIDA        STORE IN TRANSFER INPUT INSTRUCTION
 DFWAEXT  UJN    DFWASTRX    RETURN 
  
          IFNE   IOUOFF,0,3 
 DFWA10   LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK FOR I4/IPI DRIVER SELECTION
          NJN    DFWA30      IF I4 DRIVER SET UP I4 MEMORY
          IFNE   I0ON+IOUOFF,0
 DFWA20   LDML   DCB+FWA1    ADDRESS FOR R-REGISTER UPPER 
          STDL   RUP         SAVE ADDRESS 
          LDML   DCB+FWA2    ADDRESS FOR R-REGISTER LOWER AND A-REGISTER
          STDL   RLW         SET UP (R-REGISTER) LOWER
          LDML   DCB+FWA3    (A-REGISTER) FOR CENTRAL MEM ADDRESS 
          STDL   AREG        STORE IN D-CELL FOR A-REGISTER 
          LDML   DCB+BIDS    LOAD WORD COUNT
          STML   CMTWC       SET CENTRAL MEMORY WORD COUNT FOR SINGLE 
          ENDIF 
          IFNE   IOUOFF,0,1 
          UJN    DFWAEXT     EXIT 
  
          IFNE   I4ON+IOUOFF,0,6
 DFWA30   LDML   DCB+FWA1    UPPER CENTRAL MEM ADDRESS
          STML   RMAUP       SAVE ADDRESS 
          LDML   DCB+FWA2    LOWER CENTRAL MEM ADDRESS
          STML   RMALW       SET UP (R-REGISTER) LOWER
          LDDL   DBLB 
          STML   TREGS       LOAD BYTE COUNT INTO T-REGISTERS 
          UJN    DFWAEXT     EXIT 
  
          IFNE   I4ON+IOUOFF,0
 DMAI4    TITLE  DMA/I4 DATA TRANSFER 
**        DMAI4 - DMA/I4 DATA TRANSFER
* 
*         THIS SUBROUTINE WILL TRANSFER ONE 4K-PAGE OF STREAMING DATA 
*         ACROSS THE IPI CHANNEL. 
* 
*         ENTRY - (A) = I4 DMA TRANSFER FUNCTION
* 
*         CALLS - SENDFCN 
* 
*         USES - COUNTER
* 
 DMAI4    SUBR               ENTRY/EXIT 
          RJM    SENDFCN     ISSUE IPI ADAPTER FUNCTION 
          LDN    TREGCT      T-REGISTER COUNT 
          ACN    CH 
          OAM    TREGS,CH    SEND T-REGISTER DATA 
          FJM    DMAER3,CH   TAKE ERROR EXIT IF CHANNEL FULL
          DCN    CH+UNH 
          LDC    DMALPCT     DMA LOOP COUNT (500 USEC)
          STDL   COUNTER     SAVE IN COUNTER
 DMALOOP  LDC    ROPLS       READ OP'L STATUS FUNCTION
          RJM    SENDFCN     ISSUE IPI ADAPTER FUNCTION 
          ACN    CH 
          IAN    CH          INPUT OPERATIONAL STATUS 
          DCN    CH+UNH 
          LPN    TIPMSK      CHECK FOR TRANSFER-IN-PROGRESS 
          ZJN    DMA10       IF TIP NOT SET INPUT ERROR STATUS
          SODL   COUNTER     DECREMENT LOOP COUNTER 
          NJN    DMALOOP     IF NOT 0 
 DMAER1   LDC    DMATRM      TERMINATE DMA MODE FUNCTION
          RJM    SENDFCN     ISSUE IPI ADAPTER FUNCTION 
          LDN    EC          TRANSFER-IN-PROGRESS TMO ERROR 
 DMAEXT   UJN    DMAI4X      RETURN 
  
 DMA10    LDC    RDERST      READ ERROR STATUS FUNCTION 
          RJM    SENDFCN     ISSUE IPI ADAPTER FUNCTION 
          ACN    CH 
          IAN    CH          INPUT ERROR STATUS 
          DCN    CH+UNH 
          ZJN    DMAEXT      EXIT 
          STML   DCB+LESR    SAVE ERROR STATUS
 DMAER2   LDC    CLREI4      CLEAR ERROR REGISTER (I4) FUNCTION 
          RJM    SENDFCN     ISSUE IPI ADAPTER FUNCTION 
          LDN    ED          DMA/I4 ERROR STATUS PRESENT
          UJN    DMAEXT      EXIT 
  
 DMAER3   LDN    ECHFLL      CHANNEL NOT EMPTY AFTER T-REGISTERS LOADED 
          UJN    DMAEXT      EXIT 
          ENDIF 
  
 DSL      TITLE  DESELECT CONTROLLER SEQUENCE 
**        DSL - DESELECT CONTROLLER SEQUENCE
* 
*         THIS SUBROUTINE WILL SEND THE DESELECT FUNCTION WORD TO THE 
*         CONTROLLER AND WAIT FOR THE SLAVE IN SIGNAL TO DROP.
* 
*         ENTRY - NONE
* 
*         CALLS - SENDFCN, FCLT 
* 
*         USES - NONE 
* 
 DSL      SUBR               ENTRY/EXIT 
          LDC    DSFW        DESELECT FUNCTION WORD 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          ACN    CH 
          RJM    FCLT        WAIT FOR SLAVE-IN TO DROP
          NJN    DSLER1      EXIT IF ERROR
          DCN    CH+UNH 
          SFM    DSL1        IF CHANNEL ERROR STATUS
 DSLEXT   UJN    DSLX        RETURN 
  
*         IF CHANNEL ERROR DETECTED ON DESELECT CLEAR ERROR AND EXIT
  
 DSL1     BSS    0           ENTRY POINT
          IFNE   IOUOFF,0 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK IF I4 DRIVER ENABLED 
          NJN    DSL2        IF I4 CLEAR I4 ERROR STATUS
          LDC    CLRLSI      THE CLEAR IPI ERROR REGISTER FUNCTION
          RJM    SENDFCN     ISSUE ADAPTER FUNCTION 
          LDML   CLKIE       SET INTERNAL CLOCK (10 OR 25 MB) 
          UJN    DSL3 
  
 DSL2     LDC    CLREI4      CLEAR I4 ERROR STATUS FUNCTION 
          ENDIF 
          IFNE   I0ON,0,3 
          LDC    CLRLSI      CLEAR IPI ERROR REGISTER FUNCTION
          RJM    SENDFCN     ISSUE ADAPTER FUNCTION 
          LDML   CLKIE       SET INTERNAL CLOCK (10 OR 25 MB) 
          IFNE   I4ON,0,1 
          LDC    CLREI4      CLEAR I4 ERROR STATUS FUNCTION 
 DSL3     RJM    SENDFCN     ISSUE ADAPTER FUNCTION 
          LDN    0           DONT PROCESS ANY ERRORS
          UJN    DSLX 
  
*         ERROR EXITS 
  
 DSLER1   LDC    E81         SLAVE-IN DROP TIME-OUT ERROR 
          UJN    DSLEXT      EXIT 
  
 EDS      TITLE  ENDING STATUS SEQUENCE 
**        EDS - ENDING STATUS SEQUENCE
* 
*         THIS SUBROUTINE WILL SEND THE MASTER STATUS BYTE TO THE 
*         CONTROLLER, THEN INPUT AND STORE THE SLAVE ENDING STATUS. 
* 
*         ENTRY - (A) = MASTER STATUS FUNCTION WORD 
* 
*         CALLS - SENDFCN, FCLT 
* 
*         USES - DCB+LSVS, DCB+PLLE 
* 
 EDS      SUBR               ENTRY/EXIT 
          RJM    SENDFCN     SEND MASTER STATUS/DROP MASTER OUT 
          ACN    CH 
          RJM    FCLT        WAIT FOR SLAVE-IN TO COME UP 
          NJN    EDSER1      EXIT IF ERROR
          IAN    CH          INPUT SLAVE (CM) STATUS
          LPC    LBMSK       MASK LOWER BYTE
          STML   DCB+LSVS    STORE IN DCB OUTPUT AREA 
          STML   ISSS        SAVE ALSO FOR INTERVAL BURSTING
          DCN    CH+UNH 
          SFM    EDSER2,CH   IF CHANNEL ERROR FLAG SET ERROR EXIT 
          LPC    SITS        MASK AND CHECK IF SUCCESSFUL 
          NJN    EDS10       IF SUCCESSFUL
          LDML   DCB+LSVS    SLAVE STATUS 
          LPN    LNMSK       MASK ENCODED ENDING STATUS 
          SBN    CL3RSP 
          NJN    EDSER3      IF NOT CLASS 3 RESPONSE ERROR EXIT 
  
*         CRITICAL RESPONSE OCCURRED
  
          LDC    CRITERR     CRITICAL CLASS 3 ERROR CODE
 EDSEXT   UJN    EDSX        RETURN 
  
 EDS10    LDN    ZERO        INDICATE NO ERRORS 
          UJN    EDSEXT      EXIT 
  
*         ERROR EXITS 
  
 EDSER1   LDC    E51         CH FULL TIME-OUT WAITING FOR ENDING STATUS 
          UJN    EDSEXT      EXIT 
  
 EDSER2   LDC    E52         CHANNEL ERROR AFTER ENDING STATUS RECEIVED 
          RJM    RIPIER      LOG ERROR AND READ IPI ERROR REGISTER
          UJN    EDSEXT      EXIT 
  
 EDSER3   LDDL   CURMO       MAJOR OPERATION INDICATOR
          LPN    RWDF        CHECK IF PREVIOUS TRANSFER WAS DATA
          ZJN    EDSNS       IF NOT SET ERROR E53 
          RJM    DSL         DESELECT THE CONTROLLER
          LDC    UNSCDBT     UNSUCC DATA BURST TRANSFER ERROR 
          UJN    EDSEXT      EXIT 
 EDSNS    LDC    E53         INFO TRANSFER NOT SUCCESSFUL ERROR 
          UJN    EDSEXT      EXIT 
  
 FCLT     TITLE  FULL CHANNEL USEC LOOP TIMER 
**        FCLT - FULL CHANNEL USEC LOOP TIMER 
* 
*         THIS SUBROUTINE WILL WAIT FOR THE IPI CHANNEL TO BECOME FULL
*         OR UNTIL 1 MILLISECOND HAS EXPIRED. 
* 
*         ENTRY - (A) = DESIRED DELAY CONSTANT
* 
*         EXIT - (A)= NON-ZERO ERROR-FREE 
*                (A)= 0 TIME-OUT ERROR
* 
* 
 FCLT     SUBR               ENTRY/EXIT 
          LDC    DL1MS       1 MS LOOP COUNT
 FCLT10   FJM    FCLT20,CH   IF CHANNEL FULL GOOD EXIT
          SBN    ONE         DECREMENT DELAY COUNT
          NJN    FCLT10      IF NOT ZERO
          LDN    ONES        ERROR EXIT 
          UJN    FCLTX       EXIT 
  
 FCLT20   LDN    0           GOOD EXIT
          UJN    FCLTX       EXIT 
  
 GSUPD    TITLE  GENERAL STATUS UPDATE
**        GSUPD - GENERAL STATUS UPDATE 
* 
*         THIS SUBROUTINE WILL EXCLUSIVE-OR THE (A) UPON ENTRANCE 
*         WITH THE CURRENT CONTENTS OF THE DCB'S GENERAL STATUS WORD. 
* 
*         ENTRY - (A) = DESIRED STATUS BIT TO BE SET. 
* 
*         USES - DCB+GS 
* 
 GSUPD    SUBR               ENTRY/EXIT 
          LMML   DCB+GS      SET DESIRED STATUS INTO COPY OF GS 
          STML   DCB+GS      STORE NEW GENERAL STATUS WORD
          UJN    GSUPDX      RETURN 
  
 INPA     TITLE  INPUT ATTRIBUTES 
**        INPA - INPUT ATTRIBUTES 
* 
*         THIS SUBROUTINE WILL INPUT ATTRIBUTES TO THE INPUT BUFFER.
* 
*         ENTRY - (A) = ATTRIBUTE TO READ 
* 
*         CALLS - SCP, LPW, BSC, SENDFCN, EDS, RSPHDL, CSCHK
* 
*         USES - TSFOA
* 
 INPA     SUBR               ENTRY/EXIT 
          RJM    SCP         ISSUE ATTRIBUTE COMMAND
          NJN    INPAX       EXIT IF ERROR
          LDC    WCLASS2     CLASS 2 WAIT CONSTANT
          RJM    RSPHDL      WAIT FOR TRANSFER NOTIFICATION 
 INPA1    NJN    INPAX       EXIT WITH ERROR CODE IN A
          LDC    PLTH        SEARCH FOR PARAMETER LENGTH PARAMETER
          RJM    LPW
          NJN    INPA1       EXIT WITH ERROR CODE IN A
          AODL   TEMP1
          AODL   TEMP1       POINT TO LENGTH OF PARAMETERS WORD 
          LDML   SB+PMW,TEMP1   LENGTH
          SHN    -1          FORM WORD COUNT
          STML   INPA6       SAVE INPUT WORD COUNT
  
*         INPUT DATA TO DATA BUFFER 
  
          LDC    DITFW       DATA INPUT TRANSFER FUNCTION WORD
          RJM    BSC         PERFORM BUS CONTROL SEQUENCE 
          NJN    INPA1       EXIT WITH ERROR CODE IN A
          LDC    SRTFW       STREAMING READ TRANSFER MODE 
          IFNE   SCSPO,0,1
          LMML   STRF        SET/CLEAR STREAMING
          RJM    SENDFCN     SEND TO IPI ADAPTER
          ACN    CH 
          LDC    114B        LOAD WORD COUNT
 INPA6    EQU    *-1         MODIFIED WORD COUNT
          IAM    ZERO,CH     INPUT DATA 
 INPA7    EQU    *-1         MODIFIED ADDRESS 
          LDC    DLINACT     INACTIVE DELAY COUNT 
 INPA8    IJM    INPA9,CH    IF CHANNEL INACTIVE DO ENDING STATUS 
          SBN    ONE
          NJN    INPA8       LOOP 
          LDC    DTSITMO     SLAVE-IN TIME OUT ERROR
          UJN    INPAEX      EXIT WITH ERROR
  
 INPA9    LDC    GMSFW       GOOD MASTER STATUS FUNCTION
          RJM    EDS         ENDING STATUS SEQUENCE 
          NJP    INPAEX      EXIT IF ERROR
          RJM    DSL         DESELECT CONTROLLER
          NJP    INPAEX 
          LDC    WCLASS1     CLASS 1 INTERRUPT FLAG 
          RJM    RSPHDL      WAIT/RECEIVE RESPONSE PACKET 
          NJN    INPAEX      EXIT IF ERROR
          RJM    CSCHK       CHECK IF COMMAND WAS SUCCESSFUL
 INPAEX   LJM    INPAX       EXIT 
  
 ITI      TITLE  INFORMATION TRANSFER IN SEQUENCE 
**        ITI - INFORMATION TRANSFER IN SEQUENCE
* 
*         THIS SUBROUTINE WILL INPUT THE SPECIFIED RESPONSE PACKET OR 
*         DATA BLOCK FROM THE CONTROLLER/DRIVE AND STORES IT IN THE 
*         SPECIFIED PP OR CENTRAL MEMORY ADDRESS. 
* 
*         ENTRY - (FLAG)= 0 ... STATUS TRANSFER 
*                 (FLAG)= NON-ZERO ... DATA TRANSFER
* 
*         CALLS - SENDFCN, EDS, DSL 
* 
*         USES - LOOPCTR, CMTWC, DCB+PLLE 
* 
 ITI      SUBR               ENTRY/EXIT 
          ZJP    RSPXSF      IF ZERO DO RESPONSE INPUT
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    CMT         CHECK IF CENTRAL MEMORY TRANSFER 
          NJP    CMW         IF CENTRAL MEMORY TRANSFER 
  
 ITI10    LDC    SRTFW       STREAMING READ TRANSFER FUNCTION 
          IFNE   SCSPO,0,1
          LMML   STRF        SET/CLEAR STREAMING
 ITI15    RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
  
          LDN    0           CLEAR LOOP COUNT 
          STD    TEMP2
          LDC    PPBSZ       PP BUFFER SIZE 
          STML   IBSZ        DATA WORD COUNT
          LDDL   DBLW        GET BUFFER WORD COUNT
          ADC    -PPBSZ      PP BUFFER SIZE 
          PJN    ITI011      GREATER THAN BUFFER SIZE 
          LDN    1
          STD    TEMP2       SET 1 READ 
          LDDL   DBLW        GET BUFFER WORD COUNT
          STML   IBSZ        SET BUFFER WORD COUNT
          UJN    ITI11
 ITI011   LDDL   DBLW        GET BUFFER WORD COUNT
          STDL   TEMP1       SAVE TEMPORARILY 
 ITI01    LDDL   TEMP1
          ADC    -PPBSZ      PP BUFFER SIZE 
          STDL   TEMP1
          MJN    ITI11       ALL WORDS HANDLED
          AOD    TEMP2       LOOP COUNTER 
          UJN    ITI01
  
*         INPUT DATA FROM DISK TO PP MEMORY 
  
 ITI11    ACN    CH 
 ITI13    LDML   IBSZ        DATA WORD COUNT
  
***       NEXT INSTRUCTION GETS MODIFIED      *** 
  
          IAM    ZERO,CH     INPUT PP DATA BLOCK
 TIDA     EQU    *-1         TRANSFER IN DATA ADDRESS 
          STDL   TEMP1       SAVE RESIDUE IF ANY
          NJN    ITI17       RESIDUE ERROR
          SOD    TEMP2       SUBTRACT ONE FROM LOOP COUNTER 
          ZJN    ITI17       DONE WITH INPUT
          UJN    ITI13       DO NEXT BUFFER 
  
 IBSZ     CONL   0           DATA WORD COUNT
  
*         INPUT RESPONSE PACKET FROM CONTROLLER TO STATUS 
*         BUFFER INTO PP MEMORY.
  
 RSPXSF   LDC    SRTFW       STREAMING READ TRANSFER FUNCTION 
          IFNE   SCSPO,0,1
          LMML   STRF        SET/CLEAR STREAMING
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          ACN    CH 
          LDN    RPHDRLG     WORD COUNT OF 5
          IAM    SB,CH       INPUT 1ST 5 WORDS OF RESPONSE PACKET 
          LDML   SB          NUMBER BYTES TO EXPECT 
          ADN    THREE       ADD THREE TO BYTE COUNT
          SHN    MINUS1      DIVIDE BY 2 FOR NUMBER WORDS 
          SBN    RPHDRLG     SUBTRACT AMOUNT TRANSFERRED SO FAR 
          ZJP    ITIGOOD     IF ZERO GOOD INPUT 
          STDL   LOOPCTR     SAVE ACTUAL REMAINING WORD COUNT 
          SBN    MRSBW1      MAX REMAINING SB WORD COUNT + 1
          PJN    OVFLW10     IF GREATER THAN MAX SB OVERFLOW
          LDDL   LOOPCTR     ACTUAL REMAINING WORD COUNT
          IAM    SB+5,CH     INPUT REMAINDER OF RESPONSE PACKET 
 ITI17    UJN    ITI20       CHECK FOR TRANSFER RESIDUE 
  
*         SB OVERFLOW HANDLER 
  
 OVFLW10  LDN    MRSBW       MAXIMUM REMAINING SB WORD COUNT
          IAM    SB+5,CH     INPUT TO END OF THE STATUS BUFFER
 OVFLW20  IAN    CH+UNH      INPUT A WORD OF OVERFLOW STATUS
          IJM    ITIGOOD,CH  IF CHANNEL INACTIVE
          UJN    OVFLW20     LOOP BACK TO INPUT ANOTHER WORD
  
*         CENTRAL MEMORY TRANSFERS
  
 CMW      RJM    CMWR        DO CENTRAL MEMORY TRANSFERS
          UJN    ITIEXT      EXIT 
  
*         END OF ALL TRANSFERS
  
 ITI20    RJM    CMWR20      END ALL TRANSFERS
          UJN    ITIEXT      EXIT 
  
 ITIGOOD  LDN    ZERO 
 ITIEXT   LJM    ITIX        RETURN 
  
 ITO      TITLE  INFORMATION TRANSFER OUT SEQUENCE
**        ITO - INFORMATION TRANSFER OUT SEQUENCE 
* 
*         THIS SUBROUTINE WILL OUTPUT TO THE CONTROLLER/DRIVE THE 
*         SPECIFIED COMMAND, PP DATA, OR CENTRAL MEMORY DATA BLOCK. 
* 
*         ENTRY - (A) = 0 ... COMMAND TRANSFER TYPE 
*                 (A) = 77... DATA TRANSFER TYPE
*                 (TOWC)= TRANSFER OUT WORD COUNT 
* 
*         CALLS - SENDFCN, EDS, DSL 
* 
*         USES - CMTWC, DCB+PLLE
* 
 ITO      SUBR               ENTRY/EXIT 
          ZJN    ITO10       IF COMMAND TRANSFER SEND FUNCTION
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    CMT         CHECK IF CM TRANSFER 
          NJP    CMR         IF CM TRANSFER 
          LDN    0           CLEAR LOOP COUNT 
          STD    TEMP2
          LDDL   DBLW        GET BUFFER WORD COUNT
          STDL   TEMP1       SAVE TEMPORARILY 
 ITO01    LDDL   TEMP1
          ADC    -PPBSZ      PP BUFFER SIZE 
          STDL   TEMP1
          MJN    ITO02       ALL WORDS HANDLED
          AOD    TEMP2       LOOP COUNTER 
          UJN    ITO01
  
 ITO02    LDC    PPBSZ       PP BUFFER SIZE 
          STDL   TOWC        TRANSFER WORD COUNT
          UJN    ITO11
  
 ITO10    LDN    1           SET LOOP COUNT TO 1
          STD    TEMP2
 ITO11    LDC    SWTFW       STREAMING WRITE TRANSFER FUNCTION
          IFNE   SCSPO,0,1
          LMML   STRF        SET/CLEAR STREAMING
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
  
*         COMMAND OR PP DATA OUTPUT TRANSFER
  
          LDDL   TSFOA       TRANSFER OUTPUT ADDRESS
          STML   TOA         STORE IN OUTPUT INSTRUCTION
          ACN    CH 
 ITO13    LDDL   TOWC        TRANSFER OUT WORD COUNT
  
***       NEXT INSTRUCTION GETS MODIFIED      *** 
  
          OAM    ZERO,CH     OUTPUT INFORMATION BLOCK 
 TOA      EQU    *-1         TRANSFER OUT ADDRESS 
  
          STDL   TEMP1       SAVE RESIDUE IF ANY
          NJN    ITO17       RESIDUE ERROR
          SOD    TEMP2       SUBTRACT ONE FROM LOOP COUNTER 
          ZJN    ITO17       DONE WITH OUTPUT 
          UJN    ITO13       DO NEXT BUFFER 
  
*         END OF ALL TRANSFERS
  
 ITO17    RJM    CMWR20 
 ITOEXT   LJM    ITOX        RETURN 
  
*         CENTRAL MEMORY OUTPUT DATA TRANSFER 
  
 CMR      RJM    CMWR        CENTRAL MEMORY TRANSFERS 
          UJN    ITOEXT      EXIT 
  
 LPW      TITLE  LOCATE PARAMETER WORD
**        LPW - LOCATE PARAMETER WORD 
* 
*         THIS SUBROUTINE WILL LOOK THROUGH THE ENTIRE STATUS BUFFER FOR
*         THE DESIRED PARAMETER ID FOUND IN (A) UPON ENTRANCE.  IF FOUND
*         THE (A) WILL BE ZERO UPON EXIT;  OTHERWISE IT WILL BE 77B.
* 
*         ENTRY - (A) = DESIRED PARAMETER ID
* 
*         EXIT - SB+PMW,TEMP1 = ADDRESS OF DESIRED PARAMETER ID WORD
*                (A) = 0 ... PARAMETER ID WAS FOUND 
*                (A) = 77B...PARAMETER ID WAS NOT FOUND 
* 
*         USES - SREG1, SREG2, TEMP1, TEMP2, TRPWDS 
* 
 LPW      SUBR               ENTRY/EXIT 
          STDL   SREG1       STORE DESIRED PARAMETER ID 
          LDN    ZERO 
          STDL   TEMP1       CLEAR PARAMETER RUNNING TOTAL WORD COUNT 
          LDML   SB          BYTE LENGTH OF RESPONSE PACKET 
          ADN    THREE
          SHN    MINUS1      SHIFT RIGHT 1 (DIVIDE BY 2)
          STML   TRPWDS      STORE RESPONSE PACKET WORD LENGTH
          SBN    FIVE        SUBTRACT 5 FOR COMMAND INFO & MAJOR STATUS 
          STDL   SREG2       STORE TOTAL NUMBER WORDS FOR PARAMETERS
 PMLOOP   LDML   SB+PMW,TEMP1 
          ZJN    PNOTFND     IF CURRENT PARAMETER ID WORD 0 ERROR EXIT
          STDL   TEMP2       SAVE ID WORD 
          LPC    LBMSK       MASK JUST PARAMETER ID 
          LMDL   SREG1
          ZJN    LPWEXIT     IF CURRENT ID AND DESIRED ID EQUAL 
          LDDL   TEMP1       CURRENT RUNNING TOTAL
          SBDL   SREG2       SUBTOTAL PARAMETER WORDS FROM RUN TOTAL
          PJN    PNOTFND     IF NO MORE PARAMETERS ERROR EXIT 
          LDDL   TEMP2       CURRENT ID WORD
          SHN    MINUS8      SHIFT RIGHT 8 BITS 
          LPC    LBMSK       ISOLATE PARAMETER BYTE COUNT 
          ADN    TWO
          SHN    MINUS1      SHIFT RIGHT 1 BIT (DIVIDE BY 2)
          RADL   TEMP1       REPLACE/ADD TO RUNNING TOTAL 
          UJN    PMLOOP      LOOP BACK TO PROCESS NEW CURRENT PARAM ID
  
 PNOTFND  LDN    ONES        NOT FOUND INDICATION 
 LPWEXIT  LJM    LPWX        RETURN 
  
*         IMPORTANT VALUES
  
 TRPWDS   CONL   0           TOTAL RESPONSE PACKET WORDS
  
          IFNE   SCSPO,0
 MCC      TITLE  MASTER CLEAR CHANNEL 
**        MCC - MASTER CLEAR CHANNEL
* 
*         THIS SUBROUTINE WILL PERFORM A MASTER CLEAR OF THE IPI CHANNEL. 
* 
*         ENTRY - NONE
*         CALLS - SENDFCN 
* 
*         USES - NONE 
* 
 MCC      SUBR               ENTRY/EXIT 
          IFNE   IOUOFF,0,3 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK IF I4 DRIVER ENABLED 
          NJN    MCC02       IF ENABLED DO I4 MASTER CLEAR
          IFNE   I0ON+IOUOFF,0,1
          MCLR   CH          MASTER CLEAR THE IPI CHANNEL 
          IFNE   IOUOFF,0,1 
          UJN    MCC03
  
          IFNE   I4ON+IOUOFF,0,2
 MCC02    LDN    MCI4        MASTER CLEAR I4 ADAPTER FUNCTION 
          RJM    SENDFCN     ISSUE ADAPTER FUNCTION 
          IFNE   I0ON,0,1 
 MCC03    DELAY  100D        DELAY 100 USEC 
          IFNE   I4ON+IOUOFF,0,2
 MCC03    LDC    100D 
          RJM    DELUS       DELAY (A) USEC 
          DCN    CH+UNH 
 MCC05    LDML   CLKIE       SET INTERNAL CLOCK (10 OR 25 MB) 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER/CHECK FOR ERR 
          IFNE   IOUOFF,0,3 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK IF I4 DRIVER ENABLED 
          ZJN    MCCEXT      EXIT IF NOT I4 
          IFNE   I4ON+IOUOFF,0,2
          LDML   PSEL        GET PORT SELECTION FUNCTION
          RJM    SENDFCN     SELECT AN I4 PORT
 MCCEXT   LJM    MCCX 
          ENDIF 
 MSR      TITLE  MASTER/SELECTIVE RESET 
**        MSR - MASTER/SELECTIVE RESET
* 
*         THIS SUBROUTINE WILL PERFORM A MASTER AND LOGICAL/SLAVE 
*         INTERFACE RESET OF THE CONTROLLER, AND INPUT THE ASYNCHRONOUS 
*         RESPONSE;  THEN CHECKS FOR THE PROPER SLAVE AND DRIVE STATUS. 
* 
*         ENTRY - (VFW)= LOGICAL INTERFACE OR SLAVE RESET FUNCTION WORD 
* 
*         CALLS - SENDFCN, RSPHDL, LPW, ORTCHK, DSL 
* 
*         USES - DCB+PLLE, TEMP1
* 
 MSR      SUBR               ENTRY/EXIT 
          LDN    FIFW        FORCE IDLE STATE FUNCTION WORD 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          IFNE   I0ON,0 
          DELAY  US100       DELAY 100 USEC 
          ELSE
          LDC    US100
          RJM    DELUS       DELAY 100 USEC 
          ENDIF 
          IFNE   IOUOFF,0 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK IF I4 DRIVER ENABLED 
          NJN    MSR2        IF I4 CLEAR I4 ERROR STATUS
          LDC    CLRLSI      THE CLEAR IPI ERROR REGISTER FUNCTION
          UJN    MSR3 
  
 MSR2     LDC    CLREI4      CLEAR I4 ERROR STATUS FUNCTION 
          ENDIF 
          IFNE   I0ON,0,1 
          LDC    CLRLSI      CLEAR IPI ERROR REGISTER FUNCTION
          IFNE   I4ON,0,1 
          LDC    CLREI4      CLEAR I4 ERROR STATUS FUNCTION 
 MSR3     RJM    SENDFCN     ISSUE ADAPTER FUNCTION 
          CFM    MSR5,CH     CLEAR CHANNEL ERROR FLAG 
 MSR5     LDC    RSOFW       RAISE SYNC OUT FOR MAINTENANCE MODE FUNC 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          IFNE   I0ON,0 
          DELAY  TENUS       DELAY 10 USEC
          ELSE
          LDN    TENUS
          RJM    DELUS       DELAY 10 USEC
          ENDIF 
  
*         SELECTIVE RESET 
  
          LDN    FIFW        FORCE IDLE STATE FUNCTION WORD 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          IFNE   I0ON,0 
          DELAY  TWENUS      DELAY 20 USEC
          ELSE
          LDN    TWENUS 
          RJM    DELUS       DELAY 20 USEC
          ENDIF 
          LDDL   VFW         SPECIFIED A-BUS RESET WORD 
          ADN    RSTFW       ADD RESET FUNCTION WORD
          RJM    SENDFCN     SEND RESET RAISE MASTER OUT
          IFNE   I0ON,0 
          DELAY  TWENUS      DELAY 20 USEC
          ELSE
          LDN    TWENUS 
          RJM    DELUS       DELAY 20 USEC
          ENDIF 
          LDDL   VFW         SPECIFIED A-BUS RESET WORD 
          ADN    RMSOF       ADD RAISE MASTER/SYNC OUT FUNCTION WORD
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          IFNE   I0ON,0 
          DELAY  TENUS       DELAY 10 USEC
          ELSE
          LDN    TENUS
          RJM    DELUS       DELAY 10 USEC
          ENDIF 
          LDDL   VFW         SPECIFIED A-BUS RESET WORD 
          ADN    DSRMF       ADD DROP SYNC OUT/KEEP MASTER OUT UP 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          IFNE   I0ON,0 
          DELAY  TWENUS      DELAY 20 USEC
          ELSE
          LDN    TWENUS 
          RJM    DELUS       DELAY 20 USEC
          ENDIF 
          LDDL   VFW         SPECIFIED A-BUS RESET WORD 
          ADN    FIFW        ADD FORCE IDLE FUNCTION DROP MASTER OUT
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    SLR         CHECK IF SLAVE RESET ENABLED 
          NJN    MSR10       IF SET WAIT 6 MIN FOR CLASS 1
          LDC    WCLSS1A     20 SEC/CLASS 1 ASYNC COUNT 
          UJN    MSR20       WAIT/RECEIVE ASYNC 
  
 MSR10    LDC    WLCL1A      6 MIN/CLASS 1 ASYNC DELAY CONSTANT 
 MSR20    RJM    RSPHDL      WAIT/RECEIVE ASYNC RESPONSE PACKET 
          NJN    MSRER       IF ERROR TEST RTBR 
          LDN    MEXPID      MACHINE EXCEPT PARAMETER ID
          RJM    ORTCHK      CHECK CM'S OPER AND READY TRANSITION 
          NJN    MSREXT      IF NOT FOUND  ERROR EXIT 
          RJM    DSL         DESELECT FROM THE CONTROLLER 
          NJN    MSREXT      EXIT IF ERROR
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    SLR
          ZJN    MSREXT      IF SLAVE RESET NOT ENABLED GOOD EXIT 
          LDC    WLCL1A      6 MIN ASYNC DELAY COUNT
          RJM    RSPHDL      WAIT DESIRED DRIVE'S ASYNC RESPONSE
          NJN    MSRER1      EXIT IF ERROR
          LDN    DMEXID      DRIVE MACHINE EXCEPT PARAMETER ID
          RJM    ORTCHK      CHECK DRIVE OPER AND READY TRANSITION
          NJN    MSREXT      EXIT IF ERROR
          RJM    DSL         DESELECT CONTROLLER
 MSREXT   LJM    MSRX        RETURN 
  
*         ERROR EXITS 
  
 MSRER    STML   MSRER2      SAVE ERROR CODE AWAY 
          LDDL   OPENFL      CHECK OPERATION FLAG 
          LPN    RTBR 
          ZJN    MSRER0      IF RTBR NOT SET ERROR
          LDML   MSRER2      ERROR CODE 
          UJN    MSREXT      IF RTBR SET EXIT NO ERROR
  
 MSRER0   LDML   MSRER2      ERROR CODE 
 MSRER1   STML   DCB+PLLE    CAPTURE/STORE 1ST LOW-LEVEL ERROR
          LDN    E11         NO ASYNC INTERR RECEIVED 
          UJN    MSREXT      EXIT 
  
 MSRER2   CONL   0           ERROR SAVE AREA
  
 ORTCHK   TITLE  OPERATIONAL AND READY TRANSITION CHECK 
**        ORTCHK - OPERATIONAL AND READY TRANSITION CHECK 
* 
*         THIS SUBROUTINE WILL SEARCH THE SB FOR THE DESIRED PARAMETER
*         ID.  WHEN FOUND, THE OPERATIONAL AND READY TRANSITION BITS ARE
*         CHECKED FOR BEING ON.  IF ONE OR NEITHER ARE UP, THEN AN ERROR
*         IS POSTED.
* 
*         ENTRY - (A) = DESIRED PARAMETER ID TO BE LOOKED FOR 
* 
*         EXIT - (A) = 0, NO ERRORS 
*                (A) NOT 0, ERROR OCCURRED
* 
*         CALLS - LPW 
* 
*         USES - COUNTER, TEMP1 
* 
 ORTCHK   SUBR               ENTRY/EXIT 
          STDL   COUNTER     SAVE PARAMETER ID
          RJM    LPW         LOCATE PARAMETER ID IN SB
          NJN    ORTER1      IF NOT FOUND ERROR EXIT
          AODL   TEMP1       INCREMENT THE PARAMETER WORD INDEX 
          LDML   SB+PMW,TEMP1   1ST MACHINE EXCEPTION WORD
          LPC    RSTCMMK     MASK FOR RESET STATUS
          LMC    OPLRDYT     CHECK IF OPERATIONAL AND READY ARE UP
          NJN    ORTER1      IF BOTH NOT UP ERROR EXIT
 ORTEXT   UJN    ORTCHKX     RETURN 
  
 ORTER1   LDDL   COUNTER     PARAMETER ID 
          SBN    MEXPID      COMPARE W/CONTROLLER MACHINE EXCEPTION 
          NJN    ORTER2      GET DRIVE ERROR
          LDC    CNOR        CONTROLLER NOT OP'L AND READY
          UJN    ORTEXT      EXIT 
  
 ORTER2   LDC    DNOR        DRIVE NOT OP'L AND READY 
          UJN    ORTEXT      EXIT 
  
 RDS      TITLE  RECEIVE DATA STREAM
**        RDS - RECEIVE DATA STREAM 
* 
*         THIS SUBROUTINE WILL READY THE IPI BUS FOR A DATA STREAMING 
*         TRANSFER INPUT, INPUT THE SPECIFIED BLOCK OF DATA, INPUT THE
*         SLAVE STATUS BYTE, AND THEN DESELECTS THE CONTROLLER. 
* 
*         CALLS - BBBDT 
* 
*         USES - CURMO, TIDA, SECCTR, 
* 
 RDS      SUBR               ENTRY/EXIT 
          LDN    RWDF        R/W DATA FLAG BIT
          STDL   CURMO       STORE IN CURRENT MAJOR OPERATION 
          LDC    DITFW       DATA INPUT TRANSFER FUNCTION WORD
          RJM    BBBDT       BURST-BY-BURST DATA TRANSFER 
          UJN    RDSX        RETURN 
  
 RIPIER   TITLE  READ IPI ERROR REGISTERS 
**        RIPIER - READ IPI ERROR REGISTERS 
* 
*         THIS SUBROUTINE WILL SEND FUNCTIONS TO THE IPI ADAPTER TO 
*         READ THE IPI ERROR REGISTER AND STORE ITS CONTENTS. IF
*         ASSEMBLED FOR AN I4 IT WILL ALSO READ THE IPI STATUS
*         REGISTER, ERROR STATUS REGISTER AND THE OPERATIONAL 
*         STATUS REGISTER AND STORE THEIR CONTENTS. IT WILL THEN
*         ISSUE THE FUNCTION TO CLEAR THE REGISTERS.
* 
*         ENTRY - (A) = CHANNEL ERROR CODE TO SAVE
* 
*         CALLS - SENDFCN 
* 
*         USES - DCB+LLE, DCB+LIER, DCB+LISR, DCB+LOSR, DCB+LESR, 
*                DCB+GS 
* 
 RIPIER   SUBR               ENTRY/EXIT 
          STML   DCB+PLLE    STORE THE CHANNEL ERROR
          IFNE   IOUOFF,0,3 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK IF I4 DRIVER ENABLED 
          ZJN    RIPI01      IF NOT I4
          IFNE   I4ON+IOUOFF,0
          LDC    RIPIST      READ IPI STATUS REGISTER FUNCTION
          RJM    SENDFCN     ISSUE THE ADAPTER FUNCTION 
          ACN    CH 
          IAN    CH          INPUT IPI STATUS REGISTER
          STML   DCB+LISR    STORE IN DCB 
          LDC    RDERST      READ ERROR STATUS REGISTER 
          RJM    SENDFCN     ISSUE THE ADAPTER FUNCTION 
          ACN    CH 
          IAN    CH          INPUT IPI STATUS REGISTER
          STML   DCB+LESR    STORE IN DCB 
          LDC    ROPLS       READ OPERATIONAL STATUS REGISTER FUNCTION
          RJM    SENDFCN     ISSUE THE ADAPTER FUNCTION 
          ACN    CH 
          IAN    CH          INPUT IPI STATUS REGISTER
          STML   DCB+LOSR    STORE IN DCB 
          ENDIF 
 RIPI01   LDC    RIERFW      THE READ IPI ERROR REGISTER FUNCTION 
          RJM    SENDFCN     ISSUE THE ADAPTER FUNCTION 
          ACN    CH 
          IAN    CH          INPUT IPI ERROR REGISTER 
          STML   DCB+LIER    STORE IN DCB 
          ZJN    RIPI10      IF NO ERROR EXIT 
          LDC    ADPERR      IPI ADAPTER ERROR CODE 
          STML   DCB+GS      STORE IN DCB GENERAL STATUS
          IFNE   IOUOFF,0 
 RIPI10   LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    I4          CHECK IF I4 DRIVER ENABLED 
          NJN    RIPI20      IF I4 CLEAR I4 STATUS
          LDC    CLRLSI      THE CLEAR IPI ERROR REGISTER FUNCTION
          UJN    RIPI30 
  
 RIPI20   LDC    CLREI4      CLEAR I4 ERROR STATUS FUNCTION 
          ENDIF 
          IFNE   I0ON,0,1 
 RIPI10   LDC    CLRLSI      CLEAR IPI ERROR REGISTER FUNCTION
          IFNE   I4ON,0,1 
 RIPI10   LDC    CLREI4      CLEAR I4 ERROR STATUS FUNCTION 
 RIPI30   RJM    SENDFCN     ISSUE THE ADAPTER FUNCTION 
          LDML   DCB+PLLE    CHANNEL ERROR
          STML   DCB+LLE     STORE AS LATEST ERROR
          LJM    RIPIERX     RETURN 
  
 RQTS     TITLE  REQUEST TRANSFER SETTINGS
**        RQTS - REQUEST TRANSFER SETTINGS
* 
*         THIS SUBROUTINE WILL SEND A REQUEST TRANSFER SETTINGS WORD
*         TO THE CONTROLLER, THEN INPUT THE TRANSFER SETTINGS BYTE FROM 
*         THE CONTROLLER. 
* 
*         ENTRY - (SLAVE)= SHIFTED CONTROLLER ADDRESS 
* 
*         CALLS - SENDFCN, FCLT 
* 
*         USES - CHGXSM, TSW
* 
 RQTS     SUBR               ENTRY/EXIT 
          LDN    ZERO 
          STDL   CHGXSM      CLEAR CHANGE TRANSFER MODE REGISTER
          LDDL   SLAVE       SHIFTED CONTROLLER ADDRESS 
          LMC    RTSFW       XOR W/REQ TRANSFER SETTINGS FUNCTION WORD
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          ACN    CH 
          RJM    FCLT        WAIT FOR SLAVE-IN TO COME UP 
          NJN    RQTER1      EXIT IF ERROR
          IAN    CH          INPUT TRANSFER SETTING BYTE
          LPC    LBMSK       MASK LOWER BYTE
          STDL   TSW         STORE IT AWAY
          DCN    CH+UNH 
          SFM    RQTER2,CH   IF CHANNEL ERROR FLAG SET ERROR EXIT 
 RQTS1    RJM    DSL         DESELECT BY DROPPING MASTER OUT
 RQTEXT   UJN    RQTSX       RETURN 
  
*         ERROR EXITS 
  
 RQTER1   LDC    E91         SLAVE-IN DID NOT COME UP 
          UJN    RQTEXT      EXIT 
  
 RQTER2   LDC    E92         CH ERR AFT TRANSFER SETTINGS BYTE RECEIVED 
          RJM    RIPIER      LOG ERROR AND READ IPI ERROR REGISTER
          UJN    RQTEXT      EXIT 
  
 RRP      TITLE  RECEIVE RESPONSE PACKET
**        RRP - RECEIVE RESPONSE PACKET 
* 
*         THIS SUBROUTINE WILL SELECT THE CONTROLLER, PERFORM THE BUS 
*         CONTROL SEQUENCE FOR A STATUS INPUT TRANSFER, INPUT THE STATUS
*         WORDS TO THE PP STATUS BUFFER, AND THEN INPUT THE SLAVE STATUS
*         BYTE. 
* 
*         CALLS - SELCT, BSC, ITI, EDS
* 
*         USES - CURMO
* 
 RRP      SUBR               ENTRY/EXIT 
          LDN    RRPF 
          STDL   CURMO       SET CURRENT MAJOR OPERATION BIT
          RJM    SELCT       SELECT CONTROLLER
          NJN    RRPEXT      EXIT IF ERROR
          LDC    RPTFW       RECEIVE PACKET TRANSFER FUNCTION WORD
          RJM    BSC         PERFORM BUS CONTROL SEQUENCE 
          NJN    RRPEXT      EXIT IF ERROR
          LDN    ZERO 
          RJM    ITI         INFORMATION TRANSFER IN
          NJN    RRPEXT      EXIT IF ERROR
          LDC    GMSFW       GOOD MASTER STATUS FUNCTION
          RJM    EDS         ENDING STATUS SEQUENCE 
 RRPEXT   UJN    RRPX        RETURN 
  
 RSPHDL   TITLE  RESPONSE HANDLER 
**        RSPHDL - RESPONSE HANDLER 
* 
*         THIS SUBROUTINE WILL WAIT FOR THE GIVEN CLASS INTERRUPT,
*         INPUT THE RESPONSE PACKET, AND COMPARE  THE CLASS AND 
*         TYPE OF INTERRUPT RECEIVED WITH THE EXPECTED VALUES 
*         PROVIDED BY THE CALLING ROUTINE UPON ENTRY. 
* 
*         ENTRY - (A)[LOWER 6]= DESIRED CLASS OF INTERRUPT
*                    [UPPER] = NUMBER OF SECONDS TO WAIT FOR INTERRUPT
* 
*         EXIT - (A)=00 ... CORRECT CLASS OF INTERRUPT RECEIVED 
*                (A)=77(8)... INTERRUPT NOT PRESENT YET 
*                (A) NON 00 ... ERROR CODE OF FAILURE 
* 
*         CALLS - SENDFCN, FCLT, RRP, LPW, DSL
* 
*         USES - EXPCLI,TEMP1,TEMP2, RSPLCTR,COUNTER,DCB+LRIS, MAJORST
* 
 RSPHDL   SUBR               ENTRY/EXIT 
          STDL   EXPCLI      STORE THE EXPECTED CLASS INTERRUPT 
          SHN    MINUS6      POSITION WAIT CONSTANT (IN SECONDS)
          STDL   RSPLCTR     STORE IN THE SECONDS LOOP COUNTER
 RSPOLP   LDC    RQIINLC     REQ INTERR INNER LOOP COUNT (1 SEC)
          STDL   COUNTER     STORE IN INNER LOOP COUNTER
 RSPLOOP  LDC    RQIFW       REQUEST INTERRUPTS FUNCTION
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          IFNE   I0ON,0 
          DELAY  TWENUS      DELAY 20 USEC
          ELSE
          LDN    TWENUS 
          RJM    DELUS       DELAY 20 USEC
          ENDIF 
          ACN    CH+UNH 
          RJM    FCLT        WAIT FOR SLAVE INTERRUPT BYTE
          ZJN    RSPH1       IF NO ERROR
 RSPER1   LDC    E61         SLAVE INTERRUPT BYTE NOT PRESENT 
 RSPEXT1  UJN    RSPHDLX     EXIT 
  
 RSPH1    IAN    CH          INPUT SLAVE INTERRUPT BYTE 
          LPC    LBMSK       MASK LOWER BYTE
          STML   DCB+LRIS    STORE IT AWAY
          DCN    CH+UNH 
          SFM    RSPER8,CH   IF CHANNEL ERROR FLAG SET
          LDN    DMOF        DROP MASTER OUT FUNCTION 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          LDML   DCB+LRIS    INTERRUPT STATUS 
          LPDL   CMMSK       COMPARE W/CONTROLLER MASK
          NJN    RQIGOOD     IF INTERRUPT PRESENT INPUT RESPONSE
          LDDL   EXPCLI      WAIT CONSTANT/EXPECT CLASS INTERRUPT 
          SHN    MINUS6      POSITION THE WAIT VALUE (IN SECS)
          ZJN    RSPER2      IF WAIT VALUE 0 EXIT TASK BUSY 
          LDDL   EXPCLI      EXPECTED CLASS INTERRUPT 
          LPN    MASK3       CLEAR UPPER BITS 
          SBN    CLASS2      CHECK IF EXP CLASS = 2 
          ZJN    RSPH3       IF CLASS 2 DECREMENT COUNTER 
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    RTBR        CHECK TASK RELEASE BIT 
          NJN    RSPER2      IF SET RELEASE TASK
 RSPH3    SODL   COUNTER     DECREMENT INNER LOOP COUNT 
          ZJN    RSPH5       IF 1 SEC TMO DECREMENT SECONDS CTR 
          LJM    RSPLOOP     LOOP BACK TO RE-REQUEST INTERRUPTS 
  
*         TASK BUSY NOT AN ERROR
  
 RSPER2   LDC    TSKBSY      TASK BUSY CODE 
 RSPEXT2  LJM    RSPHDLX     EXIT 
  
*         CHANNEL ERROR EXIT
  
 RSPER8   LDC    E62         CHANNEL ERR AFTER SLAVE INTERRUPT RECEIVED 
          RJM    RIPIER      LOG ERROR AND READ IPI ERROR REGISTER
          UJN    RSPEXT2     EXIT 
  
 RSPH5    SODL   RSPLCTR     DECREMENT SECONDS LAP COUNTER
          ZJN    RSPER3      IF 0 ERROR EXIT
          LJM    RSPOLP      RESET INNER LOOP COUNTER 
  
 RSPER3   LDC    E63         NO CONTR INTERR WITHIN ALOTTED TIME
          UJN    RSPEXT2     EXIT 
  
 RQIGOOD  RJM    RRP         INPUT RESPONSE PACKET
          NJN    RSPEXT2     EXIT IF ERROR
          LDML   SB+MS       MAJOR STATUS 
          STDL   MAJORST     STORE FOR QUICKER REFERENCE
          LPC    UNBMSK      MASK RESPONSE TYPE 
          LMC    TRSNOT      COMPARE W/ TRANSFER NOTIFICATION 
          NJN    RSPH7       IF NOT GET MAJOR STATUS
  
*         CLASS 2 INTERRUPT RECEIVED
  
          LDDL   EXPCLI      EXPECTED CLASS INTERRUPT 
          LPN    MASK3       MASK ONLY INTERRUPTS 
          SBN    CLASS2 
          ZJN    RSPEXT2     IF CLASS 2 GOOD EXIT 
 RSPER4   LDC    UC2REC      UNEXPECTED CLASS 2 INTERR RECEIVED 
 RSPEXT3  UJN    RSPEXT2     EXIT 
  
 RSPH7    LDDL   MAJORST     MAJOR STATUS 
          LPC    UNBMSK      MASK RESPONSE TYPE 
          LMN    SCCR        COMPARE W/ STD COMMAND COMPLETE RESPONSE 
          NJN    RSPH9       IF NOT GET MAJOR STATUS
  
*         CLASS 1 INTERRUPT (COMMAND COMPLETE) RECEIVED 
  
          LDDL   EXPCLI      EXPECTED CLASS INTERRUPT 
          LPN    MASK4       MASK LOWER 4 BITS
          SBN    CLASS1 
          ZJN    RSPEXT3     IF CLASS 1 GOOD EXIT 
 RSPER5   LDC    UC1REC      UNEXPECTED CMD COMPLETE RESPONSE RECEIVED
          UJN    RSPEXT3     EXIT 
  
  
 RSPH9    LDDL   MAJORST     MAJOR STATUS 
          LPC    UNBMSK      MASK RESPONSE TYPE 
          LMC    ARMS        IF NOT ASYNCHRONOUS RESPONSE 
          ZJN    RSPH11 
 RSPER6   LDC    URTREC      UNKNOWN RESPONSE TYPE RECEIVED 
 RSPEXT4  UJN    RSPEXT3     EXIT 
  
  
*         ASYNCHRONOUS RESPONSE RECEIVED
  
 RSPH11   LDML   SB+SA       RECEIVED CM/DRIVE ADDRESS
          LPC    LBMSK       SAVE DRIVE ADDRESS ONLY
          STDL   TEMP2       STORE IT 
          LMML   DCB+DA      COMPARE W/DESIRED DRIVE ADDRESS
          NJN    RSPH13      IF NOT GET ACTUAL ASYNC DR ADD 
          LDDL   EXPCLI      EXPECTED CLASS INTERRUPT 
          LPN    ASYNEXP
          NJN    RSPGOOD     IF ASYNC RESPONSE
 RSPER7   LDC    UARREC      UNEXPECTED ASYNC RESPONSE RECEIVED 
          UJN    RSPEXT4     EXIT 
  
 RSPH13   LDDL   TEMP2       ACTUAL ASYNC DRIVE ADDRESS 
          LMC    LBMSK       COMPARE W/FF 
          NJN    RSPH15      IF NOT TAKE RETRY LOOP 
          LDDL   EXPCLI      EXPECTED CLASS INTERRUPT 
          LPN    ASYNEXP
          ZJN    RSPH14      IF NOT ASYNC RESPONSE
 RSPGOOD  LDN    ZERO        ERROR-FREE INDICATOR 
 RSPEXT5  UJN    RSPEXT4     RETURN 
  
 RSPH14   LDN    MMEXID      MSG/MICRO EXCEPTION PARAMETER ID 
          RJM    LPW         FIND THE PARAMETER 
          NJN    RSPER7      IF NOT FOUND ERROR EXIT
          LDN    DPINDX      DIAG PROGRESS INDEX
          RADL   TEMP1       ADD IT TO PARAMETER INDEX
          LDML   SB+PMW,TEMP1   MSG/MICROCODE EXCEPTION WORD
          LPC    DGPROG      CHECK FOR DIAG IN PROGRESS MSG 
          NJN    RSPH15      IF SET - DESEL AND WAIT FOR INTERRUPT
          LDML   SB+PMW,TEMP1   MSG/MICROCODE EXCEPTION WORD
          LPC    DGEND
          ZJN    RSPER7      IF NO DIAGNOSTIC ENDED MSG ERROR EXIT
 RSPH15   RJM    DSL         DESELECT THE CONTROLLER
          NJN    RSPEXT5     EXIT IF ERROR
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPN    RTBR        RELEASE TASK BEFORE RESPONSE 
          NJP    RSPER2      IF SET TASK BUSY EXIT
          LJM    RSPH3       CONTROLLER WAITING FOR ANOTHER INTERRUPT 
  
          IFNE   SCSPO,0
 SCAP     TITLE  SEND CONTROLLER ATTRIBUTES COMMAND PACKET
**        SCAP - SEND CONTROLLER ATTRIBUTES COMMAND PACKET
* 
*         THIS SUBROUTINE WILL SEND ATTRIBUTES COMMAND PACKET.
* 
*         ENTRY - (A)= PARAMETER WORD 1 0=STREAM 1=INTERLOCK
* 
*         CALLS - COWMRI
* 
*         USES - NONE 
* 
 SCAP     SUBR               ENTRY/EXIT 
          ADC    SACP5       SET PARAM 1 OF ATTRIBUTE COMMAND PACKET
          STML   SACP+CT1    ADDRESS OF PARAM 1 ATTRIBUTE COMMAND PACKET
          LDC    SACP        ADDRESS OF ATTRIBUTE COMMAND PACKET
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    ATTRCWL     ATTRIBUTE COMMAND'S WORD LENGTH
          RJM    CORI        ISSUE ATTRIBUTE COMMAND/RECEIVE RESPONSE 
          UJN    SCAPX       EXIT 
          ENDIF 
  
 SCP      TITLE  SEND COMMAND PACKET
**        SCP - SEND COMMAND PACKET 
* 
*         THIS SUBROUTINE WILL PREPARE THE IPI BUS INTERFACE FOR A
*         COMMAND OUT TRANSFER, TRANSFER CONTENTS OF SPECIFIED
*         COMMAND PACKET TO THE CONTROLLER, INPUT THE SLAVE STATUS
*         BYTE, AND DESELECTS THE CONTROLLER. 
* 
*         ENTRY - (A)= COMMAND PACKET LENGTH IN WORDS 
* 
*         CALLS - BSC, ITO, EDS, DSL
* 
*         USES - TOWC, CURMO
* 
 SCP      SUBR               ENTRY/EXIT 
          STDL   TOWC        STORE THE TRANSFER OUT WORD COUNT
          LDN    SCPF 
          STDL   CURMO       SET CURRENT OPERATION BIT
          LDC    SCTFW       THE SEND COMMAND TRANSFER FUNCTION WORD
          RJM    BSC         PERFORM BUS CONTROL SEQUENCE 
          NJN    SCPEXT      EXIT IF ERROR
          LDN    ZERO        INDICATE COMMAND TRANSFER TYPE 
          RJM    ITO         INFORMATION TRANSFER OUT 
          NJN    SCPEXT      EXIT IF ERROR
          LDC    GMSFW       GOOD MASTER STATUS FUNCTION
          RJM    EDS         ENDING STATUS SEQUENCE 
          NJN    SCPEXT      EXIT IF ERROR
          RJM    DSL         DESELECT CONTROLLER
 SCPEXT   UJN    SCPX        RETURN 
  
 SDS      TITLE  SEND DATA STREAM 
**        SDS - SEND DATA STREAM
* 
*         THIS  SUBROUTINE WILL READY THE IPI BUS FOR A DATA STREAMING
*         TRANSFER OUTPUT, OUTPUTS THE SPECIFIED DATA BLOCK, INPUTS THE 
*         SLAVE STATUS BYTE, AND THEN DESELECTS THE CONTROLLER. 
* 
*         ENTRY - (DWC)= DATA COUNT IN 16-BIT WORDS 
* 
*         CALLS - BBBDT 
* 
*         USES - CURMO, TSFOA, TOWC, SECCTR 
* 
 SDS      SUBR               ENTRY/EXIT 
          LDN    RWDF        R/W DATA FLAG BIT
          STDL   CURMO       STORE IN CURRENT MAJOR OPERATION 
          LDML   DCB+FWA1    STARTING PP DATA WORD ADDRESS
          STDL   TSFOA       STORE IN TRANSFER OUT ADDRESS
          LDDL   DBLW        DATA WORD COUNT FOR SINGLE BURST 
          STDL   TOWC        SAVE IN TRANSFER OUT WORD COUNT CELL 
          LDC    DOTFW       DATA OUTPUT TRANSFER FUNCTION WORD 
          RJM    BBBDT       BURST-BY-BURST DATA TRANSFER 
          UJN    SDSX        RETURN 
  
 SEL      TITLE  SELECT CONTROLLER
**        SEL - SELECT CONTROLLER 
* 
*         THIS SUBROUTINE WILL SELECT THE SPECIFIED CONTROLLER. 
* 
*         ENTRY - (SLAVE)= SHIFTED CONTROLLER ADDRESS 
*                 (CMMSK)= CONTROL MODULE (CONTROLLER) ADDRESS MASK 
*                 (SEE RELATED FUNCTION ... 2)
* 
*         CALLS - SENDFCN, FCLT, RQTS 
* 
*         USES - DCB+LSS, CHGXSM, TEMP1 
* 
 SELCT    SUBR               ENTRY/EXIT 
          RJM    RQTS        REQUEST TRANSFER SETTINGS BYTE 
          NJN    SELCTX      EXIT IF ERROR
          IFNE   SCSPO,0
          LDDL   OPENFL      OPERATION ENABLE FLAGS 
          LPC    ILE         INTERLOCK MODE ENABLED 
          ZJN    SEL1        IF NOT INTERLOCK MODE
          RJM    MCC         MASTER CLEAR THE CHANNEL 
          ENDIF 
 SEL1     LDDL   TSW         TRANSFER SETTINGS WORD 
          LPN    TSBIT       CHECK TRANSFER SETTINGS BIT
          IFNE   SCSPO,0
          NJN    SEL3        IF STREAMING CHECK STREAMING/INTERLOCK FLAG
          LDML   STRF        GET STREAMING/INTERLOCK FLAG 
          NJN    SEL7        CONTROLLER + FLAG IN INTERLOCK DONT CHANGE 
          UJN    SEL5        CONTROLLER IN INTERLOCK FLAG SET TO STREAM 
  
 SEL3     LDML   STRF        GET STREAMING/INTERLOCK FLAG 
          ZJN    SEL7        CONTROLLER + FLAG IN STREAMING DONT CHANGE 
          ELSE
          NJN    SEL7        IF STREAMING DO NOT CHANGE 
          ENDIF 
 SEL5     LDN    ONES 
          STDL   CHGXSM      SET CHANGE TRANSFER MODE FLAG
 SEL7     LDDL   SLAVE       SHIFTED CONTROLLER ADDRESS 
          LMN    SLF         XOR WITH SELECT FUNCTION 
          STDL   TEMP1       SAVE SELECT WORD 
          LDDL   CHGXSM      CHANGE TRANSFER MODE FLAG
          ZJN    SEL10       IF NOT SET DO NOT CHANGE 
          LDC    CGXSFM      CHANGE TRANSFER MODE BIT 
          RADL   TEMP1       OR THE BIT INTO THE SELECT FUNCTION WORD 
          LDN    ZERO 
          STDL   CHGXSM      CLEAR CHANGE TRANSFER MODE FLAG
 SEL10    LDDL   TEMP1       DESIRED SELECT FUNCTION WORD 
          RJM    SENDFCN     SEND FUNCTION TO IPI ADAPTER 
          ACN    CH 
          RJM    FCLT        WAIT FOR SLAVE IN TO COME UP 
          NJN    SELER1      SLAVE IN TMO ERROR 
          IAN    CH          INPUT SELECT STATUS WORD 
          LPC    LBMSK       MASK LOWER BYTE
          STML   DCB+LSS     SAVE STATUS
          DCN    CH+UNH 
          SFM    SELER3,CH   IF CHANNEL ERROR FLAG SET
          SBDL   CMMSK       COMPARE AGAINST EXPECTED ADDRESS 
          NJN    SELER2      EXIT IF ERROR
 SELEXT   LJM    SELCTX      RETURN 
  
*         ERROR EXITS 
  
 SELER1   LDN    E21         SLAVE-IN UP TMO ERROR (NO SEL STATUS)
          UJN    SELEXT      EXIT 
  
 SELER2   LDN    E22         UNKNOWN CONTROLLER ADDRESS ERROR 
          UJN    SELEXT      EXIT 
  
 SELER3   LDN    E23         CHANNEL ERROR AFTER SELECT STATUS RECEIVED 
          RJM    RIPIER      LOG ERROR AND READ IPI ERROR REGISTER
          UJN    SELEXT      EXIT 
  
 SENDFCN  TITLE  SEND FUNCTION TO IPI ADAPTER 
**        SENDFCN - SEND FUNCTION TO IPI ADAPTER
* 
*         THIS SUBROUTINE WILL SEND THE FUNCTION IN THE A-REGISTER
*         TO THE IPI ADAPTER.  IF THE CHANNEL IS ACTIVE BEFORE OR AFTER 
*         THE FUNCTION HAS BEEN SENT, THEN AN ERROR CODE IS LOADED IN 
*         THE A-REGISTER UPON EXIT. 
* 
*         ENTRY - (A) = FUNCTION CODE FOR IPI ADAPTER 
* 
*         EXIT - (A) = 0, NO ERRORS 
*                (A) NOT 0, ERROR OCCURRED
* 
*         USES - DCB+LFCN 
* 
 SENDFCN  SUBR               ENTRY/EXIT 
          STML   DCB+LFCN    SAVE IPI ADAPTER FUNCTION
          AJM    SFERB,CH    IF CHANNEL ACTIVE ON ENTRY ERROR EXIT
 SMPCH    FAN    CH          SEND FUNCTION TO IPI ADAPTER 
          IFNE   I0ON,0 
          DELAY  ONEUS       DELAY 1 USEC 
          ELSE
          LDN    ONEUS
          RJM    DELUS       DELAY 1 USEC 
          ENDIF 
          AJM    SFERA,CH    IF CHANNEL ACTIVE AFTER FUNCTION ERROR EXIT
          LDN    ZERO        INDICATE NO ERRORS 
 SFEXT    UJN    SENDFCNX    RETURN 
  
*         ERROR EXITS 
  
 SFERB    LDN    FCNERRB     FUNCTION ERROR B (BEFORE)
          UJN    SFER        STORE FUNCTION ERROR 
  
 SFERA    LDN    FCNERRA     FUNCTION ERROR A (AFTER) 
 SFER     STML   DCB+LLE     STORE FUNCTION ERROR 
          LJM    IPID130     RECORD FATAL ERROR; EXIT 
  
 WRDO     TITLE  WRITE OR READ DATA OPERATION 
**        WRDO - WRITE OR READ DATA OPERATION 
* 
*         THIS SUBROUTINE WILL SEND THE PREDEFINED COMMAND PACKET TO THE
*         CONTROLLER IN ORDER TO START A WRITE  OR  READ DATA OPERATION.
*         AFTER  A  SUCCESSFUL TRANSFER, THE RESPONSE PACKET IS INPUTTED
*         AND CHECKED FOR A STANDARD COMMAND COMPLETION RESPONSE. 
* 
*         EXIT - (A) = 0 ... ERROR-FREE OPERATION 
*          (A) NOT 0 . AN ERROR HAS OCCURRED
* 
*         CALLS - SCP, RSPHDL, RDS, SDS, CSCHK
* 
*         USES - TSFOA
* 
 WRDO     SUBR               ENTRY/EXIT 
          STDL   BURDIR      SET BURST DIRECTION
          IFNE   BUFRDO+BUFWRO,0
          LDML   DCB+TSK     CURRENT TASK 
          SBN    TSK9CS      COMPARE TASK 9 (READ FROM CONTROLLER BUFF) 
          ZJN    WRDO10      IF READ FROM CONTROLLER BUFFER 
          SBN    TSK10CS-TSK9CS  COMPARE TASK 10 (WRITE TO CONT BUFF) 
          ZJN    WRDO10      IF WRITE TO CONTROLLER BUFFER
          ENDIF 
          IFNE   RDPLO,0
          LDML   DCB+TSK     CURRENT TASK 
          SBN    TSK21CS     COMPARE TASK 21(READ PERFORMANCE LOG)
          ZJN    WRDO11      IF READ PERFORMANCE LOG
          ENDIF 
          IFNE   BUFRDO+BUFWRO+RDPLO,0,1
          NJN    WRDO15      IF NOT 
          IFNE   BUFRDO+BUFWRO,0
 WRDO10   LDC    CTCP        COMMAND PACKET ADDRESS 
          STDL   TSFOA       STORE IN ITO'S TRANSFER OUT ADDRESS
          LDN    CTCPWL      WRITE PACKET COMMAND WORD LENGTH 
          UJN    WRDO20      SEND COMMAND PACKET
  
          ENDIF 
          IFNE   RDPLO,0
 WRDO11   LDC    RPLCP       ADDRESS OF READ PERFORMANCE LOG CMD PACKET 
          STDL   TSFOA       STORE INTO ITO'S TRANSFER OUT ADDRESS
          LDN    RPLCPL      READ PERFORMANCE LOG COMMAND'S WORD LENGTH 
          UJN    WRDO20      SEND COMMAND PACKET
          ENDIF 
  
 WRDO15   LDC    CP          COMMAND PACKET ADDRESS 
          STDL   TSFOA       STORE IN ITO'S TRANSFER OUT ADDRESS
          LDN    NCWL        STANDARD COMMAND PACKET WORD LENGTH
 WRDO20   RJM    SCP         ISSUE READ COMMAND 
          NJN    WRDOEXT     EXIT IF ERROR
          LDC    WCLASS2     CLASS 2 INTERRUPT FLAG 
          RJM    RSPHDL      WAIT/RECEIVE RESPONSE PACKET 
          NJN    WRDOEXT     EXIT IF ERROR
          LDDL   BURDIR      GET DIRECTION FLAG 
          ZJN    WRDO30      IF A READ
          RJM    SDS         WRITE DATA STREAM
          UJN    WRDO31      CONTINUE 
 WRDO30   RJM    RDS         READ DATA STREAM 
 WRDO31   NJN    WRDOEXT     EXIT IF ERROR
          LDC    WCLASS1     CLASS 1 INTERRUPT FLAG 
          RJM    RSPHDL      WAIT/RECEIVE RESPONSE PACKET 
          NJN    WRDOEXT     EXIT IF ERROR
          RJM    CSCHK       CHECK IF COMMAND WAS SUCCESSFUL
 WRDOEXT  LJM    WRDOX       RETURN 
  
*         RESET CHANNEL MACROS
  
          RSTC
  
*         CHANNEL INSTRUCTION TABLE 
  
 CHTA     CHTB               START OF CHANNEL INSTRUCTION TABLE 
  
*         END OF PROGRAM
  
*IF -DEF,NOS,4
*IF -DEF,MVE
          IF     -DEF,QUAL$,1 
          QUAL   *
*ENDIF
          BASE   *
          ENDX
