ASMB,R,Z,L,C
      IFZ 
      HED DVA65 24999-16205 REV 1913 * (C) HEWLETT-PACKARD CO. 1979  #
      NAM DVA65 24999-16205 REV 1913 790110 W/ TRACE   #
      XIF 
      IFN 
      HED DVA65 91740-16071 REV 1913 * (C) HEWLETT-PACKARD CO. 1979 
      NAM DVA65 91740-16071 REV 1913 790110 
      XIF 
      SPC 2 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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 2 
*************************************************************** 
* 
*DVA65              COMMUNICATIONS DRIVER FOR DS/1000 
*                   ALL LINE INTERRUPTS HANDLED BY MICROCODE
*                   EXCEPT PROTOCOL FOR LINES ABOVE PRIVILEGED SLOT 
* 
*SOURCE PART #      91740-18071 
* 
*REL PART #         91740-16020 
* 
*WRITTEN BY:        CHUCK WHELAN
* 
*DATE WRITTEN:      DEC 1976
*MODIFIED BY:       LYLE WEIMAN, AUG. '78, TO ADD TRACE CAPABILITY
*                   (# IN RIGHT-HAND COLUMN MARKS CHANGES)
*MODIFIED BY:       CRAIG HAMILTON 09/07/78 TO IMPROVE ERROR RECOVERY.
* 
* USE "Z" OPTION TO INCLUDE "TRACE" OPERATION          #
* USE "N" OPTION TO EXCLUDE "TRACE" OPERATION          #
* 
*************************************************************** 
      SPC 3 
* 
*     DEFINE ENTRY POINTS 
* 
      ENT IA65,CA65 
      ENT MIC$X 
      SPC 1 
* 
*     DEFINE EXTERNALS
* 
      EXT $LIST,$OPSY 
      IFZ 
      EXT $TIME,$CGRN                                  #
      XIF 
      SKP 
* 
*     CALLING SEQUENCES 
* 
      SPC 2 
*     TRANSMIT OR RECEIVE REQUEST AND DATA
      SPC 1 
*     JSB EXEC
*     DEF *+7 
*     DEF RCODE     OCT 1 
*     DEF CONWD     LU  (BIT 6= 1 IF WRITE, BIT 7= 1 IF PROGL)
*     DEF DBUF      DATA BUFFER ADDRESS 
*     DEF DBUFL     DATA BUFFER LENGTH
*     DEF RBUF      REQUEST BUFFER ADDRESS
*     DEF RBUFL     REQUEST BUFFER LENGTH 
* 
      SPC 2 
*     ENABLE LISTEN MODE
      SPC 1 
*     JSB EXEC
*     DEF *+3 
*     DEF RCODE     OCT 3 
*     DEF CONWD     100B+LU 
* 
      SPC 2 
*     SEND STOP 
      SPC 1 
*     JSB EXEC
*     DEF *+3 
*     DEF RCODE     OCT 3 
*     DEF CONWD     0 + LU
* 
      SPC 2 
*     CLEAR REQUEST 
      SPC 1 
*     JSB EXEC
*     DEF *+3 
*     DEF RCODE     OCT 3 
*     DEF CONWD     200B + LU 
* 
      SPC 2 
* 
      SKP 
* 
*#####################################################################
* 
*     SET UP TRACE BUFFER AND ENABLE TRACE MODE REQUEST              #
*                                                                    #
*     JSB EXEC                                                       #
*     DEF *+5                                                        #
*     DEF RCODE     OCT 20 (CLASS WRITE-READ)                        #
*     DEF CONWD     OCT 700B + LU                                    #
*     DEF BUFR      TRACE BUFFER                                     #
*     DEF TRBFL     TRACE BUFFER LENGTH-- MUST BE 4N + 3             #
*                   WHERE N = # ENTRIES DESIRED IN TABLE.            #
*     DEF RN#       RN# = SYNCHRONIZING RESOURCE NUMBER              #
*                   (MUST BE ALLOCATED GLOBALLY AND LOCKED PRIOR TO  #
*                   CALL).  THIS RN IS CLEARED EACH TIME DRIVER FILLS#
*                   BUFFER, THUS PROVIDING SYNCHRONIZATION WITH TRACE#
*                   PRINTOUT PROGRAM.                                #
*     DEF OPTN      TRACE SELECTION OPTION                           #
*     DEF CLASS     CLASS NUMBER (SET TO ZERO BEFORE CALL).          #
*                                                                    #
*     THEREAFTER, WHENEVER A COPY OF THE CURRENT CONTENTS OF THE     #
*     TRACE TABLE ARE DESIRED, THEY MAY BE OBTAINED WITH A CLASS I/O #
*     "GET" CALL, USING THE CLASS NUMBER RETURNED FROM THE PREVIOUS  #
*     SET-UP CALL.  BE SURE TO SET THE "DO NOT DE-ALLOCATE BUFFER"   #
*     BIT, OR DISASTROUS THINGS WILL HAPPEN!!!!!!!!!!!               #
*                                                                    #
*     TRACE SELECTION SPECIFIER:                                     #
*               0 = TRACE ALL DVA65 ACTIVITY                         #
*              #0 = TRACE ONLY ACTIVITY FOR LU USED IN SET-UP CALL.  #
*                                                                    #
*     "TRACE" BUFFER FORMAT:                                         #
*                                                                    #
*      WORD 1 -- CONTAINS PASS NUMBER (INCREMENTED EACH TIME THE     #
*                TRACE BUFFER IS RESET).  USEFUL IN DETERMINING IF   #
*                TRACE DATA HAS BEEN MISSED.                         #
*      WORD 2 -- CONTAINS ADDRESS OF NEXT ENTRY TO BE MADE IN TABLE  #
*                ("OLDEST" ENTRY IN TABLE).                          #
*      WORD 3 -- BEGINS TRACE ENTRIES, FOUR WORDS PER ENTRY.         #
*      ENTRY WORD 1 -- DATA WORD AS READ OR WRITTEN                  #
*                 2 -- R/X(BIT 15), STATE/EVENT, TIME-OUT INDICATION #
*                      (BIT 0). BIT 15 IS SET IF WORD WAS RECEIVED,  #
*                       ELSE 0.  BIT 0 IS SET IF A TIME-OUT OCCURRED,#
*                       ELSE 0.                                      #
*                      DATA WORD NOT VALID IF TIME-OUT OCCURRED.     #
*                 3 -- EQT ADDRESS                                   #
*                 4 -- TIME-OF-DAY (LOW 16 BITS OF SYSTEM TIME WORD) #
*                                                                    #
*                                                                    #
      SPC 1 
*     ENABLE TRACE MODE REQUEST                                      #
*                  NOTE: YOU MUST HAVE MADE A SET-UP CALL PREVIOUSLY)#
*                                                                    #
*     JSB EXEC                                                       #
*     DEF *+3                                                        #
*     DEF D3                                                         #
*     DEF 1700B+ANY COMMUNICATION LU LINKED TO DVA65                 #
*                                                                    #
*     DISABLE TRACE MODE REQUEST                                     #
*                                                                    #
*     JSB EXEC                                                       #
*     DEF *+3                                                        #
*     DEF D3                                                         #
*     DEF 700B+ANY COMMUNICATION LU LINKED TO DVA65                  #
*                                                                    #
*#####################################################################
      SKP 
* 
*     ERROR CODES (IN EQT 5 STATUS) 
* 
* BIT           MEANING 
* 0    REQUEST COMPLETED...NO ERRORS
* 1    REQUEST PENDING ON A WRITE, OR NOT PENDING ON A READ 
* 2    SIMULTANEOUS REQUEST REJECT
* 3    TIME OUT 
* 4    STOP RECEIVED
* 5    REMOTE BUSY
* 6    PARITY ERROR OR PROTOCOL FAILURE 
* 7    WRITE FLAG (FOR "GRPM" AT CCE) 
* 
* 
*     EQT WORD USAGE BREAKDOWN
* 
*     EQT #         USE 
*     1             DEFINED 
*     2             DEFINED 
*     3             DEFINED 
*     4             DEFINED 
*     5             DEFINED 
*     6             DEFINED 
*     7             ADDRESS OF DATA BUFFER
*     8             LENGTH OF DATA BUFFER 
*     9             ADDRESS OF REQUEST BUFFER 
*     10            LENGTH OF REQUEST BUFFER
*     11            COROUTINE ADDRESS 
*     12            CURRENT STATUS TABLE (SEE BREAKDOWN)
*     13            ADDRESS OF EQT EXTENSION
*     14            DEFINED...USED FOR SINGLE WORD TURN-AROUND TIMEOUT
*     15            DEFINED...MICROCODE ALSO SETS TIME-OUTS 
*     EXT(0)        COUNTER FOR DATA TRANSFER 
*     EXT(1)        LAST WORD RECEIVED OVER COMM LINE 
*     EXT(2)        VERTICAL PARITY WORD / RP REQ LENGTH
*     EXT(3)        DIAGONAL PARITY WORD / RP DATA LENGTH 
*     EXT(4)        COUNT OF TOTAL # BLOCKS TRANSMITTED 
*     EXT(5)        COUNT OF TOTAL NUMBER OF TRANSMIT-RETRIES 
*     EXT(6)        ID SEQ ADDRESS FOR SCHEDULE ON NEW REQUEST
* 
*     BREAKDOWN OF EQT WORD 12
* 
*     BIT           USAGE 
*     0-2           RETRY COUNTER OR
*     0-5           BROKEN LINE COUNTER 
*     6             BROKEN LINE FLAG
*     7-8           NOT USED
*     9             REQUEST PENDING 
*     10            LISTEN MODE ENABLED 
*     11            RESERVED  (USED BY SPECIAL FORCED-COLD-LOAD      #
*                   DRIVER, NOT PART OF DS/1000)                     #
*     12            LAST SUCCESSFUL OPERATION (1=WRITE) 
*     13            FLAG FOR WRITE RETRY IN PROGRESS
*     14            MICROCODE READ/WRITE FLAG 
*     15            POWER-FAIL RECOVERY IN PROGRESS                        #
      SKP 
* 
*     DRIVER INITIALIZATION SECTION 
* 
IA65  NOP 
      LDA EQT14 
      INA 
      STA EQT15     REESTABLISH EQT15 ADDR
      JSB SETIO     CONFIGURE I/O INSTRUCTIONS
SERET LDB EQT13,I   EXTENSION ADDRESS 
      ADB B6
      LDA 1,I       GET 7TH EXT. WORD 
      SZA           IS THIS THE FIRST ENTRY FOR EQT?
      JMP NFIR      NO
* 
*  THIS CODE IS EXECUTED ONLY ON FIRST TIME THROUGH FOR EQT 
* 
      STA EQT12,I   YES, INITIALIZE EQT12 STATUS
      STB TEMP      7TH WORD OF EXT. AREA 
*     MODIFY INTERRUPT TABLE
      LDA CELL      GET SELECT CODE 
      ADA N6        SUBTRACT 6 TO FIND
      ADA INTBA       ENTRY IN INTERRUPT TABLE
      LDB 0,I       FETCH USER INTERRUPT LINK 
      CMB,INB       GET INTERRUPT LINK
      STB TEMP,I      AND SAVE
      LDB EQT1      SET DRIVER
      STB 0,I         INTERRUPT LINK
      JSB RDD.C     CLEAR CARD
*     MODIFY CODE IF A DMS SYSTEM 
      LDB $OPSY     SYSTEM TYPE 
      CLA,CCE 
      RBR,SLB       DMS SYSTEM? 
      STA MOD1      YES, MODIFY INSTRUCTIONS
      ERA 
      CCB           SET REGISTERS FOR CPU TYPE CHECK
      OCT 100060    THIS SETS B TO 0 IFF XE 
      NOP 
      LDA XEMIC     MICROCODE CALL FOR XE 
      SZB           SKIP IF XE
      LDA MXMIC     ELSE USE 21MX MICROCODE CALL
      STA MIC$X     SAVE LOCALLY
* 
      LDA EQT4,I    TELL RTE TO RETURN CONTROL ON TIME OUT, 
      IOR .300       AND FOR POWER-FAIL RECOVERY.          #
      STA EQT4,I
      SKP 
* 
NFIR  LDB EQT5,I
      LDA EQT6,I    GET REQUEST CODE
      AND B3703     ISOLATE IT
      CCE,SSB       IS THIS A POWER-RECOVERY ENTRY?        #
      JMP PFAIL      YES, GO TO ABORT CURRENT OPERATION.   #
      CPA B3        IS IT A STOP REQUEST? 
      JMP STPRQ      YES, SEND A "STOP".
*     DETERMINE OPERATION TYPE
      LDB 0 
      AND B3        MASK OFF CODE 
      CPA B1        IS IT A READ? 
      JMP REQ       YES...READ OR WRITE/READ
      CPB B203      IS IT A CLEAR REQ?
      JMP CLREQ     YES...CLEAR REQ.
      CPB B103      IS IT AN ENABLE LISTEN MODE 
      JMP LCREQ     YES 
      IFZ 
      CPB B703      DISABLE TRACE MODE?                #
      JMP DTRAC     YES.                               #
      CPB B1703     RE-ENABLE TRACE MODE?              #
      JMP ETRAC                                        #
      XIF 
*     ERROR IN REQUEST HAS OCCURRED 
      CLB,INB       CODE FOR REQUEST ERROR
      SZA           WAS IT A CONTROL CODE?
REJCT INB           YES, RETURN A 2 (CONTROL REQ. ERROR)
      JMP IDON
* 
* 
B3    OCT 3 
B6    OCT 6 
B103  OCT 103 
B203  OCT 203 
B3703 OCT 3703
.300  OCT 30000                                            #
MXMIC OCT 105520
XEMIC OCT 105300
      IFZ 
B700  OCT 700                                          #
B1700 OCT 1700
B703  OCT 703                                          #
B1703 OCT 1703                                         #
      XIF 
      SKP 
* 
*  SET UP ENABLE LISTEN MODE
LCREQ LDA MIC$X     INITIALIZE TO USE OPEN LOOP MICROCODE 
MOD1  JMP LCR2      NOP IF DMS SYSTEM 
CELL  EQU *+1 
      XSA *         DO CROSS-MAP STORE
      RSS 
LCR2  STA CELL,I    NON-DMS, MODIFY TRAP CELL 
      JSB RDD.C     READ CARD TO CLEAR IT 
LISTI STC 0,C       SET RECEIVE INTERRUPT MODE
      LDA .020      SET LISTEN ENABLED STATUS 
      RSS 
CLREQ JSB RDD.C     READ DATA AND STATUS FROM CARD TO CLEAR 
      STA EQT12,I   UPDATE EQT STATUS 
      CLB,INB       GOOD STATUS BIT 
      JSB STAT      PUT NEW STATUS IN EQT 5 
      LDB B4        SET FOR IMMEDIATE COMPLETION
* 
*     HERE FOR COMPLETION RETURN
*     EQT 12 WILL BE SET DEPENDING UPON LISTEN MODE 
*     STATUS
IDON  STB TEMP      SAVE COMPLETION STATUS
      LDA EQT12,I   GET CURRENT DRIVER STATUS 
      AND .020      MASK OFF ALL BUT LISTEN ENABLE
      LDB LSTNI     GET ADDRESS OF LISTEN ENABLED ROUTINE 
      SZA           LISTEN MODE ENABLED?
      CLA,INA,RSS   YES, ENABLE MICROCODE READ
      CLB           NO
      STA EQTX,I    SET TRANSFER COUNT
      LDA TEMP      GET STATUS AGAIN
      STB EQT11,I   SAVE COROUTINE ADDRESS
      JMP IA65,I    RETURN TO RTE SYSTEM
      SKP 
* 
*     COME HERE ON A READ OR WRITE
* 
REQ   EQU * 
      IFZ 
      LDA EQT6,I    GET REQUEST                        #
      AND B1700     MASK SUBFUNCTION                   #
      CPA B700      ENABLE TRACE MODE CALL?            #
      JMP TRAC.     YES                                #
      XIF 
      LDB EQT7,I    GET ADDRESS OF DATA 
      ADB N7        POINT TO 2ND WORD OF CLASS HDR
      LDA EQT14,I   GET THIS EQT'S TIMEOUT
      IOR TBITS     ENSURE BITS 15, 14, AND 
      RAL            0 ARE SET FOR SYSTEM USE 
      STA 1,I       PASS TIMEOUT TO GRPM
      LDA EQT8,I    DATA LENGTH 
      CMA,INA 
      ADA EQT9,I    COMPUTE (REQ ADDR - DATA LEN) 
      STA EQT7,I    USE IT AS ACTUAL BUFFER ADDR
* 
      LDA EQT12,I 
      AND NMSK      CLEAR UNNECESSARY FLAGS 
      STA EQT12,I 
* 
      LDB EQT6,I    GET REQUEST CODE
      BLF,BLF 
      RBL 
      ALF,RAR 
      ALF,ERA       E = REQUEST PENDING FLAG
      LDA EQT8,I
      STA EQT6,I    SET XMISSION LOG INTO EQT6
      ADA EQT10,I   COMBINE BOTH LENGTHS
      SLB,RSS       IS THIS A WRITE TO SCE-1? 
      STA EQT8,I    NO, SAVE COMBINED LENGTHS 
      LDA EQT5,I    EQT STATUS WORD 
      AND B1774     CLEAR BITS 7-0
      SSB,RSS       IS THIS A WRITE?
      CME,RSS       NO, REVERSE RP FLAG 
      IOR B200      YES, SET BIT 7
      STA EQT5,I
      CLA,SEZ,INA   SKIP IF (WRITE&NOT RP) OR (READ&RP) 
      JMP BUSY      OTHERWISE BUSY OR INVALID REQUEST 
      SSB           SKIP IF A READ
      JMP WREQ      DO A WRITE
      SKP 
* 
*  READ REQUEST 
* 
      LDA EQT12,I 
      AND CLR9      CLEAR REQUEST PENDING FLAG
      STA EQT12,I 
* 
REQ1  LDB EQT10,I   GET RECEIVED RQST LENGTH
      LDA EQT4,I
      ALF,ALF       GET LSB OF SUBCHANNEL 
      RAL,ELA       AND STORE IT IN E REG 
      RBL,ERB       ECHO WD WITH BIT15=1 IF CLOSED LOOP 
REQ2  EQU * 
      IFZ 
      LDA B23       STATE 19: READ RQST, ECHOING RQST LNTH# 
      XIF 
      JSB TALK      READ RESPONSE 
      IFZ 
      LDA B24       STATE 20: READ RQST, CHECKING RESPONSE# 
      XIF 
      JSB CHECK     CHECK RCVD WORD 
      JMP REQ3      MUST RETRY ON TIMEOUT 
      JMP ERR.7     STOP RECEIVED                      #
      JMP ERR.8     RC RCVD, PROTOCOL FAILURE 
      CPB TNW 
      JMP RDREQ     "TNW" RCVD, OK TO READ-IN REQUEST 
      CPB RLW       RLW RECEIVED? 
      JMP REQ1      YES, RE-ECHO REQUEST LENGTH 
* 
REQ3  JSB RETRY     UNRECOGNIZED WORD RECEIVED
      LDB RLW       SEND RLW AND
      JMP REQ2       TRY AGAIN
      SPC 2 
* 
*     SET-UP TO READ DATA BLOCK 
* 
RDREQ LDA EQT8,I    DATA LENGTH 
      CPA B2        IS THIS AN SCE-1 REQUEST? 
      CLA,INA,RSS   YES 
      JMP RDBLK     NO, INITIATE READ 
      STA EQT8,I    SET READ LENGTH TO 1
      LDB EQT7,I    BUFFER ADDRESS
      LDA EQT1      ADDR OF THIS EQT
      STA 1,I       PASS IT TO PROGL IN 1ST WORD
      ISZ EQT7,I    BUMP ADDR FOR BUFFER
* 
*  THIS SECTION INITIATES ALL MICROCODE BLOCK READS 
* 
RDBLK LDB EQT4,I
      LSL 9         SIGN = SUBCHANNEL LSB 
      LDA MIC$X     GET MICROCODE MACRO INSTRUCTION 
      SSB           SKIP IF SUBCHANNEL EVEN (XMIT MODE) 
      INA           ODD SUBCHANNEL, RUN CARD IN RCV MODE
      STA CELL,I    STORE COMM.LINES TRAP CELL
      LDB TNW       SEND TNW
      IFZ 
      CLA           STATE 0: INITIATING READ, SENDING TNW#
      XIF 
      JSB OUTPB 
      LDB EQT14,I    & SET COMM LINE TIMEOUT
      STB EQT15,I 
      LDA EQT8,I    GET SUM OF DATA & REQ LENGTHS 
      CMA           -# OF WORDS -1
      STA EQTX,I    SET MICROCODE'S COUNTER 
      JSB CEXIT     NOW DO IT!
* 
*     BLOCK HAS BEEN READ, CHECK TRANSMISSION 
      LDA COUNT     MICROCODE COUNT 
      ADA EQT8,I
      SSA           SKIP IF XFER GOT STARTED
      JMP RDB4      ELSE RETRY, TNW MAY HAVE BEEN LOST     #
      IFZ 
      LDA B25       STATE 21: BLOCK HAS BEEN READ,          # 
*                                   WAITING FOR TNW#
      XIF 
      JSB CHECK     CHECK XMISSION
      JMP RDTO      TIMEOUT, EXAMINE THE REASON.           #
      JMP ERR.7     STOP RECEIVED                      #
      JMP ERR.8     REQUEST COMING: PROTOCOL FAILURE!      #
RDB2  CPB TNW       WAS LAST A "TNW"?                      #
      JMP ENDIT      YES, SUCCESSFUL READ.                 #
RDTO  CPB RLM       REQUEST TO TRY AGAIN?                  #
      JMP RDB4       YES, SEE IF ALLOWED.                  #
      LDB COUNT     IF THE MICROCODE COUNT HAS             #
      CPB B100       BEEN SET =100B, THEN                  #
      JMP ER6WT       A PROTOCOL FAILURE HAS BEEN DETECTED!#
      SZA           ACTUAL TIMEOUT?                        #
      JMP ERR.3      YES, PROCESS THE ERROR.               #
* 
*  LAST CONTROL UNRECOGNIZED
      IFZ 
      LDA B26       STATE 22:BLOCK READ BUT LAST CTRL UNREC#
      XIF 
RDB3  LDB RLW       SEND "RETRANSMIT LAST WORD             #
      JSB TALK       & READ RESPONSE
      IFZ 
      LDA B27       STATE 23:CHECKING RESPONSE TO RLW  #
      XIF 
      JSB CHECK     SEE WHAT WE GOT 
      JMP RDB5      NO RESPONSE, TRY AGAIN, IF ALLOWED.    #
      JMP ERR.7     STOP RECEIVED                      #
      JMP ERR.8     REQUEST COMING: PROTOCOL FAILURE!      #
      JSB RETRY     RETRY OUR RETRY 
      JMP RDB2
* 
RDB4  JSB RETRY     GIVE IT 8 TRIES 
      JMP RDBLK 
* 
RDB5  JSB RETRY     IF RETRIES ARE ALLOWABLE,              #
      JMP RDB3       SEND RLW, AND AWAIT ACKNOWLEDGMENT.   #
      SPC 2 
*     HERE WHEN 'STOP' RECEIVED ON "READ" 
* 
ERR.7 EQU *                                            #
      JSB RTEQT     RETURN EQT NUMBER                  #
      JMP ERR.4     AND TAKE 'STOP' EXIT               #
* 
RTEQT NOP           SUBROUTINE TO RETURN EQT NUMBER    #
      LDB EQT9,I                                       #
      LDA EQT1                                         #
      STA B,I                                          #
      JMP RTEQT,I   RETURN TO CALLER                   #
* 
*  HERE ON RECEIVE PROTOCOL ERRORS--DELAY TO FORCE XMIT TIMEOUT            #
* 
ER6WT EQU *                                                #
      JSB RTEQT     RETURN EQT ADDRESS SO QCLM CAN PRINT EQT #
      LDA DM100     ALLOW A 1 SECOND DELAY                 #
      STA EQT15,I    TO FORCE A TRANSMITTER TIMEOUT.       #
      CLA           DISABLE                                #
      STA EQTX,I     MICROCODE.                            #
      JSB CEXIT     AWAIT THE TIMEOUT RETURN.              #
      LDB B100      INDICATE PROTOCOL FAILURE IN EQT5.     #
      JMP CEND      GO TO TERMINATE THE CURRENT OPERATION. #
* 
DM100 DEC -100                                             #
* 
      SKP 
* 
*     WRITE REQUEST 
* 
WREQ  LDA EQT9,I
      LDA 0,I       GET 1ST WORD OF REQUEST 
      SLB           IS THIS A PROGL DOWNLOAD? 
      STA EQT10,I   YES, USE IT INSTEAD OF BUFFER LEN 
* 
WRTRY LDB RC
      IFZ 
      CLA,INA       STATE 1:WRITING, SENDING RC        #
      XIF 
      JSB TALK      SEND RC & READ RESPONSE 
      IFZ 
      LDA B2        STATE 2:WRITING, SENT RC, EXPECT TNW# 
      XIF 
      JSB CHECK     CHECK WHAT WE GOT 
      JMP WRTR1     TRY AGAIN IF TIMEOUT
      JMP WRTRY     STOP, RETRY IMMEDIATELY 
      JMP SIMRQ     RC, SIMULTANEOUS REQUEST
      CPB RLW       RLW RECEIVED? 
      JMP WRTRY     YES, OTHER SIDE SAYS RETRY
      CPB TNW 
      RSS           SKIP IF "TNW" RECEIVED
      JMP WRTR1     UNRECOGNIZED, RETRY 
*     SEND DATA LENGTH
      LDB EQT6,I
      IFZ 
      LDA B3        STATE 3:WRITING, SENDING DATA LENGTH# 
      XIF 
      JSB TALK      SEND DATA LENGTH, GET ECHO
      IFZ 
      LDA B4        STATE 4:WRITING, SENT DATA LNTH, #
*                               EXPECT ECHO          #
      XIF 
      JSB CHECK     CHECK RESPONSE
      JMP ERR.3     TIMEOUT 
      JMP TSDLN     'STOP' CODE MAY BE A VALID DATA LENGTH #
      JMP SIMRQ     SIMULTANEOUS REQUEST
TSDLN CPB EQT6,I    ECHO OK?                               #
      JMP SRQLN     YES                                    #
      CPB STOP      LEGITIMATE 'STOP'?                     #
      JMP ERR.4      YES, PROCESS IT.                      #
      JMP WRTR1     NO, RETRY 
*     SEND REQUEST LENGTH 
SRQLN LDB EQT10,I   REQUEST LENGTH                         #
      IFZ 
      LDA B5        STATE 5:WRITING, SENDING REQUEST LENGTH#
      XIF 
      JSB OUTPB     SEND IT 
      LDA B1776 
      STA EQT15,I    APPROXIMATELY 1 SEC TIMEOUT
      JSB TRAPR     SETUP TRAP CELL FOR 1 WORD READ 
      JSB CEXIT     READ NEXT WORD
WREQ2 EQU * 
      IFZ 
      LDA B6        STATE 6:WRITING, SENT REQ. LNTH, EXPECT ECHO# 
      XIF 
      JSB CHECK     CHECK RESPONSE
      JMP WRTR1     TIMEOUT, RETRY
      JMP ERR.5     REMOTE IS BUSY
      JMP SIMRQ     RC
*     CONFIGURE FOR EITHER CLOSED OR OPEN LOOP MICROCODE PROCESSING 
      LDA EQT10,I 
      ELA           SAVE EQT10 SIGN 
      LDA MIC$X     MICROCODE CALL
      RBL,SLB,ERB  IF BIT 15=1, RCVR WANTS CLOSED LOOP
      INA           SET TO CALL CLOSED LOOP PROCESSOR 
      STA CELL,I    SET TRAP CELL 
      CPB EQT10,I   CHECK ECHOED RQST LENGTH
      JMP WRBLK     LENGTH ECHO IS OK 
      SKP 
* 
      JSB RETRY     NOT VALID ECHO, BUMP RETRY COUNT
      CPB RLW       WAS IT AN RLW? (SCE-1 RETRY)
      JMP WRTRY     YES, DO IMMEDIATE RC RETRY
      LDB RLW 
      IFZ 
      LDA B7        STATE 7:WRITE RETRY                #
      XIF 
      JSB TALK      SEND RLW
      JMP WREQ2 
* 
*   REQUEST PREAMBLE WRITE FAILURE - WAIT 1 I/O T.O. AND RETRY THE RC#
* 
WRTR1 JSB RETRY     CHECK RETRY COUNT 
      LDB EQT14,I   SET COMMUNICATIONS
      STB EQT15,I     LINE TIMEOUT
      JSB TRAPR     SETUP TRAP CELL FOR 1 WORD READ 
      JSB CEXIT     DO READ 
      IFZ 
      LDA B10       STATE 8: REQUEST PREAMBLE WRITE FAILURE--RETRY# 
      XIF 
      JSB CHECK     SEE WHAT WE GOT 
      JMP WRTRY     TIMED-OUT, RESEND RC
      JMP ERR.4     STOP RCVD, EXIT 
      RSS           RC, SIMULTANEOUS REQUEST
      JMP WRTRY     UNRECOGNIZED, DO RC ANYWAY
* 
*  SIMULTANEOUS REQUEST OCCURRED, RESOLVE BASED ON LAST OPERATION 
* 
SIMRQ JSB RETRY     DON'T TRY FOREVER 
      LDA EQT12,I 
      ALF,SLA       TEST LAST SUCCESSFUL OPERATION
      RSS           LAST WAS WRITE, WE MUST WAIT
      JMP WRTR1+1   LAST WAS READ, WE GET PRIORITY
* 
      LDB RLW 
      IFZ 
      LDA B11       STATE 9: WRITING, SIMULT.RQST, #
*                            AM BACKING DOWN       #
      XIF 
      JSB XMITX     SEND RLW IN XMIT MODE 
      LDB B4
      JMP CEND      GIVE SIMULTANEOUS REQUEST STATUS
      SKP 
*     ENTER HERE TO DO ALL BLOCK WRITES 
WRBLK LDB TNW       THIS TNW WILL INITIATE MICROCODE
      IFZ 
      LDA B12       STATE 10:WRITING, SENDING TNW, EXPECT TNW#
      XIF 
WXFER EQU * 
      JSB OUTPB     SEND IT 
      LDB EQT14,I 
      STB EQT15,I   SET LINE TIMEOUT
      LDA EQT12,I 
      IOR .400      SET MICROCODE WRITE BIT 
      STA EQT12,I   UPDATE EQT STATUS 
      LDA EQT8,I    LENGTH FOR XFER 
      SZA,RSS 
      JMP ENDIT     ZERO LENGTH DATA, GET OUT NOW 
      CMA           -LENGTH-1 
      STA EQTX,I    SET MICROCODE COUNTER 
      JSB CEXIT     LET MICROCODE DO ITS THING
* 
*     BLOCK HAS BEEN WRITTEN, CHECK TRANSMISSION
      LDA COUNT     GET MICROCODE XFER COUNT,              #
      LDB EQTX       AND EQT EXTENSION ADDRESS.            #
      SZA,RSS       IF THE TRANSFER WAS SUCCESSFUL, THEN   #
      JMP WRTOK      COMPLETE THE HOUSEKEEPING.            #
*                                                                          #
      CPA B77       IF PARITY FAILED                       #
      JMP WRTR2      GO TO RETRY THE TRANSFER.             #
      CPA B100      IF PROTOCOL FAILED,                    #
      INB,RSS        THEN SKIP TO DETERMINE THE REASON;    #
      JMP ERR.3       ELSE, GIVE A TIMEOUT ERROR.          #
      LDA B,I       GET THE RECEIVED WORD.                 #
      CPA STOP      IF A "STOP" WAS RECEIVED,              #
      JMP ERRW4      THEN ABORT, AND INFORM THE CALLER.    #
      CPA RC        IF AN "RC" WAS RECEIVED, THEN THE RCVR #
      JMP SIMRQ      IS OUT OF SYNC--RESOLVE THE CONFLICT. #
      JMP ERR.9     UN-RECOGNIZEABLE: PROTOCOL FAILURE!    #
*                                                                          #
WRTOK ADB B4        POINT TO DATA BLOCK XFER COUNTER.      #
      ISZ B,I       BUMP THE TOTAL SUCCESSFUL BLOCK COUNT. #
      NOP                                                  #
      JMP ENDIT     COMPLETE THIS OPERATION.               #
* 
*     PARITY FAILURE: PERFORM A WRITE RETRY                                #
WRTR2 JSB RETRY     CHECK RETRY COUNT                      #
      ADB B5        POINT TO THE BLOCK RETRY COUNTER       #
      ISZ B,I       BUMP WRITE RETRY COUNTER
      NOP 
      LDA EQT12,I 
      IOR .200      SET "WRITE RETRY" FLAG
      STA EQT12,I 
      LDB RLM       "RETRANSMIT LAST MESSAGE" 
      IFZ 
      LDA B13       STATE 11: PERFORMING WRITE RETRY   #
      XIF 
      JMP WXFER     PERFORM RE-WRITE
      SKP 
*  LOCAL BUSY OR READ REJECT FOR NO R.P.
BUSY  CCB 
      LDA EQT15,I   IS THERE A TIMEOUT PENDING
      IOR EQTX,I     OR IS MICROCODE ENABLED? 
      SZA,RSS       SKIP IF YES TO EITHER 
      STB EQT15,I   ELSE SYSTEM WIPED OUR TIMEOUT 
      LDB B2
      JSB STAT      SET LOCAL BUSY FLAG 
      LDA B4        IMMEDIATE COMPLETION
      LDB EQT6,I    RETURN DATA LENGTH IN B 
      JMP IA65,I    RETURN
* 
*  HERE FOR REMOTE BUSY 
ERR.5 LDB B40 
      JMP CEND
*                                                                          #
*     HERE FOR PROTOCOL FAILURES ON 'READ'
*     STORE EQT ADDRESS IN 2ND BUFFER 
ERR.8 EQU * 
      JSB RTEQT     STORE EQT                             # 
      JMP ERR.9     AND EXIT W/ PROTOCOL FAILURE STATUS   # 
* 
* POWER FAIL: SEND 'STOP' & REPORT PROTOCOL ERROR; HIGHER LEVELS MAY RETRY #
*                                                                          #
PFAIL LDA EQT12,I   SET POWER-FAIL RECOVERY IN PROGRESS    #
      RAL,ERA        (EQT12: BIT#15)                       #
      STA EQT12,I     INTO THE EXTENDED STATUS WORD.       #
      IFZ 
      LDA B13       STATE 13:POWER FAILURE
      RSS 
      XIF 
* 
*  HERE FOR PARITY ERROR
ERR.6 EQU *                                                #
      IFZ 
      LDA B31       STATE 25: PARITY ERROR             #
      RSS                                              #
      XIF 
* 
*                   HERE ON ALL PROTOCOL FAILURES (WRITING & READING) 
* 
ERR.9 EQU * 
      IFZ 
      LDA B32       STATE 26:PROTOCOL FAILURE          #
      XIF 
* 
*  HERE TO SET ERROR, SEND STOP, & TERMINATE
ERSET EQU * 
      LDB B100      LOAD PARITY ERROR STATUS
      IFZ 
      STA STATE     SAVE DRIVER STATE                  #
      XIF 
      JSB STAT      PUT STATUS INTO EQT 5 
      LDB STOP
      IFZ 
      LDA STATE     LOAD STATE #(DEPENDS ON ERROR)     #
      XIF 
      JSB XMITX     SEND STOP & AWAIT INTERRUPT 
      JSB RDD.C     CLEAR CARD BY READING IT
      LDA EQT5,I    WAS THIS                           #
      ALF,ALF         REQUEST                          #
      SSA              A 'READ'?                       #
      JMP CEND+1      NO.                              #
      JSB RTEQT     RETURN ADDRESS OF EQT IN 2ND BUFFER#
      JMP CEND+1    AND RETURN ERROR CODE.             #
* 
LSTNI DEF ILSTN 
B1    OCT 1 
.020  OCT 2000
.010  OCT 1000
* 
B40   OCT 40
B77   OCT 77
B100  OCT 100 
.100  OCT 10000 
.200  OCT 20000 
.400  OCT 40000 
NMSK  OCT 13100 
TBITS OCT 160000
CLR9  OCT 176777
CLR11 OCT 173777
      SKP 
* 
*  THIS SUBROUTINE INITIALIZES THE EQT TIMEOUT FLAG, SETS THE 
*  COMM LINE TRAP CELL TO A "JSB CIC" IF IT IS ABOVE THE
*  PRIVILEGED CARD AND SETS THE MICROCODE COUNTER TO 1. 
* 
TRAPR NOP 
      LDA EQT4,I
      AND CLR11     CLEAR THE EQT4 TIMEOUT FLAG 
      STA EQT4,I
      LDB CELL      THIS LINE'S SELECT CODE 
      CMB,INB 
      ADB DUMMY     TEST AGAINST PRIVILEGED CARD'S SC 
      LDA MIC$X     MICROCODE CALL MACRO
      SSB           ARE WE ABOVE THE PRIVILEGED CARD? 
      LDA TBG,I     YES, GET A "JSB CIC"
      STA CELL,I    SETUP TRAP CELL 
      CLA,INA 
      STA EQTX,I    SET MICROCODE COUNT = 1 
      JMP TRAPR,I   RETURN
      SPC 1 
* 
*  SEND WORD, SET TIMEOUT, & AWAIT RESPONSE 
* 
TALK  NOP 
      JSB OUTPB     SEND WORD IN B REG
      LDB EQT14,I   SET COMMUNICATIONS
      STB EQT15,I     LINE TIMEOUT
      JSB TRAPR     SETUP TRAPCELL FOR 1 WORD READ
      LDA TALK      COROUTINE RETURN ADDRESS
      JMP CEXT1 
      SPC 1 
* 
*  IF ALREADY 7 RETRIES, GIVE PARITY ERROR ELSE BUMP COUNT & RETURN 
* 
RETRY NOP 
      LDA EQT12,I 
      AND B7        ISOLATE RETRY COUNTER 
      CPA B7        IS THIS THE 8TH RETRY?
      JMP FAIL      YES, RETURN ERROR 
      ISZ EQT12,I   BUMP COUNT
      JMP RETRY,I    & TRY AGAIN
* 
FAIL  LDB COUNT 
      SZB           WAS WORD COUNT ZERO?
      CPB B77       NO, WAS IT BLOCK PARITY?
      JMP ERR.6     RETURN A PARITY ERROR 
* 
*  HERE FOR TIMEOUT 
ERR.3 LDB B10       TIMEOUT BIT FOR EQT5
      IFZ 
      LDA B33 
      XIF 
      JMP ERSET      EXIT WITH LINE T.O. ERROR
      SKP 
* 
*     CONTINUATION SECTION
* 
CA65  NOP 
      JSB SETIO     CONFIGURE I/O INSTRUCTIONS
      LDB EQT11,I   GET COROUTINE ADDR
      SZB,RSS       IT IT SET-UP? 
      JMP IUNKN     GO TO  UNKNOWN INTERRUPT PROCESSOR
      LDA EQTX,I
      STA COUNT     SAVE MICROCODE COUNT
      CLA 
      STA EQTX,I    DISABLE MICROCODE 
      LDA EQT12,I 
      AND .020      ISOLATE "LISTEN ENABLED" BIT
      IOR EQT1,I    ALSO TEST FOR DRIVER BUSY 
      SZA           ARE EITHER CONDITION TRUE?
      JMP 1,I       YES, GO TO COROUTINE ADDR 
      ISZ CA65
* 
CLCRD JSB RDD.C     CLEAR THE CARD
      JMP CEXT3      & GET OUT
* 
* 
* 
*     UNKNOWN INTERRUPTS COME HERE
*     WE'RE IN TROUBLE IF WE EVER GET HERE!!!!! 
* 
IUNKN STB EQT12,I   CLEAR ALL CARD STATI
      LDB B77       SET ALL STATUS ERROR BITS 
      JMP CEND      GET OUT...NOW!!!
* 
      SKP 
* 
*     HERE FOR FIRST INTERRUPT WHEN CARD IN LISTEN MODE 
* 
ILSTN LDA EQT12,I 
      AND B1776     INITIALIZE BROKEN LINE COUNT
      STA EQT12,I 
* 
ILSN0 EQU * 
      IFZ 
      LDA B14       STATE 12: FIRST INTERRUPT IN LSTEN MODE, EXP.RC  #
      XIF 
      JSB CHECK     FIND OUT WHAT THEY SENT US
      JMP ILSN4     TIME OUT...IGNORE 
      JMP ILSN4     STOP...IGNORE 
      JMP ILSN1     REQUEST COMING
* 
*  ENTER HERE WHEN UNRECOGNIZED WORD RECEIVED WHILE "LISTENING" 
      SZB           ZERO RECEIVED?
      JMP ILSN4     NO, JUST IGNORE IT
      JSB RDD.C     CLEAR COMMUNICATIONS CARD 
      LDA EQT12,I 
      ISZ EQT12,I   BUMP BROKEN LINE COUNT
      AND B77 
      CPA B77       64 ZEROES IN A ROW = BROKEN LINE! 
      JMP DEXIT     IT IS, LEAVE CARD DISABLED & EXIT 
      JSB TRAPR     SETUP FOR 1 WORD READ 
      JSB CEXIT     EXIT IN RCV MODE
      JMP ILSN0     GOT ANOTHER WORD, GO CHECK IT 
* 
ILSN1 LDA EQT12,I   EQT STATUS
      IOR .010      SET REQUEST PENDING FLAG
      STA EQT12,I   SAVE IT 
* 
ILSN2 LDB TNW       SEND A TNW
      IFZ 
      LDA B15       STATE 13: GOT RC, SENDING TNW, EXP.DATA LNTH     #
      XIF 
      JSB TALK       & WAIT FOR DATA LENGTH 
      IFZ 
      LDA B16       STATE 14: RECEIVING, EXPECTING DATA LENGTH       #
      XIF 
      JSB PRECK     DO PREAMBLE CHECKING
      ADA B3        POINT TO EXT(3) 
      STB 0,I       SAVE DATA LENGTH FOR PROGRAM
      IFZ 
      LDA B17       STATE 15: ECHOING DATA LENGTH, EXPECT REQ. LNTH  #
      XIF 
      JSB TALK      ECHO IT & GET REQUEST LENGTH
      IFZ 
      LDA B20       STATE 16: RECEIVING, EXPECTING REQ. LNTH         #
      XIF 
      JSB PRECK     DO PREAMBLE CHECKING
      ADA B2        POINT TO EXT(2) 
      STB 0,I       SAVE RQST LENGTH FOR PROGRAM
      ADA B4        POINT TO EXT(6) 
      LDB 0,I       GET I/O ADDRESS OF PROGRAM
      STB PROG      SAVE ADDRESS
      ADB B17       GET TO STATUS 
      LDA 1,I       GET STATUS
      AND B17       MASK OFF ALL BUT STATUS 
      SZA           BUSY? 
      JMP ILSN3     YES...TELL OTHER SIDE TO RETRY
      ADB N5        ID SEG  B REG SAVE AREA 
      LDA EQT4      GET ADDRESS OF LU 
      STA 1,I       PASS IT IN B REG
      JSB $LIST     SCHEDULE PROGRAM
      OCT 101 
PROG  NOP 
ILSN4 JSB RDD.C     CLEAR CARD BY READING IT
      JSB TRAPR     SETUP TRAP CELL & ENABLE 1 WORD READ
      LDA LSTNI     SET FOR LISTEN MODE INTERRUPT 
      JMP CEXT1      AND EXIT 
* 
*     HERE IF WE GOT A "BUSY" CONDITION 
* 
ILSN3 LDB STOP      SEND STOP TO INDICATE "REMOTE BUSY" 
      IFZ 
      LDA B21       STATE 17: QUEUE BUSY, SENDING 'STOP'             #
      XIF 
      JSB OUTPB     SEND IT 
* 
*     HERE ON STOP...CLEAR REQUEST PENDING STATUS 
* 
ILSN5 LDA EQT12,I 
      AND CLR9      CLEAR REQUEST PENDING FLAG
      STA EQT12,I 
      JMP ILSN4     TERMINATE 
* 
*  SUBROUTINE TO CHECK RCVD PREAMBLE WORD & RETRY IF RC 
* 
PRECK NOP 
      JSB CHECK     CHECK RCVD WORD 
      JMP ILSN5     TIME-OUT, CLEAR RP CONDITION
      RSS           7760B IS POSSIBLE DATA LEN
      JMP ILSN2     RC, RESTART PREAMBLE
      LDA EQTX      PASS EXT AREA ADDR BACK 
      JMP PRECK,I 
* 
      SKP 
* 
*  HERE FOR SEND STOP REQUEST 
* 
STPRQ LDB STOP      SEND STOP 
      CLA           DON'T ALTER 
      STA CELL        TRAP CELL.
      IFZ 
      LDA B22       STATE 18: REQUEST TO SEND 'STOP'   #              # 
      XIF 
      JSB XMITX      IN XMIT MODE 
      JSB RDD.C     READ CARD TO CLEAR IT 
      STA CELL
      LDA EQT12,I 
      AND BSTMK     SAVE LISTEN, BROKEN LINE, & LAST OP.BITS
      JMP ENDOK 
* 
*  NOW SET FLAG TO SHOW WHETHER THE LAST SUCCESSFUL OPERATION WAS A 
*  READ OR WRITE.  THIS IS USED TO RESOLVE SIMULTANEOUS LINE CONTENTION.
ENDIT LDA EQT12,I 
      AND .020      SAVE "LISTEN ENABLED" FLAG
      LDB EQT5,I
      BLF,BLF 
      SSB           SKIP IF READ
      IOR .100      SET LAST OPERATION AS WRITE 
* 
ENDOK STA EQT12,I   SET STATUS
      CLB,INB       SET GOOD STATUS                    #
      JMP CEND                                         #
* 
*    'STOP' RECEIVED SOMETIME DURING TRANSMISSION 
ERRW4 EQU * 
      IFZ 
CH.01 NOP           'RSS' HERE WHEN TRACE MODE ENABLED #
      JMP ERR.4      SKIP 'TRACE' STUFF WHEN DISABLED  #
      JSB CKTRC     CHECK IF WE'RE TO TRACE THIS ONE   #
      JMP ERR.4     NO, CONTINUE
      LDB B30       STATE 24:'STOP' RC'D DURING XMIT-ABORT# 
      JSB TRACE                                        #
      LDB STOP                                         #
      IOR SBIT        SET 'RECEIVE' INDICATOR 
      JSB TRACE                                        #
      LDB EQT1                                         #
      JSB TRACE                                        #
      LDB $TIME                                        #
      JSB TRACE                                        #
      XIF                                              #
* 
*     'STOP' RECEIVED EXIT
* 
ERR.4 EQU * 
      LDB B20 
      SKP 
* 
*     HERE TO TERMINATE 
* 
CEND  JSB STAT      UPDATE EQT 5 STATUS 
      LDA EQT12,I   GET CARD STATUS WORD
      AND .020      IS IT LISTEN MODE?
      SZA,RSS 
      JMP CLCRD     NO, CLEAR CARD & EXIT 
      JSB TRAPR     SET UP TRAP CELL & ENABLE 1 WORD READ 
      LDA LSTNI     GET LISTEN INTERRUPT
      JMP CEXT2      AND LEAVE
* 
*     HERE TO DO CONTINUATION RETURN
* 
CEXIT NOP 
      LDA CEXIT     GET NEXT INTERRUPT ADDRESS
CEXT1 ISZ CA65      BUMP CONTINUATOR RETURN 
CEXT2 STC 0,C       SET FOR RECEIVE MODE
CEXT3 STA EQT11,I   SAVE NEW INTERRUPT LOCATION 
CEXT4 CLA 
      LDB SETIO 
      CPB I65AD     WAS THIS ENTRY VIA INITIATOR? 
      JMP IA65,I    YES, THEN RETURN THE SAME WAY 
      LDB EQT6,I    GET EQT6 IN CASE IT'S COMPLETION
      JMP CA65,I    RETURN
* 
I65AD DEF SERET 
      SPC 3 
* 
*     SUBROUTINE TO PUT NEW STATUS INTO EQT WORD 5
* 
STAT  NOP 
      LDA EQT10 
      STA EQT15     FOOL RTE SO IT LEAVES TIMEOUT ALONE 
      LDA EQT5,I    GET WORD 5
      AND B1776     MASK OFF OLD STATUS 
      IOR 1         STUFF IN NEW STATUS 
      STA EQT5,I    AND PUT IT AWAY 
      JMP STAT,I    RETURN
* 
      SKP 
* 
*     ROUTINE TO DO CHECKING OF INPUT DATA
* 
*     CALLING SEQUENCE: 
*     IF 'TRACE' MODE, LOAD (A) WITH DRIVER STATE NUMBER
*     JSB CHECK 
*     WILL RETURN P+1 TIME OUT
*                 P+2 STOP RECEIVED 
*                 P+3 REQUEST COMING RECEIVED 
*                 P+4 NORMAL RETURN...B REG= LAST DATA WORD 
* 
CHECK NOP 
      LDB EQTX      EQT EXTENSION ADDRESS 
      INB 
      LDB 1,I       LOAD LAST WORD RECEIVED 
      IFZ 
      STA STATE     SAVE <STATE> (TRACE VERSION ONLY)  #
      XIF 
      LDA EQT4,I    WAS THIS ENTRY                     #
      AND .040        VIA                              #
      SZA               TIME-OUT?                      #
      JMP CHCK1     YES, DATA IN (B)                   #
* 
*     THERE WAS NO TIMEOUT.  CLEAR 'COUNT' WORD 
*     SO WE DON'T THINK THERE WAS A TIME-OUT, 
*     DISABLE CARD, AND PICK UP DATA DIRECTLY FROM
*     INTERFACE CARD. 
      STA COUNT 
CLCC1 CLC 0,C 
LIB1  LIB 0 
CHCK1 EQU *                                            #
      IFZ                                              #
CH.00 NOP           CHANGED TO 'RSS' WHEN TRACING IS ENABLED         #
      JMP CHEC0     SKIP OVER 'TRACE' CODE WHEN NOT ENABLED          #
      STB RDD.C     SAVE FOR JUST A SECOND             #
      JSB CKTRC     SHOULD WE TRACE THIS ONE?          #
      JMP CHEC.     NO, DON'T TRACE THIS ONE.          #
      LDB RDD.C     RECOVER RECEIVED WORD              #
      JSB TRACE     STORE IN TRACE TABLE               #
      LDB STATE     RECOVER DRIVER STATE               #
      RBL           MOVE <STATE> TO 'STATE' FIELD      #
      LDA COUNT     WAS THERE A                        #
      CCE,SZA         A TIME-OUT?                      #
      INB                                              #
      RBL,ERB         AND SET 'RECEIVE' INDICATOR BIT  #
      JSB TRACE     STORE TRACE/EVENT                  #
      LDB EQT1      STORE EQT ADDRESS                  #
      JSB TRACE                                        #
      LDB $TIME     STORE TIME                         #
      JSB TRACE                                        #
*                                                      #
CHEC. LDB RDD.C     RECOVER RECEIVED DATA WORD         #
CHEC0 EQU *                                            #
      XIF 
      LDA COUNT     MICROCODE COUNT                    #
      SZA,RSS          DID MICROCODE FINISH?           #
      JMP CHEC1     YES.                               #
      LDA EQT4,I    NO.  CHECK FOR POSSIBLE RTE TIME-OUT             #
      AND .040      ISOLATE T.O. BIT                   #
      SZA           TIME-OUT?                          #
      JMP CHECK,I   YES, TAKE TIME-OUT RETURN          #
      SPC 2 
* 
* 
CHEC1 ISZ CHECK     SET FOR 'STOP' RETURN              #
      CPB STOP        'STOP'?                          #
      JMP CHECK,I   YES...TAKE  'STOP' RETURN          #
      ISZ CHECK                                        #
      CPB RC        REQUEST COMING?                    #
      JMP CHECK,I   YES                                #
      ISZ CHECK     SET "NONE OF THE ABOVE" RETURN     #
      JMP CHECK,I   RETURN                             #
* 
* 
* 
B10   OCT 10
B20   OCT 20
B17   OCT 17
.040  OCT 4000
BSTMK OCT 12100 
B1774 OCT 177400
B1776 OCT 177600
TEMP  NOP 
MIC$X NOP           OPEN LOOP MICROPROGRAM CALL 
COUNT NOP 
EQTX  NOP 
      SKP 
*     ROUTINE TO CLEAR CARD 
* 
RDD.C NOP 
CLCC2 CLC 0,C 
LIAC2 LIA 0,C       CLEAR STATUS
LIA2  LIA 0         READ DATA WORD
      CLA 
      JMP RDD.C,I 
* 
*  HERE TO SEND WORD AND EXIT IN TRANSMIT MODE
XMITX NOP 
      JSB OUTPB     SEND WORD 
      JSB TRAPR     SETUP TRAP CELL 
STC0  STC 0         SET TRANSMIT MODE 
      LDA XMITX     COROUTINE UPON RETURN 
      STA EQT11,I 
DEXIT ISZ CA65      BUMP CONTINUATION RETURN
      JMP CEXT4 
* 
OUTPB NOP 
      IFZ 
OTB2  NOP           'RSS' WHEN TRACE MODE IS ENABLED   #
      JMP OTB1      RETURN IMMEDIATELY IF TRACE DISABLED.            #
      STB RDD.C     SAVE (B) FOR A FEW LINES....       #
      JSB CKTRC     SHOULD WE BE TRACING THIS ONE?     #
      JMP OTB3      NO, DON'T TRACE THIS ONE.          #
      LDB RDD.C     RECOVER (B) REGISTER               #
      JSB TRACE     STORE OUTPUT WORD                  #
      RAL           MOVE <STATE> TO 'STATE' FIELD      #
      LDB A         LOAD EVENT                         #
      JSB TRACE      STORE EVENT IN TRACE TABLE        #
      LDB EQT1      STORE EQT ADDRESS                  #
      JSB TRACE                                        #
      LDB $TIME     STORE TIME                         #
      JSB TRACE                                        #
OTB3  EQU *                                            #
      LDB RDD.C     RECOVER DATA TO BE TRANSMITTED     #
      XIF 
OTB1  OTB 0 
      JMP OUTPB,I   RETURN
* 
RC    OCT 170017    REQUEST COMING WORD 
TNW   OCT 170360    TRANSMIT NEXT WORD
STOP  OCT 7760      SEND STOP 
RLW   OCT 7417      RETRANSMIT LAST WORD
RLM   OCT 170377    RETRANSMIT LAST MESSAGE 
B2    OCT 2 
B4    OCT 4 
B7    OCT 7 
N5    DEC -5
N6    DEC -6
N7    DEC -7
      SKP 
*############################################################################ 
* 
*     TRACE SECTION 
* 
*     TRAC.-- SECTION TO SET UP TRACE BUFFER. 
* 
      IFZ 
TRAC. EQU * 
      LDA EQT7,I    GET TRACE BUFFER ADDRESS
      STA NPASS     SAVE ADDRESS OF PASS COUNT
      STA B         COMPUTE ADDRESS 
      ADB EQT8,I      OF END OF BUFFER + 1
      STB TRACL       SAVE ADDRESS OF END OF BUFFER 
      INA             GET ADDRESS OF 2ND WORD OF TRACE BUFFER 
      STA TRPTR     STORE POINTER TO NEXT AVAILABLE LOCN
      INA           BUMP TO START OF TRACE BUFFER 
      STA TRACB     SAVE TRACE BUFFER 
      LDB EQT9,I    GET TRACE SELECTION 
      SZB           TRACE ALL?
      LDB EQT1      NO, TRACE ONLY THIS LU
      STB TREQT     SAVE TRACE EQT, OR ZERO FOR ALL 
      LDB EQT10,I   LOAD RESOURCE NUMBER
      STB RN#       SAVE IT.
      SPC 2 
*     ENABLE TRACE MODE.
* 
ETRAC EQU *         CHECK THAT BUFFER HAS BEEN DEFINED
      CLB,INB 
      LDA TRACB     LOAD BUFFER ADDRESS 
      SZA,RSS       WAS ONE DEFINED?
      JMP REJCT     NO, THIS IS AN ERROR
      STA TRACN     YES, INITIALIZE "NEXT" TRACE ENTRY PNTR 
      LDA RSS       STORE 'RSS' INSTRUCTION IN ALL
TRA.3 EQU *           "BYPASS TRACE CODE" PLACES. 
      STA OTB2
      STA CH.00 
      STA CH.01 
* 
*     "IMMEDIATE COMPLETION" RETURN TO RTIOC
* 
      LDA B4
      JMP IA65,I    RETURN TO RTE 
      SPC 2 
*     DISABLE TRACE MODE
* 
DTRAC EQU * 
      CLA           STORE 'NOP' INSTRUCTION IN ALL "BYPASS TRACE
      JMP TRA.3       CODE" PLACES. 
* 
*     SUBROUTINE TO CHECK WHETHER WE SHOULD BE
*     TRACING THIS ENTRY OR NOT.
* 
CKTRC NOP 
      LDB TREQT     LOAD THE 'TRACE' EQT
      SZB           TRACE ALL?
      CPB EQT1      NO, COMPARE TO THIS EQT 
      ISZ CKTRC     WE'RE TRACING THIS ONE! 
      JMP CKTRC,I   RETURN TO CALLER
      SKP 
* 
*     TRACE -- SUBROUTINE TO MAKE AN ENTRY IN THE TRACE TABLE 
* 
*     CALLING SEQUENCE: 
*      LDB <ENTRY VALUE>
*      JSB TRACE
*      <RETURN> 
* 
TRACE NOP           ENTRY/EXIT
      STB TRACN,I   STORE DATA IN TRACE BUFFER
      LDB TRACN     ADVANCE TO NEXT ENTRY, OR 
      INB 
      CPB TRACL     END?
      JMP TRAND     YES, RESET TO START & UNLOCK RN 
TRA.1 EQU * 
      STB TRACN     STORE "NEXT" ENTRY POINTER
      CMB,INB         COMPUTE RELATIVE OFFSET 
      ADB TRACB        SO BACKGROUND PROGRAM
      CMB,INB 
      STB TRPTR,I           KNOWS WHERE WE ARE. 
      JMP TRACE,I   RETURN TO CALLER
      SPC 2 
TRAND EQU * 
      LDA RN#       LOAD RESOURCE NUMBER
      JSB $CGRN     UNLOCK RESOURCE NUMBER
      ISZ NPASS,I   BUMP PASS NUMBER
      NOP           PROTECT AGAINST ROLLOVER. 
      LDB TRACB 
      JMP TRA.1     RETURN TO MAIN FLOW 
* 
*     STORAGE FOR 'TRACE' 
* 
STATE NOP           STORAGE FOR DRIVER STATE
TREQT NOP           EQT ADDRESS TO BE TRACED, OR 0 FOR ALL OF THEM
TRPTR NOP           STORAGE FOR ADDRESS OF "NEXT" ENTRY IN BUFFER 
NPASS NOP           ADDRESS OF NUMBER OF PASSES COUNTER 
RN#   NOP           RESOURCE NUMBER 
TRACB NOP           POINTER TO START OF TRACE BUFFER
TRACN NOP           POINTER TO NEXT TRACE TABLE ENTRY 
TRACL NOP           POINTER TO END OF TABLE + 1 
B11   OCT 11
B12   OCT 12
B13   OCT 13
B14   OCT 14
B15   OCT 15
B16   OCT 16
B21   OCT 21
B22   OCT 22
B23   OCT 23
B24   OCT 24
B25   OCT 25
B26   OCT 26
B27   OCT 27
B30   OCT 30
B31   OCT 31
B32   OCT 32
B33   OCT 33
RSS   RSS           'RSS' INSTRUCTION 
SBIT  OCT 100000    SIGN BIT
      XIF 
B5    OCT 5 
*######################################################################## 
      SKP 
SETIO NOP 
      LDA EQT12,I   EQT STATUS
      AND MICFG     CLEAR MICROCODE R/W & RETRY FLAGS 
      STA EQT12,I   UPDATED EQT 
      LDB EQT2,I
      CLA 
      SSB           SYSTEM TRYING TO INITIATE NEW REQUEST?
      CCA           YES, SET A TICK 
      STA EQT15,I   SET TIMEOUT 
      LDB EQT13,I 
      STB EQTX      SAVE ADDRESS OF EQT EXTENSION 
      LDA EQT4,I
      AND B77       ISOLATE SELECT CODE 
      STA CELL      SAVE FOR TRAP CELL ADDR 
      IOR CLCC      CLC0,C COMMAND
      STA CLCC1 
      STA CLCC2 
      XOR .040       CONVERT TO STC 0,C COMMAND 
      STA LISTI 
      STA CEXT2 
      XOR .010      CONVERT TO STC 0 COMMAND
      STA STC0
      XOR B200      CONVERT TO LIA COMMAND
      STA LIA2
      XOR .010      CONVERT TO LIA 0,C COMMAND
      STA LIAC2 
      XOR .050      CONVERT TO LIB COMMAND
      STA LIB1
      XOR B300      CONVERT TO OTB 0 COMMAND
      STA OTB1
      JMP SETIO,I   RETURN
* 
* 
MICFG OCT 117777
CLCC  CLC 0,C 
B200  OCT 200 
B300  OCT 300 
.050  OCT 5000
* 
      BSS 0         SEE HOW BIG IT IS 
      SKP 
* 
*     DEFINE BASE PAGE LOCATIONS NEEDED 
* 
* 
* 
.     EQU 1650B 
EQT1  EQU .+8 
EQT2  EQU .+9 
EQT4  EQU .+11
EQT5  EQU .+12
EQT6  EQU .+13
EQT7  EQU .+14
EQT8  EQU .+15
EQT9  EQU .+16
EQT10 EQU .+17
EQT11 EQU .+18
EQT12 EQU .+81
EQT13 EQU .+82
EQT14 EQU .+83
EQT15 EQU .+84
DUMMY EQU 1737B 
INTBA EQU 1654B 
TBG   EQU 1674B 
* 
A     EQU 0 
B     EQU 1 
      END 
                                                                                                                                                                                                