ASMB,R,L,C
      HED D.65 91703-16101 * (C) HEWLETT PACKARD CO. 1976 
      NAM D.65 91703-16101 REV A 760308 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
******************************************************************
      SPC 3 
* 
*********************************************** 
* 
*D.65 COMMUNICATIONS DRIVER FOR DS-1 BCS SYSTEMS
* 
*SOURCE PART #      91703-18101 REV A 
* 
*REL PART #         91703-16101 REV A 
* 
*WRITTEN BY:        LARRY POMATTO 
* 
*DATE WRITTEN:      9-18-74 
* 
*MODIFIED BY:       CHUCK WHELAN
* 
*DATE MODIFIED:     01-07-76
* 
      SPC 3 
* 
*     DEFINE ENTRY POINTS 
* 
      ENT D.65,I.65 
      ENT LINK?,WAITF 
      ENT INT?
* 
      SPC 3 
* 
*     DEFINE EXTERNALS
* 
      EXT DMAC1,DMAC2 
      EXT INT65 
* 
      SPC 3 
* 
*     DEFINE A AND B REG
* 
A     EQU 0 
B     EQU 1 
      SKP 
* 
*     CALLING SEQUENCES 
* 
      SPC 3 
*     TRANSMIT REQUEST AND DATA 
      SPC 2 
*     JSB .IOC. 
*     OCT XX1YY 
*     JMP REJECT ADDRESS
*     DEF PRAM BUFFER 
*     DEC 4 (LENGTH OF PARM BUFFER) 
* 
* 
*PBUF IRBUF  (REQUEST BUFFER ADDRESS) 
*     IRBFL  (REQUEST BUFFER LENGTH)
*     IDBUF  (DATA BUFFER ADDRESS)
*     IDBFL  (DATA BUFFER LENGTH) 
* 
      SPC 3 
*     RECEIVE OR TRANSMIT DATA
      SPC 2 
*     JSB .IOC. 
*     OCT XX2YY 
*     JMP REJECT ADDRERSS 
*     DEF DATA BUFFER ADDRESS 
*     DEC DATA BUFFER LENGTH
* 
      SPC 3 
*     RECEIVE OR SEND REQUEST 
      SPC 2 
*     JSB .IOC. 
*     OCT XX3YY 
*     JMP REJECT ADDRESS
*     DEF BUFFER ADDRESS
*     DEC BUFFER LENGTH 
* 
      SPC 4 
*     ENABLE LISTEN (SPECIAL "READ REQUEST")
      SPC 3 
*     JSB .IOC. 
*     OCT 113YY 
*     JMP REJECT ADDRESS
*     DEF BUFFER ADDRESS
*     DEC BUFFER LENGTH 
* 
      SPC 3 
*     CLEAR REQUEST 
      SPC 2 
*     JSB .IOC. 
*     OCT 000YY 
* 
      SPC 3 
*     SEND STOP 
      SPC 2 
*     JSB .IOC. 
*     OCT 304YY 
*     JMP REJECT ADDRESS
* 
      SPC 3 
* 
*     YY=LU         XX=10 READ  =20 WRITE 
* 
* 
*     NOTE: 
* 
* 
*     ERROR BIT DISCRIPTION 
* 
*     ERROR BIT     ERROR 
*     0             REQUEST COMPLETED SUCCESSFULLY
*     1             LENGTH ERRROR ON REQUEST
*     2             NO DATA TO READ OR WRITE
*     3             RRECEIVED A STOP (-1 LENGTH OK OTHERWISE ERROR) 
*     4             REQUEST REJECTED...DRIVER ACTIVE
*     5             PARITY ERROR
*     6             NO REQUEST PENDING (ONLY ON READ REQUEST) 
*     7             BROKEN LINE (CARD DEACTIVATED)
* 
* 
*     WHENEVER YOU DON'T KNOW WHAT TO DO, ISSUE A CLEAR REQUEST 
*     THIS COMMAND WILL CLEAR THE DRIVER, THE CARD, AND THE 
*     OTHER CARD AND DRIVER AS WELL (OR IT SHOULD???) 
* 
      SKP 
*     HERE IS THE INITIALIZATION SECTION
* 
      SPC 3 
D.65  NOP 
      CLE 
      SFC 0         IS INTERRUPT SYSTEM ON? 
      CCE           NO
      CLF 0         TURN OFF INTERRUPTS 
      STA EQTA      SAVE A REG
      CLA 
      STA EXIT0 
      STA EXIT2 
      STA CKFLG     CLEAR PARITY ERROR FLAG!
      STA INT?       CLEAR LISTEN FLAG
      CPA LINK?      IS LINK ENABLED? 
      JMP D.65,I     NO--EXIT AS DUMMY
* 
      ERA 
      STA IFLAG     SAVE INTERRUPT ON FLAG
      STB REQA      SAVE REQUEST WORD 2 ADDRESS 
      LDB DBUSY     GET DRIVER BUSY FLAG
      STB DBUSX     SAVE ORIGINAL STATE 
      SZB,RSS       IS DRIVER BUSY? 
      JMP D.652     NO
      LDA REQA,I    GET REQUEST 
      AND C700      GET FUNCTION CODE 
      SZA           IS IT A CLEAR REQ?
      JMP RREQ      NO...REJECT REQUEST 
      LDA EQTA,I    GET SELECT CODE 
      AND C77       MASK ALL BT SELECT CODE 
      CPA LU        IS SAME LU? 
      RSS           YES 
      JMP RREQ      NO...BUSY...REJECT REQUEST
D.652 ISZ DBUSY     SET DRIVER BUSY FLAG
      JSB INTON     TURN ON INTERRUPT SYSTEM
      JSB SETIO     WELL NOW WE CAN SET THE I/O INSTRUCTIONS
      LDA REQC      GET REQUEST CODE
      LDB REQC
      ADB CM5 
      SSA,RSS 
      SSB,RSS       FUNCTION WITHIN RANGE 
      JMP SFERR     NO...SUB FUNCTION ERROR 
      ADA BTABA     GET ENTRY INTO BRANCH TABLE 
      LDB A,I       GET ADRESS
      JMP B,I       GO TO ROUTINE 
* 
*     HERE FOR REQUEST ERROR
* 
SFERR LDA DBUSX     GET OLD BUSY FLAG 
      STA DBUSY     RESET FLAG TO ITS OLD STATE 
      JMP ENRQ1     AND GO OUT ERROR EXIT 
RREQ  JSB INTON     TURN ON INTERRUPT SYSTEM
      LDB DBBIT     SET REQUEST ERROR BIT 
      JMP ENRQ1+1    EXIT 
      SPC 3 
IFLAG NOP 
LU    NOP 
REQC  NOP 
EQTA  NOP 
REQA  NOP 
DBUSY NOP 
DBUSX NOP 
C700  OCT 700 
C77   OCT 77
CM5   OCT -5
LINK? OCT 1  LINK ENABLED FLAG--SET ENABLED 
* 
BTABA DEF *+1 
      DEF CLREQ 
      DEF RQ.DT 
      DEF TRDTA 
      DEF TRREQ 
      DEF STREQ 
      SKP 
* 
*     HERE FOR CLEAR REQUEST
* 
CLREQ LDA DBUSX     IS THE CONTINUATOR BUSY?
      SZA 
      JMP STREQ     YES 
      JSB OFDMA     YES...CLEAR DMA 
      CLB,CLE,INB,RSS   SET FOR REQUEST COMPLETE
ENDRQ CCE           SET ERROR CONDITION 
      JSB STAT      UPDATE STATUS 
      JSB CLEAR     CLEAR DRIVER AND CARD 
      STA WAITF     AND WAIT FOR DATA FLAG
      SEZ,RSS       ERROR CONDITION?
      JMP EXIT0     NO - NORMAL RETURN
* 
ENRQ1 CLB 
      CLA,INA 
      JMP D.65,I    ERROR RETURN
* 
DMAC  NOP 
WAITF NOP 
DATFG NOP 
IJMP  NOP 
EQTW2 NOP 
C374K OCT 37400 
* 
* 
*     DRIVER AND CARD CLEAR ROUTINE 
* 
CLEAR NOP 
      STB DMAC      SAVE B REGISTER 
      JSB RDD.C     CLEAR CARD
      LDB DMAC      GET B REGISTER AGAIN
      STA DMAC
      STA DBUSY 
      STA DBUSX 
      STA IJMP
      STA OUTFG 
      JMP CLEAR,I 
      SKP 
* 
*     HERE FOR TRANSMIT REQUEST AND DATA
* 
RQ.DT LDA WAITF     GET WAITING FOR DATA FLAG 
      LDB C20       GET ERROR CODE...IF REQUIRED
      SZA           WAITING FOR DATA? 
      JMP ENDRQ     YES...ERRORR
      LDA RWFLG     GET READ/WRITE FLAG 
      STA DRWFG     SAVE AS DATA READ WRITE FLAG
      CLA,INA       GET A 1 
      STA RWFLG     SET FOR TRANSMIT REQUEST
      LDA REQW4,I   GET LENGTH WORD 
      LDB C2        GET ERROR CODE
      CPA C4        IS IT LENGTH OF 4?
      RSS           YES 
      JMP ENDRQ     NO...ERROR
      LDA REQW3,I   GET ADDRESS 
      JSB INDCK     GO CHASE DOWN THOSE LITTLE BITS 
      STA REQW3     SET FOR TRANSMISSION ADDRESS
      INA           GET DISPLACEMENT TO LENGTH
      STA REQW4     SAVE LENGTH WORD
      STA DATFG     SET REQUEST AND DATA FLAG 
      CLA           GET A ZERO FOR PARITY CLEAR 
      JMP TRRQ7     TREAT AS A STANDARD REQUEST 
* 
C4    OCT 4 
C20   OCT 20
RWFLG NOP 
DRWFG NOP 
REQW3 NOP 
REQW4 NOP 
* 
      SKP 
* 
*     HERE FOR SEND OR RECEIVE DATA 
* 
TRDTA LDA WAITF     GET WAITING FOR DATA FLAG 
      LDB C4        GET ERROR CODE...IF REQUIRED
      SZA,RSS       WAITING?
      JMP ENDRQ     NO...ERROR....NO DATA 
      LDA REQW4,I   GET LENGTH
      SZA           ZERO OR 
      SSA           NEGITIVE? 
      JMP ENDRQ     YES...ERROR 
      STA RBUFL     SAVE LENGTH WORD FOR DATA 
      LDA REQW3,I   GET DATA ADDRESS
      JSB INDCK 
      STA RBUFA 
      JSB ITRAN     SET UP INCASE INTERRUPT TRANSFER
      LDA RWFLG     READ OR WRITE ? 
      LDB NTWDI     GET WRITE DATA INTERRUPT
      SZA           READ OR WRITE?
      JMP TREQ3     WRITE 
      JSB DMA       GET DMA (IF WE HAVE ONE)
      LDA DMAF      GET DMA FLAG
      LDB NDMAI     GET CORRRECT INTERRUPT DEPENDING ON DMA 
      SZA           DMA?
      LDB NTRDI     YES 
      JMP TREQ3     TELL OTHER SIDE TO CONTINUE 
* 
C2    OCT 2 
NTWDI DEF INTWD 
DMAF  NOP 
NDMAI DEF INDMA 
NTRDI DEF INTRD 
      SKP 
* 
*     HERE FOR SEND OR RECEIVE REQUEST
* 
TRREQ LDA WAITF     GET WAITING FOR DATA FLAG 
      LDB C20       GET ERROR CODE...IF REQUIRED
      SZA           WAITING FOR DATA? 
      JMP ENDRQ     YES...ERROR 
      STA DATFG     SET REQ. ONLY IN FLAG 
      LDB REQA,I    CHECK TO SEE IF LISTEN MODE 
      BLF              COMMAND
      RBL,RBL 
      SSB 
      JMP LSTEN     YES!
* 
TRRQ7 STA PARCT     CLEAR PARITY ERROR COUNT
      LDB RWFLG     GET READ WRITE FLAG 
      SZB           READ OR WRITE 
      JMP TREQ1     WRITE 
      LDB LSTNI     GET REQUEST COMING INTERRUPT
      RSS 
TREQ3 JSB STNW      TELL OTHER SIDE TO CONTINUE 
      JMP TREQ2     EXIT
TREQ1 JSB SRC       SEND REQUEST COMING...WAKE UP OTHER SIDE
      LDB SLWI      GET SEND LENGTH WORD INTERRUPT
TREQ2 STB IJMP      SAVE FOR INTERRUPT JMP ADDRESS
      LDA REQW3,I   GET REQUEST BUFFER ADDRESS
      JSB INDCK 
      STA RBUFA     SAVE BUFFER ADDRESS 
      LDA REQW4,I   GET LENGTH
      STA RBUFL     SAVE LENGTH 
      LDB DBBIT     GET EQT BUSY BIT
      JSB STAT      AND PUT IT INTO STATUS
      LDA OUTFG     GET OUTPUT FLAG 
      SZA,RSS       IS IT ZERO? 
      JMP STC1      YES - DON'T OUTPUT ANYTHING 
      LDA OTWRD     GET WORD TO OUTPUT
OTA2  OTA 0 
      CLA 
STC1  STC 0,C 
      JMP EXIT0     AND RETURN
* 
LSTEN STA PARCT      CLEAR PARITY ERROR COUNT 
      CLA,INA 
      STA INT?       SET LISTEN FLAG
      CLA 
      STA OUTFG      CLEAR OUTPUT FLAG
      LDA LSTNI 
      STA IJMP       SETUP IJMP 
      LDA REQW3,I 
      JSB INDCK 
      STA RBUFA      SAVE BUFFER ADDRESS
      LDA REQW4,I 
      STA RBUFL      SAVE BUFFER LENTH
      CLB,INB 
      JSB STAT       CLEAR STATUS 
      CLA 
      STA DBUSY 
      JMP STC1       AND EXIT, SETTING CARD IN LISTEN MODE
* 
* 
PARCT NOP 
C100  OCT 100 
LNCI  DEF ILNC
SLWI  DEF ISLW
LSTNI DEF ILSTN 
RBUFA NOP 
RBUFL NOP 
DBBIT OCT 100000
      SKP 
* 
*     HERE FOR STOP REQUEST 
* 
STREQ JSB SSTOP     SEND STOP 
      LDB SSTPI     GET DEF TO STOP COMPLETION POINT
      STB IJMP      AND STORE IT IN JUMP POINT
      LDB DBBIT     SET EQT BUSY
      JSB STAT
      LDA OTWRD     GET OUTPUT WORD 
OTA3  OTA 0         OUTPUT IT TO CARD 
      CLA 
STC2  STC 0         TURN BOARD ON IN TRANSMIT MODE
      JMP EXIT0 
* 
* 
      SKP 
* 
*     SUBROUTINE TO GET A DMA CHANNEL IF PRESENT
*     E REG SET...DMA AVAILABLE 
* 
GTDMA NOP 
      CLF 0         TURN OFF INTERRUPT SYSTEM 
      LDA EQTA,I
      SSA,RSS 
      JMP NODMA 
      LDA DMAC1     GET CHANNEL #1
      CCE,SZA,RSS   IS THERE DMA IN THE SYSTEM? 
      JMP NODMA     NO
      SSA           IS CHANNEL #1 BUSY? 
      JMP C1BSY     YES...TRY CHANNEL 2 
      ELA,RAR       SET CHANNEL 1 BUSY...WE HAVE IT!
      STA DMAC1     SAVE CHANNEL #
      JMP GDMA1 
C1BSY LDA DMAC2     GET CHANNEL #2
      SZA           IS IT NOT THERE 
      SSA           OR BUSY?
      JMP NODMA     YES...NOT THERE OR BUSY 
      ELA,RAR       SET DMA BUSY
      STA DMAC2 
GDMA1 CLE,RSS       CLEAR E REG 
NODMA CLA,CLE       NO DMA...CLEAR DMA CHANNEL
      ELA,RAR       MASK OFF DMA BUSY BIT 
      STA DMAF      SAVE DMA CHANNEL #
      JSB INTON     TURN ON INTERRUP SYSTEM 
      JMP GTDMA,I   RETURN...E REG SET...THERE IS DMA 
* 
      SKP 
* 
*     SUBROUTINE TO SEND A STOP 
* 
SSTOP NOP 
      LDA CC        GET STOP WORD 
      JSB OUTPA     SEND STOP 
      JMP SSTOP,I   RETURN
      SPC 3 
* 
*     SEND REQUEST COMING 
* 
SRC   NOP 
      LDA CA        GET REQUEST COMING WORD 
      JSB OUTPA     SEND WORD 
      JMP SRC,I     RETURN
      SPC 3 
* 
*     SEND TNW
* 
STNW  NOP 
      LDA CB        GET NEXT WORD 
      JSB OUTPA 
      JMP STNW,I    RETURN
      SPC 3 
* 
*     RETRANSMIT LAST WORD
* 
SRLW  NOP 
      LDA CD        GET RETRANSMIT LAST WORD
      JSB OUTPA 
      JMP SRLW,I    RETURN
      SPC 3 
* 
*     SUBROUTINE TO SEND A WORD 
* 
OUTPA NOP 
      STA OTWRD     SET UP TO OUTPUT A
      ISZ OUTFG     SET UP FLAG TO SAY TO OUTPUT
      JMP OUTPA,I   RETURN
      SPC 3 
* 
*     SUBROUTINE TO READ CARD DATA AND STATUS 
* 
RDD.S NOP 
      JSB RDD.D     READ DATA AND STATUS
      STA TEMP2     SAVE DATA WORD
      RBR,SLB       MISSED RECEPTION? 
      RSS           YES 
      JMP *+3       NO
      JSB SRLW      TELL OTHER SIDE TO TRY AGAIN
LIA1  LIA 0         CLEAR THE CARD
      LDA TEMP2     GET DATA WORD AGAIN 
      RBL           GET BIT SET CORRECT 
      JMP RDD.S,I   AND RETURN
* 
TEMP2 NOP 
CA    OCT 170017    REQUEST COMING
CB    OCT 170360    TRANSMIT NEXT WORD
CC    OCT 7760      SEND STOP 
CD    OCT 7417      RETRANSMIT LAST WORD
* 
* 
RDD.D NOP           ROUTINE TO READ DATA AND STATUS 
LIA2  LIA 0         READ DATA 
LIBC1 LIB 0,C       READ STATUS 
      JMP RDD.D,I 
* 
* 
RDD.C NOP           ROUTINE TO CLEAR CARD BY READING IT 
CLCC3 CLC 0,C       PUT CARD INTO RECEIVE MODE
      JSB RDD.D     READ CARD TO CLEAR IT 
      CLA 
      JMP RDD.C,I 
* 
* 
*     SUBROUTINE TO CHASE DOWN INDIRECTS
* 
INDCK NOP 
      RSS 
      LDA A,I 
      RAL,CLE,SLA,ERA 
      JMP *-2 
      JMP INDCK,I 
* 
* 
* 
INTON NOP           ROUTINE TO TURN ON INTERRUPT SYSTEM 
      LDB IFLAG     GET INTSYS STATE FLAG 
      SSB           WAS INTSYS ON?
      STF 0         YES - TURN IT BACK ON, ELSE DON'T 
      JMP INTON,I 
* 
      SKP 
* 
*     SUBROUTINE TO START DMA 
* 
DMA   NOP 
      LDA DMAF
      SZA,RSS       DO WE HAVE A DMA? 
      JMP DMA,I     NO
      IOR STCC      GET STC 0,C COMMAND 
      STA STCD2     SET FOR ACTIVE DMA
      XOR C504K     CHANGE TO CLC 2 OR 3
      STA CLCD1 
      XOR C4K       CONVERT TO STC 0 COMMAND
      STA STCD1 
      XOR C100      CONVERT TO OTA 2 OR 3 
      STA OTAD2 
      STA OTAD3 
      XOR C4        CONVERT TO OTA 6 OR 7 
      STA OTAD1 
      XOR C4.1K     CONVERT TO CLC 6 OR 7 COMMAND 
      STA CLCD2 
      LDA RWFLG     GET READ WRITE FLAG 
      CCE,SZA       READ OR WRITE?
      CLE           WRITE 
      LDA LU        GET SELECT CODE 
      SEZ,RSS       OUTPUT? 
      IOR C20K      MASK IN FOR OUTPUT
OTAD1 OTA 0         OUPUT CONTROL WORD #1 
CLCD1 CLC 0 
      LDA RBUFA     GET BUFFER ADDRESS
      ELA,RAR       SET INPUT/OUPUT BIT 
OTAD2 OTA 0         OUPUT CONTROL WORD #2 
STCD1 STC 0 
      LDA RBUFL     GET LENGTH
      CMA,INA       NEGATE LENGTH 
OTAD3 OTA 0 
STCD2 STC 0,C 
      LDA DMAF      GET DMA FLAG
      STA DMAA      SET IF FOR DMA ACTIVE 
      LDB LU,I      GET INTERRUPT JSB INSTRUCTION 
      STB A,I       SAVE FOR DMA INTERRUPT INSTURCTION
      JMP DMA,I     RETURN
* 
STCC  STC 0,C 
DMAA  NOP 
C4K   OCT 4000
C504K OCT 5004
C20K  OCT 20000 
C4.1K OCT 4100
* 
      SKP 
* 
*     SUBROUTINE TO TURN OFF DMA CHANNEL AND DEALOCATE WHEN 
*     DMA COMPLETED 
* 
OFDMA NOP 
      LDB DMAF
      SZB,RSS       DO WE HAVE A DMA? 
      JMP OFDMA,I   NO
      CLF 0         TURN OFF INTERRUPT SYSTEM 
      JSB CLDMA     CLEAR DMA CHANNEL 
      SLB,RSS       IS IT 6 OR 7
      STB DMAC1     6...DEALOCATE DMA CHANNEL 6 
      SLB 
      STB DMAC2     7...DEALOCATE DMA CHANNEL 7 
      LDA HLTI      GET HALT INSTRUCTION
      IOR B         SET IN HALT 6 OR 7
      STA B,I       STORE HALT INSTURCTION IN DMA CHANNEL 
      CLA           GET A ZERO
      STA DMAF      CLEAR DMA ALOCATED FLAG 
      STA DMAA      CLEAR DMA ACTIVE FLAG 
      JSB INTON     TURN INTSYS BACK ON 
      JMP OFDMA,I   RETURN
* 
HLTI  HLT 0 
* 
      SPC 3 
* 
*     SUBROUTINE TO CLEAR DMA CHANNEL...IF ASSIGNED 
* 
CLDMA NOP 
      LDA DMAA      GET DMA ACTIVE FLAG 
      SZA           DMA ACTIVE? 
CLCD2 CLC 0         YES...CLEAR IT
      CLA           GET A ZERO
      STA DMAA      CLEAR DMA ACTIVE FLAG 
      JMP CLDMA,I   RETURN
      SKP 
* 
*     SUBROUTINE TO SET I/O INSTRUCTIONS
* 
SETIO NOP 
      CLA 
      STA OUTFG 
      LDA EQTA,I    GET SELECT CODE 
      AND C77 
      STA LU
      LDA EQTA      GET ADDRESS OF STATUS WORD
      INA 
      STA EQTW2 
      INA           GET ADDRESS OF LENGTH WORD
      STA EQTW3 
      LDA REQA,I    GET SUB MODE
      RAL,RAL 
      ALF,ALF 
      AND C7
      STA REQC
      LDA REQA,I    GET READ WRITE FLAG 
      ALF,RAR 
      AND C7
      STA RWFLG 
      LDA REQA      GET REQUEST BUFFER ADDRESS
      ADA C2
      STA REQW3 
      INA           GET REQUEST LENGTH ADDRESS
      STA REQW4 
* 
*     HERE WE CONFIGURE ALL THE I/O INSTRUCTIONS
* 
      LDA STCC      GET STC 0,C INSTUCTION
      IOR LU        MASK IN SELECT CODE 
      STA LSCMD 
      STA STC1
      XOR C4K       CONVERT TO CLC 0,C INSTUCTION 
      STA CLCC1 
      STA CLCC2 
      STA CLCC3 
      XOR C5K       CONVERT TO STC 0 COMMAND
      STA TRCMD 
      STA STC2
      XOR C100      CONVERT TO AN OTA 0 COMMAND 
      STA OTA1
      STA OTA2
      STA OTA3
      XOR C300      CONVERT TO LIA COMMAND
      STA LIA1
      STA LIA2
      XOR C5K       CONVERT TO LIB 0,C COMMAND
      STA LIBC1 
* 
*     DONE WITH I/O CONFIGURATION 
* 
CLCC1 CLC 0,C       TURN CARD OFF 
      JMP SETIO,I   RETURN
* 
C5K   OCT 5000
C300  OCT 300 
C7    OCT 7 
EQTW3 NOP 
* 
      SKP 
* 
*     CONTINUATOR SECTION 
* 
I.65  NOP 
CLCC2 CLC 0,C       TURN OFF CARD 
      STA A1        SAVE A
      CLA 
      CPA LINK?      IS LINK DISABLED?
      JMP DUMMY      YES
* 
      STB RB1       B 
      ERA,ALS 
      SOC 
      INA 
      STA A2        E AND O REG 
      LDB DBBIT 
      CLA,INA 
      CPA INT?        IF IN LISTEN MODE (OCT 113YY),
      ISZ DBUSY         SET D.65 BUSY,
      CPA INT?          AND 
      JSB STAT          SET EQT ENTRY BUSY
* 
      CLA 
      STA OUTFG     AND CLEAR TRANSMIT FLAG 
      LDB IJMP      GET ADDRESS OF ROUTINE TO GO TO 
      SZB           IF ZERO TREAT AS UNKNOWN INTERRUPT
      JMP B,I       OTHERWISE GO TO CORRECT ROUTINE 
      JSB RDD.C     CLEAR THE CARD
      JMP CEXT3     EXIT AS IF NOTHING HAD HAPPENED 
* 
DUMMY LDA A1         EXIT I.65
      JMP I.65,I
* 
      SKP 
* 
*     HERE FOR REQUEST COMING INTERRUPT 
* 
ILSTN JSB CHECK     CHECK DATA
      JMP RETRY     PARITY ERROR-TRY AGAIN! 
      JMP ILSN1     STOP RECEIVED - IGNORE
      CPA CA        WAS IT REQUEST COMING?
      RSS 
      JMP LNRC3     NO - SIMULATE PARITY ERROR
      JSB STNW      REQUEST COMING - SEND TNW 
      LDB LNCI      SET CO-ROUTINE POINTER TO ILNC
      RSS           AND RETURN
ILSN1 LDB IJMP      SET UP TO IGNORE STOP RECEIVED
      JMP CEXIT     AND RETURN
* 
RETRY ISZ CKFLG 
      LDA CKFLG     PARITY COUNTER> PRESET LIMIT (=8)?
      CPA YDSA? 
      JMP LNRC3     YES,HAVE NO CHOICE BUT TO SET PARITY! 
      LDB DBBIT 
      JSB STAT      SET DRIVER BUSY 
      LDA RSS       MODIFY DRIVER INITIATOR SECTION FOR RE-TRY. 
      STA EXIT0 
      STA EXIT2 
      JSB SSTOP 
      LDB SSTPI     BUT 1ST,STOP ALL KNOWN TRANSMISSIONS! 
      JMP CEXT1 
EXIT0 NOP           ENTERED HERE FROM D.65 INITIATOR. 
      JMP D.65,I    NORMALLY THIS CODE EXECUTED!!!! 
      CLA 
      STA EXIT0     HERE ONLY IF PARITY OCCURED.
      STA CMD 
      JMP OTA1+1
YDSA? DEC 8 
CKFLG NOP 
RSS   RSS 
* 
      SKP 
* 
*     HERE FOR LENGTH WORD COMING INTERRUPT 
* 
ILNC  JSB CCHCK     CHECK FOR PARITY ERROR OR STOP
      INA           SET FOR CORRECT NEGITIVE COUNT
      ADA RBUFL     GREATER THAN MAX? 
      SSA 
      JMP LNRC4     YES...ERROR 
      LDA TEMP2     GET LENGTH AGAIN
      CMA           MAKE COUNT POSITIVE 
      STA RBUFL 
      STA EQTW3,I   SAVE LENGTH 
      JSB STNW      TELL OTHER SIDE TO CONTINUE 
      JSB CEXT2     DO CONTINUATION EXIT
* 
      SKP 
* 
*     HERE ON A MODE WORD COMING INTERRUPT
* 
      JSB CCHCK     CHECK FOR STOP AND PARITY 
      RAL,CLE,ERA 
      STA OMODE     SAVE OTHER SIDES MODE 
      CLA,SEZ       REQUEST AND DATA? 
      CCA           YES 
      STA WAITF     SET OR CLEAR DATA FLAG
IMOD9 JSB ITRAN     SET UP INCASE OF INTERRUPT TRANSFER 
      LDA OMODE     GET OTHER SIDES MODE
      SZA,RSS       DMA SPECIAL?
      JSB GTDMA     NO...DMA OPEN...SEE IF WE GOT DMA 
      LDA RBUFL     GET REQUEST BUFFER LENGTH 
      SZA,RSS       ZERO LENGTH REQUEST 
      JMP ERQ1      YES...GO DO COMPLETION
      LDA PARCT     GET PARITY COUNT
      CPA YDSA?     MAX NUMBER OF TIMES?
      JMP LNRC3     YES...PARITY ERROR
      JSB DMA       YES...TURN IT ON
      LDA PARCT     GET PARITY COUNT
      ISZ PARCT     INCREMENT PARITY COUNT
      SZA           FIRST TIME? 
      JMP ILNC3     NO
      LDA OMODE     GET OTHER MODE
      SZA           IS OTHER MODE DMA?
      JMP ILNC2     NO
      LDA DMAF      DO WE HAVE DMA? 
      SZA 
      JMP ILNC4     YES 
      ISZ OMODE     SET OTHER MODE NON ZERO 
      JMP ILNC2     SET FOR NON DMA TRANSFER
ILNC4 LDA GDMAW     GET WE HAVE DMA WORD
      JSB OUTPA     SEND IT 
      RSS 
ILNC2 JSB STNW      YES...TELL THEM TO CONTINUE 
      RSS 
ILNC3 JSB SRLW      NO
      LDB IRTNS     INTERRUPT DATA TRANSFER?
      LDA OMODE     GET OTHER SIDE MODE 
      SZA           DMA OPEN? 
      JMP CEXIT     NO
      JSB CEXT2     YES 
* 
* 
      SKP 
* 
*     HERE FOR REQUEST COMPLETE...DMA 
* 
      JSB CLDMA     CLEAR DMA ACTIVE...IF SET 
      JSB CHECK     CHECK FOR PARITY ERRORS AND STOP
      JMP IMOD9     PARITY ERROR...RETRY
      JMP LNRC5     STOP WAS RECEIVED 
ERQ1  LDA WAITF     REQUEST AND DATA
      SZA,RSS       REQUEST & DATA? 
      JSB OFDMA     TURN OFF DMA...REQUEST ONLY 
      JSB STNW      TELL OTHER SIDE ALL IS WELL 
      JSB CEXT2     SET RECEIVE MODE TO GET REPLY 
* 
*     HERE WHEN HANDSHAKING IS OVER 
* 
ICREQ JSB RDD.C     CLEAR CARD
      JMP REQDN     TERMINATE 
* 
A1    NOP 
A2    NOP 
RB1   NOP 
TEMPB NOP 
TEMPC NOP 
OMODE NOP 
GDMAW OCT 67
IRTNS DEF TRNSI 
C10   OCT 10
C40   OCT 40
C200  OCT 200 
TEMPD NOP 
CREQI DEF ICREQ 
* 
      SKP 
* 
*     HERE ON RETURN FROM SENDING STOP
* 
SSTPI DEF *+1 
      JSB RDD.C     READ CARD TO CLEAR IT 
      JSB OFDMA     TURN OFF DMA
      CLA 
      STA WAITF     AND WAITING FOR DATA FLAGS
* 
EXIT2 NOP           "RSS" ONLY IF IN PARITY MODE. 
      JMP REQDN 
      STA EXIT2 
      LDB DBBIT 
      JSB STAT
      JSB CLEAR 
      JMP D.652     RE-INITIATE DRIVER CALL IF PARITY OCCURED.
* 
* 
      SKP 
* 
*     HERE FOR REQUEST DATA COMING VIA INTERRUPTS 
* 
TRNSI JSB CHECK     READ CARD 
      JMP TRNS1     PARITY ERROR
      JMP LNRC5     STOP RECEIVED 
      STA TEMPB,I   SAVE VALUE
      ISZ TEMPB     GET NEXT ADDRESS
      JMP *+3 
TRNS1 STA TEMPB,I   SAVE VALUE
      ISZ TEMPD     INCREMENT PARITY COUNT
      ISZ TEMPC     DONE? 
      JMP ILNC2      NO 
      LDB TEMPD     GET PARITY ERRORS 
      SZB           ANY ERRORS? 
      JMP IMOD9     YES...TRY AGAIN 
      JMP ERQ1      NO...TERMINATE
* 
      SKP 
* 
*     HERE FOR START OF DATA WRITE
* 
INTWD JSB CCHCK     CHECK FOR STOP OR PARITY ERROR
      CPA CB        TRANSMIT NEXT WORD? 
      RSS           YES 
      JMP LNRC3     NO...ERROR
* 
*     OTHER SIDE READ TO RECEIVE DATA 
* 
IWD1  JSB DMA       GET DMA 
      JSB ITRAN     SET UP INCASE OF INTERRUPT TRANSFER 
      LDB DDATI     DMA DATA COMPLETE INTERRUPT 
      LDA DMAF
      SZA           DMA?
      JMP CEXT1     YES 
* 
*     FALL THRU TO OUTDI IF NOT DMA TRANSFER
* 
      SKP 
* 
*     HERE TO OUTPUT DATA ON INTERRUPT
* 
OUTDI LDA TEMPB,I   GET WORD
      JSB OUTPA     OUTPUT WORD 
      ISZ TEMPB     GET NEXT ADDRESS
      LDB IOUTD     GET CONTINUATION INTERRUPT
      ISZ TEMPC     DONE? 
      JMP CEXT1     NO...CONTINUE..LEAVE IN TRANSMIT MOD
IWTRD JSB CEXT2     YES...SET FOR WAITING FOR STATUS
* 
      SKP 
* 
*     HERE FOR STATUS ON DATA WRITE 
* 
      JSB CHECK     GO READ STATUS OF LAST TRANSFER 
      JMP IWD1      PARITY ERROR...RETRY
      JMP LNRC5     STOP...ERROR
      CPA CB        TNW?
      RSS           ALL OK...TERMINATE
      JMP LNRC3     NO...TREATE AS A PARITY ERROR 
      JSB OFDMA     RESET DMA 
      CLA           GET A ZERO
      STA WAITF     CLEAR WAITING FOR DATA INTERRUPT
REQDN CLB,INB       SET FOR ALL OK
      JMP CEND      TERMINATE 
* 
DDATI DEF IDDAT 
IOUTD DEF OUTDI 
* 
      SKP 
* 
*     HERE FOR DMA COMPLETION...WRITE DATA
* 
IDDAT JSB CLDMA     TURN OFF DMA
      JSB CCHCK     GO CHECK DATA QUALITY 
      JMP IWTRD     SET STATUS INTERRUPT
* 
      SKP 
* 
*     HERE FOR LENGTH WORD TRANSMIT INTERRUPT 
* 
ISLW  JSB CCHCK     CHECK OF STOP OR PARITY ERROR 
      CPA CB        IS IT TNW?
      JMP ITWR2     YES 
      CPA CD        IS IT RLW?
      RSS           YES 
      JMP LNRC3     NO...ERROR
      CLA           GET A ZERO
      INA,SZA       HERE WE SIT AWHILE BEFORE TRYING AGAIN
      JMP *-1 
      JSB SRC       TRY AGAIN 
      LDB SLWI      SET FOR SAME INTERRUPT
      JMP CEXIT     DO CONTINUATION EXIT
ITWR2 LDA RBUFL     GET LENGTH
      CMA           NEGATE COUNT
      JSB OUTPA     OUTPUT LENGTH WORD
      JSB CEXT2     DO CONTINUATION EXIT
* 
      SPC 4 
* 
*     HERE TO SEND MODE WORD
* 
      JSB CCHCK     STOP OR PARITY ERROR
      JSB GTDMA     SEE IF WE CAN GET DMA 
      CLA,SEZ,RSS   YES 
      INA           NO
      LDB DATFG     GET FLAG
      CLE,SZB       REQUEST AND DATA? 
      CCE           YES 
      ELA,RAR       SET IN DATA FLAG
      JSB OUTPA     OUTPUT WORD 
      JSB CEXT2     DO CONTINUATION EXIT
* 
                                                                                                                                