ASMB,L,C,R,B
      HED DVR71 12967 PHYSICAL LEVEL DRIVER 8/1/74
      NAM DVR71,0,0 
      ENT I.71,C.71 
      ENT P.710,P.711,P.712,P.713 
      ENT P.714,P.715,P.716,P.717 
      EXT $TIME,$PCOM 
****************************************************
*    12967 SYNCHRONOUS I/F COMMAND SET             *
****************************************************
*                                                  *
*         MASTER RESET-REST                        *
*         BIT                 MEANING              *
*         15,14,13,12         1,0,0,0              *
*         CAUSES SMI TO COMPLETELY RESET TO ITS    *
*         IDLE STATE(AS AFTER A CLC 0).            *
*                                                  *
****************************************************
*         DATA STATUS RESET-DSET                   *
*         BIT                 MEANING              *
*         15,14,13,12         1,0,0,1              *
*         11,10,9,8           NOT USED             *
*         7,6,5,4,3,2         NOT USED             *
*         1                   1=RESET DATA ERROR   *
*         0                   1=RESET PARITY ERROR *
*                                                  *
****************************************************
*         ARM STATUS INTERRUPT-ARMI                *
*         BIT                 MEANING              *
*         15,14,13,12         1,0,1,0              *
*         11,10,9,8,7,6,5,4   NOT USED             *
*         3                   SECONDARY RLS ARM    *
*         2                   RCV LINE SIGNAL ARM  *
*         1                   CLEAR TO SEND ARM    *
*         0                   DATA SET READY ARM   *
*         IF BIT=1 INTERRUPT WHEN LINE=0,IF BIT=0  *
*         INTERRUPT WHEN LINE=1.                   *
*                                                  *
****************************************************
*         MASK STATUS INTERRUPT-MSKI               *
*         BIT                 MEANING              *
*         15,14,13,12         1,0,1,1              *
*         11,10,9,8,7,6,5     NOT USED             *
*         4                   RING MASK            *
*         3                   SECONDARY RLS MASK   *
*         2                   RCV LINE SIGNAL MASK *
*         1                   CLEAR TO SEND MASK   *
*         0                   DATA SET READY MASK  *
*         IF BIT=1 ENABLE LINE INTERRUPT,IF BIT=0  *
*         DISABLE LINE INTERRUPT.                  *
*                                                  *
****************************************************
*         CONTROL-CTRL                             *
*         BIT                 MEANING              *
*         15,14,13,12         1,1,0,0              *
*         11,10,9,8,7,6       NOT USED             *
*         5                   1:DMA USED FOR DATA  *
*                             0:PROGRAMMED I/O USED*
*         4                   1:PARITY ENABLE      *
*                             0:DISABLE PARITY     *
*         3                   1:ODD PARITY,0:EVEN  *
*         2                   1:SRQS MODEM CTRL ON *
*                             0:SRQS OFF           *
*         1                   1:DTR MODEM CTRL ON  *
*                             0:DTR OFF            *
*         0                   1:RQS ON-TRANS MODE  *
*                             0:RQS OFF-RCV MODE   *
*                                                  *
****************************************************
*         START-STRT                               *
*         BIT                 MEANING              *
*         15,14,13,12         1,1,1,0              *
*         START A TRANS OR RCV OPERATION ONCE THE  *
*         MODEM HAS BECOME READY.                  *
*                                                  *
****************************************************
*         STOP                                     *
*         BIT                 MEANING              *
*         15,14,13,12         1,1,1,1              *
*         STOP A TRANS OR RCV OPERATION AS A NORMAL*
*         ENDING OR TO ABORT IN CASE OF ERROR.     *
*                                                  *
****************************************************
*                                                  *
*         INTERFACE STATUS WORD                    *
*         BIT                 MEANING              *
*         15                  0:DATA TRANSFER      *
*                             1:UNUSUAL CONDITION  *
*         14                  1:MODEM STAT REQUEST *
*         13                  1:DATA ERROR COND    *
*         12                  1:RECEIVE PARITY COND*
*         11                  1:DATA REQ CONDITION *
*         10                  NOT USED             *
*         9                   1:RING LINE INTERRUPT*
*         8                   1:SRLS LINE INTERRUPT*
*         7                   1:RLS LINE INTERRUPT *
*         6                   1:CLS LINE INTERRUPT *
*         5                   1:DSR LINE INTERRUPT *
*         4                   1:RING LINE ON       *
*         3                   1:SRLS LINE ON       *
*         2                   1:RLS LINE ON        *
*         1                   1:CLS LINE ON        *
*         0                   1:DSR LINE ON        *
*                                                  *
*                                                  *
****************************************************
A     EQU 0 
B     EQU 1 
SC    EQU 0 
****************************************************
*                                                  *
*         COMPLETION SECTION                       *
*                                                  *
****************************************************
C.71  EQU * 
      NOP 
      CLA                SUCCESSFUL COMPLETION
      LDB $EQ14,I        TRANSMISSION LOG 
      JMP C.71,I    RETURN
****************************************************
*                                                  *
*         INTERRUPT CELLS                          *
*                                                  *
****************************************************
* 
P.710 EQU * 
      NOP 
      CLF 0              DISABLE INTERRUPTS 
      JSB SAVE           SAVE REGISTERS 
      LDA UEQT           ADDRESS USERS EQT
      JSB SETQ           SET EQT
      LDA USC            ADDRESS USERS SELECT CODE
PCOMM JSB SETIO          SET I/O INSTRUCTIONS 
      JSB STAT           INPUT STATUS 
      LDB LSIT
      JMP LSWCH          LINE STATE 
* 
* 
* 
P.711 EQU * 
      NOP 
      CLF 0 
      JSB SAVE
      LDA UEQT+1
      JSB SETQ
      LDA USC+1 
      JMP PCOMM 
* 
* 
P.712 EQU * 
      NOP 
      CLF 0 
      JSB SAVE
      LDA UEQT+2
      JSB SETQ
      LDA USC+2 
      JMP PCOMM 
* 
* 
P.713 EQU * 
      NOP 
      CLF 0 
      JSB SAVE
      LDA UEQT+3
      JSB SETQ
      LDA USC+3 
      JMP PCOMM 
* 
* 
* 
* 
P.714 EQU * 
      NOP 
      CLF 0 
      JSB SAVE
      LDA UEQT+4
      JSB SETQ
      LDA USC+4 
      JMP PCOMM 
* 
* 
P.715 EQU * 
      NOP 
      CLF 0 
      JSB SAVE
      LDA UEQT+5
      JSB SETQ
      LDA USC+5 
      JMP PCOMM 
* 
* 
P.716 EQU * 
      NOP 
      CLF 0 
      JSB SAVE
      LDA UEQT+6
      JSB SETQ
      LDA USC+6 
      JMP PCOMM 
* 
* 
P.717 EQU * 
      NOP 
      CLF 0 
      JSB SAVE
      LDA UEQT+7
      JSB SETQ
      LDA USC+7 
      JMP PCOMM 
****************************************************
*                                                  *
*         INITIATION SECTION                       *
*                                                  *
****************************************************
I.71  EQU * 
      NOP 
      CLF 0         DISABLE INTERRUPT SYSTEM
      CLB 
      STB RTX       SET RETURN INDEX FOR I.70 
      STB SAVA      ZERO RETURN CODE
      LDB I.71      SAVE RETURN ADDRESS 
      STB EXIT
      STA SCODE     SAVE SELECT CODE
      LDB $EQ17,I 
      LDA $EQ9,I   GET REQUEST
      AND SFAR      SAVE FUNCTION AND REQUEST 
      CPA .103      INITIALIZE REQUEST? 
      JMP I.71B     YES 
      SZB,RSS      IF LOGICAL LINKAGE PRESENT --PROCEED 
      CPA P03$     CLEAR REQUEST
      JMP I.71A     YES 
      ISZ SAVA      NO INVALID
      JMP RTRN
I.71B EQU * 
      LDB $EQ11,I          GET EXTENSION ADDRESS
      STB $EQ17,I   LINK WITH LOGICAL 
      INB 
      LDA B,I       GET EQT19 
      STA $EQ6,I    SAVE IN CONTROL WORD
      CLA 
      STA EQT3       INSURE EQT RESET 
      STA $EQ5,I    CLEAR LINE STATE
      STA $EQ16,I   CLEAR TIMER FLAGS 
      LDA $EQ1      GET BASE EQT ADDRESS
      ADB P07$      COMPUTE EQT26 
      STA B,I       SAVE AS TIMER ID(DVR71) 
      ADB P04$      COMPUTE EQT30 
      STA B,I       SAVE AS TIMER ID (LOGICAL)
* 
*         BUILD BASIC CONTROL WORD
* 
      LDA $EQ6,I    GET PARAMETER WORD(EQT19) 
      AND .60       ISOLATE PARITY
      RAR           POSITION PARITY 
      SZA           PARITY OFF? 
      IOR .20       NO
      IOR CTRL      CONTROL WORD
      STA $EQ6,I    STORE WORD IN EQT6
* 
I.71A EQU * 
      LDA $EQ1
      JSB SETQ      SET EQT 
* 
      LDA EQT4,I    SET 
      AND LBYT$        STATUS TO
      STA EQT4,I                ZERO
      JSB SETU      SET UNIT RELATED CONSTANTS
      LDA SCODE 
      JSB SETIO     SET I/O INSTRUCTIONS
      JSB STAT      FIND BOARD STATUS 
      LDA EQT9,I
      AND SFAR      ISOLATE FUNCTION AND REQUEST
      CPA P03$        CLEAR REQUEST 
      JMP C0          YES 
      AND M17$
      CPA P01$      READ REQUEST
      JMP READ      YES 
      CPA P02$      WRITE REQUEST 
      JMP WRITE     YES 
      CPA P03$      CONTROL REQUEST 
      JMP CONTL     YES 
      ISZ SAVA      INDICATE ERROR
      JMP RTRN
****************************************************
*                                                  *
*         READ REQUEST INITIATION                  *
*                                                  *
****************************************************
READ  EQU * 
      JSB LCHK      CHECK FOR LINE OPEN, DATA SET RDY 
      CCB           INDICATE INITIATION CALL
      JSB EQT22,I   CALL LOGICAL READ 
      JMP READ1     COMPLETE
      JSB DRCTV     EVALUATE DIRECTIVE BITS 
      JMP RTRN
* 
READ1 EQU * 
      LDA P04$      INDICATE IMMEDIATE COMPLETION 
      STA SAVA
      JMP RTRN
****************************************************
*                                                  *
*         WRITE REQUEST INITIATION                 *
*                                                  *
****************************************************
WRITE EQU * 
      JSB LCHK      CHECK FOR LINE OPEN,DATA SET RDY
      CCB           INDICATE INITIATION CALL
      JSB EQT23,I   CALL LOGICAL WRITE
      JMP READ1     COMPLETE
      JSB DRCTV     EVALUATE DIRECTIVE BITS 
      JMP RTRN
****************************************************
*                                                  *
*         CONTROL REQUEST INITIATION               *
*                                                  *
****************************************************
CONTL EQU * 
      CLA 
      CCB           INDICATE INITIATION CALL
      JSB EQT24,I   CALL LOGICAL CONTROL
      JMP READ1     COMPLETE
      JSB DRCTV     EVALUATE DIRECTIVE BITS 
      LDA EQT9,I
      ALF,ALF 
      RAL,RAL 
      AND M77$      ISOLATE FUNCTION CODE 
      ADA N04$
      SSA,RSS       FUNCTION LT 5 
      JMP CNTL1     NO-INVALID
      ADA CNTLT     YES-CALCULATE TABLE ADDRESS 
      LDA A,I 
      JMP A,I       PROCESS BY FUNCTION CODE
* 
* 
CNTL1 EQU * 
      ISZ EQT4,I    INDICATE INVALID REQUEST
      JMP READ1 
* 
* 
*         CONTROL TRANSFER TABLE
* 
      DEF C0        CLEAR 
      DEF READ1     INITIALIZE(NO ADDITIONAL PROCESSING)
      DEF C2        LINE OPEN 
      DEF C3        LINE CLOSE
CNTLT DEF * 
* 
*         CLEAR REQUEST 
* 
C0    EQU * 
      LDA $EQ17,I 
      SZA            SKIP DEQUEUE IF NOT LINKED 
      JSB DQT       DEQUE TIMERS
      LDA REST      MASTER RESET
      JSB OTA       CLEAR I/F 
      CLA 
      STA $EQ17,I  BREAK LINKAGE
      JMP READ1 
* 
*         LINE OPEN REQUEST 
* 
C2    EQU * 
      LDA EQT10,I   PARAMETER 1 
      CPA P01$      RECEIVE?
      JMP CRCV      YES 
      CPA P02$      SEND? 
      JMP CSND      YES 
      ISZ EQT4,I    INDICATE INVALID REQUEST
      JMP READ1     RETURN TO DOS 
CRCV  EQU * 
      LDA EQT19,I 
      SSA           FULL DUPLEX?
      JMP CSND      YES 
      LDA EQT6,I    LOAD BASIC CONTROL WORD 
      IOR P02$
      JSB OTA       SET DATA TERMINAL READY 
      LDA EQT5,I
      CPA P03$      LINE=LINE OPEN SEND?
      JMP C21       YES 
C20   EQU * 
      LDA MSKI
      IOR P01$
      JSB OTA       MASK DSR INTERRUPT
      LDA ARMI
      JSB OTA       ARM DSR DOWN(INTERRUPT ON UP) 
      JMP C22 
CSND  EQU * 
      LDA EQT6,I
      IOR P03$
      JSB OTA       SET DTR AND RQS 
      LDA EQT19,I 
      SSA           FULL DUPLEX?
      JMP C20       YES 
      LDA MSKI
      IOR P02$
      JSB OTA       MASK CLS INTERRUPT
      LDA ARMI
      JSB OTA       ARM CLS DOWN(INT ON UP) 
      JMP C22 
C21   LDA MSKI
      IOR P02$      MASK CLS INTERRUPT
      JSB OTA 
      LDA ARMI
      IOR P02$      ARM CLS=1 
      JSB OTA 
C22   LDA P01$      LINE=AWAITING OPEN
      STA EQT5,I
      JSB STC       TURN ON BOARD 
      JMP RTRN
* 
*         LINE CLOSE REQUEST
* 
C3    EQU * 
      LDA REST
      JSB OTA       MASTER RESET
      LDA MSKI
      IOR P01$
      JSB OTA       MASK DSR INTERRUPT
      LDA ARMI
      IOR P01$      INTERRUPT ON DSR DOWN 
      JSB OTA 
      CLA           LINE=CLOSE
      STA EQT5,I
      JSB STC       TURN ON BOARD 
      JMP RTRN
* 
****************************************************
*                                                  *
*         SET UNIT RELATED DATA                    *
*                                                  *
****************************************************
SETU  EQU * 
      NOP 
      LDA $EQ3,I    GET UNIT & SELECT CODE
      ALF,ALF 
      RAL,RAL       POSITION UNIT FIELD 
      AND P07$
      ADA UTBL      CALCULATE TABLE ENTRY 
      LDB $EQ1
      STB A,I       SAVE EQT
      ADA P08$      OFFSET TO NEXT TABLE
      LDB SCODE 
      STB A,I       SAVE SELECT CODE
      JMP SETU,I
* 
UTBL  DEF *+1 
UEQT  BSS 8         HOLDS EQT FOR UNIT 0-7
USC   BSS 8         HOLDS SC FOR UNIT 0-7 
* 
* 
****************************************************
*                                                  *
*         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 
      STA EQT4      FILL
      INA                TABLE
      STA EQT5
      INA 
      STA EQT6
      ADA P03$
      STA EQT9
      INA 
      STA EQT10 
      ADA P04$
      STA EQT14 
      INA 
      STA EQT15 
      INA 
      STA EQT16 
      INA 
      LDA A,I       LINK TO EXTENSION 
      INA 
      STA EQT19 
      INA 
      STA EQT20 
      ADA P02$
      LDB A,I 
      STB EQT22 
      INA 
      LDB A,I 
      STB EQT23 
      INA 
      LDB A,I 
      STB EQT24 
      ADA P03$
      STA EQT27 
      ADA P04$
      STA EQT31 
      JMP SETQ,I    RETURN
****************************************************
*                                                  *
*         DRIVER TIMER START                       *
*                                                  *
****************************************************
TIMIN EQU *    B=PROCESSOR ADDRESS
      NOP      A=TIME INTERVAL
      STA EQT27,I   SAVE VALUE
      LDA EQT16,I   GET TIMER FLAGS 
      ERA,RAL       PHYSICAL TIMER BIT TO E 
      IOR P01$      SET IT
      STA EQT16,I 
      LDA EQT27,I   GET VALUE 
      SEZ           INITIATE REQUEST
      CMA,INA       NO-INDICATE RESET 
      STB EQT27,I   SAVE PROCESSOR ADDRESS
      LDB EQT27 
      ADB N01$      PASS EQT26 AS TIMER BLOCK 
      JSB $TIME 
      JMP TIMIN,I 
* 
*         TIMER #1(AND ONLY)
* 
TIMA  DEF *+1 
      NOP 
      CLF 0 
      CLB,INB 
      JSB TIMOF 
      JSB STAT      GET BOARD STATUS
      LDA TIMA+1    RETURN  ADDRESS 
      STA LTIM
      LDA P02$
      STA RTX       INDICATE TIMER RETURN 
      JMP LSIE      START RECEIVE 
* 
****************************************************
*                                                  *
*         TIME OFF                                 *
*        INITIAL SETUP FOR TIMEOUT                 *
*        A=EQT                                     *
*        B=TIMER FLAG MASK                         *
                                                                                                                                                                                                                                                  