ASMB,Q,C
      HED DVG67 RTE 12889 BISYNC DRIVER * (C) HEWLETT-PACKARD 
      NAM DVG67,0,0 91750-16108 REV.2013 800519 MEF: 3000 HSI LINK
      SPC 1 
******************************************************************
*  * (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 THE HEWLETT-PACKARD COMPANY.   *
******************************************************************
      SPC 1 
      ENT IG67,CG67 
      EXT $CGRN 
      SPC 1 
      UNL           NEXT 5 LINES ARE FOR PRODUCTION ENGINEERING 
*  NAME: DVG67
*SOURCE: 91750-18108
* RELOC: 91750-16108
*  PGMR: DMT
      LST 
************************** DVG67 ************************** 
*                                                         * 
*     SOURCE: 91750-18108                                 * 
*                                                         * 
*     BINARY: 91750-16108                                 * 
*                                                         * 
*     TOM KEANE                                           * 
*                                                         * 
*     JUNE 24, 1976                                       * 
*                                                         * 
*********************************************************** 
*                                                         * 
* MODIFIED BY DMT BEGINNING 5/29/79 TO REMOVE UNUSED CODE * 
* AND MAKE THE COMMENTS READABLE.                         * 
*                                                         * 
*********************************************************** 
      SPC 2 
A     EQU 0 
B     EQU 1 
SC    EQU 0 
CHAN  EQU 1673B 
      SPC 1 
* THE FOLLOWING DRIVER WAS WRITTEN FOR A DOS III   *
* PHYSICAL LEVEL DRIVER.
* 
*  RTE EQT TABLE AND INTERNAL STORAGE NAME
EQT01 EQU 1660B 
EQT04 EQU 1663B     STAT1 
EQT05 EQU 1664B     STAT2 
EQT06 EQU 1665B     CONWD 
EQT07 EQU 1666B     PARM1 
EQT08 EQU 1667B     PARM2 
EQT09 EQU 1670B 
EQT13 EQU 1772B     TRLOG 
EQT15 EQU 1774B 
      SKP 
****************************************************
*                                                  *
*                  CONTINUATOR SECTION             *
*                                                  *
****************************************************
*   MODIFIED TO CHECK FOR SPURIOUS INTERRUPT BY DMT (7/11/78) 
CG67  NOP 
      LDB EQT01,I   SPURIOUS
      SZB,RSS        INTERRUPT? 
      JMP SPURI         YES--IGNORE.
SPRTN CLB          ZERO RETURN
      STB SAVA      CODE. 
      STA SCODE    SAVE SELECT CODE.
      JSB INTON    TEST INTERRUPT SYSTEM. 
      CLA,INA      SET RETURN 
      STA RTX       FLAG. 
      LDA EQT04,I  WAS IT 
      ALF           TIMER 
      SSA,RSS        INTERRUPT? 
      JMP WEND        NO. 
      LDA EQT04,I     YES. RESET
      AND PAROF         TIMER 
      STA EQT04,I        BIT. 
      JMP LTIM     JUMP TO TIMER ROUTINE. 
* 
WEND  LDB LSIT     GET TABLE BASE.
      JMP LSWCH    GO PROCESS.
      SPC 2 
*  SPURIOUS INTERRUPT-- 
SPURI LDB SWORD    IF WE'RE EXPECTING 
      SZB           AN ENQ, 
      JMP SPRTN      NOT SPURIOUS.
SPUR2 STB EQT15,I   ZERO TIME-OUT CLOCK WORD. 
* 
*   KEEP LONG-TERM COUNT FOR # OF SPURIOUS INTERRUPTS 
*    IN UNUSED "# ERROR-FREE MSGS RECEIVED" EQT EXTENSION WORD. 
* 
      LDB P03$      BUMP
      JSB BUMP       STATISTIC. 
      ISZ CG67      MAKE A
      JMP CG67,I     CONTINUATION RETURN. 
      SKP 
****************************************************
*                                                  *
*                  INITIATOR SECTION               *
*                                                  *
****************************************************
IG67  NOP 
      CLB 
      STB RTX      CLEAR RETURN FLAG. 
      STB SAVA     ZERO RETURN CODE.
      STA SCODE    SAVE SELECT CODE.
      JSB INTON    TEST INTERRUPT SYSTEM. 
      LDA EQT09,I  GET REQUEST. 
      AND MASK1    ISOLATE FUNCTION AND REQUEST.
      CPA INCD     INITIALIZE REQUEST?
      JMP I.67B     YES.
      AND MASK2 
      CPA B4400    CLEAR REQUEST? 
      JMP I.67A     YES.
      LDB EXTSN 
      SZB          LOGICAL LINKAGE PRESENT? 
      JMP I.67A     YES.
      CLA,INA      NO. INVALID REQUEST. 
      STA SAVA      RETURN TO 
      JMP RTRN       SYSTEM.
* 
*  HANDLE INITIALIZE REQUEST
I.67B LDB EQT07,I  GET EXTENSION ADDRESS. 
      STB EXTSN    LINK WITH LOGICAL. 
*  SET UP POINTERS INTO EQT EXTENSION 
      LDA B,I       GET CONTENTS OF D$EQT 
      STA TRLWA      & STORE AS LAST TRACE ENTRY. 
      INB 
      STB TSBTS             TEST BITS 
      LDA B,I       GET CONTENTS. 
      AND N64$      MASK OUT PARITY & CHAR SIZE.
      IOR P08$      SPEC NO PARITY & 8-BIT BYTE.
      STA B,I       STORE.
      ADB P02$
      STB NTRY              NUMBER OF RETRIES 
      INB 
      STB NLTO              # OF 3-SECS IN LONG T/O 
      INB 
      STB PRVAC             PREV & CURRENT ACTIONS
      INB 
      STB PRVST             PREV-1 & PREV STATES
      INB 
      STB ENVIR             ENVIRONMENT 
      LDA B,I       GET CONTENTS. 
      IOR BIT14     SET "ASCII" BIT.
      STA B,I       STORE.
      INB 
      STB LTCS              LONG-TERM COMM STATISTCS
      ADB P11$
      STB TRNEW             ADDR OF NEWST TRACE NTRY
      INB 
      STB TROLD             ADDR OF OLDST TRACE NTRY
      INB 
      STB TRFWA             TRACE TABLE 1ST WORD
      STB TROLD,I   INITIALIZE OLDEST AND 
      STB TRNEW,I     NEWEST ADDRESSES. 
      INB 
      STB TRFWA,I   START FIRST ENTRY.
* 
      CLA 
      STA STAT2    CLEAR LINE STATE 
      STA CONWD     AND TEST BITS.
* 
I.67A LDB EQT05,I  SET UP 
      STB STAT1     INTERNAL
      LDB EQT07,I    EQT
      STB PARM1       VALUES. 
      LDB EQT08,I 
      STB PARM2 
      LDB EQT13,I 
      STB TRLOG 
      LDA CONWD    GET DMA
      AND DMAMF     CHANNEL 
      IOR DMAA       AND
      LDB CHAN        SET 
      SLB              ALLOCATED
      IOR DMAM          FLAG. 
      STA CONWD 
      LDA STAT1    SET
      AND LBYT$     STATUS
      STA STAT1      TO ZERO. 
      LDA SCODE    GET SELECT CODE. 
      JSB SETIO    SET I/O INSTRUCTIONS.
      LDA EQT09,I  GET CONTROL WORD.
      AND MASK2    ISOLATE FUNCTION CODE. 
      CPA B4400    CLEAR REQUEST? 
      JMP C0        YES.
      LDA EQT06,I  GET CURRENT I/O WORD.
      AND B17$     ISOLATE BITS 0-3.
      CPA P02$     WRITE OR CONTROL REQUEST?
      JMP TWOPR     YES. CHECK OPTIONAL PARAM.
* 
      CPA P01$     READ REQUEST?
      JMP READR     YES.
      ISZ SAVA     INDICATE ERROR 
      JMP RTRN      AND RETURN TO SYSTEM. 
* 
*  BECAUSE RTE CONTROL REQUESTS CANNOT PASS ENOUGH PARAMETERS,
*  SOME WRITE REQUESTS MAY ACTUALLY BE CONTROL REQUESTS.
* 
TWOPR LDA EQT09,I  GET OPTIONAL PARAMETER.
      AND N64$     REMOVE LOGICAL UNIT. 
      IOR P02$     INSERT REQUEST CODE. 
      STA EQT06,I  STORE IN CONTROL WORD. 
      AND BIT14    IF BIT 14 IS SET,
      SZA           IT'S A CONTROL
      JMP CONTL      REQUEST. 
      SPC 2 
****************************************************
*                                                  *
*                  WRITE REQUEST INITIATION        *
*                                                  *
****************************************************
      STA SWORD    CLEAR "WAITING FOR ENQ" FLAG.
      JSB SLCW     CALL LOGICAL WRITE (HSLC). 
      JMP DONE      COMPLETION RETURN.
      JSB SETMR    CONTINUATION RETURN. 
      JMP RTRN     RETURN TO SYSTEM.
      SPC 4 
****************************************************
*                                                  *
*                  READ REQUEST INITIATION         *
*                                                  *
****************************************************
READR LDA EQT09,I  GET CONTROL WORD.
      AND N64$     REMOVE LOGICAL UNIT. 
      IOR P01$     INSERT REQUEST CODE. 
      STA EQT06,I  STORE CONROL WORD TO SYSTEM. 
      AND MASK2    IS IT THE
      CPA B4500     SPECIAL READ? 
      JMP SPECR     YES.
* 
      CLA,INA 
      JSB SLCR     CALL LOGICAL READ (HSLC).
      JMP DONE      COMPLETION RETURN.
      JSB SETMR    CONTINUATION RETURN. 
      JMP RTRN     RETURN TO SYSTEM.
* 
SPECR STA SWORD    SET SPECIAL CASE.
      LDA PARM1,I  GET RN PARAMETER.
      STA RNUMB    STORE. 
      JSB RDMA     INHIBIT DMA INTERRUPTS.
      LDA IO05A    START
      STA STDMA     INSTRUCTION.
      LDA RECV     LINE STATE 
      STA STAT2     EQUALS RECEIVE. 
      JSB READP    ENABLE INTERFACE.
      JMP DONE1    IMMEDIATE COMPLETION.
      SKP 
****************************************************
*                                                  *
*                  CONTROL REQUEST INITIATION      *
*                                                  *
****************************************************
CONTL LDA EQT06,I  CURRENT I/O WORD.
      XOR CONOF    SET BIT 14 OFF, 1 ON.
      STA EQT06,I  RESTORE SYSTEM CONTROL WORD. 
      CLA 
      JSB SLCC     CALL LOGICAL CONTROL (HSLC). 
      JMP DONE1     COMPLETION RETURN.
      LDA EQT06,I  GET CONTROL WORD.
      ALF,ALF      ISOLATE
      RAL,RAL       FUNCTION
      AND B77$       CODE.
      ADA N04$     FUNCTION LESS
      SSA,RSS       THAN FIVE?
      JMP CNTL1      NO. INVALID. 
      ADA CNTLT    YES. CALCULATE 
      LDA A,I       TABLE ADDRESS.
      JMP A,I      PROCESS BY FUNCTION CODE.
      SPC 1 
*  INVALID REQUEST
CNTL1 ISZ STAT1    INDICATE INVALID 
      JMP DONE1     REQUEST AND RETURN. 
      SPC 3 
*--------------------------------------------------+
*                  CONTROL TRANSFER TABLE          !
*--------------------------------------------------+
      DEF C0       CLEAR
      DEF DONE1    INITIALIZE(NO ADDITIONAL PROCESS)
      DEF C2       LINE OPEN
      DEF C3       LINE CLOSE 
CNTLT DEF * 
      SPC 1 
*--------------------------------------------------+
*                  CLEAR REQUEST                   !
*--------------------------------------------------+
C0    JSB CLC.C    CLEAR INTERFACE. 
      JSB RDMA     RELEASE DMA. 
      CLA          BREAK
      STA EXTSN     LINKAGE.
      LDA IDLE     LINE STATE 
      STA STAT2     EQUALS IDLE.
      JMP DONE1    RETURN.
      SPC 1 
*--------------------------------------------------+
*                  LINE OPEN REQUEST               !
*--------------------------------------------------+
C2    LDA TSBTS,I  GET TEST BITS. 
      RAL          PRIMARY
      SSA           STATION?
      JSB SETBT     YES. SET INDICATOR. 
      LDA AOPEN    LINE STATE 
      STA STAT2     EQUALS OPEN.
      JMP DONE1    RETURN.
* 
SETBT NOP 
      LDA CONWD    GET TEST BITS. 
      IOR BIT10    SET PRIMARY STATION. 
      STA CONWD    STORE WORD.
      JMP SETBT,I 
      SPC 1 
*--------------------------------------------------+
*                  LINE CLOSE REQUEST              !
*--------------------------------------------------+
C3    JSB CLC.C    CLEAR INTERFACE. 
      JSB RDMA     RELEASE DMA. 
      LDA CLOSE    LINE STATE 
      STA STAT2     EQUALS CLOSED.
      JMP DONE1    RETURN.
      SPC 3 
********************************************************
*                                                      *
*   ENTER HERE IF HSLC INDICATED COMPLETION FROM READ, *
*   WRITE, OR CONTROL INITIATION. (P+1 RETURN)         *
*                                                      *
********************************************************
* 
DONE  LDA IDLE      SET LINE STATE
      STA STAT2      TO IDLE. 
      LDA RTX       IF FROM INITIATOR,
      SZA            DO IMMEDIATE COMPLETION. 
      JMP RTRN
* 
DONE1 LDA P04$      INDICATE IMMEDIATE
      STA SAVA       COMPLETION.
      JMP RTRN      RETURN TO SYSTEM. 
      SKP 
************************************************
*                                              *
*                  LOGICAL TIMER               *
*                                              *
************************************************
LTIM  LDB LSTT     GET TABLE BASE.
* 
LSWCH ADB STAT2    PROCESS
      LDB B,I        BY LINE
      JMP B,I         STATE.
      SPC 2 
*--------------------------------------------------+
*         LOGICAL STATE TABLE FOR TIMER            !
*--------------------------------------------------+
LSTT  DEF *+1 
      DEF RTRN     0-CLOSED 
      DEF RTRN     1-AWAITING OPEN
      DEF RTRN     2-IDLE 
      DEF LSTC     3-RECEIVE
      DEF LSTD     4-CONTROL
      DEF LSTE     5-SEND 
      DEF LSTE     6-SEND TO RECEIVE
      SPC 2 
*--------------------------------------------------+
*       LOGICAL STATE TABLE FOR CONTINUATION       !
*--------------------------------------------------+
LSIT  DEF *+1 
      DEF RTRN     0-CLOSED 
      DEF RTRN     1-AWAITING OPEN
      DEF RTRN     2-IDLE 
      DEF LSIC     3-RECEIVE
      DEF LSID     4-CONTROL
      DEF LSIE     5-SEND 
      DEF LSIF     6-SEND TO RECEIVE
      SKP 
****************************************************
*                                                  *
*                  SET UP I/O INSTRUCTIONS         *
*                                                  *
****************************************************
SETIO NOP 
      ADA ISTCC    FORM STC INSTRUCTION 
      STA IO07
      STA IO08
      STA IO09
      STA IO10
      ADA ICLCC    FORM CLC INSTRUCTION 
      STA XIO02 
      ADA IOTA     FORM OTA INSTRUCTION 
      STA XIO03 
      ADA ILIA     FORM LIA INSTRUCTION 
      STA XIO05 
      ADA ISTF     FORM STF INSTRUCTION 
      STA IO06
* 
*             CONFIGURE DMA LOW SC INSTRUCTIONS 
* 
      LDB P02$
      LDA CONWD 
      AND DMAM
      SZA 
      INB 
      ADB ISTCC 
      STB IO02
      ADB ICLCC 
      STB IO00
      ADB IOTA
      STB IO01
      STB IO03
      ADB ILIA
      STB IO15
* 
*             CONFIGURE DMA HI SC INSTRUCTIONS
* 
      ADB .ISTC 
      STB IO05
      ADB ICLCC 
      STB IO05A 
      STB IO05B 
      ADB IOTA
      STB IO04
      ADB ISTF0 
      STB IO13
      STB IO14
      JMP SETIO,I 
      SKP 
****************************************************
*                                                  *
*                SET RTE TIMER                     *
*                                                  *
*             B=TIME (CENTISECONDS)                *
*             <0-INITIATE/UPDATE VALUE             *
*             =0-NO REQUEST                        *
*             >0-CANCEL REQUEST                    *
*                                                  *
****************************************************
SETMR NOP 
      STB EQT15,I  STORE TIMER COUNT. 
      LDA EQT04,I  TELL SYSTEM
      IOR BIT12     WE WILL SERVICE 
      STA EQT04,I    TIMER INTERRUPTS.
      JMP SETMR,I  RETURN.
      SPC 2 
****************************************************
*                                                  *
*             START READ                           *
*                                                  *
*   A-REG = ADDRESS,     B-REG = BYTE COUNT        *
*                                                  *
****************************************************
HREC  NOP 
      STA ADDR     STORE OFF
      STB LNGTH     PARAMETERS. 
      LDB HREC,I   GET TIMER PARAMETER. 
      ISZ HREC     IF TIMER REQUESTED,
      SZB 
      JSB SETMR      GO SET IT. 
      LDA RECV     LINE STATE 
      STA STAT2     EQUALS RECEIVE. 
      JSB RDMA     RELEASE DMA. 
      LDA ADDR     GET BOTH 
      LDB LNGTH     PARAMETERS. 
      BRS          CHANGE BYTES TO WORDS. 
      IOR BIT15    SET INPUT. 
      JSB INDMA    SET UP DMA.
      SZB,RSS      DO NOT START 
      JMP NONDM     IF LENGTH = 0.
      LDA IO05     FOR DMA
      STA STDMA     TRANSFER
      LDA CONWD    SET BIT INDICATING 
      IOR DMAA      WE ARE USING
      STA CONWD      DMA. 
      LDA IO05A 
      STA STDMA+1 
      JMP DMARD 
* 
NONDM JSB RDMA     INHIBIT DMA INTERRUPTS.
      LDA IO05A    START INSTRUCTION. 
      STA STDMA 
* 
DMARD JSB READP 
      LDA SWORD    SPECIAL
      SZA,RSS       CASE? 
      JMP CRTN       CONTINUATION RETURN TO SYSTEM. 
      CLA          RESET
      STA SWORD     SPECIAL CASE FLAG.
      LDA EBIT     EOT
      SZA,RSS       RECEIVED? 
      JMP ENQR       NO. FAKE ENQ.
      CLA           YES. CLEAR
      STA EBIT       TEST WORD. 
      JMP EOTR      FAKE EOT. 
      SPC 1 
INDMA NOP 
IO00  CLC DMAL,C   INITIALIZE DMA ROUTINE.
IO01  OTA DMAL     SET ADDRESS. 
IO02  STC DMAL,C
      LDA B        SET COUNT. 
IO03  OTA DMAL
      LDA SCODE    SET SELECT CODE. 
IO04  OTA DMAH
      JMP INDMA,I  RETURN.
      SPC 2 
****************************************************
*                                                  *
*             START WRITE                          *
*                                                  *
*     A-REG = ADDRESS,  B-REG = BYTE COUNT         *
*                                                  *
****************************************************
HSND  NOP 
      STA ADDR     STORE
      STB LNGTH     PARAMETERS. 
      LDB HSND,I   TIMER
      ISZ HSND      PARAMETER?
      SZB 
      JSB SETMR    YES. SET TIME. 
      LDA SEND     LINE STATE 
      STA STAT2     EQUALS SEND.
IO07  STC SC,C     SET INTERFACE CONTROL WORD.
      LDA TCWD1 
      JSB OTA 
      JSB RDMA     RELEASE DMA. 
      LDA ADDR     INITIALIZE DMA 
      LDB LNGTH     AND SET 
      STB TRLOG      XLOG.
      BRS          CHANGE BYTES TO WORDS. 
      JSB INDMA    INITIALIZE DMA.
      SZB,RSS      DO NOT START 
      JMP NODMW     IF LENGTH = 0.
      LDA CONWD    SET BIT INDICATING 
      IOR DMAA      WE ARE USING
      STA CONWD      DMA. 
IO05  STC DMAH,C   START DMA. 
IO05A CLC DMAH,C
IO06  STF SC       START TRANSFER.
      JMP CRTN     CONTINUATION RETURN TO SYSTEM. 
* 
NODMW JSB RDMA     INHIBIT DMA INTERRUPTS.
      JMP IO05A    RETURN.
      SPC 3 
****************************************************
*                                                  *
*             WRITE ONE WORD OUT                   *
*             CONTROL REQUEST                      *
*                                                  *
****************************************************
HCONT NOP 
      STA ADDR     STORE
      ISZ HCONT     PARAMETER.
      LDA CNTRR    LINE STATE 
      STA STAT2     EQUALS CONTROL. 
      JSB RDMA     INHIBIT DMA INTERRUPTS.
IO10  STC SC,C     SET INTERFACE CONTROL WORD.
      LDA TCWD5 
      JSB OTA 
      LDA ADDR,I   GET CHARACTER. 
      JSB OTA 
      JMP CRTN     CONTINUATION RETURN TO SYSTEM. 
      SPC 2 
*--------------------------------------------------+
*                  CONTROL INTERRUPT               !
*--------------------------------------------------+
LSID  CLA,RSS      NORMAL COMPLETION. 
* 
LSTD  LDA P15$     TIMEOUT. 
      JMP HCONT,I  RETURN TO LOGICAL. 
      SPC 2 
*--------------------------------------------------+
*             SEND INTERRUPT                       !
*             WRITE END OF TEXT                    !
*--------------------------------------------------+
LSIE  JSB RDMA     RELEASE DMA. 
      LDA TCWD3    END OF TEXT. 
      JSB CLC.C    SEND ETX.
      JSB OTA 
      LDA TRLOG    MODIFY 
      CMA,INA 
      AND B17$      ETX 
      ALF,ALF        BY 
      ALF             BYTE
      IOR ETX          COUNT. 
      JSB OTA 
      JSB WAIT
      LDA TCWD4    SEND CRC.
      JSB CLC.C 
      JSB OTA 
      JSB OTA      DUMMY WORD.
      JSB WAIT
      LDA S2R      LINE STATE EQUALS
      STA STAT2     SEND TO RECEIVE.
      LDA IO05A    INHIBIT DMA. 
      STA STDMA    START INSTRUCTION. 
      JSB READP    READ GARBAGE CHARACTER.
LSIF  CLA          RETURN TO
      CLB           LOGICAL.
      JMP HSND,I   COMPLETION.
* 
LSTE  LDA P15$     TIMEOUT. 
      JMP HSND,I   RETURN TO LOGICAL. 
      SPC 1 
* 
WAIT  NOP           SUBROUTINE TO WAIT
      LDA DELAY      SEVERAL MICRO-SECONDS
CHK   SLA,RAR         SO HP3000 WON'T 
      JMP WAIT,I       MISS ANY DATA. 
      JMP *+1,I 
      DEF CHK 
      SPC 2 
*--------------------------------------------------+
*             ENABLE INTERFACE TO READ             !
*--------------------------------------------------+
READP NOP 
      LDA RCWD1    SET CONTROL WORD.
      JSB CLC.C 
      JSB OTA 
      JSB LIA      READ 1 OR 2
      JSB LIA       DATA WORDS. 
IO08  STC SC,C     SET CONTROL, CLEAR FLAG, 
      JSB LIA       AND CLEAR THE STATUS WORD.
STDMA NOP          [OVERLAY WITH START DMA INST.] 
      NOP          [OVERLAY WITH CLC DMAH.] 
      CLA          CLEAR THE START DMA INST.
      STA STDMA 
      STA STDMA+1 
      JMP READP,I  RETURN TO CALLER.
      SPC 2 
*--------------------------------------------------+
*             PROCESS END OF TEXT                  !
*--------------------------------------------------+
PETX  EQU * 
IO14  STF DMAH     INHIBIT DMA XFERS. 
IO15  LIA DMAL     GET CHARACTER COUNT. 
      STA MOD16    SAVE IT. 
      JSB WAIT     WAIT FOR HP 3000.
      JSB CLC.C    READ STATUS
      JSB LIA       WORD. 
      JSB LIA      READ CRC WORD. 
      LDA TCWD4    TRANSMIT 
      JSB CLC.C     CRC 
      JSB OTA        TO 
      JSB OTA         CHECK IT. 
      JSB WAIT
      JSB CLC.C    READ STATUS &
      JSB LIA       CHECK 
      AND P02$       ERROR
      SZA             BITS. 
      JMP BTEXT    CRC ERROR. 
      LDA MOD16    CHECK MODULO COUNT.
      LDB LNGTH    NEGATIVE BYTE COUNT. 
      CMB,INB      MAKE IT POSITIVE 
      BRS           WORDS.
      STB LNGTH 
      ADA LNGTH    ADD WORD COUNT.
      ALS          MAKE POSITIVE BYTES. 
      STA TRLOG    STORE IN XMISSION LOG. 
      ALF,ALF 
      ALF 
      XOR XTE 
      AND NIB3     MASK FOR ERROR.
      SZA 
      JMP BTEX1 
      JSB RDMA     RELEASE DMA. 
      LDA P10$     GOOD TEXT. 
      JMP HREC,I   RETURN TO LOGICAL. 
* 
BTEXT LDA P11$     CRC ERROR. 
      JMP LRTN     RETURN TO LOGICAL. 
* 
* 
BTEX1 LDA P12$     TEXT UNDERRUN. 
      JMP LRTN     RETURN TO LOGICAL. 
      SPC 2 
*-----------------------------------------------------+ 
*                  RECEIVE INTERRUPT                  ! 
*-----------------------------------------------------+ 
LSIC  LDA SCODE 
      ADA N08$     IGNORE 
      SSA           DMA 
      JMP CRTN       INTERRUPTS.
      JSB CLC.C    READ INTERRUPT.
      JSB LIA      TAG1 WORD? 
      SLA           NO, JUST DATA WORD. 
      JMP RTAG1    YES. 
WENDC STC SC,C     REENABLE INTERFACE.
      JSB LIA 
      JSB LIA 
      JMP CRTN     CONTINUATION RETURN TO SYSTEM. 
* 
RTAG1 JSB LIA      LOAD TAG1 WORD.
      STA XTE      SAVE CHARACTER.
      AND MASK0    CLEAR HI-ORDER BIT.
      CPA ACK0     CHARACTER =
      JMP ACK0R      ACK0 
      CPA ENQ      CHARACTER =
      JMP ENQR       ENQ
      CPA EOT      CHARACTER =
      JMP EOTR       EOT
      CPA ACK1     CHARACTER =
      JMP ACK1R      ACK1 
      CPA WACK     CHARACTER =
      JMP WACKR      WACK 
      CPA RVI      CHARACTER =
      JMP RVIR       RVI
      CPA NAK      CHARACTER =
      JMP NAKR       NAK
      CPA DEOT     CHARACTERS = 
      JMP DEOTR      DLE EOT
      CPA TTD      CHARACTERS = 
      JMP TTDR       STX ENQ/ABORTED TEXT 
      AND MASK1    HI-ORDER BITS. 
      CPA ETX      CHARACTER =
      JMP PETX       ETX/PROCESS CRC
      JMP BTEXT    NO RECOGNIZABLE CHARACTERS.
XTE   OCT 0 
IO09  EQU WENDC 
      SPC 1 
ACK0R CLA,INA 
      JMP LRTN  
      SPC 1 
ACK1R LDA P02$
      JMP LRTN  
      SPC 1 
WACKR LDB P10$     BUMP WACK/TTD
      JSB BUMP      LONG-TERM STAT. 
      LDA P03$
      JMP LRTN  
      SPC 1 
RVIR  LDA P04$
      JMP LRTN  
      SPC 1 
ENQR  LDA P05$
      LDB SWORD     WAITING FOR 
      SZB,RSS        LINE BID?
      JMP HREC,I    NO. TAKE LOGICAL RETURN.
      JMP SCASE     YES. SPECIAL CASE.
      SPC 1 
NAKR  LDB P05$     BUMP NAK 
      JSB BUMP      LONG-TERM STAT. 
      LDA P06$
      JMP LRTN  
      SPC 1 
EOTR  LDA P07$
      LDB SWORD     WAITING FOR 
      SZB,RSS        LINE BID?
      JMP HREC,I       NO. TAKE LOGICAL RETURN. 
      STA EBIT      SET EOT RECEIVED. 
* 
SCASE LDA RNUMB     UNLOCK RN.
      JSB $CGRN 
      CLA,INA 
      STA TRLOG 
      JMP CRTN      CONTINUATION RETURN TO SYSTEM.
      SPC 1 
DEOTR LDA P08$
      JMP LRTN  
      SPC 1 
TTDR  LDA P09$
      JMP LRTN  
      SPC 2 
LSTC  LDA P15$     TIMEOUT. 
      JMP HREC,I   RETURN TO LOGICAL. 
      SPC 3 
*  IF DVG67 WAS IN "SPECIAL READ" STATE (WAITING FOR LINE BID) AND
*  SOMETHING OTHER THAN ENQ OR EOT CAME DOWN THE LINE, HANDLE AS A
*  SPURIOUS INTERRUPT. OTHERWISE RETURN TO LOGICAL DRIVER.
* 
LRTN  LDB SWORD    WAS DRIVER WAITING 
      SZB,RSS       FOR LINE BID (ENQ)? 
      JMP HREC,I      NO. RETURN TO LOGICAL.
      CLB             YES. TREAT AS A 
      JMP SPUR2        SPURIOUS INTERRUPT.
      SKP 
******************************************************* 
*                                                     * 
*                  INTERFACE COMMANDS                 * 
*                                                     * 
******************************************************* 
CLC.C NOP 
XIO02 CLC SC,C
      JMP CLC.C,I 
      SPC 1 
OTA   NOP 
XIO03 OTA SC
      JMP OTA,I 
      SPC 1 
LIA   NOP 
XIO05 LIA SC
      JMP LIA,I 
      SPC 4 
****************************************************
*                                                  *
*             COMMON RETURN                        *
*                                                  *
****************************************************
* 
*  CONTINUATION RETURN AT CRTN; COMPLETION AT RTRN
* 
CRTN  ISZ CG67     INCREMENT FOR CONTINUATION.
* 
RTRN  LDA STAT1    GET SLC STATUS.
      STA EQT05,I 
      LDB TRLOG    GET TRANSMISSION LOG.
      LDA RTX      DETERMINE
      SZA,RSS       RETURN TYPE.
      JMP RTRN1    IG67.
* 
      LDA SAVA     COMPLETION STATUS. 
      ISZ IFLAG    IF INTERRUPT SYSTEM ON,
      STF 0         ENABLE INTERRUPTS.
      JMP CG67,I   RETURN TO SYSTEM.
* 
RTRN1 LDA SAVA
      ISZ IFLAG 
      STF 0 
      JMP IG67,I
      SKP 
*  SUBROUTINE TO BUMP LONG-TERM STATISTIC.
*    CALLING SEQUENCE: LDB <OFFSET> 
*                      JSB BUMP 
* 
BUMP  NOP          ENTRY. 
      ADB LTCS     ADD BASE ADDRESS.
      ISZ B,I      BUMP IT. 
      NOP          IN CASE OF ROLL-OVER.
      JMP BUMP,I   RETURN.
      SPC 4 
* 
*   SET "INTERRUPT ON" FLAG 
* 
INTON NOP 
      CCB           ASSUME ON.
      SFC 0         IF NOT, 
      CLB            USE 0. 
      STB IFLAG     STORE INTERRUPT FLAG. 
      JMP INTON,I 
      SPC 2 
* 
*  DMA IS NOT REQUIRED. INHIBIT IT. 
* 
RDMA  NOP 
      LDA CONWD    CLEAR DMA
      AND DMAA      IF CHANNEL
      SZA,RSS        IS 
      JMP RDMA1       ALLOCATED.
IO05B CLC DMAH,C
IO13  STF DMAH
RDMA1 LDA CONWD 
      AND DMAMF 
      STA CONWD 
      JMP RDMA,I
      SKP 
****************************************************
*                                                  *
*             STORAGE & CONATANTS                  *
*                                                  *
****************************************************
      SPC 1 
*   INTERNAL EQT VALUES.
* 
STAT1 NOP          STATUS 
STAT2 NOP          LINE STATE 
CONWD NOP          I/F CONTROL WORD 
PARM1 NOP          PARAMETER 1
PARM2 NOP          PARAMETER 2
TRLOG NOP          TRANSMISSION LOG 
* 
EXTSN NOP          EXTENSION LINK 
TSBTS NOP          BOARD PARAMETERS 
ADDR  NOP          ADDR PARAMETER FOR HREC, HSND & HCONT
LNGTH NOP          LENGTH PARAMETER FOR HREC, HSND & GTEXT
      SPC 2 
EBIT  NOP 
IFLAG NOP 
MOD16 NOP 
RNUMB NOP 
RTX   NOP 
SAVA  NOP 
SCODE NOP 
SWORD NOP 
      SPC 2 
N04$  DEC -4
N08$  DEC -8
N64$  DEC -64 
P00$  DEC 0 
P01$  DEC 1 
P02$  DEC 2 
P03$  DEC 3 
P04$  DEC 4 
P05$  DEC 5 
P06$  DEC 6 
P07$  DEC 7 
P08$  DEC 8 
P09$  DEC 9 
P10$  DEC 10
P11$  DEC 11
P12$  DEC 12
P15$  DEC 15
P67$  DEC 67
B17$  EQU P15$
B77$  OCT 77
B4400 OCT 4400
B4500 OCT 4500
LBYT$ OCT 177400
BIT15 OCT 100000
BIT14 OCT 40000 
BIT12 OCT 10000 
BIT11 OCT 4000
BIT10 OCT 2000
BIT9  OCT 1000
BIT6  OCT 100 
AOPEN EQU P01$
CLOSE EQU P00$
CNTRR EQU P04$
CONOF OCT 40001 
DELAY EQU BIT15 
DMAA  EQU BIT9
DMAMF OCT 172777
DMAM  EQU BIT11 
DMAL  EQU 0 
DMAH  EQU 0 
ETX   OCT 1775
ICLCC EQU BIT11 
IDLE  EQU P02$
ILIA  EQU N64$
IOTA  OCT 172700
INCD  EQU P67$
ISTCC OCT 103700
.ISTC OCT 1204
ISTF  EQU LBYT$ 
ISTF0 OCT 177300
MASK0 OCT 77777 
MASK1 OCT 7777
MASK2 OCT 7700
NIB3  OCT 170000
PAROF OCT 173777
RECV  EQU P03$
RCWD1 OCT 2404
SEND  EQU P05$
S2R   EQU P06$
TCWD1 EQU P04$
TCWD3 EQU BIT6
TCWD4 EQU BIT11 
TCWD5 EQU BIT6
      SKP 
******************************************************* 
*                                                     * 
*                                                     * 
*   BEGINNING OF OLD HSLC CODE.                       * 
*                                                     * 
*    MODIFIED BY DMT ON MAY 30, 1978 TO REMOVE UNUSED * 
*    CODE, MOSTLY IN THESE AREAS                      * 
*      EBCDIC CHARACTER HANDLING                      * 
*      LCR BLOCK CHECK (CRC ONLY IS USED)             * 
*      ID SEQUENCE CHECKING/SENDING                   * 
*      CHARACTER CHECK  UPON RETURN FROM DRIVER       * 
*                                                     * 
*    FURTHER CLEANUP DONE ONE YEAR LATER.             * 
*                                                     * 
******************************************************* 
      SPC 2 
* 
* SLC  (HSI VERSION)
* TOM KEANE 
* JULY 1, 1975
* 
      SKP 
*               SLC CONTROL ROUTINE FOR LOGICAL DRIVER
* 
SLCC  NOP 
      LDB SLCC      GET RETURN ADDRESS
      JSB SETUP     SET UP RETURN ADDR & PTRS 
      LDB B300      SPECIFY CONTROL: REQ CODE OFFSET
      JSB TRAIN     GET FUNCTION & INIT TRACE ENTRY 
      CPA P01$      INITIALIZE? 
      JMP CF01      YES 
      CPA P02$      LINE OPEN?
      JMP CF02      YES 
      CPA P03$      LINE CLOSE? 
      JMP CF02      YES 
      ADA M32       SUBTRACT OCT 40 FROM FUNCTION 
      CPA P02$      CHANGE ERROR RECOVERY PARAMS? 
      JMP CF42      YES 
      CPA P03$      ZERO THE LONG TERM STATISTICS?
      JMP CF43      YES 
      SSA,RSS       FUNCTION BELOW 40?
      JMP SLCER     NO,ERROR
      CLA           YES 
      CLB 
      JMP PRET,I    LET PHYSICAL (P+2) LOOK AT FUNCT
* 
CF01  CLA           SET STATE = 0 (UNOPENED)
      STA STATE 
*               ------------------------------------------------- 
*               COMPLETE "CONTINUATION" RETURN TO PHYSICAL
* 
SLCPC LDA PRET      SPECIFY CONTINUATION
      CLB             & COMP STATUS = 0 = OK
      JMP SLCXT+2 
*               ------------------------------------------------- 
CF02  ADA M2        GET EVENT NO. (0 OR 1)
      JMP SEA       GO TO STATE-EVENT-ACTION CIRCLE 
CF42  LDA EQT07,I   GET SPECIFIED # 
      LDA A,I 
      CMA,INA       MAKE NEGATIVE 
      STA NTRY,I    AND SAVE
      LDA EQT08,I   GET # OF 3-SEC PERIODS IN LTO 
      CMA,INA         MAKE NEG
      STA NLTO,I      & SAVE
      JMP SLCXT     EXIT WITH STATUS =OK
CF43  JSB ZSTAT     ZERO THE LONG TERM STATISTICS 
      JMP SLCXT     EXIT WITH STATUS =OK
* 
SLCER CLB,INB       COMP STATUS =INVALID REQUEST =1 
      JMP SLCXT+1 
*               ------------------------------------------------- 
*               COMPLETION RETURN TO PHYSICAL 
* 
SLCXT CLB           COMPLETION STATUS =OK =0
      LDA PRETF     SPECIFY COMPLETION
      STA PRETV       & SET UP RETURN 
      LDA MPFLS 
      AND M3        CLEAR SEND-CONTINUE FLAG (BIT 1)
      STA MPFLS 
      LDA STAT1 
      AND HFF00     MASK OUT OLD COMP STATUS
      IOR B           & PUT NEW ONE 
      LDB BLKSP       PLUS THE BLOCK SPEC BITS
      BLF             (MOVED TO BITS 7-5) 
      RBL,RBL 
      SLB,RSS       IS THIS A WRITE REQ?
      IOR B         NO, PUT BLK SPEC INTO STATUS
      STA STAT1       RIGHT HALF OF EQT 4 
*               ------------------------------------------------- 
*               ROUTINE TO COMPLETE TRACE TABLE ENTRY 
* 
      AND B377
      ALF,ALF       MOVE COMPLETION STATUS TO LEFT
      LDB TRNEW,I   B =ADDR OF CURRENT ENTRY WORD 1 
      JSB TRINC     GET ADDR OF ENTRY WORD 2
      IOR B,I       MERGE IN REQUEST & FUNCTION CODE
      STA B,I         & STORE BACK IN WORD 2
      LDB TRNEW,I 
      LDB B,I       B = ADDR OF NEXT WORD TO BE FILLD 
      STB TRTMP     SAVE IT (NOW ADDR OF NEXT ENTRY)
      JSB TRINC     GET ADDR OF WORD AFTER NEXT 
      STB A 
      JSB TRACE     INIT WORD 1 FOR NEXT ENTRY
      LDB TRNEW,I   B =ADDR OF CURRENT ENTRY WORD 1 
      LDA TRTMP     A =ADDR OF NEXT ENTRY WORD 1
      STA B,I       RESTORE PTR TO NEXT ENTRY 
      STA TRNEW,I    & SET NEXT ENTRY =CURRENT ENTRY
      CLA 
      CLB 
      JMP PRETV,I   RETURN TO PHYSICAL
      SPC 4 
*               SLC READ ROUTINE FOR LOGICAL DRIVER 
* 
SLCR  NOP 
      LDB SLCR      GET RETURN ADDRESS
      JSB SETUP     SET UP RETURN ADDR
      LDA NTRY,I
      STA RTCTR     INIT RETRY CTR
      ISZ LTCS,I    INC TOTAL # OF READ REQUESTS
      NOP           NULL IN CASE OF ROLLOVER
      LDB B100      SPECIFY READ:    REQ CODE OFFSET
      JSB TRAIN     GET FUNCTION & INIT TRACE ENTRY 
      SZA,RSS       FUNCTION = 0? 
      JMP SLCER     YES,ERROR 
      CPA P07$      FUNCTION = 7? 
      JMP SLCER     YES, ERROR
      INA           GET EVENT NO. (2 THROUGH 7) 
      STA CURRQ     SAVE CURRENT READ REQ # 
      JMP SEA       GO TO STATE-EVENT-ACTION CIRCLE 
      SPC 4 
*               SLC WRITE ROUTINE FOR LOGICAL DRIVER
* 
SLCW  NOP 
      LDB SLCW      GET RETURN ADDRESS
      JSB SETUP     SET UP RETURN ADDR & PTRS 
      LDA NTRY
      STA RTCTR     INIT RETRY CTR
      CLB,INB       B=ADDR OF WORD 1, LONG-TERM STAT
      JSB BUMP      INC TOTAL # OF WRITE REQUESTS 
      LDB B200      SPECIFY WRITE:   REQ CODE OFFSET
      JSB TRAIN     GET FUNCTION & INIT TRACE ENTRY 
      ADB BIT10     SET BIT 10 TO IND WRITE 
      STB BLKSP     SAVE BLOCK SPEC BITS
      SLB,RSS       TRANSPARENT TEXT TO BE SENT?
      JMP *+4       NO
      LDB ENVIR,I 
      SSB           LRC SPECIFIED?
      JMP SLCER     YES, ERROR
      SZA,RSS       FUNCTION = 0? 
      JMP SLCER     YES,ERROR 
      ADA M7
      SSA,RSS       FUNCTION > 6? 
      JMP SLCER     YES, ERROR
      ADA P14$      GET EVENT NO. (8 THROUGH 13)
      JMP SEA       GO TO STATE-EVENT-ACTION CIRCLE 
* 
HE000 OCT 160000    OCT 160000
      SKP 
*     STATE-EVENT-ACTION CIRCLE -- A STATE-TRANSITION PROCESSOR 
* 
*     CALLING SEQUENCE: 
*         (A) = EVENT # 
*         (P) = JMP SEA 
*         (A) = MESSAGE PROCESSOR FLAGS 
* 
SEA   STA EVENT     SAVE EVENT #
      LDA PRVST,I   GET PREVIOUS STATES,
      AND B377        ISOLATE PREV-1, 
      ALF,ALF         & MOVE TO LEFT HALF 
      LDB STATE     GET CURRENT STATE (NOW PREV)
      IOR B         MERGE IN PREV STATE 
      STA PRVST,I 
      ADB STADT     ADD STATE TABLE BASE, GET ENTRY 
      STB A 
      INA 
      LDA A,I       GET ADDR OF NEXT STATE
      STA NEXST 
      LDB B,I       GET CLUSTER HEADER ADDR 
PCLUS LDA B,I       GET CLUSTER HEADER
      INB 
      STB CLUST     SAVE ADDR OF 1ST CLUSTER WORD 
      CLB 
      RRR 8         A = 1ST EVENT IN CLUSTER
      BLF,BLF         & B = -1 + LENGTH OF CLUSTER
      CMA,INA 
      ADA EVENT     COMPUTE REAL EVENT - 1ST EVENT
      SSA           RESULTS NEG (EVENT BELOW CLUST)?
      JMP SEAER     YES, ERROR
      STA EVOFF     SAVE EVENT OFFSET 
      CMA,INA 
      ADA B         COMPUTE CLUSTER LENGTH - OFFSET 
      SSA           RESULTS NEG (EVENT ABOVE CLUST)?
      JMP EVOUT     YES 
      LDB CLUST 
      ADB EVOFF     B = ADDR OF ACTION/NEXT STATE PR
      LDA B,I 
SEAF  CLB 
      RRR 8         A = ACTION INDEX
      BLF,BLF         & B = NEXT STATE
      STB STATE 
      STA CURAC     SAVE ACTION 
      LDA EVENT 
      ALF,ALF       GET WORD READY FOR TRACE TABLE: 
      IOR B           EVENT & RESULTANT STATE 
      JSB TRACE 
      LDA PRVAC,I 
      AND B377      ISOLATE PREVIOUS ACTION 
      ALF,ALF 
      IOR CURAC     MERGE IN CURRENT ACTION 
      STA PRVAC,I     & SAVE
      LDA CURAC 
      ADA ACTAD     A = ADDR OF APPROPRIATE ACTION: 
      LDB A,I 
      LDA MPFLS 
      JMP B,I       GO TO ACTION
EVOUT ADB CLUST 
      INB           B = ADDR OF NEXT CLUSTER HEADER 
      CPB NEXST     ARE WE THROUGH WITH THIS STATE? 
      JMP SEAER     YES, ERROR SINCE EVENT NOT FOUND
      JMP PCLUS     NO, PROCESS NEXT CLUSTER
SEAER LDA BLOUT     SET ACTION/NEXT STATE TO HANDLE 
      JMP SEAF        IMPROBABLE SITUATION
* 
CLUST OCT 0         ADDR OF 1ST CLUSTER ENTRY 
CURAC OCT 0         CURRENT ACTION
EVENT OCT 0         CURRENT EVENT # 
EVOFF OCT 0         OFFSET OF EVENT FROM CLUSTER
NEXST OCT 0         ADDR OF ENTRY FOR NEXT STATE
      SPC 6 
*     SUBROUTINE SCM:  SEND CONTROL MESSAGE  (ID, IF ANY, HAS 
*                      BEEN SENT ALREADY) 
*         (A) = INDEX OF MESSAGE TO BE SENT:
*                   0 = ENQ     5 = WACK
*                   1 = NAK     6 = RVI 
*                   2 = EOT     7 = DLE EOT 
*                   3 = ACK0    8 = TTD (STX ENQ) 
*                   4 = ACK1    9 = SOH ENQ 
* 
SCM   NOP 
      STA SCMTP 
      ADA ASCMA 
      LDA A,I       A = ADDR OF MESSAGE 
      JSB HCONT 
      NOP 
      SZA           SEND OK?
      JMP LOW       NO, SET EVENT =LINE ERROR (LOW) 
      LDA SCM       GET RETURN FROM SCM 
      JMP STXT4     INC # OF MESSAGES SENT
SCMTP OCT 0         TEMP FOR SCM
      SKP 
*     SUBROUTINE SETUP:  SET UP RETURN ADDRESSES TO PHYSICAL
*                        DRIVER & EQTX POINTERS 
*         (A) = A-REG PASSED BY PHYSICAL
*         (B) = P+1 RETURN OF CURRENT SLC ROUTINE 
*         (P) = JSB SETUP 
* 
SETUP NOP 
      STB PRETF     SAVE P+1 (COMPLETION) ADDR
      INB 
      STB PRET      SAVE P+2 (CONTINUATION) ADDR
      JMP SETUP,I   RETURN
      SPC 4 
*     SUBROUTINE STXT:  SEND TEXT 
* 
STXT  NOP 
      LDA MPFLS 
      AND HFFBF     CLEAR MP TIMEOUT FLAG (BIT 6) 
      STA MPFLS 
      CLA 
      STA TLOG      ZERO TRANSMISSION LOG 
      LDA PARM1     A = BUFFER ADDR 
      LDB PARM2 
      JSB HSND
      NOP 
      NOP 
      SZA           SEND OK?
      JMP LOW       NO, SET EVENT =LINE ERROR(LOW)
      LDA NLTO,I
      STA TOCTR     RESET LONG-TIME-OUT CTR 
      LDA MPFLS 
      AND M3        CLEAR SEND-CONTINUE FLAG
      STA MPFLS 
      LDA STXT      GET RETURN FROM STXT
STXT4 LDB P02$      INC # OF MESSAGES SENT; 
      JSB BUMP        WORD 3 OF LONG-TERM STAT
      JMP A,I       RETURN
HFFBF OCT 177677    REVERSE MASK BIT 6
      SKP 
*     SUBROUTINE STXCH:  SEND TEXT CHARACTERS 
*         (A) = INDEX OF MESSAGE TO BE SENT 
*                  10 = SOH      11 = STX     )  ONE CHAR 
*                  12 = ETX      13 = ETB     ) 
*                  14 = DLE STX  15 = DLE ETX   )  TWO CHAR 
*                  16 = DLE ETB                 ) 
STXCH NOP 
      STA SCMTP 
      ADA ASCMA 
      LDA A,I       A = ADDR OF CHARS 
      LDB SCMTP 
      ADB M14       COMPUTE INDEX - 14
      SSB           INDEX 14 OR MORE? 
      JMP *+3       NO
      LDB M3        YES:  IN EITHER CASE, 
      RSS 
      LDB M2        B = - (1 + # OF CHARS)
      JMP STXCH,I   RETURN
      SKP 
*     SUBROUTINE TRACE:  PUT WORD INTO TRACE TABLE
*         (A) = WORD TO BE STORED 
* 
TRACE NOP 
      LDB TRNEW,I   A =ADDR OF CURRENT ENTRY, WORD 1
      LDB B,I       B =ADDR OF NEXT WORD TO BE FILLD
      CPB TROLD,I   MATCH ADDR OF OLDEST ENTRY? 
      RSS           YES 
      JMP *+5       NO
      LDB B,I       B =ADDR OF NEXT-TO-OLDEST ENTRY 
      STB TROLD,I   UPDATE PTR TO OLDEST ENTRY
      LDB TRNEW,I 
      LDB B,I       B=ADDR OF NEXT WORD TO BE FILLED
      STA B,I       STORE WORD IN TRACE TABLE 
      JSB TRINC     GET ADDR OF NEXT WORD TO FILL 
      LDA TRNEW,I 
      CPB A         IS NEXT WORD = CURRENT ENTRY? 
      RSS           YES, SET NEXT WORD = ENTRY START
      JMP  *+3
      JSB TRINC     ADVANCE TO 2ND WORD OF ENTRY
      JSB TRINC     ADVANCE TO 3RD WORD OF ENTRY
      STB A,I       UPDATE WORD 1 OF CURRENT ENTRY
      JMP TRACE,I 
      SPC 2 
*     SUBROUTINE TRAIN: GET FUNCTION & INITIALIZE TRACE ENTRY 
*         (B) = REQUEST CODE (OFFSET 6 BITS TO LEFT)
*         (P) = JSB TRAIN 
*         (A) = FUNCTION CODE 
*         (B) = BLOCK SPEC BITS 
* 
TRAIN NOP 
      LDA EQT06,I   GET CONTROL WORD
      ALF,ALF         & POSITION FUNCTION 
      RAL,RAL 
      CPB B300      IS THIS A CONTROL REQUEST?
      RSS           YES 
      AND P07$      ISOLATE READ/WRITE FUNCTION 
      AND B77$      ISOLATE CONTROL FUNCTION
      STA TRTMP       & SAVE IT 
      IOR B         MERGE IN REQUEST CODE (OFFSET)
      JSB TRACE     STORE REQ & FUNCT IN TRACE TABLE
      CLA 
      STA TLOG
      STA BLKSP 
      LDA EQT06,I   GET CONTROL WORD
      ALF           POSITION BLOCK SPEC BITS
      AND HE000       & ISOLATE THEM
      RAL,RAL       NOW IN BITS 1,0, & 15 
      STA B 
      LDA TRTMP     GET FUNCTION
      JMP TRAIN,I 
TRTMP OCT 0         TRACE TABLE TEMPORARY 
      SKP 
*     SUBROUTINE TRINC:  INCREMENTS ADDRESS IN EVENT TRACE, 
*         CHECKING FOR WRAPAROUND 
*         (B) = ADDR TO BE INC
* 
TRINC NOP 
      CPB TRLWA     IS IT LAST WORD OF TABLE? 
      JMP *+3       YES 
      INB 
      JMP TRINC,I 
      LDB TRFWA     WRAPAROUND TO 1ST OF TABLE
      JMP TRINC,I 
      SPC 3 
*     SUBROUTINE ZSTAT:  ZERO LONG TERM COMM. STATISTICS
* 
ZSTAT NOP 
      LDA M11 
      STA MPCTR     SET COUNTER = 11
      LDA LTCS      A=ADDR OF WORD 1, LONG-TERM STAT
      CLB 
ZLOOP STB A,I       ZERO TABLE ENTRY
      INA 
      ISZ MPCTR 
      JMP ZLOOP 
      JMP ZSTAT,I 
* 
MPCTR OCT 0         COUNTER 
      SKP 
*     CONSTANTS & STORAGE FOR MESSAGE PROCESSOR ONLY
* 
.16   DEC 16        DEC 16,  OCT 20 
.20   DEC 20        DEC 20,  OCT 24 
.27   DEC 27        DEC 27,  OCT 33 
.29   DEC 29        DEC 29,  OCT 35 
.30   DEC 30        DEC 30,  OCT 34 
.31   DEC 31        DEC 31,  OCT 37 
.32   DEC 32        DEC 32,  OCT 40,  BIT 5 
B200  OCT 200       OCT 200, DEC 128
B300  OCT 300       OCT 300, DEC 192
H1400 OCT 012000                  LEFT HALF = DEC 20
BIT13 OCT 020000
HBFFF OCT 137777    OCT 137777,    REVERSE BIT 14 
HEFFF OCT 167777    OCT 167777,       REVERSE BIT 12
HFF00 EQU LBYT$ 
M11   DEC -11       DEC -11, OCT 177765 
M14   DEC -14       DEC -14, OCT 177762 
M17   DEC -17       DEC -17, OCT 177757, REV BIT 4
M20   DEC -20       DEC -20, OCT 177754, OCT -24
M32   DEC -32       DEC -32, OCT 177740, OCT -40
* 
PRETV OCT 0         VARIABLE RETURN TO PHYSICAL 
* 
*                     EQT EXTENSION POINTERS
* 
CONVL OCT 0         WRITE-CONV BUFFER LENGTH
CURRQ OCT 0         CURRENT READ REQ #
NLTO  OCT 0         PTR TO # OF 3-SECS IN LONG TMOUT
PRVAC OCT 0         PTR TO PREV ACTION: PREV,CURRENT
PRVST OCT 0         PTR TO PREV STATES: PREV-1,PREV 
PVACK OCT 0         CODE FOR PREV ACK 
STATE OCT 0         MAIN SLC STATE NUMBER 
TOCTR OCT 0         LONG-TIMEOUT CTR
CMBUF DEF *+1       ADDR OF CONTROL MESSAGE RECV BUF
      BSS 8 
LTCS  OCT 0         ADDR OF LONG-TERM COMM STATISTCS
TRNEW OCT 0         ADDR OF NEWEST TRACE TABLE ENTRY
TROLD OCT 0         ADDR OF OLDEST TRACE TABLE ENTRY
TRFWA OCT 0         FIRST WORD ADDR OF TRACE TABLE
TRLWA OCT 0         LAST WORD ADDR OF TRACE TABLE 
      SKP 
*                     ASCII CONTROL MESSAGES -- WITH ODD PARITY 
* 
ASCM  EQU * 
ENQ   OCT 77776     ENQ  0
NAK   OCT 000576    NAK      1
EOT   OCT 001176    EOT      2
ACK0  OCT 002176    ACK0     3
      OCT 77577                PAD PAD
ACK1  OCT 004176    ACK1     4
      OCT 77577                PAD PAD
WACK  OCT 003576    WACK     5
      OCT 77577                PAD PAD
RVI   OCT 000376    RVI      6
      OCT 77577                PAD PAD
DEOT  OCT 016177    EOT      7
      OCT 77577                PAD PAD
TTD   OCT 007176    TTD      8
      OCT 00605     SOH ENQ  9
      OCT 00400     SOH      10 
      OCT 01000     STX      11 
      OCT 101400    ETX      12 
      OCT 113400    ETB      13 
      OCT 10002     DLE STX  14 
      OCT 010203    DLE ETX  15 
      OCT 010227    DLE ETB  16 
* 
ASCMA DEF *+1       ASCII CONTROL MESSAGE ADDR PTR
      DEF ASCM      ENQ       0 
      DEF ASCM+1    NAK 
      DEF ASCM+2    EOT 
      DEF ASCM+3    ACK0
      DEF ASCM+5    ACK1
      DEF ASCM+7    WACK
      DEF ASCM+9    RVI 
      DEF ASCM+11   DLE EOT 
      DEF ASCM+13   TTD 
      DEF ASCM+14   SOH ENQ 
      DEF ASCM+15   SOH      10    TEXT 
      DEF ASCM+16   STX      11 
      DEF ASCM+17   ETX      12 
      DEF ASCM+18   ETB      13 
      DEF ASCM+19   DLE STX  14 
      DEF ASCM+20   DLE ETX  15 
      DEF ASCM+21   DLE ETB  16 
      SPC 2 
      SKP 
*               ACTION DEFINITIONS
* 
AC01  EQU 400B      OPEN LINE 
AC02  EQU 1000B     CLOSE LINE
AC03  EQU 1400B     SEND EOT
AC04  EQU 2000B     SEND EOT, RECV RESPONSE 
AC05  EQU 2400B     SEND ENQ, RECV RESPONSE 
AC06  EQU 3000B     SEND ENQ, RECV CONVERSATNAL TEXT
AC07  EQU 3400B     INC RETRY CTR & RESPONSE ERRORS 
AC08  EQU 4000B     SEE IF PRIMARY OR SECONDARY 
AC09  EQU 4400B     SET CONTACT FLG & POST NORM COMP
AC10  EQU 5000B     POST 0, NORMAL COMPLETION 
AC11  EQU 5400B     POST 1, INVALID REQUEST 
AC12  EQU 6000B     POST 2, REQ INCOMPATIBLE W STATE
AC13  EQU 6400B     POST 3, BAD ID SEQUENCE 
AC14  EQU 7000B     POST 4, LINE ERROR
AC15  EQU 7400B     POST 5, EOT RECVD 
AC16  EQU 10000B    POST 6, DLE EOT RECVD 
AC17  EQU 10400B    POST 7, LONG TIMEOUT OCCURRED 
AC18  EQU 11000B    POST 8, ENQ RECVD AFTER EOT SENT
AC19  EQU 11400B    POST 9, TEXT OVERRUN
AC20  EQU 12000B    POST 10, MAX # OF NAKS RECVD
AC21  EQU 12400B    POST 11, MAX # OF ENQS SENT 
AC22  EQU 13000B    POST 12, RVI RECVD
AC23  EQU 13400B    POST 13, ENQ RECVD AFTER ENQ SENT 
AC24  EQU 14000B    POST 14, NAK RECVD AFTER ENQ SENT 
AC25  EQU 14400B    POST 15, MAX ENQS RECVD FRM CONV
AC26  EQU 15000B    POST 16, BAD RESPONSE TO TTD
AC27  EQU 15400B    SEND TTD, RECV RESPONSE 
AC28  EQU 16000B    SEND TEXT, RECV RESPONSE
AC29  EQU 16400B    SEND TEXT, TEXT 
AC30  EQU 17000B    CHECK RVI 
AC31  EQU 17400B    PROCESS POSITIVE ACK
AC32  EQU 20000B    PROCESS SHORT TIMEOUT DURNG SEND
AC33  EQU 20400B    INC RETRY CTR 
AC34  EQU 21000B    CHECK TIMEOUT & BAD RESPSE FLAGS
AC35  EQU 21400B    PROCESS ENQ RECVDIN WRITE STATE 
AC36  EQU 22000B    PROCESS SHORT TIMEOUT DURNG RECV
AC37  EQU 22400B    CHECK READ REQUEST TYPE 
AC38  EQU 23000B    SEND ACK, RECV TEXT 
AC39  EQU 23400B    SEND PREV ACK, RECV TEXT
AC40  EQU 24000B    SEND NAK, REVV TEXT 
AC41  EQU 24400B    RECV RESPONSE 
AC42  EQU 25000B    RECV TEXT 
AC43  EQU 25400B    SEND WACK, RECV RESPONSE
AC44  EQU 26000B    SEND RVI, RECV TEXT 
AC45  EQU 26400B    POST 17, IMPOSSIBLE SITUATION 
AC46  EQU 27000B    SEND DLE-EOT
AC47  EQU 27400B    INC MESSAGE ERRORS,RECV RESPONSE
AC48  EQU 30000B    TOGGLE RECV ACK FLAG
AC49  EQU 30400B    BCC ERROR: SEND NAK, RECV TEXT
AC50  EQU 31000B    SET RECV ACK, CLEAR SEND ACK FLG
AC51  EQU 31400B    TOGGLE SEND ACK FLAG
AC52  EQU 32000B    TOGGLE SEND ACK & RECV ACK FLAGS
* 
*               EVENT DEFINITIONS 
* 
EV00  EQU 0         EVENT 0: LINE OPEN REQUEST
EV14  EQU AC14      EVENT 14: ACK0 RECVD
EV18  EQU AC18      EVENT 18: ENQ RECEIVED
EV29  EQU AC29      EVENT 29: LONG TIMEOUT
EV30  EQU AC30      EVENT 30: LOW 
EV31  EQU AC31      EVENT 31: HIGH
      SPC 4 
*                     LINE OPEN 
ACT1  JSB ZSTAT     ZERO THE LONG TERM STATISTICS 
      LDA M7
      STA NTRY,I    INIT # OF RETRIES = 7 
      LDA M20 
      STA NLTO,I    INIT LONG TIMEOUT = 60 SEC
      CLA 
      STA MPFLS     INIT MESS PROC FLAGS
      JMP SLCPC     CONT.RETURN TO PHYS, STATUS = OK
      SPC 2 
*                     LINE CLOSE
ACT2  JMP SLCPC     CONT.RETURN TO PHYS, STATUS = OK
      SPC 2 
*                     SEND EOT
ACT3  LDA P02$
      JSB SCM       SEND EOT CONTROL MESSAGE
      LDA MPFLS 
      AND P01$      EXCEPT FOR CONTACT-MADE FLAG, 
      STA MPFLS     INIT MESS PROC FLAGS
      JMP HIGH      SET EVENT = HIGH (NORMAL COMPL) 
      SPC 2 
*                     SEND EOT, RECV RESPONSE 
ACT4  LDA P02$
      JSB SCM       SEND EOT CONTROL MESSAGE
      LDA MPFLS 
      AND P01$      EXCEPT FOR CONTACT-MADE FLAG, 
      STA MPFLS     INIT MESS PROC FLAGS
ACT4A LDA NLTO,I
      STA TOCTR     RESET LONG-TIMEOUT CTR
      JMP ACT5B     RECV RESPONSE (NO ID) 
      SPC 2 
*                     SEND ENQ, RECV RESPONSE 
ACT5  EQU * 
      LDB ENVIR,I   GET SPECIFIED ENVIRONMENT 
      CLA           SPECIFY ENQ MESSAGE 
      BLF,SLB       HASP WORKSTATION (BIT 12 =1)? 
      LDA P09$      YES, SPECIFY SOH ENQ MESSAGE
      JSB SCM       SEND CONTROL MESSAGE
      LDA PRVAC,I 
      AND HFF00     ISOLATE PREV ACTION 
      CPA BIT13     PREV ACTION = 32? 
      JMP *+3       YES, BYPASS RESET 
      LDA NLTO,I
      STA TOCTR     RESET LONG-TIME-OUT CTR 
      LDA ENVIR,I 
      SLA,RSS       IS STATION PRIMARY? 
      JMP ACT5C     NO
      LDA M270
      STA NOM3      SET NOM 3-SEC TIMEOUT TO 2.7 SEC
ACT5C LDA MPFLS 
      AND M3        CLEAR SEND-CONTINUE FLAG (BIT 1)
      STA MPFLS 
ACT5A EQU * 
ACT5B CLE           SET E = 0: DISCARD ID 
      LDA CMBUF     A = ADDR OF CONTRL MESS RECV BUF
      LDB M17       B = -(1 + BUF LENGTH) 
      JSB BSCR      RECEIVE CONTROL MESSAGE 
*               ------------------------------------------------- 
STEM  ADA .13       SET UP MOST EVENT NUMBERS 
      CPA .27       LINE ERROR? 
      ADA P03$      YES, CHANGE EVENT TO "LOW"
      JMP SEA       GO TO STATE-EVENT-ACTION CIRCLE 
* 
M270  DEC -270
      SPC 2 
*                     SEND ENQ, RECEIVE CONVERSATIONAL TEXT 
ACT6  CLA           CODE = 0
      JSB SCM       SEND CONTROL MESSAGE: ENQ 
      LDA PRVAC,I 
      AND HFF00     ISOLATE PREV ACTION 
      CPA BIT13     PREV ACTION = 32? 
      JMP *+3       YES, BYPASS RESET OF LTO CTR
      LDA NLTO,I
      STA TOCTR     RESET LONG-TIMEOUT CTR
      CLA 
      STA TLOG      ZERO TRANS LOG
      LDA PARM1     GET REQ BUFFER ADDR 
      LDA A,I       GET LENGTH OF WRITE BUFFER
      ISZ PARM1     GET CORRECT POINTER 
      LDB PARM2     GET READ BUFFER LENGTH
      JMP AC29A     RECV CONV TEXT
      SPC 2 
*                     INCREMENT RETRY CTR & NO. OF RESPONSE ERRORS
ACT7  LDB P08$      SPECIFY THE 9TH LONG-TERM STAT
      JSB BUMP      INCREMENT NO. OF RESPONSE ERRORS
      IOR .32       SET BAD-RESPONSE FLAG (BIT 5) 
      STA MPFLS 
      JMP INTRY     INC RETRY CTR & GET EVENT 
      SPC 2 
*               SEE IF PRIMARY OR SECONDARY 
ACT8  LDA ENVIR,I   GET SPECIFIED ENVIRONMENT 
      SLA,RSS       IS STATION PRIMARY? 
      JMP LOW       NO, SECONDARY: SET EVENT = LOW
      LDA RTCTR 
      SZA,RSS       CTR =0? 
      JMP LOW       YES 
      ISZ RTCTR     YES; RETRY CTR OVERFLOW?
      JMP HIGH      NO, SET EVENT =HIGH 
      JMP LOW       YES, REPORT ENQ-ENQ CONTENTION
      SPC 2 
*                     SET CONTACT-MADE FLAG & POST NORMAL COMP
ACT9  IOR P01$      SET CONTACT-MADE FLAG 
      STA MPFLS 
      SPC 2 
*                     POST NORMAL COMPLETION
ACT10 JMP SLCXT     EXIT WITH COMP STATUS = 0 = OK
      SPC 2 
*                                   REPORT: 
ACT11 CLB,INB       COMP STATUS = 1 =INVALID REQ
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT12 LDB P02$      STATUS =2 =REQ INCOMPATL W STATE
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT13 LDB P03$      STATUS =3 =BAD ID 
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT14 LDB P04$      STATUS =4 =LINE ERROR 
      LDA P04$      INC TOTAL # OF LINE ERRORS
ACXIT ADA LTCS      A=ADDR OF WORD 1, LONG-TERM STAT
      ISZ A,I       UPDATE LONG-TERM STAT TABLE 
      NOP           NULL IN CASE OF ROLLOVER
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT15 LDB P05$      STATUS =5 =EOT RECVD
      AND P01$      EXCEPT FOR CONTACT-MADE FLAG, 
A15ST STA MPFLS     INIT MESS-PROC FLAGS
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT16 LDB P06$      STATUS =6 =DLE EOT RECVD
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT17 LDB P07$      STATUS =7 =LONG TIMEOUT 
      LDA P07$      INC TOTAL # OF LONG TIMEOUTS
      JMP ACXIT     P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT18 LDB P08$      STATUS =8 =ENQ RECVD TO EOT SENT
      AND HBFFF     CLEAR BIT 14 (SEND ACK FLAG)
      IOR BIT15     SET BIT 15 (RECV ACK FLAG)
      JMP A15ST     STORE FLAGS & RETURN
      SPC 2 
*                                   REPORT: 
ACT19 LDB P09$      STATUS = 9 =DATA OVERRUN
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT20 LDB P10$      STATUS =10 =MAX # NAKS RECVD
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT21 LDB P11$      STATUS =11 =MAX # ENQS SENT 
      AND HFFDF     CLEAR BAD-RESPONSE FLAG 
      JMP A15ST     STORE FLAGS & RETURN
HFFDF OCT 177737    REVERSE MASK BIT 5
      SPC 2 
*                                   REPORT: 
ACT22 LDB P12$      STATUS =12 =RVI RECBD 
      ADA BIT15     TOGGLE RECV ACK FLAG (BIT 15) 
      JMP A15ST     STORE FLAGS & RETURN
      SPC 2 
*                                   REPORT: 
ACT23 LDB .13       STATUS =13 =ENQ RECV TO ENQ SENT
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT24 LDB P14$      STATUS =14 =NAK RECV TO ENQ SENT
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT25 LDB .15       STATUS =15 =MAX ENQS FROM CONVER
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                                   REPORT: 
ACT26 LDB .16       STATUS =16 =BAD RESPONSE TO TTD 
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                     SEND TTD, RECEIVE RESPONSE
ACT27 LDA P08$
      JSB SCM       SEND CONTROL MESSAGE: TTD 
      JMP ACT4A     RESET LTO CTR & RECV RESPONSE 
      SPC 2 
*                     SEND TEXT, READ RESPONSE
ACT28 JSB STXT      SEND TEXT 
      JMP ACT4A     RESET LTO CTR & RECV RESPONSE 
      SPC 2 
*                     SEND TEXT, RECEIVE TEXT 
ACT29 LDA PARM1     GET REQUEST BUFFER ADDR 
      LDB PARM2     GET & 
      STB CONVL       SAVE REQUEST BUFFER LENGTH
      LDA A,I       GET LENGTH OF WRITE BUFFER
      STA PARM2       & PUT INTO EQT 11 
      ISZ PARM1     ADVANCE TO WRITE BUFFER ADDR
      JSB STXT      SEND TEXT IN THE WRITE BUFFER 
      LDA NLTO,I
      STA TOCTR     RESET LONG-TIMEOUT CTR
      CLA 
      STA TLOG      ZERO TRANSMISSION LOG 
      LDA PARM2     GET WRITE BUFFER LENGTH IN BYTES
      LDB CONVL 
      STB PARM2     PUT BACK ORIG :READ BUFFR LENGTH
AC29A CMA,INA 
      CLE,ERA       CHANGE TO POSITIVE WORD COUNT 
      SEZ           BYTE LENGTH ODD?
      INA           YES, ADD ONE TO WORD LENGTH 
      ADA PARM1     A = RECV BUFFER ADDR
      STA SAVEA     SAVE FOR WC NAK 10/16 
      ADB M1        B= -(1+RECV BUFFER LENGTH)
      STB SAVB      SAVE FOR WC NAK 10/16 
      CLE           E = 0: DISCARD ID OR LG 
      JSB BSCR      RECEIVE TEXT
      CCB 
      ADB PARM1     RETURN POINTER
      STB PARM1 
      JMP STEM      GET EVENT FROM COMPLETION CODE
      SPC 2 
*                     SET RVI FLAG
ACT30 STA B 
      BLF,SLB       RVI FLAG (BIT 12) SET?
      JMP LOW       YES, SET EVENT =LOW(BAD RVI)
      IOR BIT12     NO, THEN SET RVI FLAG 
      STA MPFLS 
      JMP HIGH      SET EVENT =HIGH (GOOD RVI)
      SPC 2 
*                     PROCESS RECVD POSITIVE ACKNOWLEDGEMENT
ACT31 AND HEFFF     CLEAR RVI FLAG
      STA MPFLS 
      CLE,ELA       PUT ACK0/1 FLAG (BIT 15) INTO E 
      LDA P14$      START WITH ACK0 IND 
      LDB ENVIR,I 
      BLF,SLB       HASP WORKSTATION? 
      JMP *+3       YES, ONLY ACK0 VALID
      SEZ           CURRENT FLAG = ACK1?
      INA           YES, CHANGE TO ACK1 IND 
      CPA EVENT     CURRENT EVENT = CORRECT ACK?
      JMP MID       YES, SET EVENT = MID
      JMP LOW       NO,  SET EVENT = LOW
      SPC 2 
*                     PROCESS SHORT TIMEOUT (SENDING) 
ACT32 IOR B100        & SET MP TIMEOUT FLAG (BIT 6) 
      STA MPFLS 
      LDA TOCTR 
      SZA,RSS       LTO CTR =0? 
      JMP *+3       YES 
      ISZ TOCTR     LONG TIMEOUT CTR OVERFLOW?
      JMP INTRY     NO
      LDA .29       SET EVENT =29 =LONG TIMEOUT 
      JMP SEA       GO TO STATE-EVENT-ACTION CIRCLE 
*               ------------------------------------------------- 
*               ROUTINE TO INCREMENT RETRY COUNTER
* 
INTRY LDA RTCTR 
      SZA,RSS       RETRY CTR =0? 
      JMP *+3       YES 
      ISZ RTCTR     RETRY CTR OVERFLOW? 
      JMP MID+2     NO
      LDB EVENT 
      LDA .30       START WITH NEXT EVENT = LOW 
      CPB .27       CURRENT EVENT = BAD ID? 
MID   LDA .32            YES, SET EVENT = MID 
      JMP SEA       GO TO STATE-EVENT-ACTION CIRCLE 
      LDB PRVST,I   GET PREV STATES 
      CLA 
      RRR 8         B = PREV -1, A = PREV (OFFSET)
      CPA H1400     PREV STATE = WRITE CONV (20)? 
      JMP MID       YES, SET EVENT = MID
      LDA .31       NO, START WITH EVENT = HIGH 
      CPB .20       PREV -1 STATE = WRITE CONV? 
      JMP MID            YES, SET EVENT = MID 
      JMP SEA       GO TO STATE-EVENT-ACTION CIRCLE 
      SPC 2 
*                     INCREMENT RETRY COUNTER 
ACT33 JMP INTRY     INCREMENT RETRY COUNTER 
      SPC 2 
*                     CHECK TIMEOUT & BAD RESPONSE FLAGS
ACT34 ALF,ALF 
      RAL,RAL 
      SLA,RSS       MP TIMEOUT FLAG SET (BIT 6 =1)? 
      JMP LOW       NO, SET EVENT =LOW
      SSA           BAD RESPONSE FLAG SET (BIT 5 =1)? 
      JMP LOW       YES, SET EVENT =LOW 
      LDA PRVST,I 
      AND HFF00     ISOLATE PREV-1 STATE
      CPA H1400     PREV-1 STATE =WRITE CONV (20)?
      JMP MID       YES, SET EVENT =MID 
      JMP HIGH      NO, SET EVENT =HIGH 
      SPC 2 
*                     PROCESS ENQ RECVD IN WRITE
ACT35 LDB P09$      INC # OF PREV-RESP ENQS RECVD,
      JSB BUMP        WORD 10 OF LONG-TERM STAT 
      ALF,ALF 
      SLA           ENQ JUST SENT (BIT 8 =1)??
      JMP MID       YES, SET EVENT = MID
      SSA           TEXT JUST RECVD (BIT 7 =1)? 
      JMP HIGH      YES, SET EVENT = HIGH 
      JMP LOW       NO, SET EVENT = LOW 
      SPC 2 
*                     PROCESS SHORT TIMEOUT, RECEIVING
ACT36 LDA .29       START WITH EVENT = LONG TIMEOUT 
      LDB TOCTR 
      SZB,RSS       LTO CTR =0? 
      JMP SEA       YES 
      ISZ TOCTR     INCREMENT TIMEOUT CTR 
      RSS           NO OVFLO
      JMP SEA       OVFLO: STATE-EVENT-ACTION CIRCLE
      LDA STATE 
      CPA P02$      CURRENT STATE = READ ENQ? 
      JMP ACT5A     YES, RECV RESPONSE & ID, IF ANY 
      JMP AC38C     NO, RECEIVE TEXT
      SPC 2 
*                     CHECK READ REQUEST TYPE 
ACT37 AND HBFFF     CLEAR BIT 14 (SEND ACK FLAG)
      IOR BIT15     SET BIT 15 (RECV ACK FLAG)
      STA MPFLS 
      LDA CURRQ     GET CURRENT READ REQUEST #
      CPA P03$      CURRENT REQ = 3 (READ INITIAL)? 
      JMP HIGH      YES, SET EVENT = HIGH 
      LDA PRVST,I 
      AND HFF00     ISOLATE PREV-1 STATE
      CPA BIT11     PREV-1 STATE =8 (RESTRCTED READ)? 
      JMP MID       YES, SET EVENT = MID
LOW   LDA .30       SET EVENT = LOW 
      JMP SEA       GO TO STATE-EVENT-ACTION CIRCLE 
HIGH  LDA .31       SET EVENT = HIGH
      JMP SEA       GO TO STATE-EVENT-ACTION CIRCLE 
      SPC 2 
*                     SEND ACK, RECV TEXT 
ACT38 EQU * 
      LDA P03$      START WITH MESSAGE CODE FOR ACK0
      LDB ENVIR,I   GET SPECIFIED ENVIRONMENT 
      BLF,SLB       HASP WORKSTATION? 
      JMP AC38A     YES, SEND ONLY ACK0 
      LDB MPFLS     GET SEND ACK FLAG (BIT 14)
      RBL 
      SSB           ACK0 TO BE SENT (BIT 14 =0)?
      INA           NO
AC38A STA PVACK     SET UP PREV ACK 
AC38D JSB SCM       SEND ACK
      LDA MPFLS 
      AND M3        CLEAR SEND-CONTINUE FLAG (BIT 1)
      STA MPFLS 
      LDA NLTO,I
      STA TOCTR     RESET LONG-TIMEOUT CTR
AC38C CLA 
      STA TLOG      ZERO TRANSMISSION LOG 
      LDA EQT06,I   GET CONTROL WORD 10/16
      AND N64$      MASK OUT FUNCTION 10/16 
      CPA WCWRD     WRITE CONVERSATIONAL 10/16
      JMP WCNAK     YES/GET ORIGINAL POINTERS 10/16 
      LDA PARM1     A = RECV BUFFER ADDR
      CCB 
      ADB PARM2 
CLRE  CLE           SET E =0: DISCARD ID OR LG
      JSB BSCR      RECEIVE TEXT
      JMP STEM      GET EVENT FROM COMPLETION CODE
* 
WCNAK LDA SAVEA     GET RECEIVE 10/16 
      LDB SAVB      POINTERS 10/16
      JMP CLRE      RETURN
* 
SAVEA NOP 
SAVB  NOP 
WCWRD OCT 22300 
      SPC 2 
*                     SEND PREV ACK, RECEIVE TEXT 
ACT39 EQU * 
      LDB P09$      INC # OF PREV-RESP ENQS RECVD,
      JSB BUMP        WORD 10 OF LONG-TERM STAT 
      LDA PVACK     GET MESSAGE CODE FOR PREV ACK 
      JMP AC38D     SEND CONTROL MESSAGE: PREV ACK
      SPC 2 
*                     SEND NAK, RECEIVE TEXT
ACT40 EQU * 
AC40A CLA,INA 
AC40B STA PVACK     SET UP PREV ACK 
      JMP AC38D     SEND CONTROL MESSAGE: NAK 
      SPC 2 
*                     RECEIVE RESPONSE
ACT41 LDA NLTO,I
      STA TOCTR     RESET LONG-TIMEOUT CTR
      JMP ACT5A     RECV RESPONSE, CHECK ID, IF ANY 
      SPC 2 
*                     INC MESSAGE ERRORS, RECV TEXT 
ACT42 LDB P06$      SPECIFY WORD 7,LONG-TERM STAT 
      JSB BUMP      UPDATE MESSAGE ERROR STAT 
      JMP AC38C     RECV TEXT BUT DONT RESET TIMER
      SPC 2 
*                     SEND WACK, RECV RESPONSE
ACT43 LDA P05$
      JMP ACT27+1   SEND WACK, RESET LTO, RECV RESP 
      SPC 2 
*                     SEND RVI, RECV TEXT 
ACT44 LDA P06$      SET UP PREV ACK, SEND RVI,
      JMP AC40B 
      SPC 2 
*                     REPORT IMPOSSIBLE SITUATION 
ACT45 LDB .17       STATUS =17 =IMPOSSIBLE SITUATION
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
      SPC 2 
*                     SEND DLE-EOT (DISCONNECT) 
ACT46 LDA P07$
      JMP ACT3+1    SEND DLE-EOT CONTROL MESSAGE
      SPC 2 
*                     INC. MESSAGE ERRORS, READ RESPONSE
ACT47 LDB P06$      SPECIFY WORD 7,LONG-TERM STAT 
      JSB BUMP      UPDATE MESSAGE ERROR STAT 
      CLA           SINCE READ ERROR, ALLOW TIMEOUT:
      STA NOM3        DONT RESTART 3-SEC TIMEOUT
      JMP ACT5A     RECV RESPONSE 
      SPC 2 
*                     TOGGLE RECV ACK FLAG
ACT48 ADA BIT15     TOGGLE RECV ACK FLAG (BIT 15) 
      JMP ACT9      SET CNTACT-MADE FLG,STORE,& RETN
      SPC 2 
*               SEND NAK BECAUSE OF ERROR, RECEIVE TEXT 
ACT49 LDB P06$      SPECIFY WORD 7, LONG-TERM STAT
      JSB BUMP      UPDATE MESSAGE-ERROR STAT 
      RAR,RAR 
      SLA,RSS       NAK SENDING DISABLED (BIT 2 =1)?
      JMP AC40A      NO  SEND NAK, RECV TEXT
      LDB .18       YES; STATUS =18 =BAD BCC ETC. 
      JMP SLCXT+1   P+1 (COMP) RETURN TO PHYSICAL 
.18   DEC 18
* 
*                     SET RECV ACK, CLEAR SEND ACK FLAG  + ACT 9
ACT50 AND HBFFF     CLEAR BIT 14 (SEND ACK FLAG)
      IOR BIT15     SET BIT 15 (RECV ACK FLAG)
      JMP ACT9      SET CNTACT-MADE FLG,STORE,& RETN
      SPC 2 
*                     TOGGLE SEND ACK FLAG  + ACT 9 
ACT51 XOR BIT14     TOGGLE SEND ACK FLAG (BIT 14) 
      JMP ACT9      SET CNTACT-MADE FLG,STORE,& RETN
      SPC 2 
*                     TOGGLE SEND ACK & RECV ACK FLAGS  + ACT 9 
ACT52 ADA BIT15     TOGGLE RECV ACK FLAG (BIT 15) 
      JMP ACT51 
      SKP 
*               ACTION ADDRESS TABLE
* 
ACTAD DEF * 
      DEF ACT1
      DEF ACT2
      DEF ACT3
      DEF ACT4
      DEF ACT5
      DEF ACT6
      DEF ACT7
      DEF ACT8
      DEF ACT9
      DEF ACT10 
      DEF ACT11 
      DEF ACT12 
      DEF ACT13 
      DEF ACT14 
      DEF ACT15 
      DEF ACT16 
      DEF ACT17 
      DEF ACT18 
      DEF ACT19 
      DEF ACT20 
      DEF ACT21 
      DEF ACT22 
      DEF ACT23 
      DEF ACT24 
      DEF ACT25 
      DEF ACT26 
      DEF ACT27 
      DEF ACT28 
      DEF ACT29 
      DEF ACT30 
      DEF ACT31 
      DEF ACT32 
      DEF ACT33 
      DEF ACT34 
      DEF ACT35 
      DEF ACT36 
      DEF ACT37 
      DEF ACT38 
      DEF ACT39 
      DEF ACT40 
      DEF ACT41 
      DEF ACT42 
      DEF ACT43 
      DEF ACT44 
      DEF ACT45 
      DEF ACT46 
      DEF ACT47 
      DEF ACT48 
      DEF ACT49 
      DEF ACT50 
      DEF ACT51 
      DEF ACT52 
      SKP 
*               MESSAGE PROCESSOR STATE DEFINITIONS 
* 
UNOPN EQU 0         UNOPENED
CNTRL EQU 1         CONTROL --  WAITING FOR USER REQ
RENQ  EQU 2         READ ENQ
RERR  EQU 3         "READ ENQ" ERROR
RREQ  EQU 4         CHECK READ REQUEST TYPE 
READ  EQU 5         READ    --  WAITING FOR READ REQ
RTEXT EQU 6         READ TEXT 
RRVI  EQU 7         READ RVI         -- IS RVI VALID
RREAD EQU 8         RESTRICTED READ -- ENQ AFTER EOT
WENQ  EQU 9         WRITE ENQ 
ERRWE EQU 10        "WRITE ENQ" ERROR 
EN.EN EQU 11        ENQ-ENQ CONTENTION
WRITE EQU 12        WRITE  --  WAITING FOR WRITE REQ
WTEXT EQU 13        WRITE TEXT
WPREV EQU 14        WRITE PREVIOUS RESPONSE ENQ 
CKRES EQU 15        CHECK RESPONSE
BDACK EQU 16        BAD ACK RECEIVED
WRTRY EQU 17        WRITE RETRY 
WRENQ EQU 18        ENQ RECEIVED IN WRITE OR CONV 
WRNQ2 EQU 19        2ND STATE, ENQ RECVD IN WRITE 
WCONV EQU 20        WRITE CONVERSATIONAL
WEOT  EQU 21        WRITE EOT 
REOTR EQU 22        READ EOT RESPONSE 
HNGUP EQU 23        HANG UP     --  IDLE EOT RECEIVED 
WTTD  EQU 24        WRITE TTD - WAITING FOR RESPONSE
      SPC 2 
*               STATE ADDRESS TABLE 
* 
STADT DEF *+1 
      DEF ST00
      DEF ST01
      DEF ST02
      DEF ST03
      DEF ST04
      DEF ST05
      DEF ST06
      DEF ST07
      DEF ST08
      DEF ST09
      DEF ST10
      DEF ST11
      DEF ST12
      DEF ST13
      DEF ST14
      DEF ST15
      DEF ST16
      DEF ST17
      DEF ST18
      DEF ST19
      DEF ST20
      DEF ST21
      DEF ST22
      DEF ST23
      DEF ST24
      DEF ST25
      SPC 4 
*               STATE TRANSITION TABLE
* 
*               STATE 0:   UNOPN - UNOPENED 
* 
ST00  ABS EV00+13        -------------------- 
      ABS AC01+CNTRL     REQUEST: LINE OPEN 
      ABS AC11+UNOPN     REQUEST: LINE CLOSE
      ABS AC11+UNOPN     REQUEST: READ ENQ
      ABS AC11+UNOPN     REQUEST: READ INITIAL
      ABS AC11+UNOPN     REQUEST: READ CONTINUE 
      ABS AC11+UNOPN     REQUEST: READ REPEAT 
      ABS AC11+UNOPN     REQUEST: READ WITH RVI 
      ABS AC11+UNOPN     REQUEST: DELAY READ
      ABS AC11+UNOPN     REQUEST: WRITE ENQ 
      ABS AC11+UNOPN     REQUEST: WRITE CONTINUE
      ABS AC11+UNOPN     REQUEST: WRITE CONVERSATNAL
      ABS AC11+UNOPN     REQUEST: WRITE EOT 
      ABS AC11+UNOPN     REQUEST: WRITE DISCONNECT
      ABS AC11+UNOPN     REQUEST: DELAY WRITE 
* 
*               STATE 1:   CNTRL - CONTROL
* 
ST01  ABS EV00+13        -------------------- 
      ABS AC12+CNTRL     REQUEST: LINE OPEN 
      ABS AC02+UNOPN     REQUEST: LINE CLOSE
      ABS AC41+RENQ      REQUEST: READ ENQ
      ABS AC41+RENQ      REQUEST: READ INIT 
      ABS AC12+CNTRL     REQUEST: READ CONT 
      ABS AC12+CNTRL     REQUEST: READ REPEAT 
      ABS AC12+CNTRL     REQUEST: READ WITH RVI 
      ABS AC12+CNTRL     REQUEST: DELAY READ
      ABS AC05+WENQ      REQUEST: WRITE ENQ 
      ABS AC12+CNTRL     REQUEST: WRITE CONTINUE
      ABS AC12+CNTRL     REQUEST: WRITE CONV
      ABS AC03+WEOT      REQUEST: WRITE EOT 
      ABS AC46+WEOT      REQUEST: WRITE DISCONNECT
      ABS AC12+CNTRL     REQUEST: DELAY WRITE 
* 
*               STATE 2:   RENQ  - READ ENQ 
* 
ST02  ABS EV14+16        -------------------- 
      ABS AC47+RENQ      ACK0 RECVD 
      ABS AC47+RENQ      ACK1 RECVD 
      ABS AC47+RENQ      WACK RECVD 
      ABS AC47+RENQ      RVI RECVD
      ABS AC37+RREQ      ENQ RECVD
      ABS AC47+RENQ      NAK RECVD
      ABS AC15+CNTRL     EOT RECVD
      ABS AC16+HNGUP     DLE EOT RECVD
      ABS AC47+RENQ      TTD RECVD
      ABS AC47+RENQ      TEXT RECVD 
      ABS AC47+RENQ      BAD TEXT RECVD 
      ABS AC47+RENQ      TEXT OVERRUN 
      ABS AC47+RENQ      GARBAGE RECVD
      ABS AC33+RERR      BAD ID 
      ABS AC36+RENQ      SHORT TIMEOUT
      ABS AC17+CNTRL     LONG TIMEOUT 
      ABS AC14+CNTRL     LOW (LINE ERROR) 
* 
*               STATE 3:   RERR  - "READ ENQ" ERROR 
* 
ST03  ABS EV31+1         -------------------- 
      ABS AC47+RENQ      HIGH (NO OVERFLOW) 
      ABS AC13+CNTRL     MID (CTR OVERFLOW & BAD ID)
* 
*               STATE 4:   RREQ  - CHECK READ REQUEST TYPE
* 
ST04  ABS EV30+2         -------------------- 
      ABS AC10+READ      LOW=READ ENQ OR DELAY, READ
      ABS AC38+RTEXT     HIGH=READ INITIAL, READ ST 
      ABS AC10+RREAD     MID=READ DELAY, RESTCT READ
* 
*               STATE 5:   READ  - READ -- WAITING FOR READ REQ 
* 
ST05  ABS EV00+13        -------------------- 
      ABS AC12+READ      REQUEST: LINE OPEN 
      ABS AC02+UNOPN     REQUEST: LINE CLOSE
      ABS AC12+READ      REQUEST: READ ENQ
      ABS AC12+READ      REQUEST: READ INIT 
      ABS AC38+RTEXT     REQUEST: READ CONT 
      ABS AC40+RTEXT     REQUEST: READ REPEAT 
      ABS AC30+RRVI      REQUEST: READ WITH RVI 
      ABS AC43+RENQ      REQUEST: DELAY READ
      ABS AC12+READ      REQUEST: WRITE ENQ 
      ABS AC28+WTEXT     REQUEST: WRITE CONTINUE
      ABS AC29+WCONV     REQUEST: WRITE CONV
      ABS AC03+WEOT      REQUEST: WRITE EOT 
      ABS AC46+WEOT      REQUEST: WRITE DISCONNECT
      ABS AC12+READ      REQUEST: DELAY WRITE 
* 
*               STATE 6:   RTEXT - READ TEXT
* 
ST06  ABS EV14+16        -------------------- 
      ABS AC42+RTEXT     ACK0 RECVD 
      ABS AC42+RTEXT     ACK1 RECVD 
      ABS AC42+RTEXT     WACK RECVD 
      ABS AC42+RTEXT     RVI RECVD
      ABS AC39+RTEXT     ENQ
      ABS AC42+RTEXT     NAK
      ABS AC15+CNTRL     EOT
      ABS AC16+HNGUP     DLE EOT RECVD
      ABS AC40+RTEXT     TTD RECVD
      ABS AC51+READ      TEXT RECVD 
      ABS AC49+RTEXT     BAD TEXT RECVD 
      ABS AC19+READ      TEXT OVERRUN 
      ABS AC42+RTEXT     GARBAGE RECVD
      ABS AC45+CNTRL     BAD ID 
      ABS AC36+RTEXT     SHORT TIMEOUT
      ABS AC17+CNTRL     LONG TIMEOUT 
      ABS AC14+CNTRL     LOW (LINE ERROR) 
* 
*               STATE 7:   RRVI  - READ RVI -- IS RVI VALID 
* 
ST07  ABS EV30+1         -------------------- 
      ABS AC12+READ      LOW  (2ND RVI REQUEST) 
      ABS AC44+RTEXT     HIGH (OK TO SEND RVI)
* 
*               STATE 8:   RREAD - RESTRICTED READ
* 
ST08  ABS EV00+13        -------------------- 
      ABS AC12+RREAD     REQUEST: LINE OPEN 
      ABS AC02+UNOPN     REQUEST: LINE CLOSE
      ABS AC12+RREAD     REQUEST: READ ENQ
      ABS AC12+RREAD     REQUEST: READ INIT 
      ABS AC38+RTEXT     REQUEST: READ CONT 
      ABS AC40+RTEXT     REQUEST: READ REPEAT 
      ABS AC12+RREAD     REQUEST: READ WITH RVI 
      ABS AC43+RENQ      REQUEST: DELAY READ
      ABS AC12+RREAD     REQUEST: WRITE ENQ 
      ABS AC12+RREAD     REQUEST: WRITE CONTINUE
      ABS AC12+RREAD     REQUEST: WRITE CONV
      ABS AC03+WEOT      REQUEST: WRITE EOT 
      ABS AC46+WEOT      REQUEST: WRITE DISCONNECT
      ABS AC12+RREAD     REQUEST: DELAY WRITE 
* 
*               STATE 9:   WENQ  - WRITE ENQ
* 
ST09  ABS EV14+16        -------------------- 
      ABS AC50+WRITE     ACK0 RECVD 
      ABS AC07+ERRWE     ACK1 RECVD 
      ABS AC05+WENQ      WACK RECVD 
      ABS AC07+ERRWE     RVI RECVD
      ABS AC08+EN.EN     ENQ
      ABS AC24+CNTRL     NAK
      ABS AC15+CNTRL     EOT
      ABS AC16+HNGUP     DLE EOT RECVD
      ABS AC07+ERRWE     TTD RECVD
      ABS AC07+ERRWE     TEXT RECVD 
      ABS AC07+ERRWE     BAD TEXT RECVD 
      ABS AC07+ERRWE     TEXT OVERRUN 
      ABS AC07+ERRWE     GARBAGE RECVD
      ABS AC07+ERRWE     BAD ID 
      ABS AC32+ERRWE     SHORT TIMEOUT
      ABS AC45+CNTRL     LONG TIMEOUT 
      ABS AC14+CNTRL     LOW (LINE ERROR) 
BLOUT EQU ST09+16   ACTION STATE FOR IMPROBABLE ERR 
* 
*               STATE 10:  ERRWE - "WRITE ENQ" ERROR
* 
ST10  ABS EV29+3         -------------------- 
      ABS AC17+CNTRL     LONG TIMEOUT 
      ABS AC21+CNTRL     LOW (CTR OVFLO, NO BAD ID) 
      ABS AC05+WENQ      HIGH (NO OVFLO)
      ABS AC13+CNTRL     MID (CTR OVFLO, BAD ID)
* 
*               STATE 11:  EN.EN - ENQ-ENQ CONTENTION 
* 
ST11  ABS EV30+1         -------------------- 
      ABS AC23+CNTRL    LOW (SECONDARY OR CTR OFLOW)
      ABS AC05+WENQ      HIGH (PRIMARY) 
* 
*               STATE 12:  WRITE - WRITE -- WAITING FOR WRITE REQ 
* 
ST12  ABS EV00+13        -------------------- 
      ABS AC12+WRITE     REQUEST: LINE OPEN 
      ABS AC02+UNOPN     REQUEST: LINE CLOSE
      ABS AC12+WRITE     REQUEST: READ ENQ
      ABS AC12+WRITE     REQUEST: READ INIT 
      ABS AC12+WRITE     REQUEST: READ CONT 
      ABS AC12+WRITE     REQUEST: READ REPEAT 
      ABS AC12+WRITE     REQUEST: READ WITH RVI 
      ABS AC12+WRITE     REQUEST: DELAY READ
      ABS AC12+WRITE     REQUEST: WRITE ENQ 
      ABS AC28+WTEXT     REQUEST: WRITE CONTINUE
      ABS AC29+WCONV     REQUEST: WRITE CONV
      ABS AC04+REOTR     REQUEST: WRITE EOT 
      ABS AC46+WEOT      REQUEST: WRITE DISCONNECT
      ABS AC27+WTTD      REQUEST: DELAY WRITE 
* 
*               STATE 13:  WTEXT - WRITE TEXT 
* 
ST13  ABS EV14+16        -------------------- 
      ABS AC31+CKRES     ACK0 RECVD 
      ABS AC31+CKRES     ACK1 RECVD 
      ABS AC05+WTEXT     WACK RECVD 
      ABS AC30+CKRES     RVI RECVD
      ABS AC35+WRENQ     ENQ RECVD
      ABS AC33+WRTRY     NAK RECVD
      ABS AC15+CNTRL     EOT RECVD
      ABS AC16+HNGUP     DLE EOT RECVD
      ABS AC07+WPREV     TTD RECVD
      ABS AC07+WPREV     TEXT RECVD 
      ABS AC07+WPREV     BAD TEXT RECVD 
      ABS AC07+WPREV     TEXT OVERRUN 
      ABS AC07+WPREV     GARBAGE RECVD
      ABS AC07+WPREV     BAD ID 
      ABS AC32+WPREV     SHORT TIMEOUT
      ABS AC45+CNTRL     LONG TIMEOUT (NOT EXECTED) 
      ABS AC14+CNTRL     LOW (LINE ERROR) 
* 
*               STATE 14:  WPREV - WRITE PREVIOUS RESPONSE ENQ
* 
ST14  ABS EV29+3         -------------------
      ABS AC17+CNTRL     LONG TIMEOUT 
      ABS AC21+CNTRL     LOW:  CTR OVERFLOW 
      ABS AC05+WTEXT     HIGH: WRITE, NO OVERFLOW 
      ABS AC06+WCONV     MID:  WRITE CONV, NO OVFLOW
* 
*               STATE 15:  CKRES - CHECK RESPONSE 
* 
ST15  ABS EV30+2         -------------------- 
      ABS AC34+BDACK     LOW  (BAD ACK) 
      ABS AC22+WRITE     HIGH (RVI RECVD) 
      ABS AC48+WRITE     MID  (GOOD ACK)
* 
*               STATE 16:  BDACK - BAD ACK RECEIVED 
* 
ST16  ABS EV30+2         ---------------------------
      ABS AC07+WPREV     LOW:  T/O FLAG NOT SET OR
*                                         BR FLAG SET 
      ABS AC28+WTEXT     HIGH: WRITE, T/O FLAG SET &
*                                         BR FLAG NOT SET 
      ABS AC29+WCONV     MID:  WRITE CONV,  "  "
* 
*               STATE 17:  WRTRY - WRITE RETRY
* 
ST17  ABS EV30+2         -------------------- 
      ABS AC20+CNTRL     LOW  (CTR OVERFLOW)
      ABS AC28+WTEXT     HIGH (WRITE,      NO OVFLO)
      ABS AC29+WCONV     MID  (WRITE CONV, NO OVFLO)
* 
*               STATE 18:  WRENQ - ENQ RECVD IN WRITE OR CONV 
* 
ST18  ABS EV30+2         ---------------------------
      ABS AC07+WPREV     LOW (TEXT NOT JJUST RECVD) 
      ABS AC07+WRNQ2     HIGH (TEXT RECVD,ENQ NOT X)
      ABS AC23+CNTRL     MID  (ENQ JUST SENT) 
* 
*               STATE 19:  WRNQ2 - 2ND STATE, ENQ RECVD IN WRITE
* 
ST19  ABS EV30+2         ---------------------------
      ABS AC25+CNTRL     LOW  (CTR OVERFLOW)
      ABS AC28+WTEXT     HIGH (NO OVFLO, WRITE) 
      ABS AC29+WCONV     MID  (NO OVFLO, WRITE CONV)
* 
*               STATE 20:  WCONV - WRITE CONVERSATIONAL 
* 
ST20  ABS EV14+16        -------------------- 
      ABS AC31+CKRES     ACK0 RECVD 
      ABS AC31+CKRES     ACK1 RECVD 
      ABS AC06+WCONV    WACK RECVD
      ABS AC30+CKRES     RVI RECVD
      ABS AC35+WRENQ     ENQ RECVD
      ABS AC33+WRTRY     NAK RECVD
      ABS AC15+CNTRL     EOT RECVD
      ABS AC16+HNGUP     DLE EOT RECVD
      ABS AC40+WCONV     TTD RECVD
      ABS AC52+READ     TEXT RECVD
      ABS AC49+WCONV    BAD TEXT RECVD
      ABS AC19+READ      TEXT OVERRUN 
      ABS AC07+WPREV     GARBAGE RECVD
      ABS AC45+CNTRL     BAD ID (NOT EXPECTED)
      ABS AC32+WPREV     SHOFT TIMEOUT
      ABS AC45+CNTRL     LONG TIMEOUT (NOT EXECTED) 
      ABS AC14+CNTRL     LOW (LINE ERROR) 
* 
*               STATE 21:  WEOT  - WRITE EOT
* 
ST21  ABS EV30+1         -------------------- 
      ABS AC14+CNTRL     LOW (LINE ERROR) 
      ABS AC10+CNTRL     HIGH (NORMAL COMPLETION
* 
*               STATE 22:  REOTR - READ EOT RESPONSE
* 
ST22  ABS EV18+12        -------------------- 
      ABS AC18+RREAD     ENQ RECVD
      ABS AC45+CNTRL     NAK RECVD
      ABS AC15+CNTRL     EOT RECVD
      ABS AC16+HNGUP     DLE EOT RECVD
      ABS AC45+CNTRL     TTD RECVD
      ABS AC45+CNTRL     TEXT RECVD 
      ABS AC47+REOTR     DATA ERROR RECVD 
      ABS AC47+REOTR     DATA OVERRUN 
      ABS AC47+REOTR     GARBAGE RECVD
      ABS AC45+CNTRL     BAD ID 
      ABS AC10+CNTRL     SHORT TIMEOUT
      ABS AC17+CNTRL     LONG TIMEOUT 
      ABS AC14+CNTRL     LOW (LINE ERROR) 
* 
*               STATE 23:  HNGUP - HANG UP -- DLE EOT RECVD 
* 
ST23  ABS EV00+13        -------------------- 
      ABS AC16+HNGUP     REQUEST: LINE OPEN 
      ABS AC02+UNOPN     REQUEST: LINE CLOSE
      ABS AC16+HNGUP     REQUEST: READ ENQ
      ABS AC16+HNGUP     REQUEST: READ INIT 
      ABS AC16+HNGUP     REQUEST: READ CONT 
      ABS AC16+HNGUP     REQUEST: READ REPEAT 
      ABS AC16+HNGUP     REQUEST: READ WITH RVI 
      ABS AC16+HNGUP     REQUEST: DELAY READ
      ABS AC16+HNGUP     REQUEST: WRITE ENQ 
      ABS AC16+HNGUP     REQUEST: WRITE CONTINUE
      ABS AC16+HNGUP     REQUEST: WRITE CONV
      ABS AC16+HNGUP     REQUEST: WRITE EOT 
      ABS AC16+HNGUP     REQUEST: WRITE DISCONNECT
      ABS AC16+HNGUP     REQUEST: DELAY WRITE 
* 
*               STATE 24:  WTTD  - WRITE TTD
* 
ST24  ABS EV14+16        -------------------- 
      ABS AC26+CNTRL     ACK0 RECVD 
      ABS AC26+CNTRL     ACK1 RECVD 
      ABS AC26+CNTRL     WACK RECVD 
      ABS AC26+CNTRL     RVI RECVD
      ABS AC26+CNTRL     ENQ RECVD
      ABS AC10+WRITE     NAK RECVD
      ABS AC15+CNTRL     EOT RECVD
      ABS AC16+CNTRL     DLE EOT RECVD
      ABS AC26+CNTRL     TTD RECVD
      ABS AC26+CNTRL     TEXT RECVD 
      ABS AC26+CNTRL     BAD TEXT RECVD 
      ABS AC26+CNTRL     TEXT OVERRUN 
      ABS AC10+WRITE     GARBAGE RECVD
      ABS AC45+CNTRL     BAD ID (NOT EXPECTED)
      ABS AC27+WTTD      SHORT TIMEOUT
      ABS AC17+CNTRL     LONG TIMEOUT (NOT EXECTED) 
      ABS AC14+CNTRL     LOW (LINE ERROR) 
* 
ST25  NOP                LOGICAL END TO STATE-TRANS 
      SKP 
*     CONSTANTS & STORAGE SHARED BY MESSAGE PROC & CHARACTER PROC 
* 
.13   DEC 13       DEC 13,  OCT 15
P14$  DEC 14       DEC 14,  OCT 16
.15   DEC 15       DEC 15,  OCT 17
.17   DEC 17       DEC 17   OCT 21
B100  DEC 64       DEC 64,  OCT 100 
B377  DEC 255      DEC 255, OCT 377 
M1    DEC -1       DEC -1,  OCT 177777
M2    DEC -2       DEC -2,  OCT 177776
M3    DEC -3       DEC -3,  OCT 177775
M7    DEC -7       DEC -7,  OCT 177771
M300  DEC -300
NOM3  DEC -300      TICKS IN NOMINAL 3-SEC TIMEOUT
PRET  OCT 0         P+2 RETURN ADDRESS FOR PHYSICAL 
PRETF OCT 0         P+1 RETURN ADDRESS FOR PHYSICAL 
      SPC 4 
*                     EQT EXTENSION POINTERS
* 
MPFLS OCT 0         MESSAGE PROCESSOR FLAGS 
NTRY  OCT 0         PTR TO # OF RETRIES 
RTCTR OCT 0         RETRY CTR 
TLOG  OCT 0         TRANSMISSION LOG
ENVIR OCT 0         PTR TO SPECIFIED ENVIRONMENT
      SKP 
*     SUBROUTINE BSCR:  BSC RECEIVE 
*         (A) = BUFFER ADDRESS
*         (B) = -(1 + BUFFER LENGTH IN BYTES) 
*         (E) = INDICATOR: 1 =SAVE ID SEQ, 0 =DONT SAVE ID
*         (P) = JSB BSCR
*         (A) = COMPLETION STATUS 
* 
BSCR  NOP           RCVR ENTRY
      STA EBUFA     SAVE BYTE ADDR
      STB EBUFL       & BUFFER LENGTH 
      LDB NOM3      SPECIFY NOMINAL 3-SEC TIMEOUT 
      STB PTME      THIRD PARAMETER 
      LDA M300
      STA NOM3      SET NOM 3-SEC TIMEOUT TO 3 SEC
      LDA EBUFA     ADDRESS 
      LDB EBUFL     COUNT 
      JSB HREC
PTME  NOP 
      NOP 
      JMP BSCR,I    RETURN
* 
*                     EQT EXTENSION POINTERS
* 
BLKSP OCT 0         BLOCK SPEC BITS (15 - 13) 
EBUFA OCT 0         EDITOR BUFFER ADDR
EBUFL OCT 0         EDITOR BUFFER LENGTH
      SPC 1 
      BSS 0        SIZE OF DVG67. 
      SPC 1 
      END IG67
                                                  