ASMB,R,L,C,B
      HED ***DVR72 --12587 ASYNC MODEM INTERFACE-- ***
      NAM DVR72,0,0 
****** 6 MAY 75 
      ENT I.72,C.72 -1
      ENT P.720,P.721,P.722,P.723 OD
      ENT P.724,P.725,P.726,P.727 OD
      EXT $PCOM,$TIME P.
************************************************************************
*         12587 I/F BIT ASSIGNMENTS **
************************************************************************
* **
* CONTROL WORD
*     BIT          MEANING
*     15           1=CONTROL WORD,0=DATA
*     14           DATA TERMINAL READY (CD) **
*     13           REQUEST TO SEND (CA) CD
*     12           MASK ENABLE
*     11,10        NOT USED LE
*     9            ECHO SE
*     8            PARITY D 
*     7            ODD PARITY  E
*     6,5,4        NOT USED Y 
*     3-0          CHARACTER SIZE  (
************************************************************************
* DATA WORD **
*     BIT          MEANING
*     15-11        ZEROES  *
*     10           SECONDARY SEND (SBA) **
*     9,8          NOT USED  S
*     7-0          DATA SE
************************************************************************
* STATUS WORD **
*     BIT          MEANING
*     15           BUFFER READY **
*     14           SECONDARY RECEIVE (SBB)
*     13           I/F BUSY  R
*     12           DATA SET READY (CC)
*     11           CARRIER DETECT (CF)
*     10           RINGING (CE) T 
*     9            ERROR
*     8            NOT USED CE
*     7-0          DATA SE
************************************************************************
A     EQU 0 **
B     EQU 1 **
SC    EQU 0 **
**********************************************************************
C.72  EQU * **
      NOP * 
      CLA          INDICATE SUCCESSFUL COMPLETION **
      LDB $EQ14,I  GET TRANSMISSION LOG OM
      JMP C.72,I
**********************************************************************
**********************************************************************
P.720 EQU * **
      NOP * 
      CLF 0        DISABLE INTERRUPTS **
      JSB SAVE     SAVE ENVIRONMENT S 
      LDA UEQT
      JSB SETQ     SET EQT
      LDA USC   
PCOMM JSB SETIO    SET I/O INST.
      JSB STAT     INPUT STATUS  N
      LDB LSIT
      JMP LSWCH    SWITCH ON LINE STATE **
*   
*   
*   
P.721 EQU * WC
      NOP * 
      CLF 0 WC
      JSB SAVE
      LDA UEQT+1
      JSB SETQ
      LDA USC+1   
      JMP PCOMM   
*   
*   
P.722 EQU * OM
      NOP * 
      CLF 0 OM
      JSB SAVE
      LDA UEQT+2
      JSB SETQ
      LDA USC+2   
      JMP PCOMM   
*   
*   
P.723 EQU * OM
      NOP * 
      CLF 0 OM
      JSB SAVE
      LDA UEQT+3
      JSB SETQ
      LDA USC+3   
      JMP PCOMM   
*   
*   
*   
*   
P.724 EQU * OM
      NOP * 
      CLF 0 OM
      JSB SAVE
      LDA UEQT+4
      JSB SETQ
      LDA USC+4   
      JMP PCOMM   
*   
*   
P.725 EQU * OM
      NOP * 
      CLF 0 OM
      JSB SAVE
      LDA UEQT+5
      JSB SETQ
      LDA USC+5   
      JMP PCOMM   
*   
*   
P.726 EQU * OM
      NOP * 
      CLF 0 OM
      JSB SAVE
      LDA UEQT+6
      JSB SETQ
      LDA USC+6   
      JMP PCOMM   
*   
*   
P.727 EQU * OM
      NOP * 
      CLF 0 OM
      JSB SAVE
      LDA UEQT+7
      JSB SETQ
      LDA USC+7   
      JMP PCOMM   
**********************************************************************
* **
**********************************************************************
**********************************************************************
I.72  EQU * **
      NOP * 
      CLF 0        DISABLE INTERRUPT SYSTEM **
      CLB 0 
      STB RTX      SET RETURN INDEX FOR I.72
      STB SAVA     ZERO RETURN CODE FO
      LDB I.72     SAVE RETURN ADDRESS
      STB EXIT
      STA SCODE    SAVE SELECT CODE SS
      LDB $EQ17,I  S
      LDA $EQ9,I   GET REQUEST
      AND =B7777   SAVE FUNCTION AND REQUEST
      CPA INCD     INITIALIZE REQUEST EQ
      JMP I.72B    YES
      SZB,RSS      IF LOGICAL LINKAGE PRESENT --PROCEED **
      CPA P03$     CLEAR REQUEST
      JMP I.72A    YES
      LDA P01$     NO-INVALID ST
      STA SAVA
      JSB RTRN     RETURN TO DOS
I.72B EQU * RN
      LDB $EQ11,I  GET EXTENSION ADDRESS
      STB $EQ17,I  LINK WITH LOGICAL
      INB $E
      LDA B,I      GET EQT19
      STA $EQ6,I   SAVE IN CONTROL WORD  S
      CLA $E
      STA EQT3     INSURE EQT RESET OR
      STA $EQ5,I   CLEAR LINE STATE OR
      STA $EQ16,I  C
      LDA $EQ1     GET BASE EQT ADDRESS  S
      ADB P07$     COMPUTE EQT26
      STA B,I      SAVE AS TIMER ID (DVR72) T 
      ADB P04$     COMPUTE EQT30
      STA B,I      SAVE AS TIMER ID (LOGICAL) --
*     BUILD BASIC CONTROL WORD
*   
      LDA $EQ6,I   GET PARAMETER WORD OG
      STA B Q6
      CMB,INB      FORM COMPLIMENT
      AND M160$    ISOLATE ECHO AND PARITY
      SZA,RSS      BOTH CLEAR O 
      JMP I.72C    YES
      CPA P64$     NO-TEST FOR ECHO SET,PARITY CLEAR
      JMP I.72C    YES
      IOR M40$     NO,ENABLE PARITY SE
      ADB N01$     ADJUST CHAR. SIZE
I.72C EQU * 1$
      ALF,ARS      POSITION FOR 12587 T,
      STA $EQ6,I
      LDA B Q6
      AND M17$     ISOLATE CHARACTER SIZE RI
      IOR $EQ6,I   MERGE W/ECHO+PARITY
      IOR B15$     INDICATE CONTROL WORD
      STA $EQ6,I
I.72A EQU * Q6
      LDA $EQ1
      STA EQT3      RESET EQT ADDR              7905                            
      JSB SETQ     SET EQT
*   
      LDA EQT4,I   SET
      AND LBYT$    STATUS TO
      STA EQT4,I   ZERO S 
      JSB SETU     SET UNIT RELATED CONSTANTS  C
      LDA SCODE   
      JSB SETIO    SET I/O INSTRUCTIONS TA
      LDA EQT9,I
      AND =B7777   ISOLATE FUNCTION AND REQUEST 11JAN74 **
      CPA P03$     CLEAR REQUEST
      JMP C0       YES
      AND M17$
      CPA P01$     READ REQUEST  O
      JMP READ     YES
      CPA P02$     WRITE REQUEST
      JMP WRITE    YES
      CPA P03$     CONTROL REQUEST
      JMP CONTL    YES
      ISZ SAVA     INDICATE ERROR   
      JSB RTRN     BACK TO DOS
**********************************************************************
* **
*     READ REQUEST INITIATION **
*   
**********************************************************************
READ  EQU * **
      JSB LCHK     CHECK FOR LINE OPEN, DATA SET RDY
      CCB          INDICATE INITIATION CALL  S
      JSB EQT22,I  CALL LOGICAL READ
      JMP READ1    COMPLETE CA
READC JSB DRCTV    EVALUATE DIRECTIVE BITS
      JSB RTRN     RETURN TO DOS
*   
READ1 EQU * RN
      LDA P04$     INDICATE IMMEDIATE COMPLETION
      STA SAVA
      JSB RTRN     RETURN TO DOS
**********************************************************************
* **
*     WRITE REQUEST INITIATION
*   
**********************************************************************
WRITE EQU * **
      JSB LCHK     CHECK FOR LINE OPEN,DATA SET RDY **
      CCB          INDICATE INITIATION CALL SE
      JSB EQT23,I  CALL LOGICAL WRITE  C
      JMP READ1    COMPLETE CA
WRITC JSB DRCTV    EVALUATE DIRECTIVE BITS
      AND RBYT$   
      JSB OTA      OUTPUT CHARACTER E 
      JSB STC      SET CONTROL ON BOARD TS
      JSB RTRN
**********************************************************************
* **
*     CONTROL REQUEST INITATION **
*   
**********************************************************************
CONTL EQU * **
      CLA * 
      CCB          INDICATE INITIATION CALL **
      JSB EQT24,I  CALL LOGICAL CONTROL AL
      JMP READ1    COMPLETE CA
      JSB DRCTV    EVALUATE DIRECTIVE BITS
      LDA EQT9,I
      ALF,ALF ,I
      RAL,RAL ,I
      AND M77$     ISOLATE FUNCTION CODE
      ADA N05$
      SSA,RSS      FUNCTION LT 5
      JMP CNTL1    NO-INVALID  5
      ADA CNTLT    YES-CALCULATE TABLE ADDRESS
      LDA A,I T 
      JMP A,I      PROCESS BY FUNCTION CODE SS
*   
*   
CNTL1 EQU * I 
      ISZ EQT4,I   INDICATE INVALID REQUEST SS
      JMP READ1   
*   
*   
*     CONTROL TRANSFER TABLE
*   
      DEF C0       CLEAR
      DEF READ1    INITIALIZE(NO ADDITIONAL PROCESSING) **
      DEF C2       LINE OPEN
      DEF C3       LINE CLOSE NO
      DEF C4       SET ECHO E 
CNTLT DEF *   
* TL
*     CLEAR REQUEST ET
*   
C0    EQU * RE
      LDA $EQ17,I T 
      SZA          SKIP DEQUEUE IF NOT LINKED OC
      JSB DQT      DEQUE TIMERS IF
      LDA B15$
      JSB OTA      CLEAR CONTROL WORD  L
      JSB CLC      CLEAR I/F CONTROL
      CLA CL
      STA $EQ17,I  BREAK LINKAGE
      JMP READ1 I 
*   
*     LINE OPEN REQUEST  L
*   
C2    EQU * PE
      LDA EQT10,I  GET
      AND P03$     OPTION IN
      SZA,RSS      RING N 
      JMP C2A      YES
      CPA P01$     RECEIVE
      JMP C2B      YES
      CPA P02$     SEND VE
      JMP C2C      YES
*                   NO-IDLE KA
      JSB RCV      CONFIGURE FOR RECEIVE
C2E   EQU * V 
      LDA AOPEN   
      STA EQT5,I   LINE STATE= AWAITING OPEN
      LDA N10$
      STA EQT34,I  SET FOR 2 SEC. DELAY OP
C2D   EQU * T3
      LDB TD1A
      LDA N02$
      JSB DTIM     START TIMER #1, 200 NS EN
      JSB RTRN
*   
*   
C2A   EQU * RN
      LDA ARING   
      STA EQT5,I   LINE STATE= AWAITING RING
      LDA B15$
C2A2  EQU * 5$
      JSB OTA      DROP DATA TERMINAL READY   
      JSB STC      ENABLE I/F BOARD L 
      JSB RTRN
*   
*   
C2B   EQU * RN
      JSB RCV      CONFIGURE FOR RECEIVE
      LDA AOPEN   
      STA EQT5,I   LINE STATE= AWAITING OPEN
      LDA EQT10,I  L
      SSA,RSS      AUTO SPEED  A
      JMP C2E      NO O 
      JSB STIN     START INPUT
      JSB RTRN
*   
*   
C2C   EQU * RN
      JSB SND      CONFIGURE FOR SEND G 
      JMP C2E      START TIMER
*   
*   
*     LINE CLOSE REQUEST
*   
C3    EQU * LO
      LDA CLOSE  R
      STA EQT5,I   LINE STATE= CLOSED G 
      LDA B15$
      JSB OTA      CLEAR I/F
      JSB CLC      TURN OFF INTERRUPTS
      LDA =D-50    SET MAX TIME AT 10 SEC.
      STA EQT34,I  S
      JMP C2D      START TIMER
*   
*   
*     SET ECHO REQUEST
*   
C4    EQU * HO
      LDB EQT10,I  GET PARAMETER
      LDA EQT6,I
      AND ECHO     CLEAR ECHO BIT  1
      SZB          REQUEST FOR ENABLE SE
      IOR B09$     YES-SET IT  E
      STA EQT6,I
      JMP READ1    IMMEDIATE COMPLETION C.
*   
*   
**********************************************************************
* **
*     SET UNIT RELATED DATA **
*   
**********************************************************************
SETU  EQU * **
      NOP * 
      LDA $EQ3,I   GET UNIT & SELECT CODE **
      ALF,ALF ,I
      RAL,RAL      POSITION UNIT FIELD
      AND P07$
      ADA UTBL     CALCULATE TABLE ENTRY
      LDB $EQ1
      STB A,I      SAVE EQT  T
      ADA P08$     OFFSET TO NEXT TABLE   
      LDB SCODE   
      STB A,I      SAVE SELECT CODE BL
      JMP SETU,I
*   
UTBL  DEF *+1 ,I
UEQT  BSS 8        HOLDS EQT FOR UNIT 0-7 **
USC   BSS 8        HOLDS SC FOR UNIT 0-7
* C 
* C 
**********************************************************************
* **
*     SET EQT TABLE **
*   
*     A=ADDRESS OF EQT
*   
**********************************************************************
SETQ  EQU * **
      NOP * 
      STA EQTB     SAVE EQT ON BASE PAGE
      ADA P02$
      CPA EQT3     ALREADY SET
      JMP SETQ,I   YES
      STA EQT3
      INA EQ
      STA EQT4     FILL DY
      INA          TABLE
      STA EQT5
      INA EQ
      STA EQT6
      ADA P03$
      STA EQT9
      INA EQ
      STA EQT10   
      ADA P04$
      STA EQT14   
      ADA P02$
      STA EQT16   
      INA EQ
SETQ2 EQU * T1
      LDA A,I      LINK TO EXTENSION
      INA A,
      STA EQT19   
      ADA P03$
      LDB A,I   
      STB EQT22   
      INA EQ
      LDB A,I 2 
      STB EQT23   
      INA EQ
      LDB A,I 3 
      STB EQT24   
      INA EQ
      STA EQT25   
      ADA P02$
      STA EQT27   
      ADA P04$
      STA EQT31   
      ADA P03$
      STA EQT34   
      INA EQ
      STA EQT35   
      JMP SETQ,I   RETURN  E
**********************************************************************
* **
*     DRIVER TIMER START
*   
**********************************************************************
DTIM  EQU *        B=PROCESSOR ADDRESS
      NOP          A=TIME INTERVAL
      STA EQT27,I  SAVE VALUE RV
      LDA EQT16,I  GET TIMER FLAGS
      ERA,RAL      PHYSICAL TIMER BIT TO E
      IOR P01$     SET IT L 
      STA EQT16,I  S
      LDA EQT27,I  GET VALUE
      SEZ          INITIATE REQUEST T 
      CMA,INA      NO-INDICATE RESET
      STB EQT27,I  SAVE PROCESSOR ADDRESS  *
      LDB EQT27 I 
      ADB N01$     PASS EQT26 AS TIMER BLOCK
      JSB $TIME   
      JMP DTIM,I
*     TIMER #1
*   
TD1A  DEF TD1  I
TD1   EQU * 1 
      NOP * 
      CLF 0        DISABLE INTERRUPT SYSTEM  *
      CLB,INB   
      JSB TIMOF    SETUP FOR TIMER OFF LIST  *
      JSB STAT     INPUT STATUS ER
      LDB EQT5,I
      CPB PSND     LINE STATE = PREPARE TO SEND?
      JMP TD1D     YES
      ALF,SLA      DATA SET READY EP
      JMP TD1B     YES
      SZB,RSS      NO-LINE = CLOSE? AR
      JMP TD1H     YES-COMPLETE SE
TD1I  EQU * 1H
      LDA N02$     NO-KEEP TIMER RUNNING
TD1F  EQU * 2$
      LDB TD1A
      JSB DTIM
TD1C  STF 0        ENABLE INTERRUPT SYSTEM
      JMP TD1,I   
*   
TD1B  EQU * 1,
      SZB,RSS      LINE=CLOSE?
      JMP TD1K     YES-CONTINUE TIMER ST
      LDA EQT6,I   8JAN74 TI
      AND C$CA     REQ. TO SEND SET?         8JAN74 **
      SZA          8JAN74  S
      JMP *+3      YES                                8JAN74
      LDA C$SBA    NO-SET SEC. SEND                   8JAN74
      JSB OTA      8JAN74 SE
      ISZ EQT34,I  LINE STABILIZE DELAY OVER
      JMP TD1I     NO E 
      LDA IDLE
      STA EQT5,I   LINE STATE = IDLE
TD1H  EQU * T5
      JSB DQT      DEQUEUE TIMERS LE
      JSB CLC      CLR I/F BOARD
      LDA EQTB
      JSB $PCOM    COMPLETE REQUEST  A
      JMP TD1C
TD1K  EQU * 1C
      ISZ EQT34,I  MAX TIME ELAPSED  A
      JMP TD1I     NO  T
      JMP TD1H     YES-COMPLETE SE
*   
TD1D  EQU * 1H
      LDB EQT34,I  8JAN74 PL
      SZB          FIRST TIME                 8JAN74
      JMP TD1D1    NO                         8JAN74
      JSB SND      YES-CONFIGURE FOR SEND     8JAN74
      LDA EQT19,I  8JAN74 FI
      RAL          8JAN74 FI
      SSA          SECONDARY CHANNEL           8JAN74 8J
      JMP TD1D2    YES                         8JAN74 8J
      JSB STOUT    NO-START OUTPUT             8JAN74 8J
      JMP TD1C     8JAN74 T 
TD1D2 EQU *        8JAN74 T 
      LDA N08$     SET FOR A MAX OF 700 MS     8JAN74 8J
      STA EQT34,I  8JAN74  A
      JMP TD1E     8JAN74  A
TD1D1 EQU *        8JAN74  A
      AND RSTAT+2  ISOLATE WRITE STATUS BITS
      CPA RSTAT+2  STATUS OK
      JMP *+2      YES
      JMP TD1E     NO  U
      JSB TSEC     TEST SECONDARY RCV S 
      JMP TD1E     0
TD1G  EQU * 1E
      JSB STOUT    START OUTPUT Y 
      JMP TD1C
TD1E  EQU * 1C
      LDA N01$
      ISZ EQT34,I  TIME RUN OUT?
      JMP TD1F     NO-DELAY 100 MS
      JMP TD1G     YES-START OUTPUT ANYWAY
*   
*     TIMER #2
*   
TD2A  DEF TD2   
TD2   EQU * 2 
      NOP * 
      CLF 0        DISABLE INTERRUPT SYSTEM   
      CLB,INB   
      JSB TIMOF    SETUP FOR TIMER OFF LIST   
      JSB STIN     START INPUT
      STF 0        ENABLE INTERRUPT SYSTEM
      JMP TD2,I   
*   
*   
*     TIMER #3 --LINE STATE MONITOR SY
*   
TD3A  DEF TD3  -
TD3   NOP TD
      CLF 0        DISABLE INTERRUPTS ST
      CLB,INB   
      JSB TIMOF    SETUP FOR TIMER OFF LIST   
      JSB TMON     GET BACK ON
O5    LIA SC       INPUT BOARD STATUS  L
      STA EQT25,I  I
      AND S$CC     DATA SET READY TU
      SZA          IS IT SET? AD
      JMP TD3B     YES-LET IT RUN TU
      LDA P02$
      STA RTX      NO-SETUP TIMER RETURN
      LDA TD3   
      STA LTIM
      LDB LSIT
      JMP LSWCH    SIMULATE I/F INTERRUPT T 
TD3B  STF 0        ENABLE INTERRUPTS
      JMP TD3,I   
*   
*   
TMON  NOP TD
      LDA N64$     6.4 SECONDS
      LDB TD3A     LINE MONITOR UP
      JSB DTIM
      JMP TMON,I
*   
*   
**********************************************************************
* **
*     TIME OFF
*     INITIAL SETUP FOR TIMEOUT **
*     A=EQT L 
*     B=TIMER FLAG MASK TI
*   
**********************************************************************
TIMOF EQU * **
      NOP * 
      STB TMOF1    SAVE TIMER TYPE
      JSB SETQ     SET EQT
      LDA EQT3,I
      AND M77$     GET SELECT CODE
      JSB SETIO    SET I/O INST.
      LDA TMOF1   
      CMA TM
      AND EQT16,I  CLEAR TIMER IN PROGRESS
      STA EQT16,I  C
      JMP TIMOF,I  C
*   
TMOF1 NOP TI
**********************************************************************
* **
*     LINE CHECK
*   
**********************************************************************
LCHK  EQU * **
      NOP * 
      LDA EQT5,I
      CPA CLOSE    LINE CLOSED
      JMP LCHK1    YES
      JSB STAT     NO- GET I/F STATUS **
      XOR S$CC     COMPLIMENT DATA SET RDY
      AND S$CC     AND ISOLATE
      RAL,RAL      POSITION FOR LINE ERROR
* NOTE-"DATA SET NOT READY" INDICATES LINE ERROR
      JMP LCHK,I
LCHK1 EQU * HK
      ISZ EQT4,I   INVALID REQUEST
      JMP READ1    IMMEDIATE COMPLETION NE
**********************************************************************
* **
*     DIRECTIVE EVALUATOR **
*   
*     A= DIRECTIVE BITS (15- 8), OUTPUT DATA (7-0)
*         15-START READ (1
*         14-START WRITE
*         13-NO OPERATION 5-
*   
*     B= TIMER REQUEST
*         <0- INITIATE/UPDATE VALUE PU
*         =0- NO REQUEST
*        >0- CANCEL REQUEST E 
*   
*   
**********************************************************************
DRCTV EQU * **
      NOP * 
      STA DRCTA    SAVE DIRECTIVES
      SZB,RSS      TIMING REQUEST  *
      JMP DRCT1    NO IN
      LDA EQT16,I  YES
      SSB          CANCEL REQUEST  *
      JMP DRCT2    NO CE
*                   YES L 
      ELA,CLE,ERA  CLEAR IN PROGRESS BIT
      CLB          INDICATE CANCEL
      JMP DRCT3   
DRCT2 EQU * CT
      SSA          TIMER IN PROGRESS
      CMB,INB      YES-INDICATE RESET IT
      IOR B15$     SET IN PROGRESS BIT
DRCT3 EQU * 5$
      STA EQT16,I  UPDATE FLAGS SS
      STB A T1
      LDB LTIMA I 
      STB EQT31,I  SET PROCESSOR TO LOGICAL TIMER **
      LDB EQT31 I 
      ADB N01$     PASS EQT30 AS TIMER BLOCK
      JSB $TIME    CALL TIMER AS
DRCT1 EQU * IM
      LDA DRCTA   
      RAL,SLA      START READ AS
      JSB SREAD    YES
      RAL,SLA      START WRITE
      JSB SWRIT    YES
      SSA          NOP
      JSB RTRN     YES
      LDA DRCTA    NO DIRECTIVES
      JMP DRCTV,I  RETURN CT
*   
DRCTA NOP DR
* CT
**********************************************************************
* **
*     START READ
*   
**********************************************************************
SREAD EQU * **
      NOP * 
      LDA EQT5,I
      CPA RECV     LINE STATE= RECEIVE
                                                                                                                                                                                                                                      