      IFN 
      HED ** D.37A: BCS BUS I/O DRIVER ** 
      NAM D.37A  59310-60020 REV.C,  760227 
      XIF 
      IFZ 
      HED ** D.37B: BCS BUS I/O DRIVER ** 
      NAM D.37B  59310-60021 REV.C,  760227 
      XIF 
      ENT D.37,I.37 
      EXT .BUFR 
      IFZ 
      EXT DMAC1,DMAC2,IOERR 
      XIF 
      SKP 
******************************************* 
*                                         * 
***  I N I T I A T O R   S E C T I O N  *** 
*                                         * 
******************************************* 
*     ENTER WITH                          * 
*     A = ADDR OF WD1 OF EQT ENTRY
*     B = ADDR OF WD2 OF I/O REQUEST
* 
*     EXIT VIA  D.37,I WITH 
*     A = 0    REQUEST INITIATED
*     A = 1    REQUEST REJECTED REASON IN B 
*     B15 = 1  THE DRIVER IS BUSY OR
*              THE DEVICE IS BUSY 
*     B0  = 1  DMA CHANEL(S) BUSY 
*     B15-B0=0 <REQUEST CODE> ILLEGAL 
* 
*     EXIT TO IOERR IF DMA REQUEST AND NOT AVAIALBLE IN SYSTEM
*     A=3      DMA REQUESTED NOT IN SYSTEM
*     B15-B0   ADDRESS OF WD1 OF USER CALL
* 
D.37  NOP           ENTRY FROM IOC
      STA EQTAD     SAVE ADDR OF EQT WD1
      STB REQAD     SAVE ADDR OF REQUEST WD2
* 
*     GET <REQUEST CODE> FROM USER CALL 
* 
      LDA REQAD,I   GET WD2 OF USER REQUEST 
      AND =B177700  ISOLATE <REQUEST CODE>
* 
*     TEST FOR CLEAR REQUEST
* 
      SZA,RSS       TEST <FC> FOR CLEAR REQUEST 
      JMP CLEAR     YES: GO PROCESS CLEAR REQUEST 
* 
*     TEST IF DRIVER CONTINUATOR SECTION IS BUSY
* 
      LDB DVRBF     GET DRIVER BUSY FLAG
      SSB           TEST IF BUSY
      JMP REJRQ     YES: GO TO REJECT EXIT,B=100000 
*                                   NO:CONTINUE 
* 
*     ISOLATE <FUNCTION CODE> 
* 
GFC   ALF           PUT FUNCTION BITS INTO BITS 0-3 
      AND =B17      ISOLATE <FUNCTION CODE> 
      STA FCODE     SAVE IT 
* 
*     TEST FOR LEGAL <FUNCTION CODE>
* 
*     NOTE:ALL <FUNCTION CODES> 1,2 &3 ARE LEGAL
*          FOR THIS DRIVER
* 
* 
*     GET <SC> FROM EQT AND TEST IF NEW CH #
* 
      LDA EQTAD,I   GET WD 1 FROM EQT 
      AND =B77      ISOLATE SC BITS 
      CPA OLDSC     IS CURRENT SC = TO OLD SC 
      JMP X.1       YES: BYPASS CONFIGURATION SECTION 
*                                   NO: RECONFIGURE ALL I/O INSTUCTIONS 
* 
*     CONFIGURE I/O INSTRUCTIONS
* 
      STA OLDSC     UPDATE OLD SC TO NEW VALUE
      IOR STFI
      STA STF1
      STA STF2
      STA STF3
      ADA =B000100  CONVERT STF TO SFC
      STA SFC1
      XOR =B000700  CONVERT SFC TO LIA
      STA LIA1
      STA LIA3
      UNL 
      IFZ 
      LST 
      STA LIA4
      STA LIA5
      XIF 
      LST 
      ADA =B000100  CONVERT LIA TO OTA
      STA OTA1
      ADA =B000100  CONVERT OTA TO STC
      STA STC1
      STA STC2
      UNL 
      IFZ 
      LST 
      STA STC3
      XIF 
      LST 
      XOR =B001200  CONVERT STC TO LIA ,C 
      STA LIAC1 
      STA LIA2
      ADA =B000100  CONVERT LIA ,C TO OTA ,C
      STA OTAC1 
      STA OTAC2 
      XOR =B005300  CONVERT OTA ,C TO LIB 
      STA LIB1
      IOR =B000700  CONVERT LIB TO CLC
      STA CLC1
      IOR =B001200  CONVERT CLC TO CLC ,C 
      STA CLCC2 
      STA CLCC4 
      UNL 
      IFZ 
      LST 
      STA CLCC5 
      XIF 
      LST 
      SKP 
* 
*** GET PARAMETERS USED IN COMMON BY READ,WRITE & CONTROL SECTIONS ***
* 
* 
*     GET <SUB UNIT> CODE 
* 
X.1   LDA EQTAD,I   GET EQT WD 1
      ALF,ALF       PUT <SUB UNIT> BITS 
      RAL,RAL            INTO BIST 0-4
      AND =B37      ISOLATE <SUB UNIT> CODE 
      STA SUBUN     SAVE IT 
* 
*     GET <SUBFUNCTION CODE>
* 
      LDA REQAD,I   GET WD2 OF USER REQUEST 
      ALF,ALF       PUT <SUBFUNCTION CODE> BITS 
      RAL,RAL            INTO BITS 0-5
      AND =B67      ISOLATE <SUBFUNCTION CODE>
      STA SUBFU     SAVE IT 
* 
*     SET UP POINTERS TO EQT WD2 AND WD3
* 
      LDA EQTAD     GET ADDR OF EQT WD1 
      INA           SET TO WD2
      STA EQTW2     SAVE IT 
      INA           SET TO WD3
      STA EQTW3     SAVE IT 
* 
*     BRANCH TO CONTROL OR READ/WRITE SECTION 
* 
* 
      LDA FCODE 
      CPA =B3       IS IT A CONTROL REQUEST 
      JMP CTLRQ     YES:
*                                   NO: CONTINUE TO R/W REQUEST 
      SKP 
* 
*** GET REMAINING PARAMETERS FOR A READ/WRITE REQUEST *** 
* 
* 
*     GET AND RESOLVE <BUFFER ADDR> 
* 
      ISZ REQAD     SET REQAD TO WD3
      ISZ REQAD     SET REQAD TO WD4
      LDA REQAD     PUT ADDR OF WF4 INTO A
      LDA A,I       GET <BUFFER ADDR> FROM USER REQUEST 
      RAL,CLE,SLA,ERA TEST AND CLEAR INDIRECT 
      JMP *-2       INDIRECT: REPEAT,GET NEXT LEVEL 
      STA UBUFA     DIRECT: SAVE <BUFFER ADDR>
* 
*     GET <BUFFER LENGTH> FROM USER REQUEST AND CONVERT TO + BYTES
* 
      ISZ REQAD     SET REQ. ADDR TO WD5
      LDA REQAD,I   GET <BUFFER LENGHT> 
      STA UBUFL     SAVE IT 
      SSA           TEST IF WORDS OR BYTES
      JMP *+3       -:BYTES,CONVERT TO +BYTES 
*                                   +:WDS,CONVERT TO BYTES
      ALS           CONVERT WDS TO BYTES
      RSS 
      CMA,INA       CONV -BYTES TO +BYTES 
      STA ULFLG     SAVE +BYTES FOR XMISSION LOG COMP 
* 
*     SET-UP READ/WRITE FLAG
* 
      LDA FCODE     GET <FUCTION CODE>
      ERA           PUT BIT0 INTO E 
      CLA           SET A=0 
      ERA           PUT E INTO A15
      STA RWFLG     SAVE RESULT 
      UNL 
      IFZ 
      LST 
* 
*** CLAIM A DMA CHANNEL IF DMA REQUESTED ***
* 
      LDA EQTAD,I   GET WD1 OF EQUIP.TBL. 
      SSA,RSS       TEST IF DMA IS TO BE USED 
      JMP SETBY     0:DMA NOT REQUIRED,GOTO BUSY EXIT 
*                                   1:USE DMA,CONTINUE
* 
*     CHECK CH1 FOR AVAILABILITY AND BUSY 
* 
      LDB DMAC1     GET DMA CH1 FLAG
      CCE,SZB,RSS   SET E=1,TEST IF SYSTEM HAS DMA? 
      JMP NODMA     NO:GO TO ABORT EXIT 
*                                   YES:CHECK IF CH1 IS BUSY
      SSB           TEST IF CH1 BUSY
      JMP CKCH2     1:YES,TRY CH 2
*                                   0:NO,CONTINUE 
* 
*     CLAIM DMA CH1 
* 
      STB DMAC#     SAVE DMA CH#
      RBL,ERB       SET BIT15=1 FOR BUSY FLAG,E=0 
      STB DMAC1     RESTORE DMAC1 WITH BUSY FLAG
      JMP SETBY     GO TO SET BUSY SEC
* 
*     CHECK CH 2 FOR AVAILABILITY AND BUSY
* 
CKCH2 LDB DMAC2     GET DMA CH2 FLAG
      SZB,RSS       TEST IF SYSTEM HAS DMA
      JMP NODMA     NO: GO TO ABORT EXIT
*                                  YES: CONTINUE
      SSB,RSS  TEST IF CH2 BUSY 
      JMP CDMA2     0:NO,GO CLAIMIT 
*                                  YES: REJECT CALL 
*                                   1:YES,REJECT CALL,DMA  BUSY 
* 
*     REJECT REQUEST,BOTH DMA CHANNELS BUSY 
* 
      CLB,INB       SET B=1 
      JMP REJRQ     EXIT VIA REJECT RETURN
* 
*     ABORT REQUEST, NO DMA 
* 
NODMA CCB           SET B= -1 
      ADB REQAD     ADD IN ADDR OF WD2 OF USER REQ. 
      LDA =B3       SET A= 3
      JMP IOERR     EXIT TO IOC ERROR HALT
* 
*     CLAIM DMA CH2 
* 
CDMA2 STB DMAC#     SAVE DMAC#
      RBL,ERB       SET BIT 15 = 1,E=1
      STB DMAC2     RESTORE DMAC2 WITH BUSY FLAG
      XIF 
      LST 
* 
*     SET DRIVER BUSY FLAG
* 
SETBY LDB =B100000  SET B15=1 
      STB DVRBF     SET DVR BUSY FLAG TO BUSY 
* 
*     SET DEVICE BUSY FLAG IN EQT WD2 
* 
      JSB UEQT2     GO UPDATE EQT WD2 
* 
*     CLEAR TRANSMISSION LOG
* 
      CLA           SET A = 0 
      STA EQTW3,I   CLEAR TRANSMISSION LOG
* 
*** DETERMINE IF AUTO-ADDRESSING REQUESTED ***
* 
AADCK LDA SUBUN     GET <SUB UNIT>
      SZA,RSS       TEST IF FOR BUS(0) OR DEVICE(>0)
      JMP NOADR     0:GOTO NO ADDRESSING SECTION
*                                   >0: ENTER ADDRESSING SECTION
      SKP 
* 
*** AUTO ADDRESSING SECTION *** 
* 
*     THIS SECTION ADDRESSES THE DEVICE TO TALK (READ REQUEST)
*     OR LISTEN (WRITE REQUEST) USING <SUB UNIT> FOR THE
*     BUS ADDR. 
* 
* 
*     PUT  I/O CARD INTO CONTROLLER MODE WITH PACKING 
* 
      LDA =B024267  GET CTL WD FOR CTLR MODE WITH PACING
      JSB CTLWD     OUPUT CTL WD
* 
*     CONSTRUCT DEVICE ADDRESS FROM <SUB UNIT> AND PUT INTO ADDR BUFFER 
* 
      LDB RWFLG     GET RED/WRT FLAG
      LDA =B000100  GET TALK ADDR BITS
      SSB,RSS       TEST IF READ OR WRITE 
      LDA =B000040  0:WRT,REPLACE WITH LISTEN ADDR
*                                        GROUP BITS 
*                                   1:RED,LEAVE AS IS 
      IOR SUBUN    ADD IN <SUB UNIT> FOR ADDR 
      ALF,ALF       PUT INTO UPPER HALF WD
      STA ADDRB+1   PUT IT INTO ADDR BUFFER 
* 
*     SET-UP OUTPUT SECTION PARAMETERS FOR OUTPUT OF ADDRESS
* 
      LDA ADRBA     GET ADDR OF ADDR BUFEER 
      STA BPNTR     PUT INTO BUFFER POINTER 
      LDA =B-2      GET # OF WDS
      STA WCNTR     PUT INTO WORD COUNTER 
      CLA,INA       SET A0 = 1
      STA OBFLG     SET ODD BYTE FLAG 
      LDA OBUFA     GET ADDR OF OUPUT BUF CONT SEC
      STA IENTP     PUT INTO INT.ENT PNTR 
* 
*     SET-UP CONTINUATOR SECTION TO EXIT TO AUTO-ADDRESSING 
*     COMPLETION SECTION
* 
      LDA ADRCA     GET ADDR OF AUTO-ADDR'G COMPLT. SEC.
       STA OBEP     PUT INTO OUT. BUF EXIT PNTR 
      JMP AADIN     GO TO AUTO-ADDR'G INIT. EXIT
* 
*     ADDRESS BUFFER
* 
ADRBA DEF ADDRB 
ADDRB OCT 057477    UNTALK & UNLISTEN COMMANDS
      OCT 0        STORAGE FOR DEVICE ADDRESS 
      SKP 
* 
*** AUTO-ADDRESSING COMPLETION SECTION ***
* 
*     PUT THE I/O CARD INTO THE TALK MODE(WRITE REQUEST)
*     OD LISTEN MODE(READ REQUEST) AND TAKE IT OUT
*     OF THE CONTROLLER MODE
* 
ADDRC LDB RWFLG     GET R/W FLAG
      LDA =B000110  GET CTL WD TO ENABLE TALK 
      SSB           TEST IF RED OR WRT
      LDA =B000120  1:RED,REPLACE WITH LISTEN CTLWD 
*                                   0:WRT,LEAVE AS IS 
      JSB CTLWD     OUTPUT IT 
      JMP INIRW     GO TO INITIATE RED/WRT SEC. 
      SKP 
* 
*** NO ADDRESSING SECTION *** 
* 
* 
*     DETERMINE IF I/O CARD IS
*     ADDRESSED TO TALK (WRITE REQUEST) 
*     ADDRESSED TO LISTEN (READ REQUEST)
* 
* 
*       GET CURRENT I/O CARD & BUS STATUS 
* 
NOADR JSB STAWD 
* 
*     DETERMINE IF READ OR WRITE REQUEST
* 
      LDB RWFLG     GET R/W FLAG
      SSB,RSS       TEST IF READ OR WRITE REQ.
      JMP ATCHK     0:WRT, GO TO ADDR'D TO TALK CHK 
*                                   1:RED,CONTINUE TO ADDR'D TO LIST,CHK
* 
*     IF READ,TEST IF ADDRESSED TO LISTEN,
*         MRE=HIGH,RFD=HIGH, & DAC=LOW
* 
      AND =B000300  ISOLATE MRE & LISTEN BITS 
      CPA =B000100  TEST IF MRE=H & LISTEN=1
      JMP INIRW     YES:GO TO RW INIT SEC 
      JMP REJNA     NO: GO TO NOT AVAIL REJ 
* 
*     IF WRITE,TEST IF
*         1.ADDRESED TO TALK AND MRE=HIGH 
*      OR 2.ACTIVE AND MRE=LOW
* 
ATCHK LDB A         SAVE STATUS 
      AND =B000240  ISOLATE TALK & MRE BITS 
      CPA =B000040  IS TALK=1 & MRE=0?
      JMP INIRW     YES: GO TO RW INIT. SEC.
*                                   NO:TRY CTLR MODE
      LDA B         GET STATUS
      AND =B000220  ISOLATE MRE & ACTIVE BITS 
      CPA =B000220  IS ACTIVE=1 & MRE=1?
      JMP INIRW     YES: GO TO RW INIT. SEC.
*                                   NO:CONT. TO REJECT EXIT 
* 
*     REJECT TEQUEST,CARD AND/OR BUS NOT READY
* 
REJNA CLB,INB       GET DEV NOT AVAILABLE STATUS
      JSB UEQT2     GO UPDATE EQT WD2 
      STB DVRBF     CLR DVR BUSY FLG
      JMP REJRW 
      SKP 
* 
*** READ/WRITE INITIATOR SECTION ***
* 
* 
*     SET-UP RECORD FORMAT FLAGS
* 
INIRW LDB SUBFU     GET SUBFUNCTION CODE
      RBR           PUT A/B BIT INTO A15
*                                       F/V BIT INTO A0 
*                                       R/A BIT INTO A3 
      STB RFMTF     PUT RESULT INTO REC FMT FLGS
      UNL 
      IFZ 
      LST 
* 
* TEST IF DMA IS TO BE USED 
* 
      LDA DMAC#     GET DMA CH # CLAIMED
      SZA,RSS       TEST IF ONE CLAIMED OR NOT
      JMP SUIRW     0:NO,GO SET-UP FOR INT. R/W 
*                                   6,7:YES,SET-UP FOR DMA R/W
      ERA          SET E TO INDICATE DMA CH# TO USE 
*                                        0=6,1=7
* 
*** SET-UP READ OR WRITE USING DMA TRANSFER *** 
* 
* 
*     SET DMA COMPLETION INTERUPT LINKAGE 
* 
SUDMA LDA OLDSC,I   GET JSB,I FROM I/O INT.TRAP CELL
      STA DMAC#,I   PUT IT IN DMA COMPLETION INT.LOC
      LDA DTCAD     GET ADDR OF DMA XFER COMPLET SEC
      STA IENTP     PUT INTO INT.ENT.PNTR 
* 
*     ENABLE I/O CARD FOR DMA TRANSFER
* 
      LDB RWFLG     GET R/W FLAG
      LDA =B004207  WRT:GET CTL WD FOR DMA WRT
      SSB           TEST IF RED REQ.
      IOR =B012000  1:RED,ADD IN DMA REQ.FLAG SEL.BIT 
*                                   AND EOR FLG ENABLE
      LDB RFMTF     GET REC FMT FLGS
      SSB,RSS       TEST A/B BIT
      IOR =B000400  0:ASCII,ADD IN ASCII MODE BIT 
      JSB CTLWD     OUTPUT IT 
* 
*     FORM CTL WD 3 IN B (-WORD COUNT)
* 
      LDB ULFLG     GET LENGTH OF USER BUF IN +BYTES
      INB           ADD 1 TO ROUND UP TO WORDS
      BRS           DIVIDE BY 2 TO MAKE WORDS 
      STB WCNTR     SAVE FOR XMISSIOM LOG COMP. 
      CMB,INB       MAKE IT NEGATIVE
* 
*     FORM CTL WD 1 IN A (RED/WRT MODE AND SELECT CODE) 
* 
      LDA =B020000  GET DMA CTL WD 1:STC=0,WORD,CLC=0 
      IOR OLDSC     ADD IN SC OF BUS I/O CARD 
* 
*     DETERMINE DMA CHANNEL TO BE USED
* 
      SEZ           TEST E FOR DMA CH# TO INITILIZE 
      JMP ICH2      1:CH2,GO TO CH2 INIT. SEC.
*                                   0:CH1,CONT. TO CH1 INIT. SEC. 
* 
*     INITILIZE CH1 
* 
ICH1  OTA 6         PUTPUT CW1 TO DMA CH1 
      LDA UBUFA     GET BUFFER ADDR 
      IOR RWFLG     ADD IN R/W CTL BIT
      CLC 2         SET-UP DMA CH1 TO RCV CW2 
      OTA 2         SEND SW2
      STC 2         SET-UP DMA CH1 TO RCV CW3 
      OTB 2         SEMD CW3
      JMP DMAEX     GOTO  DMA EXIT ROTUTNE
* 
*     INITILIZE CH2 
* 
ICH2  OTA 7         OUTPUT CW1 TO DMA CH2 
      LDA UBUFA     GET BUFFER ADDR 
      IOR RWFLG     ADD IN R/W CTL BIT
      CLC 3         SET-UP DMA CH2 TO RCV CW2 
      OTA 3         SEND CW2
      STC 3         SET-UP DMA CH2 TO RCV CW3 
      OTB 3         SEND CW3
* 
*     CONFIGURE DMA STC INSRUCTION
* 
DMAEX LDA STCCI     GET CTC ,C INST 
      IOR DMAC#     ADD IN DMA CH # IN USE
      STA STCD1 
      STA STCD2 
* 
*     TURN ON INTERRUPT ON I/O CARD 
* 
CLCC5 CLC SC,C      CLR FLG 
      LDA =B000007
      JSB CTLWD     INITILIZE I/O CARD
STC3  STC SC        TURN ON INTERRUPT ON I/O CARD 
* 
*     DETERMINE IF AUTO ADDRESSING  USED
* 
      LDA SUBUN     GET SUB UNIT REQUESTED
      SZA           TEST IF AUTO ADDR'G UXSED 
      JMP DMACX     >0:YES,GOTO DMA CONT EXIT 
*                                   0:NO,CONT TO INITATOR EXIT
* 
*     IF AUTO ADD'G NOT USED,EXIT VIA INITIATORR SECTION
* 
LIA4  LIA SC        SET RFD FF TO START READ
STCD1 STC 6,C       TURN ON DMA CHANNEL 
      JMP REQIN     GOYTO REQ INIT EXIT 
* 
*     IF AUTO ADDR'G USED, EXIT VIA CONTINUATOR SEC 
* 
DMACX LDA I.37      GET ADDR OF LOC FROM WHICH INT OCCURED
      STA DMAIR     SAVE TI 
LIA5  LIA SC        SET RFD FF TO START READ
      JSB RESTR     RESTORE THE REGISTER CONTENTS 
STCD2 STC 6,C       TURN ON DMA 
      JMP DMAIR,I   RETURN
* 
DMAIR OCT 0 
STCCI STC 0,C 
      XIF 
      LST 
      SKP 
* 
*** SET-UP READ OR WRITE USING INTERRUPT TRANSFER *** 
* 
* 
*     INITILIZE BUFFER POINTER
* 
SUIRW LDA UBUFA     GET VALUE OF USER <BUFFER ADDR> 
      STA BPNTR     PUT INTO BUFFER POINTER 
* 
*     INITILIZE BYTE COUNTER FOR READ 
*               WORD COUNTER & ODD BYTE FLG FOR WRITE 
* 
      LDA ULFLG     GET LENGTH OF USER BUF IN +BYTES
      SZA,RSS       TEST IF BUF LENGTH=0
      JMP BUFL0     0:YES,GOTO BUF LEN 0 EXIT 
      CMA,INA       CONVERT TO -BYTES 
      STA BCNTR     SAVE -BYTES FOR READ
      STA OBFLG     SAVE ODD BYT CNT FOR WRT
      INA          ROUND DOWN 
      ARS          CONVERT TO WDS LESS ODD BYTE 
      ADA =B-1      SET WD CNT TO 1 LESS
      STA WCNTR     SAVE WD CNT FOR WRT 
* 
*     SET-UP FOR ASCII R/W
* 
      CLA 
      SSB,RSS       TEST IF ASCII FMT 
      LDA =B000400  0:ASCII,GET CTLWD BIT FOR ASCII MODE
*                                   1:BINARY,LEAVE=0
* 
*     DETERMINE IF READ OR WRITE REQUEST
* 
      LDB RWFLG     GET READ/WTIRE FLAG 
      SSB           TEST IF RED OR WRT
      JMP SURED     1:RED,GO TO SET-UP RED SEC. 
*                                   0:WRT,CONTINUE TO SET-UP WRT SEC. 
* 
*     SET-UP FOR WRITE
* 
SUWRT LDB OBUFA     GET ADDR OF WRT CONTINUATOR ROUT
      STB IENTP     PUT INTO INT ENTRY PNTR 
      LDB CMPLA     GET ADDR OF CMPLTION SEC
      SZA           TEST IF ASCII OR BINARY 
      LDB SUCLA     1:ASCII,GET ADDR OF CRLF OUT SEC
*                                   0:BIN,LEAVE AS IS 
      STB OBEP      PUT INTO OUT BUF ROUT EXIT PNTR 
      IOR =B024207  ADD CTL WD FOR WRITE
      JSB CTLWD     OUTPUT THE CONTROL WORD 
      JMP RWRIN     GO TO RED/WRT REQ INITIALTED EXIT 
* 
*     SET-UP READ 
* 
SURED LDB REDAD     GET ADDR OF READ  ONTINUATOR ROUT.
      STB IENTP     PUT IT INTO POINTER 
      IOR =B050200  ADD IN CTL WD BITS FOR READ 
      JSB CTLWD     OUTPUT THE CONTROL WORD 
* 
*     INITILIZE UPPER/LOWER BYTE FLAG 
* 
      CLB 
      STB ULFLG 
      UNL 
      IFZ 
      LST 
* 
*     INITIALIZE EOF COUNTER
* 
      LDB =D-30 
      STB EOFCT 
      XIF 
      LST 
* 
*     SET-UP INPUT SEC TO BRANCH TO LEADER PROCESSOR
* 
      IFN 
      LDA PACKA     GET ADDR OF INPUT PACKING SEC 
      XIF 
      IFZ 
      LDA INLDA     GET ADDR OF LEADER PROC'G SEC 
      XIF 
      STA INPTP     PUT INTO INPUT SEC BRANCH PNTR
* 
*     TEST IF RFD FF NEEDS TO BE SET
* 
LIA2  LIA SC,C      SET RFD FF TO START READ
      JMP RWRIN     GO TO RED/WRT REQ INITIATED EXIT
* 
*     BUFFER LENGTH=0 EXIT PROCESING
* 
BUFL0 LDB SUBUN     GET SUB UNIT REQUESTED
      SZB           TEST IF AUTO ADDR'G USED
      JMP CMPLT     >0:YES,GOTO COMPLT'N SEC
*                                   0:NO,SET-UP INITIATOR EXIT
      LDA REQIA     GET ADDR OF REQ INIT EXIT 
      STA I.37      PUT INTO CONT SEC FOR .BUFR RET 
      JMP CMPLT     GOTO COMPLT'N SEC 
      SKP 
* 
*** PROCESS A CLEAR REQUEST *** 
* 
* 
*     CONFIGURE I/O INSTRUCTONS USED BY CLEAR PROCESSOR 
* 
CLEAR LDA EQTAD,I   GET WD1 FROM EQT
      AND =B000077  ISOLATE <SC> BITS 
      IOR STFI      MAKE INTO STF INSTRUCTION 
      STA STF9
      STA STF8
      IOR =B000400  CONVERT STF TO LIA
      STA LIA9
      ADA =B000100  CONVERT LIA TO OTA
      STA OTA9
      STA OTA8
      IOR =B005300  CONVERT OTA TO CLC ,C 
* 
*     TURN OFF INTERRUPT AND CLEAR FLAG 
* 
CLCC9 CLC SC,C
* 
*     IF <SUB UNIT> = 0, EOP BUS
* 
      LDA EQTAD,I   GET WD1 OF EQT
      AND =B003700  ISOLATE <SUB UNIT> BITS 
      SZA           TEST FOR <SUB UNIT> = 0 
      JMP CLR1      N/:BYPASS EOP 
*                                   YES:CONTINUE TO EOP SECTIOM 
      LDA =B000001  GET CTRL WD FOR EOP 
STF9  STF SC
OTA9  OTA SC
* 
*     CLEAR IRL FF
* 
CLR1  LIA SC
LIA9  EQU CLR1
* 
*     CLEAR OWRLFF,OBRLFF,RFD FF
* 
      LDA =B000007
STF8  STF SC
OTA8  OTA SC
* 
*     CLEAR DRIVER BUSY FLAG
* 
      CLB 
      STB DVRBF     CLEAR DVR BUSY FLAG 
* 
*     CLEAR EQT TABLE ENTRIES 
* 
      LDA EQTAD     GET ADDR OF EQT WD1 
      INA           SET TO WD2
      STA EQTW2     PUT INTO EQT WD2 ADDR 
      INA           SET ADDR TO EQT W&3 
      STB A,I       CLEAR TRAMSMISSION LOG
      JSB UEQT2     CLEAR BITS 0-7: <DEV STATUS>
*                                         BITS 14: R/W ERROR FLG
*                                         BIT 15: DEVICE BUSY FLG 
      UNL 
      IFZ 
      LST 
* 
*     RELEASE DMA CHANNEL IF CLAIMED
* 
      LDA DMAC#     GET DMA CH # CURRENTLY IN USE 
      SZA           TEST IF DMA IN USE
      JSB RCDMA     >0:GORELEASE & CLEAR DMA
*                                   0:NO,GO TO EXIT 
      XIF 
                                                            