*                                                  *
****************************************************
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 
      AND EQT16,I   CLEAR TIMER IN PROGRESS 
      STA EQT16,I 
      JMP TIMOF,I 
* 
TMOF1 NOP 
*                                                  *
****************************************************
*                                                  *
*         LINE CHECK                               *
*                                                  *
****************************************************
LCHK  EQU * 
      NOP 
      LDA EQT5,I    LOAD LINE STATE 
      SZA,RSS       LINE CLOSE? 
      JMP LCHK1     YES 
      LDA STWD      LOAD BOARD STATUS 
      CMA           COMPLIMENT DSR
      AND P01$      ISOLATE DSR 
      RAR,RAR       POSITION FOR LINE ERROR 
*NOTE-DSR=DOWN INDICATES LINE ERROR 
      JMP LCHK,I
LCHK1 EQU * 
      ISZ EQT4,I    INVALID REQUEST 
      JMP READ1     IMMEDIATE COMPLETION
****************************************************
*                                                  *
*     DIRECTIVE EVALUATOR                          *
*                                                  *
*     A= DIRECTIVE BITS (15-8), OUTPUT DATA (7-0)  *
*         15-START READ                            *
*         14-START WRITE                           *
*         13-NO OPERATION                          *
*                                                  *
*     B= TIMER REQUEST                             *
*         <0-INITIATE/UPDATE VALUE                 *
*         =0-NO REQUEST                            *
*         >0-CANCEL REQUEST                        *
*                                                  *
*                                                  *
****************************************************
DRCTV EQU * 
      NOP 
      STA DRCTA     SAVE DIRECTIVES 
      SZB,RSS       TIMING REQUEST
      JMP DRCT1     NO
      LDA EQT16,I   YES 
      SSB           CANCEL REQUEST
      JMP DRCT2     NO
*                   YES 
      ELA,CLE,ERA   CLEAR IN PROGRESS BIT 
      CLB           INDICATE CANCEL 
      JMP DRCT3 
DRCT2 EQU * 
      SSA           TIMER IN PROGRESS 
      CMB,INB       YES-INDICATE RESET
      IOR B15$      SET IN PROGRESS BIT 
DRCT3 EQU * 
      STA EQT16,I   UPDATE FLAGS
      STB A 
      LDB LTIMA 
      STB EQT31,I   SET PROCESSOR TO LOGICAL TIMER
      LDB EQT31 
      ADB N01$      PASS EQT30 AS TIMER BLOCK 
      JSB $TIME 
DRCT1 EQU * 
      LDA DRCTA 
      RAL,SLA       START READ
      JMP SREAD     YES 
      RAL,SLA       START WRITE 
      JMP SWRIT     YES 
      SSA           NOP 
      JMP RTRN      YES 
      LDA DRCTA     NO DIRECTIVES 
      JMP DRCTV,I   RETURN
* 
DRCTA NOP 
* 
* 
****************************************************
*                                                  *
*         START READ                               *
*                                                  *
****************************************************
SREAD EQU * 
      LDA EQT5,I
      CPA P04$      LINE=SEND?
      JMP SRD3      YES 
      LDA EQT6,I    BASIC CONTROL WORD
      IOR P02$      DTR SET,RQS OFF 
      JSB OTA 
      LDA MSKI
      IOR P05$      MASK ON RLS,DSR 
      JSB OTA 
      LDA EQT19,I 
      SSA           FULL DUPLEX?
      JMP SRD1      YES 
      LDA STWD
      ARS,SLA       CLS HIGH? 
      JMP SRD2      YES 
SRD1  LDA P08$      LINE=PREP TO RCV#3
      STA EQT5,I
      LDA ARMI
      IOR P01$      ARM RLS=0,DSR=1 
      JSB OTA 
      JSB STC       TURN ON BOARD 
      JMP RTRN
SRD2  LDA P07$      LINE=PREP TO RCV#2
      STA EQT5,I
      LDA ARMI
      IOR P05$      ARM RLS=1,DSR=1 
      JSB OTA 
      LDA N02$      DELAY 200MS 
      LDB TIMA      TIMER#1 
      JSB TIMIN     START TIMER 
      JSB STC       TURN ON BOARD 
      JMP RTRN
SRD3  LDA RBYT$     PAD CHAR
      JSB OTA 
      LDA P06$      LINE=PREP TO RCV#1
      STA EQT5,I
      JSB STC       TURNON
      JMP RTRN
****************************************************
*                                                  *
*         START WRITE                              *
*                                                  *
****************************************************
SWRIT EQU * 
      LDA EQT5,I
      CPA P03$      LINE OPEN SEND? 
      JMP SWRT1     YES 
      CPA P09$      LINE=RECEIVE? 
      RSS           YES 
      JMP SWRT0 
      LDA STOP      STOP INPUT
      JSB OTA 
SWRT0 EQU * 
      LDA EQT6,I    BASIC CONTROL WORD
      IOR P03$      RQS=1,DTR=1 
      JSB OTA 
      LDA MSKI
      IOR P03$      MASK ON CLS,DSR 
      JSB OTA 
      LDA ARMI
      IOR P01$      ARM CLS=0,DSR=1 
      JSB OTA 
      LDA P05$      LINE EQUAL TO PREPARE TO  SEND
      STA EQT5,I
      LDA DRCTA     SAVE 1ST CHAR 
      AND RBYT$ 
      STA EQT15,I 
      JSB STC       TURN ON BOARD 
      JMP RTRN      RETURN
SWRT1 EQU * 
      LDA P05$      LINE=PREP TO SEND 
      STA EQT5,I
SWRT2 EQU * 
      LDA ARMI
      IOR P03$      ARM CLS=1, DSR=1
      JSB OTA 
      LDA STRT      START TRANSMIT
      JSB OTA 
      LDA DRCTA     SAVE 1ST CHAR 
      AND RBYT$ 
      STA EQT15,I 
      JSB STC       TURN ON BOARD 
      JMP RTRN      RETURN TO DOS 
****************************************************
*                                                  *
*         LOGICAL TIMER                            *
*                                                  *
****************************************************
LTIMA DEF LTIM
* 
LTIM  EQU * 
      NOP 
      CLF 0 
      LDB B15$
      JSB TIMOF     CLEAR TIMER FLAG
      LDA P02$
      STA RTX       INDICATE TIME RETURN
      LDA B15$      INDICATE LOGICAL TIMER
      LDB LSTT      PROCESS 
LSWCH ADB EQT5,I           BY 
      LDB B,I                LINE 
      JMP B,I                    STATE
LSTT  DEF *+1 
      DEF RTRN      0-CLOSED
      DEF RTRN      1-AWAITING OPEN 
      DEF RTRN      2-LINE OPEN RCV 
      DEF RTRN      3-LINE OPEN SEND
      DEF LSTB      4-SEND
      DEF LSTB      5-PREPARE TO SEND 
      DEF LSTD      6-PREPARE TO RCV#1
      DEF LSTD      7-PREPARE TO RCV#2
      DEF LSTD      8-PREPARE TO RCV#3
      DEF LSTD      9-RECEIVE 
* 
LSIT  DEF *+1 
      DEF DCTRL     0-CLOSED
      DEF LSIA      1-AWAITING OPEN 
      NOP           2-LINE OPEN RCV 
      DEF DIOS      3-LINE OPEN SEND
      DEF LSIB      4-SEND
      DEF LSIC      5-PREPARE TO SEND 
      DEF LSID1     6-PREPARE TO RCV#1
      DEF LSID2     7-PREPARE TO RCV#2
      DEF LSIE      8-PREPARE TO RCV#3
      DEF LSID3     9-RECEIVE 
* 
LSIA  EQU * 
      LDA STWD     BOARD STATUS 
      AND P03$     ISOLATE CLS,DSR
      SLA,RSS      IS THIS AN UNUSUAL LINE  STATE?
      JMP LSIA1    YES    THEN GO HANDLE IT 
      CPA P01$     RECEIVE OPEN?
      INA          YES
      STA EQT5,I   SAVE LINE STATE
      JMP DCTRL    COMPLETE 
LSIA1 EQU * 
      SZA,RSS      IF NO CONTROL
      JMP LSIA2    THEN DO NOT RECONFIGURE THE BOARD
      LDA MSKI
      INA          MASK ON  DSR 
      JSB OTA      AND GO OUTPUT IT 
      LDA ARMI     AND GO ARM DSR INTERUPT TO 1 
      JSB OTA      OUTPUT THE ARMING COMMAND
LSIA2 EQU * 
      JSB STC      SET CONTROL ON THE BOARD 
      JMP RTRN     AND RETURN TO USER 
LSIB  EQU * 
      JSB BSTAT     CHECK BOARD STATUS
LSTB  EQU * 
      LDB P01$      INDICATE CONTINUATION 
      JSB EQT23,I   CALL LOGICAL WRITE
      JMP LSIB1     COMPLETE
      JSB DRCTV     CONTINUE,EVALUATE DIRECTIVES
      LDA DRCTA     DATA WORD 
      AND RBYT$     PREPARE FOR OUTPUT
      JSB OTA 
      JSB STC       TURN ON BOARD 
      JMP RTRN      RETURN TO DOS 
LSIB1 EQU * 
      LDA BSTW
      SZA           COMPLETION BY ERROR?
      JMP DIOS      YES,STOP IO 
      LDA RBYT$     PUT OUT PAD 
      JSB OTA       TO GET LAST CHAR OUT
      LDA P03$      LINE=LINE OPEN SEND 
      STA EQT5,I
      JSB STC       TURN ON BOARD 
      JMP RTRN      RETURN TO DOS 
LSIC  EQU * 
      LDA STWD
      SSA,RSS       DATA REQUEST? 
      JMP LSIC1     YES 
      AND P03$
      CPA P03$      ERROR?
      JMP SWRT2     NO,START OUTPUT 
      LDA B14$      YES,INDICATE ERROR
      JMP LSTB
LSIC1 EQU * 
      LDA P04$      LINE=SEND 
      STA EQT5,I
      LDA EQT15,I   FIRST CHAR
      JSB OTA       OUTPUT CHAR 
      JSB STC       TURN ON BOARD 
      JMP RTRN      RETURN TO DOS 
LSID1 EQU * 
      LDA STOP      STOP TRANSMIT 
      JSB OTA 
      JMP LSIDD 
LSID2 EQU * 
      LDA EQT16,I  LOAD TIMER FLAGS WORD
      ARS,ALS      CLEAR BIT 0   PHYSICAL TIMER FLAG
      STA EQT16,I  AND STORE THE WORD BACK INTO THE EQT 
      CLA          INDICATE TIMER TURN OFF
      LDB EQT27    LOAD PHYSICAL TIMER BUFFER ADDRESS 
      ADB N01$      DECREMENT IT
      JSB $TIME     GO DO TURN OFF
LSIDD EQU * 
      LDA STWD
      SLA           DSR DOWN? 
      JMP SREAD     NO
LSER  EQU * 
      LDA B14$      YES,LINE ERROR
      JMP LSTD
LSID3 EQU * 
      JSB BSTAT     FIND BOARD STATUS 
O5    MIA SC        INPUT DATA
TRAC1 NOP        TRACE POINT 1
LSTD  EQU * 
      LDB P01$      INDICATE CONTINUE 
      JSB EQT22,I   CALL LOGICAL RECEIVE
      JMP DIOR      COMPLETE
      JSB DRCTV     CONTINUE,EVALUATE DIRECTIVES
      JSB STC       TURN ON BOARD 
      JMP RTRN      RETURN TO DOS 
LSIE  EQU * 
      LDA STWD
      SLA,RSS       DSR DOWN? 
      JMP LSER      YES 
      LDA P09$      LINE=RECEIVE
      STA EQT5,I
      LDA ARMI
      IOR P05$      ARM RLS=1, DSR=1
      JSB OTA 
      LDA STRT      START RECEIVE 
      JSB OTA 
      LDA EQT20,I   LOAD SYNC CHAR
      JMP LSTD      GIVE IT TO LOGICAL
****************************************************
*                                                  *
*         SAVE REGISTERS                           *
*                                                  *
****************************************************
SAVE  EQU * 
      NOP 
      STA SAVA      A 
      STB SAVB      B 
      ERA,ALS       E 
      SOC 
      INA           O 
      STA SAVEO 
      CLA,INA 
      STA RTX       INDICATE INTERRUPT
      LDA SAVE
      ADA N03$      CALCULATE INTERRUPT ENTRY 
      LDA A,I 
      STA EXIT      SAVE RETURN ADDRESS 
      JMP SAVE,I
****************************************************
*                                                  *
*         BOARD STATUS CHECK                       *
*                                                  *
****************************************************
BSTAT EQU * 
      NOP 
      CLB           INITIALIZE STATUS RETURN
      LDA STWD      BOARD STATUS WORD 
      SSA,RSS       DATA REQUEST ONLY?
      JMP LOK       YES 
      ALF 
      AND P03$      ISOLATE PARITY AND DATA 
      SZA,RSS       PARITY OR DATA ERROR? 
      JMP LINE      NO
      IOR DSET      RESET ERROR BITS
      JSB OTA 
      ADB P02$      INDICATE DATA ERROR 
LINE  EQU * 
      LDA EQT5,I
      ARS 
      INA 
      AND STWD      ISOLATE RELEVENT LINE BITS
      SLA,RSS       DSR HIGH? 
      JMP LERR      NO,LINE ERROR 
      ARS 
      SZA,RSS       OTHER LINE FAULT(CLS,RLS)?
LERR  EQU * 
      ADB P04$      YES,LINE ERROR
      BLF,BLF       POSITION STATUS 
      BLF 
LOK   EQU * 
      LDA B         STATUS RTRN IN A
      STA BSTW      SAVE STAT WORD
      JMP BSTAT,I 
****************************************************
*                                                  *
*         COMPLETION NOTIFICATION                  *
*                                                  *
****************************************************
DIOR  EQU * 
      LDA EQT5,I
      CPA P06$      LINE=PREP TO RCV#1? 
      JMP DIOS      YES 
      CCB           FIX FOR LINE OPEN RCV 
      CPA P09$      LINE=RECEIVE? 
      JMP DSIO
      JMP DLNE
DIOS  EQU * 
      CLB           FIX FOR LINE OPEN SEND
DSIO  EQU * 
      LDA STOP      STOP I/O
      JSB OTA 
DLNE  EQU * 
      ADB P03$
      STB EQT5,I    SET LINE STATE
DCTRL EQU * 
      JSB DQT       DEQUE TIMERS
      LDA EQTB
      JSB $PCOM 
      JMP RTRN      RETURN TO DOS 
* 
****************************************************
*                                                  *
*         COMMON RETURN                            *
*                                                  *
****************************************************
RTRN  EQU * 
      LDA RTX       DETERMINE RETURN TYPE 
      SZA,RSS 
      JMP RTRN2     I.71
      SLA,RSS 
      JMP RTRN3     LOGICAL TIMER 
RTRN0 EQU *         P.71
      LDA SAVEO     RESTORE 
      CLO 
      SLA,ELA       E 
      STF 1         O 
      LDA SAVA      A 
      LDB MPTFL     TEST MEMORY PROTECT 
      SZB,RSS      IS IT ON?
      JMP RTRN1     YES 
      LDB SAVB      RESTORE B 
      STF 0         ENABLE INTERRUPT SYSTEM 
      JMP EXIT,I
RTRN1 EQU * 
      LDB SAVB      RESTORE B 
      STF 0         ENABLE INTERRUPTS 
      STC 5         TURN ON MEMORY PROTECT
      JMP EXIT,I
RTRN2 EQU * 
      LDA EQT14,I 
      STA SAVB      TRANSMISSION LOG
      JMP RTRN0 
RTRN3 EQU * 
      STF 0         ENABLE INTERRUPTS 
      JMP LTIM,I
****************************************************
*                                                  *
*         DEQUEUE TIMERS                           *
*                                                  *
****************************************************
DQT   EQU * 
      NOP 
      LDA EQT16,I   LOAD TIMER FLAGS
      SZA,RSS       TIMER IN PROGRESS?
      JMP DQT,I     NO
      SSA,RSS       LOGICAL TIMER IN PROGRESS 
      JMP DQT1      NO
      ELA,CLE,ERA   YES 
      STA EQT16,I   CLEAR FLAG
      CLA 
      LDB EQT31 
      ADB N01$
      JSB $TIME 
DQT1  EQU * 
      LDA EQT16,I 
      SLA,RSS       DVR71 TIMER ACTIVE? 
      JMP DQT,I     NO,DONE 
      ARS,ALS       YES,CLEAR 
      STA EQT16,I   CLEAR FLAG
      LDB EQT27 
      ADB N01$
      CLA 
      JSB $TIME     CANCEL REQUEST
      JMP DQT,I 
* 
****************************************************
OTA   EQU * 
      NOP 
O1    OTA SC
TRAC2 NOP        TRACE POINT 2
      JMP OTA,I 
* 
****************************************************
STC   EQU * 
      NOP 
O2    STC SC
      JMP STC,I 
* 
****************************************************
STAT  EQU * 
      NOP 
O3    CLC SC
O4    LIA SC
TRAC3 NOP        TRACE POINT 3
      STA STWD
      JMP STAT,I
* 
****************************************************
*                                                  *
*         SET  I/O INSTRUCTIONS                    *
*                                                  *
****************************************************
SETIO EQU * 
      NOP 
      CPA LAST      ALREADY CONFIGURED? 
      JMP SETIO,I   YES 
      STA LAST      SAVE CURRENT SC 
      ADA MIA 
      STA O5        FORM MIA INST 
      ADA P64$      FORM LIA INST 
      STA O4
      ADA P64$      FORM OTA INST 
      STA O1
      ADA P64$      FORM STC INST 
      IOR CFLAG     INCLUDE THE CLEAR FLAG BIT
      STA O2
      IOR B11$      FORM CLC  INST
      STA O3
      JMP SETIO,I 
* 
****************************************************
*                                                  *
*         EQT LINKAGE TABLE                        *
*                                                  *
****************************************************
EQT3  NOP      UNIT/SELECT CODE 
EQT4  NOP      STATUS 
EQT5  NOP      LINE STATE 
EQT6  NOP      I/F CONTROL WORD 
EQT9  NOP      CONWD
EQT10 NOP      PARAMETER 1
EQT14 NOP      TRANSMISSION LOG 
EQT15 NOP           SAVE FIRST CHAR FOR O/P 
EQT16 NOP      TIMER FLAGS
EQT19 NOP      BOARD PARAMETERS 
EQT20 NOP 
EQT22 NOP      LREAD
EQT23 NOP      LWRIT
EQT24 NOP      LCNTL
EQT27 NOP      DVR71 TIMER PROCESSOR ADDRESS
EQT31 NOP      LOGICAL TIMER PROCESSOR ADDRESS
* 
*         BASE PAGE CONSTANTS 
* 
#     EQU 53B 
N01$  EQU #-1 
N02$  EQU #-2 
N03$  EQU #-3 
N04$  EQU #-4 
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 
P64$  EQU #+12
M17$  EQU #+13
M77$  EQU #+15
RBYT$ EQU #+17      OCT 377 
LBYT$ EQU #+18      OCT 177400
* 
*         BASE PAGE VARIABLES 
* 
##    EQU 202B
EQTB  EQU 300B      ADDRESS OF EQT ENTRY
$EQ1  EQU ##+1
$EQ3  EQU ##+3
$EQ5  EQU ##+5
$EQ6  EQU ##+6
$EQ9  EQU ##+9
$EQ11 EQU ##+11 
$EQ14 EQU ##+14 
$EQ16 EQU ##+16 
$EQ17 EQU ##+17 
B15$  OCT 100000
B14$  OCT 40000 
B11$  OCT 4000
* 
ARMI  OCT 120000
CTRL  OCT 140000
DSET  OCT 110000
MSKI  OCT 130000
REST  EQU B15$
STOP  OCT 170000
STRT  OCT 160000
* 
EXIT  NOP 
BSTW  NOP 
CFLAG OCT 1000      CLEAR FLAG BIT
LAST  NOP 
MIA   MIA SC
MPTFL EQU 271B      MEMORY PROTECT FLAG 
RTX   NOP 
SAVA  NOP 
SAVB  NOP 
SAVEO NOP 
SCODE NOP 
SFAR  OCT 17777 
STWD  NOP 
.20   OCT 20
.60   OCT 60
.103  OCT 103 
* 
      END 
                                                                                                        