ASMB,Q,N,C
      IFZ 
      HED DVA65 24999-16205 REV.2013 * (C) HEWLETT-PACKARD CO. 1980     
      NAM DVA65 24999-16205 REV.2013 800115 W/ TRACE   #
      XIF 
      IFN 
      HED DVA65 91740-16071 REV.2013 * (C) HEWLETT-PACKARD CO. 1980 
      NAM DVA65 91740-16071 REV.2013 800115 
      XIF 
      SPC 2 
******************************************************************
*  * (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.       *
******************************************************************
      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:        L. SCHOOF, L. POMATTO, R. SHATZER, C. 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 01/15/80 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
                                                                                                                                                  