ASMB,Q,N,C        * N-ASSEMBLY OPTION: STANDARD VERSION * 
      IFZ 
      HED DVA65 P/N NOT ASSIGNED REV.2013 (C) HEWLETT-PACKARD CO. 1980  @ 
      NAM DVA65 P/N NOT ASSIGNED REV.2013 800516 MEF W/TRACE
      XIF 
      IFN 
      HED DVA65 91750-16105 REV.2013 (C) HEWLETT-PACKARD CO. 1980 
      NAM DVA65 91750-16105 REV.2013 800516 MEF 
      XIF 
* 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  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.       *
******************************************************************
* 
*DVA65              COMMUNICATIONS DRIVER FOR DS/1000 
*                   ALL LINE INTERRUPTS HANDLED BY MICROCODE
*                   EXCEPT PROTOCOL FOR LINES ABOVE PRIVILEGED SLOT 
* 
*SOURCE PART #      91750-18105 
* 
*REL PART #         91750-16105 
* 
*WRITTEN BY:        L. SCHOOF, L. POMATTO, R. SHATZER, C. WHELAN
* 
*MODIFIED BY:       LYLE WEIMAN, AUG. '78, TO ADD TRACE CAPABILITY
*                   (# AT RIGHT OF COMMENTS MARKS CHANGES)
* 
*MODIFIED BY:       CRAIG HAMILTON 09/07/78 TO IMPROVE ERROR RECOVERY.     #
*                   (# IN COLUMN 80 DENOTES CHANGES)                       #
* 
*MODIFIED BY:       PETER BRICKEY, MAY 1979, STANDARDIZED CALLS, NEW       @
*                   ERROR CODES, GENERAL CLEAN-UP.                         @
*                   (@ IN RIGHT HAND COLUMN INDICATES CHANGES)             @
*                                                                          @
*MODIFIED BY:       CRAIG HAMILTON 05/80 FOR 91750 RELEASE                 #
*                   FIX SIMULTANEOUS REQUEST RESOLUTION & <PROGL> RQST.    #
*                   (# IN COLUMN 80 DENOTES CHANGES)                       #
* USE "Z" OPTION TO INCLUDE "TRACE" OPERATION          #
* USE "N" OPTION TO EXCLUDE "TRACE" OPERATION          #
* 
*************************************************************** 
* 
*     DEFINE ENTRY POINTS 
* 
      ENT IA65,CA65 
      ENT MIC$X 
* 
*     DEFINE EXTERNALS
* 
      EXT $LIST,$OPSY 
      IFZ 
      EXT $TIME,$CGRN                                  #
      XIF 
* 
*     CALLING SEQUENCES 
* 
      SPC 2 
*     SEND DS/NON-DS MESSAGE                                               @
      SPC 1 
*     JSB EXEC
*     DEF *+8                                                              @
*     DEF RCODE     DEC 20     CLASS WRITE/READ                            @
*     DEF CONWD     10100B+LU TO SEND DS MESSAGE                           @
*                   12100B+LU TO SEND ONLY THE REQUEST BUFFER (DS MODE)    @
*                   10300B+LU TO SEND NON-DS (RPL) MESSAGE                 @
*     DEF DBUF      DATA BUFFER ADDRESS 
*     DEF DBUFL     DATA BUFFER LENGTH
*     DEF RBUF      REQUEST BUFFER ADDRESS/LU NUMBER (NON-DS MODE)
*     DEF RBUFL     REQUEST BUFFER LENGTH/MODE (NON-DS MODE)
*     DEF CLASS                                                            @
      SPC 2 
*     INITIALIZE LINK  (ENABLE LISTEN MODE)                                @
      SPC 1 
*     JSB EXEC
*     DEF *+4                                                              @
*     DEF RCODE     OCT 3                                                  @
*     DEF CONWD     3000B+LU                                               @
*     DEF LUWRD     LU NUMBER OF CARD                                      @
* 
      SPC 2 
*     CLEAR LINK    (REVERSES INITIALIZE LINK REQUEST)                     @
      SPC 1                                                                @
*     JSB EXEC                                                             @
*     DEF *+3                                                              @
*     DEF RCODE     OCT 3                                                  @
*     DEF CONWD     3100B+LU                                               @
*                                                                          @
      SKP 
*     SET DRIVER TO DS MODE                   -                            @
*                                              -                           @
*     JSB EXEC                                  -                          @
*     DEF *+4                                    -                         @
*     DEF RCODE     OCT 3                         -                        @
*     DEF CONWD     3200B+LU                       -                       @
*     DEF SCODE     SECURITY CODE                   -                      @
*                                                    -                     @
*                                                     -  MODE IS IGNORED   @
*                                                     -  WHEN RECEIVING    @
*     SET DRIVER TO NON-DS MODE                      -                     @
*                                                   -                      @
*     JSB EXEC                                     -                       @
*     DEF *+4                                     -                        @
*     DEF RCODE     OCT 3                        -                         @
*     DEF CONWD     3300B+LU                    -                          @
*     DEF SCODE     SECURITY CODE              -                           @
*                                             -                            @
      SPC 2 
*               INTERNAL CALLING SEQUENCES USED BY QUEUE                   @
      SPC 2 
*     READ MESSAGE                                                         @
      SPC 1                                                                @
*     JSB EXEC                                                             @
*     DEF *+8                                                              @
*     DEF RCODE     OCT 100021 CLASS READ, NO ABORT                        @
*     DEF CONWD     10000B+LU  TO READ DS MESSAGE                          @
*                   200B+LU TO READ RPL MESSAGE                            @
*     DEF ZERO      =0                                                     @
*     DEF DBUFL     DATA BUFFER LENGTH                                     @
*     DEF ZERO      =0/LU FOR NON-DS REQUEST                               @
*     DEF RBUFL     REQUEST BUFFER LENGTH/MODE FOR NON-DS REQUEST          @
*     DEF CLASS                                                            @
* 
      SPC 1 
*     INFORM DRIVER THAT NO SAM IS AVAILBLE (IE SEND STOP)                 @
      SPC 1 
*     JSB EXEC                                                             @
*     DEF *+5                                                              @
*     DEF RCODE     OCT 1    (READ)                                        @
*     DEF CONWD     600B+LU                                                @
*     DEF ZERO      =0                                                     @
*     DEF ZERO      =0                                                     @
      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) #
*                                                                    #
*     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 A REGISTER AFTER ANY CONTROL CALL OR CLASS GET)      @
* 
*     A = EQT WORD#5, OF WHICH BITS 7-0 INDICATE STATUS:                   @
*         BIT  0  =  0                                                     @
*         BIT  1  =  ANY ERROR (BITS 4-7 INDICATE TYPE)                    @
*         BIT  2  =  WRITE REQUEST                                         @
*         BIT  3  =  NON-DS REQUEST                                        @
*         BITS 4                                                           @
*         THRU 7  =  ERROR TYPE(OCTAL)                                     @
*                                                                          @
*                          RECOVERABLE ERRORS                              @
*                                                                          @
*                    0  =  NO ERROR                                        @
*                    1  =  LINE FAILURE, A PARITY OR PROTOCOL ERROR WAS    @
*                          DETECTED AND COULD NOT BE RESOLVED.             @
*                    2  =  TIMEOUT, REMOTE DID NOT RESPOND TO A PROTOCOL   @
*                          CHARACTER WITHIN A LINE TIMEOUT.                @
*                    3  =  LOCAL BUSY, DRIVER IS CURRENTLY PROCESSING A    @
*                          MESSAGE GOING IN THE OPPOSITE DIRECTION, OR     @
*                          BOTH SIDES OF THE LINK ATTEMPTED TO SEND        @
*                          MESSAGES AT THE SAME TIME.                      @
*                    4  =  MESSAGE ABORTED, A STOP WAS RECIEVED.           @
*                    5  =  REMOTE BUSY, REMOTE SIDE WAS UNABLE TO          @
*                          SCHEDULE QUEUE OR TO ALLOCATE SAM.              @
*                                                                          @
*                          FATAL ERRORS                                    @
*                                                                          @
*                   10  =  NOT INITIALIZED, AN INITIALIZE LINK COMMAND     @
*                          HAS NOT BEEN RECEIVED YET.  IF IN RESPONSE TO   @
*                          AN INITIALIZE COMMAND, INDICATES THAT SYSTEM    @
*                          TABLES WERE NOT CONFIGURED CORRECTLY.           @
*                   11  =  WRONG MODE, WRONG TYPE OF TRAFFIC, (IE, TRYING  @
*                          TO DO A DOWNLOAD WHEN DRIVER IS IN DS MODE.     @
*                   12  =  ILLEGAL REQUEST, COMMAND IS NOT SUPPORTED BY    @
*                          DVA65 (DVA65 WILL GIVE THIS IN RESPONSE TO A    @
*                          FPL SEND/RECEIVE, BREAK, SET MODE REQUEST WITH  @
*                          THE WRONG SECURITY CODE).                       @
*                   17  =  UNKNOWN INTERRUPT RECEIVED                      @
*         BITS 8                                                           @
*         THRU 13  =  INDICATE DRIVER, IN THIS CASE = 65                   @
      SKP 
*     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/LU FOR INITIALIZE CALL       @
*     10            LENGTH OF REQUEST BUFFER (BIT 15 SET = CLOSED LOOP)    @
*     11            CO-ROUTINE 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                                   #
*     EXT(3)        DIAGONAL PARITY WORD                                   #
*     EXT(4)        COUNT OF TOTAL # BLOCKS TRANSMITTED 
*     EXT(5)        COUNT OF TOTAL TRANSMIT-PARITY-ERROR RETRIES           #
*     EXT(6)        LU NUMBER                                              @
* 
*     BREAKDOWN OF EQT WORD 12
* 
*     BIT           USAGE 
*     0-2           RETRY COUNTER OR
*     0-5           BROKEN LINE COUNTER 
*     6             BROKEN LINE FLAG
*     7             NON-DS MODE                                            @
*     8             NOT USED                                               @
*     9             REQUEST PENDING 
*     10            DRIVER INITIALIZED (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 B,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 B,I       AND INDICATE DRIVER ENTRY 
      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
*     GET QUEUE'S ID SEGMENT ADDRESS                                     @
      JSB $LIST                                          @
      OCT 217                                            @
      DEF QUEUE                                          @
      SZA           WAS ATTEMPT SUCCESSFUL?              @
      CCB           NO, SET ADDRESS = -1                 @
      STB PROG      IN ANY CASE, SAVE IT                 @
* 
      SKP 
NFIR  LDA EQT6,I    GET THE REQUEST CODE                 @
      AND B3703     AND ISOLATE IT                       @
      STA B         THEN SAVE IT IN B                    @
      ALF,ALF       SAVE READ/                           @
      RAL,ELA        WRITE FLAG                          @
      LDA EQT5,I    NOW GET THE STATUS                   @
      AND B1774     RESET THE STATUS                     @
      SEZ           COULD THIS BE A WRITE REQUEST?       @
      IOR B4        YES, SET WRITE FLAG IN STATUS        @
      STA EQT5,I    THEN REPLACE THE UP-DATED STATUS     @
      CCE,SSA       IS THIS A POWER-FAIL RECOVERY        @
      JMP PFAIL     YES, ABORT CURRENT OPERATION         @
* 
      CPB B3103     NOW, IS THIS A CLEAR REQUEST?        @
      JMP CLREQ     YES, DO IT                           @
      CPB B3003     NO, IS IT AN INITIALIZE REQUEST?     @
      JMP LCREQ     YES, DO IT                           @
      IFZ 
      CPB B703      DISABLE TRACE MODE?                    #
      JMP DTRAC     YES.                                   #
      CPB B1703     RE-ENABLE TRACE MODE?                  #
      JMP ETRAC     YES.                                   #
      XIF 
      LDA B         GET THE OPERATION REQUEST            @
      AND B3        MASK OFF CODE 
      CPA B1        IS IT A READ? 
      JMP REQ       YES...READ OR WRITE/READ
CALCK JSB CHKIN     NO, IS DRIVER INITIALIZED?             #
*                                                                        @
*     REQUEST MUST EITHER BE ILLEGAL OR A SET MODE REQUEST               @
*                                                                        @
      LDA EQT7,I    MUST HAVE PROPER SECURITY CODE       @
      CPA SCODE     IF THIS IS A SET MODE REQUEST        @
      JMP *+2       OK, SECURITY CODE CHECKS             @
      JMP REJCT     NOT CORRECT, REJECT REQUEST          @
      LDA EQT12,I   NOW, SET-UP FOR SET MODE REQUEST     @
      CPB B3203     IS IT A SET DS MODE REQUEST?         @
      JMP DS        YES, CLEAR NON-DS BIT                @
      CPB B3303     OR IS IT A SET NON-DS MODE REQUEST   @
      JMP NONDS     IT IS, SET NON-DS BIT                @
REJCT LDB #ILRQ     MUST BE AN ILLEGAL REQUEST           @
IAER  JSB STAT      ERROR DETECTED LET CALLER KNOW IT!   @
      LDA B2        IT WAS A CONTROL REQUEST ERROR       @
      JMP IA65,I    RETURN TO CALLER                     @
* 
DS    AND CLR7      CLEAR                                @
      JMP *+2           AND EXIT                         @
NONDS IOR B200      SET                                  @
      STA EQT12,I   RESTORE EQT12                        @
      LSR 4         NOW MUST SET MOOD FLAG               @
      AND B10       SO THAT DS/NON-DS BIT MAY BE         @
      STA MOOD      SET IN EQT5, WHEN STATUS IS UPDATED  @
      JMP IDON      SET-UP GOOD RETURN                   @
*                                                                        @
      SKP 
CHKIN NOP                                                @
      LDA EQT12,I   HAS THE DRIVER BEEN                  @  
CHKN0 ALF,RAL       INITIALIZED FOR THIS EQT ENTRY?        #
      SSA           CHECK BIT #10 (LSTEN MODE)           @
      JMP CHKIN,I   ALL OK, RETURN                       @
      LDA EQT11,I   NOT INITIALIZED, IS THE REASON DUE   @
      CPA TMAD      TO A BROKEN LINE?                    @
      JMP BDLNE     YES, MORE INVESTIGATION IS NEEDED    @
      LDB #NOIN     NO, SET STATUS TO NOT INITIALIZED    @
      JMP IAER      AND REJECT THIS REQUEST              @
* 
CKRTN DEF CALCK+1   CONSTANT FOR 'BDLNE' BRANCHING CHECK.  #
* 
*  INITIALIZE DRIVER                                                     @
* 
LCREQ LDA EQT7,I    GET THE LU NUMBER                    @
      AND B377      AND ONLY THE LU NUMBER               @
      LDB EQTX      COMPUTE EQTX(6) ADDRESS              @
      ADB B6                                             @
      STA B,I                                            @
      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 INITIALIZED AND DS MODE BITS     @
      STA EQT12,I   IN CURRENT EQT STATUS                @
      CLA,INA       ENABLE MICROCODE TO READ 1 WORD      @
      LDB LSTNI     AND ENABLE LISTEN MODE               @
IDON0 STA EQTX,I    MICROCODE READ COUNT                 @
      STB EQT11,I   CO-ROUTINE ADDRESS                   @
IDON  CLB           INDICATE A GOOD COMPLETION           @
      JSB STAT      IN THE STATUS                        @
      LDA B4        SET FOR IMMEDIATE COMPLETION EXIT      #
      JMP IA65,I    AND DO IT                            @
* 
CLREQ JSB RDD.C     READ DATA & STATUS FROM CARD TO CLEAR@
      STA EQT12,I   UPDATE EQT STATUS =0                   #
      CLB           SET CO-ROUTINE ADDRESS TO 0          @
      JMP IDON0     AND DISABLE LISTEN MODE              @
      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 EQT6,I    GET THE REQUEST CODE                 @
      BLF,RBL       AND ISOLATE THE 'NO DATA' BIT (10)   @
      SSB,RSS       CHECK IT                             @
      JMP WDATA     NOT SET, CONTINUE                    @
* 
      CLA           SET, SO DATA LENGTH = 0              @
      STA EQT8,I                                         @
      LDA EQT9,I    AND BUFFER ADDRESS TO POINT          @
      STA EQT7,I    TO THE SECOND (REQUEST) BUFFER       @
WDATA LDA EQT12,I   NOW GET THIS EQT'S STATUS            @
      AND NMSK      CLEAR THE UNNECESSARY FLAGS          @
      STA EQT12,I   KEEPING BITS 6,7,9,10,12             @
      BLF           NOW ISOLATE WRITE & MODE BITS (7,6)  @
      SLB           IS THIS A NON-DS REQUEST?            @
      JMP REQ0      YES, SKIP THE DS STUFF               @
* 
      LDA EQT10,I   FOR DS MODE THE REQUEST              @
      ADA N2        BUFFER LENGTH MUST BE REDUCED BY 2   @
      SSA           IS THE REDUCED BUFFER SIZE OK?       @
      JMP REJCT     NO, REJECT THIS REQUEST              @
* 
      STA EQT10,I   OK, SAVE NEW REQUEST SIZE            @
      LDA EQT8,I    NOW SAVE THE DATA LENGTH             @
      STA EQT6,I    IN EQT6                              @
      ADA EQT10,I   THEN GET THE TOTAL OF BOTH BUFFER    @
      STA EQT8,I    LENGTHS FOR THE TRANSMISSION LENGTH  @
      STB TEMP      SAVE READ/WRITE, MODE FLAGS FOR NOW  @
      ELB           REMEMBER READ/WRITE IN E             @
      LDB EQT9,I    ALSO FOR A DS REQUEST THE            @
      ADB EQT10,I   LOGICAL UNIT NUMBER MUST BE          @
      ADB B1        (CORRECT BUFFER POINTER)             @
      LDA B,I       PLACED IN THE LAST BYTE, ALONG       @
      AND B1770     WITH CLEARING BIT 8,                 @
      SEZ,RSS       BUT FOR READS, CLEAR                 @
      CLA           TOP 8 BITS                           @
      IOR LU        OF THE REQUEST BUFFER                @
      STA B,I       IT IS                                @
      LDB TEMP      THEN RESTORE READ/WRITE, MODE FLAGS  @
* 
REQ0  JSB CHKIN     IS THE DRIVER INITIALIZED?           @
      RAL,ELA       YES, (A)=EQT12 AFTER A ALF,RAL       @
      RAL,RAL       SO SHIFT MODE TO BIT 0, RP TO E REG  @
      SSB,RSS       NOW IS THIS A WRITE REQUEST?         @
      JMP REQ1+1    NO, DRIVERS MOOD IS OF NO CONCERN    @
      XOR B         YES, IS THE DRIVER IN THE MOOD TO    @
      SLA,RSS       ACCEPT THIS REQUEST?                 @
      JMP REQ1      YES, CONTINUE                        @
      LDB #WRMD     NO, DRIVER HAS A HEADACHE            @
      JMP IMXIT     SO, REJECT THIS REQUEST                #
* 
REQ1  CME           SINCE THIS IS A WRITE REVERSE RP FLAG@
      SEZ,RSS       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 
* 
      RBR,SLB       IS THIS A REQUEST TO SEND A STOP?    @
      JMP STPRQ     YES, DO IT                           @
      LDA EQT12,I   OTHERWISE GET THIS EQT'S STATUS      @
      AND CLR9      CLEAR REQUEST PENDING FLAG
      STA EQT12,I 
* 
REQ2  LDB EQT10,I   GET RECEIVED RQST LENGTH.            @
      CPB B1        IF REQUEST LENGTH =1,                  #
      JMP PROGL      THEN THIS IS A <PROGL> REQUEST.       #
      JMP CKLSB     NOT <PROGL>--SKIP ADJUSTMENTS.         #
* 
PROGL STB EQT6,I    SET TRANSMISSION LOG                   #
      STB EQT8,I     AND DATA LENGTH EQUAL TO 1.           #
      CLB           ECHO A REQUEST LENGTH EQUAL TO 0       #
CKLSB LDA EQT4,I    IN ANY CASE                            #
      ALF,ALF       GET LSB OF SUBCHANNEL 
      RAL,ELA       AND STORE IT IN E REG 
      RBL,ERB       ECHO WD WITH BIT15=1 IF CLOSED LOOP 
REQ3  EQU *                                              @
      IFZ 
      LDA B23       STATE 19: READ RQST, ECHOING RQST LNTH# 
      XIF 
      JSB TALK      SEND REQUEST LENGTH & AWAIT RESPONSE   #
      IFZ 
      LDA B24       STATE 20: READ RQST, CHECKING RESPONSE# 
      XIF 
      JSB CHECK     CHECK RCVD WORD 
      JMP REQ4      MUST RETRY ON TIMEOUT                @
      JMP ERR.4     STOP RECEIVED 
      JMP ERR.9     RC RCVD, PROTOCOL FAILURE            @
      CPB TNW 
      JMP RDBLK     "TNW" RCVD, OK TO READ-IN REQUEST    @
      CPB RLW       RLW RECEIVED? 
      JMP REQ2      YES, RE-ECHO REQUEST LENGTH          @
* 
REQ4  JSB RETRY     UNRECOGNIZED WORD RECEIVED           @
      LDB RLW       SEND RLW AND
      JMP REQ3       TRY AGAIN                           @
* 
*  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.4     STOP RECEIVED                         @ 
      JMP ERR.9     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!#
      CPA .040      ACTUAL TIMEOUT?                        #
      JMP ERR.3      YES, PROCESS THE ERROR.               #
* 
*  LAST CONTROL UNRECOGNIZED
* 
RDB3  EQU *                                                #
      IFZ 
      LDA B26       STATE 22:BLOCK READ BUT LAST CTRL UNREC#
      XIF 
      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.4     STOP RECEIVED                         @ 
      JMP ERR.9     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.   #
* 
      SKP 
* 
*  HERE ON RECEIVE PROTOCOL ERRORS--DELAY TO FORCE XMIT TIMEOUT            #
* 
ER6WT EQU *                                                #
      LDA N100      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 #LFAL     INDICATE PROTOCOL FAILURE IN EQT5.    @ 
      JMP CEND      GO TO TERMINATE THE CURRENT OPERATION. #
* 
      SKP 
* 
*     WRITE REQUEST 
* 
WREQ  SLB,RSS       IS THIS A NON-DS REQUEST?            @
      JMP WRTRY     NO, CONTINUE                         @
      LDA EQT7,I    YES, GET THE PROGL DOWNLOAD ADDRESS  @
      INA           WHICH IS IN WORD 2 OF THE            @
      LDB A,I       DATA BUFFER AND USE IT AS            @
      STB EQT10,I   THE REQUEST LENGTH                   @
      INA           ALSO START TRANSMISSION WITH         @
      STA EQT7,I    THE THIRD WORD OF THE DATA BUFFER    @
      LDA EQT8,I    FINALLY, THE DATA LENGTH             @
      ADA N3        MUST BE REDUCED BY 3                 @
      STA EQT6,I    AS WELL AS                           @
      STA EQT8,I    THE TRANSMISSION LOG                 @
* 
WRTRY EQU *                                                #
      IFZ 
      CLA,INA       STATE 1:WRITING, SENDING RC        #
      XIF 
      LDB RC        GET RC (REQUEST COMING)                #
      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    DATA LENGTH 
      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 
* 
      SKP 
*     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? (CBL 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 
      JMP SIMRQ     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  (BIT 12)
      RSS           LAST WAS WRITE, WE MUST WAIT
      JMP WRTR1+1   LAST WAS READ, WE GET PRIORITY
* 
      LDB RLW 
      IFZ 
      LDA B11       STATE 9:YIELD FOR SIMULTANEOUS REQUEST.#
      XIF 
      JSB XMITX     SEND RLW IN XMIT MODE 
      LDA EQT12,I   SET THE 'REQUEST PENDING' BIT (#9)     #
      IOR .010       IN THE EXTENDED STATUS WORD           #
      STA EQT12,I     TO PREVENT ACCEPTING A NEW REQUEST.  #
      LDA EQT14,I   SET A PROTECTIVE TIMEOUT               #
      STA EQT15,I    IN CASE THE REMOTE EXPIRES.           #
* 
      LDB #LBUS     INDICATE LOCAL BUSY, IE              @
      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(#14)           #
      STA EQT12,I   UPDATE EQT STATUS 
      LDA EQT8,I    LENGTH FOR XFER 
      CCE,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.            #
      CCE,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  (BIT 13)
      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 #LBUS                                          @
IMXIT 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 #RBUS                                          @
      JMP CEND
* 
* 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 B34       STATE 28: POWER FAILURE                #
      JMP PSTAT     GO TO SET PARITY/PROTOCOL ERROR STATUS.#
      XIF 
* 
*  HERE FOR PARITY ERROR
ERR.6 EQU *                                                #
      IFZ 
      LDA B31       STATE 25: PARITY ERROR             #
      JMP PSTAT     GO TO SET PARITY ERROR STATUS.         #
      XIF 
*  HERE ON ALL PROTOCOL FAILURES (WRITING & READING)
* 
ERR.9 EQU * 
      IFZ 
      LDA B32       STATE 26:PROTOCOL FAILURE          #
      XIF 
* 
PSTAT LDB #LFAL     GET PARITY/PROTOCOL ERROR STATUS.      #
* 
*  HERE TO SET ERROR, SEND STOP, & TERMINATE
* 
ERSET EQU * 
      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
      JMP CEND+1    AND RETURN ERROR CODE.             #
      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 #TMOT     TIMEOUT BIT FOR EQT5                 @
      IFZ 
      LDA B33       STATE 27: TIMEOUT @ END OF REQUEST #
      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 
      CPB TMAD      WAS THIS A BROKEN LINE TIMEOUT?       @ 
      JMP B,I       YES, GO TO RESET THE DRIVER           @ 
      LDA EQT12,I 
      AND .020      ISOLATE "LISTEN ENABLED" BIT
      IOR EQT1,I    ALSO TEST FOR DRIVER BUSY 
      SZA           IS EITHER CONDITION TRUE? 
      JMP B,I       YES, GO TO COROUTINE ADDR 
      ISZ CA65      NO. IGNORE THE INTERRUPT. 
* 
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 #BDIN     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" 
      JSB RDD.C     CLEAR COMMUNICATIONS CARD 
      LDA EQT12,I 
      ISZ EQT12,I   BUMP BROKEN LINE COUNT
      AND B77 
      CPA B77       64 JUNK WORDS 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  (BIT 9) 
      STA EQT12,I   SAVE IT 
* 
ILSN2 EQU *         RESPOND TO 'RC' BY SENDING A 'TNW'.    #
      IFZ 
      LDA B15       STATE 13:SENDING TNW, NEED DATA LENGTH #  
      XIF 
      LDB TNW       SEND A TNW (TRANSMIT NEXT WORD)        #
      JSB TALK       & WAIT FOR DATA LENGTH 
      IFZ 
      LDA B16       STATE 14: RECEIVING, NEED DATA LENGTH  #  
      XIF 
      JSB PRECK     DO PREAMBLE CHECKING
      STB LEN1      SAVE DATA LENGTH FOR PROGRAM         @
      IFZ 
      LDA B17       STATE 15: ECHO DATA LEN., NEED REQ.LEN.#  
      XIF 
      JSB TALK      ECHO IT & GET REQUEST LENGTH
      IFZ 
      LDA B20       STATE 16: RECEIVING, NEED REQ. LNTH    #  
      XIF 
      JSB PRECK     DO PREAMBLE CHECKING
      STB LEN2      SAVE RQST LENGTH FOR PROGRAM         @
      LDA LEN1      NOW DETERMINE IF REQUEST IS          @
      CPA B2        FOR A DOWNLOAD, FOR QUEUE            @
      SZB           MUST KNOW WHETHER TO SCHEDULE        @
      CLA,RSS       GRPM                                 @
      CLA,INA       PROGL                                @
      STA TYPE      INDICATES ACTION QUEUE IS TO TAKE    @
      LDA PROG      WAS QUEUE'S ID SEGMENT ADDRESS       @
      SSA           FOUND?                               @
      JMP ILSN3     NO, SEND A 'STOP'                    @
      JSB $LIST     YES, SCHEDULE QUEUE                  @
      OCT 1                                              @
      DEF *+7                                            @
PROG  NOP           ADDRESS OF PROGRAM HERE              @
      DEF SCODE     SECURITY CODE                        @
      DEF LU        LOGICAL UNIT NUMBER                  @
      DEF LEN1      DATA LENGTH                          @
      DEF LEN2      REQUEST LENGTH                       @
      DEF TYPE      IF TYPE=0, REQUEST IS FOR GRPM       @
*                                          =1, REQUEST IS FOR PROGL      @
      SZA           WAS SCHEDULE SUCCESSFUL?             @
      JMP ILSN3     NO, QUEUE WAS BUSY                   @
ILSN4 JSB RDD.C     OK, 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 EQU *                                                #
      IFZ 
      LDA B21       STATE 17: QUEUE BUSY, SENDING 'STOP'             #
      XIF 
      LDB STOP      SEND 'STOP' TO INDICATE NODE IS BUSY.  #
      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   SAVE LAST OPERATION, LISTEN, MODE    @
      AND BSTMK     AND BROKEN LINE 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 .022      SAVE INIT. & DS MODE FLAG (BITS 7,10) @ 
      SEZ,CLE       SKIP IF READ; ELSE,                   # 
      IOR .100       SET LAST OPERATION AS WRITE. 
* 
ENDOK STA EQT12,I   SET STATUS
      CLB           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 #MEAB     INDICATE MESSAGE ABORTED             @
      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 
      CLA                                                 # 
      LDB SETIO 
      CPB I65AD     WAS THIS ENTRY VIA INITIATOR? 
      JMP IATST     YES, MUST CHECK FURTHER              @
      LDB EQT6,I    GET DATA LENGTH IN CASE IT'S COMPLETION 
      JMP CA65,I    RETURN
* 
I65AD DEF SERET 
* 
IATST LDA EQT5,I    WAS THIS ENTRY DUE TO THE SIXTH      @
      AND B362       REQUEST ENTRY WHEN THERE            @
      CPA #LFAL        WAS A BAD LINE?                   @
      JMP IMXIT+1   YES, EXIT                              #
      CLA           NO, INDICATE OPERATION STARTED       @
      JMP IA65,I    AND EXIT                             @
* 
* 
*     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 OLD STATUS
      AND CLRST     KEEP WRITE BIT(#12) & BITS 15-8      @
      IOR B         STUFF IN NEW STATUS                  @
      IOR MOOD      MUST INDICATE DRIVER'S MOOD (BIT#3)  @
      STA EQT5,I    STATUS IS COMPLETE!                  @
      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 B,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 LIAC1     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 
LIAC1 LIA 0,C       CLEAR CARD STATUS.                     #
      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                    #
      CLE,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                             #
      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 
      ISZ CA65      BUMP CONTINUATION RETURN
      JMP CEXT3                                          @
*                                                                        @
*     BAD LINE, SET A 5 SECOND TIMEOUT IN HOPES THAT IT WILL BE FIXED    @
DEXIT LDA EQT12,I   NOW DISABLE                          @
      AND CLR10                 LISTEN                   @
      STA EQT12,I                      MODE              @
      LDA N500      THEN GIVE THE LINE                   @
      STA EQT15,I   5 SECONDS TO CLEAR UP                @
      LDB #LFAL     FINALLY SET THE STATUS               @
      JSB STAT      TO REFLECT A BAD LINE                @
      ISZ CA65      SET UP                               @
      LDA TMAD             EXIT VARIABLES                @
      JMP CEXT3     THEN WAIT FOR 5 SECONDS              @
* 
TMUP  LDA EQT12,I   5 SECONDS IS UP                      @
      IOR .020      RESET LISTEN MODE                    @
      AND B1776     CLEAR BROKEN LINE COUNTER/FLAG       @
      STA EQT12,I   AND SET THE STATUS                   @
      LDA EQT5,I    TO REFLECT A GOOD (?)                @
      AND CLR41     LINE CONDITION                       @
      STA EQT5,I    THEN CONTINUE AS IF                  @
      JMP ILSN4     NOTHING HAD HAPPENED                 @
*                                                                        @
* SOMEBODY IS ATTEMPTING A NEW REQUEST WHILE A BAD LINE IS INDICATED.      #
BDLNE LDA N100      MUST RESET THE TIMEOUT TO 1 SEC      @
      STA EQT15,I   THEN A COUNTER CAN BE CHECKED AND IF @
      LDA EQT12,I   THE THIS CODE HAS BEEN EXECUTED      @
      INA           5 TIMES THE LINE CAN BE RE-ENABLED   @
      STA EQT12,I                                        @
      AND B7        WANT ONLY BITS 2-0                   @
      CPA B6        FIFTH TIME (5X1 SEC = 5 SEC)         @
      JMP LNUP      YES, RE-ENABLE THE LINE              @
* 
      CLB                                                  #
      LDA CHKIN     IF THE ENTRY TO 'BDLNE' WAS            #
      CPA CKRTN      FROM CONTROL REQUEST PROCESSING PATH, #
      STB EQT6,I      THEN FORCE RETURN OF 0 TRANS. LOG.   #
      LDB #LFAL     SET STATUS AND TAKE THE                #
      JMP IMXIT      INITIATOR ERROR EXIT.                 #
* 
LNUP  JSB RDD.C     CLEAR THE I/O CARD.                    #
      JSB TRAPR     SET UP TRAP CELL & ENABLE 1 WORD READ. #
      LDA LSTNI     ESTABLISH THE VECTOR                   #
      STA EQT11,I    FOR LISTEN MODE INTERRUPTS.           #
      LDA EQT5,I    CLEAR THE ERROR STATUS BITS            #
      AND CLRST      TO ALLOW PROPER RETURN                #
      STA EQT5,I      AT 'IATST' (INITIATOR EXIT).         #
* 
      LDA EQT12,I   RESTORE                                #
      IOR .020       LISTEN MODE                           #
      AND B1776       AND CLEAR BROKEN LINE COUNTER        #
      STA EQT12,I      IN THE EXTENDED STATUS WORD.        #
      JMP CHKN0     CONTINUE CURRENT REQUEST (A=EQT12).    #
* 
      SPC 5 
OUTPB NOP           SEND WORD IN <B> TO I/O XMIT REGISTER. #
      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
      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
      CLB                                                  #
      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
B13   OCT 13
B14   OCT 14
B15   OCT 15
B16   OCT 16
B21   OCT 21
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
B34   OCT 34                                              # 
B700  OCT 700 
B703  OCT 703 
B1700 OCT 1700
B1703 OCT 1703
RSS   RSS           'RSS' INSTRUCTION 
SBIT  OCT 100000    SIGN BIT
      XIF 
*######################################################################## 
      SKP 
SETIO NOP 
      LDA EQT12,I   EQT STATUS
      AND MICFG     CLEAR MICROCODE R/W & RETRY FLAGS 
      STA EQT12,I   UPDATED EQT 
      LSR 4         SINCE EQT12 CONTAINS THE MODE        @
      AND B10       BIT, ISOLATE IT AND PUT IT IN        @
      STA MOOD      BIT 3 FOR THE STATUS                 @
      LDB EQT2,I    GET WORD #2 OF EQT ENTRY.              #
      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 
      ADB B6        POINT TO EXT(6)                      @
      LDA B,I       GET THE LU NUMBER                    @
      STA LU        AND SAVE IT FOR LATER USE            @
      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 LIAC1                                            #
      STA LIAC2 
      XOR .050      CONVERT TO LIB COMMAND
      STA LIB1
      XOR B300      CONVERT TO OTB 0 COMMAND
      STA OTB1
      JMP SETIO,I   RETURN
      SKP                                                @
*                                                                        @
*                   CONSTANTS AND OTHER IMPORTANT THINGS                 @
*                                                                        @
B1    OCT 1 
B2    OCT 2 
B3    OCT 3 
B4    OCT 4 
B5    OCT 5 
B6    OCT 6 
B7    OCT 7 
B10   OCT 10
B12   OCT 12                                                             T
B17   OCT 17
B20   OCT 20
B22   OCT 22                                             @
B42   OCT 42                                             @
B62   OCT 62                                             @
B77   OCT 77
B100  OCT 100 
B102  OCT 102                                            @
B122  OCT 122                                            @
B200  OCT 200 
B202  OCT 202                                            @
B222  OCT 222 
B242  OCT 242 
B300  OCT 300 
B362  OCT 362                                            @
B377  OCT 377                                            @
B1770 OCT 177000                                         @
B1774 OCT 177410
B1776 OCT 177600
*                                                                        @
B3003 OCT 3003      INITIALIZE                           @
B3103 OCT 3103      CLEAR REQUEST                        @
B3203 OCT 3203      DS MODE                              @
B3303 OCT 3303      NON-DS MODE                          @
B3703 OCT 3703      REQUEST CODE MASK                    @
* 
BSTMK OCT 12300                                          @
CLR7  OCT 177577                                         @
CLR9  OCT 176777
CLR10 OCT 175777                                         @
CLR11 OCT 173777
CLR41 OCT 177755                                         @
CLRST OCT 177404    CLEAR STATUS BITS AND KEEP BIT#2(WRITE)#  
MICFG OCT 117777
NMSK  OCT 13300                                          @
SCODE OCT 70736                                          @
* 
RC    OCT 170017    REQUEST COMING
TNW   OCT 170360    TRANSMIT NEXT WORD
STOP  OCT 7760      SEND STOP 
RLW   OCT 7417      RETRANSMIT LAST WORD
RLM   OCT 170377    RETRANSMIT LAST MESSAGE 
      SKP 
.010  OCT 1000
.020  OCT 2000                                           @
.022  OCT 2200
.040  OCT 4000
.050  OCT 5000
.100  OCT 10000 
.200  OCT 20000 
.300  OCT 30000 
.400  OCT 40000 
* 
N2    DEC -2                                             @
N3    DEC -3                                             @
N100  DEC -100                                           @
N500  DEC -500                                           @
*                                                                        @
QUEUE ASC 3,QUEUE                                        @
* 
LU    NOP           LOGICAL UNIT NUMBER                  @
LEN1  NOP           DATA LENGTH                          @
LEN2  NOP           REQUEST LENGTH                       @
MOOD  NOP           MODE INDICATOR (IF DS THEN MOOD=0)   @
TEMP  NOP 
TYPE  NOP           INDICATES ACTION TO BE TAKEN BY QUEUE@
MIC$X NOP           OPEN LOOP MICRO-PROGRAM CALL
COUNT NOP 
EQTX  NOP 
* 
CLCC  CLC 0,C 
MXMIC OCT 105520    FOR MX FIRMWARE 
XEMIC OCT 105300    FOR ME FIRMWARE 
* 
LSTNI DEF ILSTN 
TMAD  DEF TMUP                                           @
*                                                                        @
*ERROR CODES                                                             @
*               MNEMONIC            REASON                  SETS BITS    @
*                                                                        @
#LFAL EQU B22       LINE FAILURE            4,1          @
#TMOT EQU B42       TIME OUT                5,1          @
#LBUS EQU B62       LOCAL BUSY              5,4,1        @
#MEAB EQU B102      MESSAGE ABORTED         6,1          @
#RBUS EQU B122      REMOTE BUSY             6,4,1        @
#NOIN EQU B202      DVA65 NOT INITIALIZED   7,1          @
#WRMD EQU B222      WRONG MODE              7,4,1        @
#ILRQ EQU B242      ILLEGAL REQUEST         7,5,1        @
#BDIN EQU B362      UNKNOWN INTERRUPT       7,6,5,4,1    @
* 
* 
      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 
TBG   EQU 1674B 
* 
A     EQU 0 
B     EQU 1 
      END 
                                                                                                                                                                                                                                                    