      JMP SRD1     YES
      CPA SEND     LINE STATE= SEND VE
      JMP SRD2     YES
      LDA RECV     LINE STATE OTHER,CHANGE TO RECV
      RSS RE
SRD4  EQU * CV
      LDA PRCV3    LNE STATE=PREPARE TO RCV #3
      STA EQT5,I
      JSB CLC      DISABLE BOARD
      LDA N03$     DELAY 300 MS  A
      LDB TD2A
      JSB DTIM     START TIMER #2 RE
      JSB RCV      CONFIGURE FOR RECEIVE
      JSB RTRN
*   
SRD1  EQU * RN
      JSB STIN     START INPUT
      JSB RTRN
SRD2  EQU * RN
      JSB STAT     INPUT BOARD STATUS VE
      RAL,RAL   
      SSA          BOARD BUSY  S
      JMP SRD3     YES
      LDA RECV     LINE STATE=RECEIVE VE
      JMP SRD4+1
*   
SRD3  EQU * D4
      LDA PRCV1   
      STA EQT5,I   SET LINE STATE= PREPARE TO RCV#1 **
      JSB STC      ENABLE I/F INTERRUPTS
      JSB RTRN
*   
*     START INPUT SUBROUTINE
STIN  NOP T 
      LDA EQT6,I
      JSB OTA      ENABLE ECHO IF VALID  E
      LDA C$SBA    SET SECONDARY SEND D 
      JSB OTA A 
      JSB TMON     START MONITOR
      JSB STC      ENABLE INTERRUPTS
      JMP STIN,I
*   
*   
**********************************************************************
* **
*     START WRITE **
*   
**********************************************************************
SWRIT EQU * **
      NOP * 
      JSB CLC      TURN OFF INTERRUPTS
      LDB EQT5,I   GET PREVIOUS STATE  *
      LDA PSND
      STA EQT5,I   SET LINE STATE= PREPARE TO SEND
      LDA DRCTA    GET CHARACTER
      AND RBYT$   
      STA EQT35,I  SAVE CHAR. FOR O/P PA
      CPB SEND     PRIOR STATE=SEND?
      JMP SWRT1    YES-BYPASS TURNAROUND DELAYS ND
      CLA          INDICATE FIRST TIME THRU    8JAN74 **
      STA EQT34,I  I
      LDA N02$     NO-ONLY DELAY 200 MS HR
      LDB TD1A     USE TIME DELAY #1
      JSB DTIM
      JSB RTRN
SWRT1 EQU * RN
      JSB STOUT    START OUTPUT Y 
      JSB RTRN
************************************************************************
*     START OUTPUT
************************************************************************
STOUT EQU * **
      NOP * 
      LDA EQT35,I  GET PENDING CHAR.
      JSB OTA      O/P TO INTERFACE  *
      JSB TMON     START LINE MONITOR **
      JSB STC      ENABLE INTERRUPTS
      JMP STOUT,I  E
************************************************************************
**********************************************************************
* **
*     LOGICAL TIMER **
*   
**********************************************************************
LTIMA DEF LTIM
* IM
LTIM  EQU * IM
      NOP * 
      CLF 0        TURN OFF INTERRUPT SYSTEM
      LDB B15$
      JSB TIMOF    SETUP FOR TIMER OFF LIST  *
      JSB STAT     I/P BOARD STATUS FF
      LDA P02$
      STA RTX      INDICATE TIMER RETURN
      LDA P08$
      LDB LSTT     PROCESS
LSWCH ADB EQT5,I   BY CE
      LDB B,I      LINE SS
      JMP B,I      STATE
LSTT  DEF *+1   
      DEF LSTA     O-CLOSED TI
      DEF LSTB     1-AWAITING RING
      DEF LSTB     2-AWAITING OPEN
      DEF LSTB     3-IDLE IN
      DEF LSTD     4-PREPARE TO SEND
      DEF LSTD     5-SEND RE
      DEF LSTC     6-PREPARE TO RCV #1 (FLUSH WRITE)
      DEF LSTC     7-PREPARE TO RCV #2 (DROP CF)
      DEF LSTC     8-PREPARE TO RCV #3 (DELAY)
      DEF LSTC     9-RECEIVE
*   
LSIT  DEF *+1   
      DEF LSIA     0-CLOSED  T
      DEF LSIB     1-AWAITING RING
      DEF LSIC     2-AWAITING OPEN
      DEF LSIA     3-IDLE IN
      DEF LSII     4-PREPARE TO SEND
      DEF LSID     5-SEND RE
      DEF LSIE     6-PREPARE TO RCV #1 (FLUSH WRITE)
      DEF LSIF     7-PREPARE TO RCV #2 (DROP CF)
      DEF LSIH     8-PREPARE TO RCV #3 (DELAY)
      DEF LSIG     9-RECEIVE
*   
LSTA  EQU * IG
      JSB RTRN
*   
*   
*   
*   
LSIA  EQU * RN
      JSB CLC      TURN OFF BOARD V 
      JSB RTRN
*   
*   
LSIB  EQU * RN
      AND S$CE     ISOLATE RINGING BIT
      SZA,RSS      SET
      JMP LSIB1    NO  A
      JSB CLC      YES-TURN OFF BOARD  (
      JSB DONE     COMPLETE OF
LSIB1 EQU * NE
      JSB STC      ENABLE INTERRUPTS
      JSB RTRN
*   
*   
LSIC  EQU * RN
      CLA * 
LSTB  EQU * RN
      CLB * 
      JSB BSTAT    PROCESS BOARD STATUS DE
      NOP          BAD
      LDB EQT5,I   GOOD - INDICATE CONTINUE Y)
      JSB EQT24,I  CALL LOGICAL CONTROL ENTRY  )
      JMP LSIC1    COMPLETE CA
      JSB DRCTV    CONTINUE-EVALUATE DIRECTIVE
      JSB STC      ENABLE INTERRUPTS
      JSB RTRN
LSIC1 EQU * RN
      LDA IDLE
      STA EQT5,I   SET LINE STATE= IDLE EC
      JSB DONE
*   
*   
LSII  EQU * NE
      LDA SEND
      STA EQT5,I   LINE STATE= SEND DL
LSID  EQU * T5
      CLA * 
LSTD  EQU * T5
      CLB,INB ,I
      JSB BSTAT    CHECK STATUS EN
      NOP BS
LSID1 EQU * TA
      LDB EQT5,I
      JSB EQT23,I  CALL LOGICAL WRITE ENTRY VE
      JSB DONE     COMPLETE CA
      JMP WRITC    CONTINUE CA
*   
*   
LSIE  EQU * IT
      JMP SRD4     YES
*   
*   
LSIF  EQU * D4
      JSB RTRN     GOOD NU
*   
*   
LSIG  EQU * RN
      CLA * 
LSTC  EQU * RN
      CCB * 
      JSB BSTAT    CHECK STATUS WR
      JMP LSIG1    BAD
      SSA          TIMEOUT
      JMP LSIG1    YES
      LDB EQT25,I  Y
      SSB,RSS      BUFFER READY WR
      JSB RTRN     NO-RETURN
LSIG1 EQU * RN
      LDB EQT5,I
      JSB EQT22,I  CALL LOGICAL READ ENTRY
      JSB DONE     COMPLETE CA
      JMP READC    CONTINUE CA
*   
*   
LSIH  EQU * AD
      JSB LCHK     CHECK LINE STATUS
      SZA          OK CK
      JMP LSIG1    BAD
      LDB RECV
      STB EQT5,I   LINE STATE=RECEIVE NT
      JSB RTRN
*   
*   
*   
**********************************************************************
* **
DONE  EQU * **
**********************************************************************
      NOP **
      JSB CLC      DISABLE BOARD
      LDA EQT6,I
      AND ECHO     TURN OFF ECHO
      JSB OTA   
      JSB DQT      DEQUEUE TIMERS **
      LDA EQTB
      JSB $PCOM    NOTIFY DOS OF COMPLETION **
      JSB RTRN
*   
**********************************************************************
* **
SAVE  EQU * **
**********************************************************************
      NOP **
      STA SAVA     A
      STB SAVB     B
      ERA,ALS      E
      SOC AL
      INA          O
      STA SAVEO   
      CLA,INA O 
      STA RTX      INDICATE INTERRUPT **
      LDA SAVE
      ADA N03$     CALCULATE INTERRUPT ENTRY
      LDA A,I   
      STA EXIT     SAVE RETURN ADDRESS
      JMP SAVE,I
*   
*   
**********************************************************************
* **
*     COMMON RETURN **
*   
**********************************************************************
RTRN  EQU * **
      NOP * 
      LDA RTX      DETERMINE RETURN TYPE
      SZA,RSS   
      JMP RTRN1    I.72 MI
      SLA,RSS 1 
      JMP RTRN0    LOGICAL TIMER
RTRN2 EQU *        P.72 AL
      LDA SAVEO    RESTORE
      CLO SA
      SLA,ELA      E
      STF 1        O
      LDA SAVA     A
      LDB MPTFL    TEST MEMORY PROTECT
      SZB,RSS      ON T 
      JMP RTRN3    YES
      LDB SAVB     RESTORE B
      STF 0        ENABLE INTERRUPT SYSTEM
      JMP EXIT,I
RTRN3 EQU * IT
      LDB SAVB     RESTORE B
      STF 0        ENABLE INTERRUPTS
      STC 5        ENABLE MEMORY PROTECT
      JMP EXIT,I   RETURN ME
*   
RTRN1 EQU * IT
      LDA EQT14,I  R
      STA SAVB
      JMP RTRN2 I 
RTRN0 STF 0        ENABLE INTERRUPTS
      JMP LTIM,I
*   
*   
**********************************************************************
* **
*     DEQUEUE TIMERS
*   
**********************************************************************
DQT   EQU * **
      NOP * 
      LDA EQT16,I **
      SSA,RSS      LOGICAL TIMER IN PROGRESS
      JMP DQT1     NO IC
      ELA,CLE,ERA  YES
      STA EQT16,I  CLEAR FLAG ER
      CLA EQ
      LDB EQT31 I 
      ADB N01$
      JSB $TIME    CANCEL REQUEST N 
DQT1  EQU * IM
      LDA EQT16,I  C
      SLA,RSS      DVR72 TIMER ACTIVE OG
      JMP DQT,I    NO-DONE
      ARS,ALS      YES
      STA EQT16,I  CLR FLAG ER
      LDB EQT27 I 
      ADB N01$
      CLA N0
      JSB $TIME    CANCEL REQUEST IV
      JMP DQT,I   
*   
**********************************************************************
* **
*     BOARD STATUS CHECK
*               B= -1 READ, 0 CONTROL,+1 WRITE
*     P+1=BAD STATUS, P+2= GOOD STATUS
**********************************************************************
BSTAT EQU * **
      NOP * 
      STA COMP     CLEAR COMPOSITE STATUS **
      ADB STATX   
      LDA EQT19,I  CHECK FOR SEC. CHAN. S 
      AND S$SBB    ISOLATE SEC CHAN. CAPABILITIES **
      XOR S$SBB    IF NOT AVAILABLE FAKE IT IT
      IOR EQT25,I  I
      AND B,I 5,
      CPA B,I      CHECK STATUS BL
      JMP BST1     OK CK
      LDA P04$     BAD
      ADA COMP     UPDATE TA
      STA COMP     INDICATE LINE ERROR
BST3  EQU * MP
      ADB P03$     GET "BREAD & ERROR" MASKS
      LDA EQT25,I  G
      AND B09$
      SZA,RSS      DATA ERROR & 
      JMP *+3      NO A 
      ISZ COMP
      ISZ COMP
      LDA COMP     GET COMPOSITE STATUS AS
      AND B,I      SAVE SELECTED BITS S 
      ALF,ALF      POSITION FOR LOGICAL AS
      ALF AL
      STA B F 
      LDA EQT25,I  P
      AND RBYT$ I 
      IOR B        FORM COMPOSITE GI
      JMP BSTAT,I  F
*   
*   
BST1  EQU * TA
      ISZ BSTAT    RETURN+2 OS
      JSB TSEC     BREAK
      ISZ COMP     INDICATE BREAK GI
      JMP BST3
*   
*   
STATX DEF *+2   
RSTAT OCT 14000    -1 READ VALUE
      OCT 14000    0 CONTROL VALUE
      OCT 10000    +1    WRITE VALUE
      OCT 16       -1    READ(TIMEOUT,LINE ERROR,DATA ERROR)
      OCT 16       0    CONTROL(TIMEOUT,LINE ERROR,DATA ERROR)
      OCT 15       +1    WRITE(TIMEOUT,LINE ERROR,BREAK)
***************************************************************** **
*     TEST SECONDARY CHANNEL
*      USES BOARD CAPABILITIES(EQT19) AND BOARD STATUS(EQT25) **
*       TO DETERMINE RETURN ADDRESS. P+1 MEANS EQT19 IS SET (BIT14) **
*       AND EQT25 (BIT14) IS CLEAR. P+2 MEANS EQT19 IS CLEAR OR 14
*       EQT25 IS SET. 14
********************************************************************
TSEC  EQU * **
      NOP * 
      LDA EQT19,I **
      AND S$SBB I 
      SZA,RSS B 
      JMP TSECX I 
      AND EQT25,I **
      SZA EQ
TSECX EQU * T2
      ISZ TSEC
      JMP TSEC,I
************************************************************************
**********************************************************************
* **
*     CONFIGURE BOARD FOR RCV **
*   
**********************************************************************
RCV   EQU * **
      NOP * 
      LDA =B147777 CLEAR CA+MASK ENABLE **
      AND EQT6,I   CLR REQUEST TO SEND
      IOR C$CD     SET DATA TERMINAL READY
      STA EQT6,I
      AND ECHO     DISABLE ECHO IN
      JSB OTA   
      JSB STAT     CLEAR READY FF AL
      NOP ST
      NOP ST
      JMP RCV,I   
**********************************************************************
* **
*     CONFIGURE BOARD FOR SEND
*   
**********************************************************************
SND   EQU * **
      NOP * 
      CLA * 
      JSB OTA      DROP SECONDARY SEND
      LDA C$CA
      IOR C$CD     SET DATA TERMINAL READY
      IOR EQT6,I   SET REQUEST TO SEND
      STA EQT6,I
      AND ECHO     DISABLE ECHO O 
      JSB OTA   
      JMP SND,I   
*   
*   
**********************************************************************
OTA   EQU * **
      NOP * 
O1    OTA SC
      JMP OTA,I **
*   
**********************************************************************
STC   EQU * **
      NOP * 
O2    STC SC
      JMP STC,I **
*   
*   
**********************************************************************
CLC   EQU * **
      NOP * 
O3    CLC SC
      JMP CLC,I **
*   
*   
**********************************************************************
STAT  EQU * **
      NOP * 
O4    LIA SC,C
      STA EQT25,I **
      NOP EQ
      JMP STAT,I
*   
*   
*   
**********************************************************************
SETIO EQU * **
**********************************************************************
      NOP **
      CPA LAST     ALREADY CONFIGURED **
      JMP SETIO,I  YES
      STA LAST     NO  A
      ADA CLCO     FORM CLC INST
      STA O3
      ADA N4K      FORM STC INST
      ADA B09$
      STA O2
      ADA N64$     FORM OTA INST
      STA O1
      ADA N64$
      NOP N6
      STA O4
      XOR B09$     REMOVE CLEAR FLAG BIT
      STA O5
      JMP SETIO,I  R
*   
CLCO  CLC 0 TI
N4K   OCT 174000
LAST  NOP 17
INCD  OCT 103 00
M160$ OCT 160 00
M40$  OCT 40
COMP  NOP 40
SCODE NOP 40
RTX   NOP 40
SAVA  NOP 40
SAVB  NOP 40
SAVEO NOP 40
EXIT  NOP 40
* IT
**********************************************************************
* **
*     EQT LINKAGE TABLE **
*   
**********************************************************************
EQT3  NOP          UNIT/SELECT CODE **
EQT4  NOP          STATUS LE
EQT5  NOP          LINE STATE  C
EQT6  NOP          I/F CONTROL WORD **
EQT9  NOP          CONWD
EQT10 NOP          PARAMETER 1
EQT16 NOP          TIMER FLAGS
EQT17 NOP          EXTENSION LINK D 
EQT19 NOP          BOARD PARAMETERS **
EQT22 NOP          LREAD
EQT23 NOP          LWRIT
EQT24 NOP          LCNTL
EQT25 NOP          I/F BOARD STATUS **
EQT27 NOP          DVR72 TIMER PROCESSOR ADDRESS
EQT31 NOP          LOGICAL TIMER PROCESSOR ADDRESS
EQT34 NOP          COUNTER FOR NULL O/P OR
EQT35 NOP          SAVE FIRST CHAR. FOR O/P DD
EQT14 NOP          TRANSMISSION LOG FO
* T1
*     BASE PAGE CONSTANTS SS
*   
#     EQU 53B E 
N01$  EQU #-1 E 
N02$  EQU #-2 E 
N03$  EQU #-3 E 
N04$  EQU #-4 E 
N05$  EQU #-5 E 
N06$  EQU #-6 E 
N07$  EQU #-7 E 
N08$  EQU #-8 E 
N09$  EQU #-9 E 
N10$  EQU #-10
N64$  EQU #-11
P00$  EQU # 11
P01$  EQU #+1   
P02$  EQU #+2   
P03$  EQU #+3   
P04$  EQU #+4   
P05$  EQU #+5   
P06$  EQU #+6   
P07$  EQU #+7   
P08$  EQU #+8   
P09$  EQU #+9   
P10$  EQU #+10
P17$  EQU #+11
P64$  EQU #+12
M17$  EQU #+13
M37$  EQU #+14
M77$  EQU #+15
M177$ EQU #+16
RBYT$ EQU #+17     OCT 377
LBYT$ EQU #+18     OCT 177400 N 
M3777 EQU #+19     OCT 3777 0 
M1777 EQU #+20     OCT 177700 N 
NULL  EQU RBYT$   
*     BASE PAGE VARIABLES 70
##    EQU 202B
EQTB  EQU 300B     ADDRESS OF EQT ENTRY O/
$EQ1  EQU ##+1
$EQ3  EQU ##+3
$EQ5  EQU ##+5
$EQ6  EQU ##+6
$EQ9  EQU ##+9
$EQ10 EQU ##+10   
$EQ11 EQU ##+11   
$EQ14 EQU ##+14   
$EQ16 EQU ##+16   
$EQ17 EQU ##+17   
CLOSE EQU P00$     CLOSED  O
ARING EQU P01$     AWAITING RING
AOPEN EQU P02$     AWAITING OPEN
IDLE  EQU P03$     IDLE IN
PSND  EQU P04$     PREPARE TO SEND
SEND  EQU P05$     SEND RE
PRCV1 EQU P06$     PREPARE TO RCV#1(FLUSH WRITE)
PRCV2 EQU P07$     PREPARE TO RCV#2(DROP CF)
PRCV3 EQU P08$     PREPARE TO RCV#3(DELAY)
RECV  EQU P09$     RECEIVE
RQP3  EQU 230B
RQP4  EQU 231B
MPTFL EQU 271B     MEMORY PROTECT FLAG
B15$  OCT 100000
B14$  OCT 40000   
B13$  OCT 20000   
B12$  OCT 10000   
B10$  OCT 2000
B09$  OCT 1000
C$CD  EQU B14$     DATA TERMINAL READY
C$CA  EQU B13$     REQUEST TO SEND
C$SBA EQU B10$     SECONDARY SEND  A
S$SBB EQU B14$     SECONDARY RECEIVE
S$CC  EQU B12$     DATA SET READY VE
S$CE  EQU B10$     RINGING
ECHO  OCT 176777
      END 17
                                                                  