ASMB,R,L,C,N
      HED << RTE ASYNCHRONOUS MULTIPLEXER DRIVER - 12920A/B >>
      IFN 
* 
      NAM DVS00,0   91731-16001  REV. 1926  790424
      XIF 
* 
      IFZ 
      NAM DVS00,0   91731-16004  REV. 1926  790424
      XIF 
* 
****************************************************************
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978,ALL RIGHTS        *
* RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,        *
* REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT *
* THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        *
****************************************************************
*     NAME: DVS00 
*     SOURCE: 91731-18001 
*     RELOC:  91731-16001  *** SINGLE MUX *** 
*     RELOC:  91731-16004  *** DUAL MUX   *** 
*     MANUAL: 91731-90001 
*     AUTHOR: BILL RAGIN
*     UPDATES (RXX) BY GREG DOLKAS
*     LAST UPDATE: (R10) 4/24/79 LINE DROP BUG
*                  (R09) 4/3/79  SET DVR TYPE TO 00 ON DETACH (C 25B) 
*                  (R08) 3/22/79 HW VS MODEM BUG, TIMEOUT BUG 
*                  (R07) 1/30/79 LINE DROP/BUFFR FLUSH CLEANUP
*                  (R06) 12/17/78 MISSING LINE IN ERTN
*                  (R05) 10/23/78 
*                  (R04) 10/6/78
*                  (R03) 9/11/78
*                  (R02) 9/7/78 
*                  (R01) 8/21/78
* 
      SPC 2 
*   USE Z OPTION FOR DUAL MUX (32 PORT) 
      SPC 2 
* 
      ENT IS00,CS00 
      ENT P00D1 
      ENT P00C1,P00C2 
      IFZ 
      ENT P00D2,P00C3,P00C4 
      XIF 
      EXT $LIST,$PVMP,$OPSY 
* 
*              NOTE! YOU WILL HAVE $PVMP AS AN UNDEFINED EXTERNAL SYMBOL
*                    DURING AN RTE-II GENERATION. 
*                    IGNORE IT, SINCE IT WILL NOT BE CALLED IF THIS IS USED 
*                    IN AN RTE-II SYSTEM. 
* 
* 
* 
****** PROGRAM  DESCRIPTION ******
* 
*    DRIVER 00  OPERATES UNDER THE CONTROL OF THE 
* I/O CONTROL MODULE OF THE REAL-TIME EXECUTIVE.
* THIS DRIVER IS RESPONSIBLE FOR CONTROLLING DATA 
* TRANSMISSION WITH ANY EIA RS232 COMPATIBLE
* 103A OR 202C BELL TYPE MODEMS, AND HARDWIRED
* TERMINALS CONNECTED TO THE 12920A ASYNCHRONOUS
* MULTIPLEXOR PANEL. TERMINAL SPEED IS PROGRAMMABLE 
* AND CAN BE DIFFERENT FOR TRANSMIT AND RECEIVE.
* THIS DRIVER CAN SENSE SPEED OF TERMINALS OPERATING
* AT 10,15,30,60,120 AND 240 CHARACTERS PER SECOND. 
* THIS DRIVER CAN PROVIDE STALL CHARACTERS FOR
* THOSE TERMINALS REQUIRING THIS DELAY
* IS00 IS THE ENTRY POINT FOR THE *INITIATION*
* SECTION AND CS00 FOR THE *COMPLETION* SECTION.
* P00XX IS THE INTERRUPT ENTRY POINT AND HANDLES ALL
* TERMINAL SERVICING. TIMEOUT AND PROGRAM SCHEDULING
* ARE THE ONLY REASONS FOR ENTERING THE *COMPLETION*
* SECTION.
* 
*  - THE INITIATION SECTION IS CALLED FROM I/O
*    CONTROL TO INITIALIZE A DEVICE AND INITIATE
*    A DATA TRANSFER OR CONTROL FUNCTION. 
* 
*      CALLING SEQUENCE:
* 
*           - ADDRESSES OF DEVICE EQT ENTRY 
*             SET IN "EQT1-EQT15" 
* 
*           (A) = I/O ADDRESS OF DEVICE 
* 
*        (P)   JSB  IS00
*        (P+1) - RETURN - 
* 
*               (A) = 0, OPERATION INITIATED, OR
*               (A) = REJECT CODE:
* 
*                    2, ILLEGAL CONTROL REQUEST,
*                       OR CONTROL FUNCTION HAS 
*                       BEEN DONE (E.G., SET EOT
*                       STATUS).
* 
*                    3, EQUIPMENT MALFUNCTION OR
*                       NOT READY.
* 
*  - THE COMPLETION SECTION IS CALLED BY CENTRAL
*    INTERRUPT CONTROL TO CONTINUE OR COMPLETE
*    AN OPERATION.
* 
*      CALLING SEQUENCE:
* 
*           - ADDRESSES OF DEVICE EQT ENTRY 
*             SET IN "EQT1-EQT15" - 
* 
*           (A) = I/O ADDRESS OF DEVICE 
* 
*        (P)   JSB  CS00
*        (P+1) -- COMPLETION RETURN   --
*        (P+2) -- CONTINUATION RETURN --
* 
*         - COMPLETION RETURN:
*            (A) = 0, SUCCESSFUL COMPLETION WITH
*               (B) = # WORDS OR CHARS. TRANSFERRED 
* 
*         - CONTINUATION RETURN: REGISTERS
*               MEANINGLESS.
* 
* 
*  - RECORD FORMATS,FOR THE DEFAULT TTY DRIVER: 
* 
*     ASCII (INPUT): A STRING OF CHARACTERS TERMIN- 
*     -----          ATED BY A CARRIAGE RETURN. IF THE
*                    REQUESTED LENGTH IS FULFILLED
*                    BEFORE A CARRIAGE RETURN, THE RE-
*                    MAINING CHARACTERS ARE IGNORED 
*                    UNTIL A CARRIAGE RETURN IS INPUT.
* 
*         SPECIAL CHARACTER PROCESSING: 
* 
*         LINE-FEED ALWAYS IGNORED AND IS NOT 
*                   TRANSMITTED TO USER BUFFER
*          RETURN - RECORD TERMINATOR AT END OF 
*                   A RECORD AND IS NOT TRANSMITTED 
*                   TO USER BUFFER OR COUNTED.
*                   SYSTEM RESPONDS WITH A LINE-FEED
*                   TO ACKNOWLEDGE END OF INPUT.
*         CNTRL-A,CNTRL-H,CNTRL-Y,OR BACKSPACE, DELETES 
*                   PREVIOUS CHARACTER AND OUTPUTS A BACK ARROW 
*                   IF TTY, OR UNDERBAR FOR MOST CRT'S. 
*          RUB-OUT(DEL)-DELETES CURRENT RECORD; 
*                       OUTPUTS '/' THEN RETURN/LINE-FEED 
*                       NEXT RECORD IS READ.
*          CONTROL/D  - FOURCES EOT IF ENTERED AT ANY TIME
* 
*     ASCII (OUTPUT): A STRING OF CHARACTERS, THE 
*     -----          NUMBER DESIGNATED BY THE 
*                    "BUFFER LENGTH" IN THE REQUEST,
*                    TERMINATED BY A RETURN AND 
*                    LINE-FEED (SUPPLIED BY THE 
*                    DRIVER). 
* 
*         SPECIAL CHARACTER PROCESSING: 
* 
*          LEFT-ARROW:  IF A LEFT-ARROW IS THE
*                    LAST CHARACTER IN THE USER 
*                    BUFFER, THE RETURN/LINE-FEED 
*                    AND ARROW CODES ARE NOT OUTPUT.
*  -  PROGRAM SCHEDULING
      SPC 1 
*          IF A PROGRAM IS LINKED TO THE TRAP CELL FOR ONE OR 
*          MORE OF THE EQT ENTRIES FOR THIS DRIVER THEN THAT
*          TTY IS A TERMINAL. 
* 
*          A TERMINAL, WHEN ENABLED, MAY SCHEDULE THE SO LINKED 
*          PROGRAM (MAY BE A DIFFERENT PROGRAM FOR EACH TERMINAL) 
*          BY STRIKING ANY KEY ANY TIME THAT THE TTY IS NOT DOING 
*          INPUT( THE SAME AS GETTING SYSTEM ATTENTION).  IF THE
*          TERMINAL IS THE SYSTEM TTY THE SYSTEM ATTENTION FLAG 
*          IS SET AND THE PROGRAM IS NOT SCHEDULED. 
*          WHEN THE PROGRAM RUNS A CALL TO RMPAR WILL RECOVER 
*          WORDS 4 THRU 8 OF THE EQT OF THE INTERRUPTING
*          TTY,  THAT IS EQT4 IS SET IN THE PROGRAMS B REG. 
*          WORD 3 IS THE SPEED PARAMETER ,FOR RECEIVE ONLY
*          AND WORD 4 IS THE CHARACTER WHICH
*           CAUSED THE ATTENTION INTERRUPT. 
* - BUFFER FLUSHING 
      SPC 1 
*          AFTER A BUFFER FLUSH CALL ALL WRITES AND 
*          CONTROL REQUESTS ARE IGNORED UNTIL EITHER: 
*              1.) THE QUE IS EMPTY OR
*              2.) AN INPUT REQUEST IS PROCESSED. 
* 
*   LEGAL SUBFUNCTION VALUES IN CONTROL REQUEST:
* 
*        5 - SET RECEIVE SPEED PARAMETER
*          - SEE BELOW
*        7 - SET END-OF-TAPE STATUS 
*       12 - R/LF DELAY 
*          - SEE BELOW
*       16 - SET SEND SPEED PARAMETER 
*          - SEE BELOW
*       17 - SPEED SENSE MODE 
*          - SEE BELOW
*       20 - ENABLE TERMINAL
*          - SEE BELOW
*       21 - DISABLE TERMINAL 
*       23 - FLUSH BUFFER 
*       24 - REMOVE BUFFER FLUSH
*       25 - SET LOGICAL DRIVER ADRESS IN EQT17 
*          - SEE BELOW
*       30 - CLOSE LINE-FOR MODEM USE 
*       31 - OPEN LINE -FOR MODEM USE 
* 
* - THE SPEED PARAMETERS SHOULD BE CALCULATED IN THE
*   FOLLOWING MANNER: 
* 
*       PARAMETER = (14,400/BAUD RATE)-1
* 
*   FOR EXAMPLE A 2400 BAUD TERMINAL WOULD HAVE A 
*   SPEED PARAMETER OF (14,400/2,400)-1 OR A VALUE
*   OF FIVE (5), NUMBERS ENTERED ARE IN OCTAL.
* 
* - THE RETURN/LINE FEED DELAY PARAMETER SHOULD BE CON- 
*   STRUCTED AS FOLLOWS:
* 
*   15          8 7   4 3     0 
*   *************************** 
*   *            * CR  *  LF  * 
*   *************************** 
* 
*   THE VALUES SHOULD BE THE NUMBER OF STALL CHARACTERS 
*   REQUIRED IN ADDITION TO THE NORMAL SINGLE CHARACTER 
*   DELAY.
* 
* - SET SPEED SENSE MODE: 
* 
*    PRAM1 CONTAINS THE "SEARCH FOR" CHARACTER
*    RIGHT JUSTIFED IE. "CR"=15B,"DC1"=21B. 
* - THE ENABLE PARAMETER IS DEFINED AS FOLLOWS: 
* 
*    15!14 13 12!11 10  9! 8  7  6! 5  4  3! 2  1  0
*   ************************************************* 
*   *L !S   D   !        ! S  E   ! P  P  CHAR      * 
*   *P !C   N   !        ! B      !       SIZE      * 
*   ************************************************* 
* 
*   BITS:      USE: 
* 
*    15        LINE PLEX - 0=HALF DUPLEX;1=FULL DUPLEX
*    14        SECONDRY CHANEL - 0=NO SEC.CHNL;1=SEC.CHNL.
*    13        DON'T DOWN LU ON ERROR, =1. DO DOWN =0.
*    8         STOP BITS - 0=1 STOP BIT;1=2 STOP BITS.
*    7         ECHO - 0= ECHO OFF;1= ECHO ON. 
*    5-4       PARITY - 0= PARITY OFF,BIT 7 =0. 1 = PARITY
*                       ODD. 2 = EVEN PARITY. 3 = BIT 7 = 1.
*    3-0       CHARACTER SIZE - SIZE,NOT INCL.STOP BIT AND PARITY.
* 
*    NOTE:  IF PRAM1 =0 THE TERMINAL IS ENABLED TO THE LAST 
*           SET OF PARAMETERS GIVEN, OR THE DEFAULT PARAMETERS
*           IF NONE WERE GIVEN. 
* 
* - SET LOGICAL DRIVER ADDRESS: 
*   PRAM1 IS THE ADDRESS OF THE LOGICAL DRIVER
*   IF PRAM1=0 THEN THE INTERNAL TTY LOGICAL DRIVER 
*   IS SET AS THE LOGICAL DRIVER. 
* 
* 
* 
* - GENERATION INTO RTE SYSTEM
* 
*   THIS IS A PRIVILEGED DRIVER AND REQUIRES USE OF 
*   THE 12936A PRIVILEGED I/O CONTROL CARD, OR A 12620A CARD. 
* 
*   THE SELECT CODE OF THE HIGHEST PRIORITY MUX CARD
*   - THAT IS THE LOWEST SELECT CODE - MUST BE INDICATED
*   IN THE FIRST EQT ENTRY FOR PORT #0. 
* 
* 
*   THE FOLLOWING PROCEDURE MUST BE FOLLOWED AT SYSTEM
*   GENERATION TIME:
* 
*    1.) EQUIPMENT TABLE ENTRIES MUST BE MADE FOR 
*        EVERY PORT USED. THE SELECT CODE MUST
*        BEGIN WITH XX (S.C.OF DATA LSC) FOR PORT #0 AND INCREASE 
*        CONSECUTIVELY STARTING FROM PORT #1 WHICH IS S.C.41,I.E.:
* 
*        USE "M" BIT IN RTE-IV!!!    XX,DVS00,B,M,X=11, ETC.
* 
*          XX,DVS00,B,X=11  (PORT #0) 
*          41,DVS00,B,X=11  (PORT #1) 
*          42,DVS00,B,X=11  (PORT #2) 
*              .              . 
*              .              . 
* 
*        NOTE: THESE ARE SIMULATED SELECT CODES -EXECPT FOR XX- 
*              ONE FOR EACH PORT.  THIS ALLOWS THE NECESSARY EQT
*              TABLE SPACE TO KEEP TRACK OF THE I/O FOR THE PORTS.
*              EACH EQT REQUIRES A 11 WORD EXTENSION. 
* 
*    2.) MAKE INTERRUPT TABLE FOR ACTUAL SELECT CODE
*        OF MUX. FOR EXAMPLE, WITH CARDS IN 10,11,12 AND 13 
* 
*           10,ENT,P00D1(D2)  (P00D1(D2) IS PRIV. ENTRY POINT)
*           12,ENT,P00C1(C3)  (P00C1(C3) IS ENTRY POINT 1ST CONTROL)
*           13,ENT,P00C2(C4)  (P00C2(C4) IS ENTRY POINT 2ND CONTROL,
*                          IF USED) 
* 
*        NOTE: D2,C3, AND C4 ARE FOR THE SECOND MUTIPLEXER. 
* 
*    3.) MAKE INTERRUPT TABLE ENTRY FOR EACH PORT IN USE. 
*        A PROGRAM MAY BE LINKED TO HANDLE INTERRUPTS.
* 
*          40,PRG,PRMPT -NOTE, THIS IS PSEUDO FOR XX- 
*          41,PRG,PRMPT 
*               . 
*               . 
* 
* 
*     IF YOU DESIRE TO USE A SECOND MULTIPLEXER, THEN THE SELECT
*     FROM 60 TO 77(OCTAL) MUST BE USED AS ABOVE FOR THE SECOND 
*     12920B MULTIPLEXER. AGAIN, 'XX' MUST REPLACE THE FIRST CHAN.
* 
*     THEN USE 60,61,62 ...  FOR EQT. & INT. TABLE ENTRIES
* 
*     THE DRIVER HAS INCORPORATED WITHIN IT A TTY DRIVER WHICH
*     IS DEFAULTED TO AT THE FIRST INITIALAZATION. THIS DRIVER
*     HAS THE CHARACTERISTICS MENTIONED ABOVE IN THE 'RECORD
*     FORMAT' DISCUSSION. THE USER MAY ATTACH A UNIQUE LOGICAL
*     DRIVER BY EXECUTING A CONTROL EXEC. CALL WITH A SUBFUNCTION 
*     OF 25B WITH THE FIRST PARAMETER THE ADDRESS OF THE INIT.
*     ENTRY. THIS PROGRAM WILL BE EXECUTED DURING INITIALIZATION
*     AND UPON RECEPT OF EACH DATA INTERRUPT. THE INTERFACE 
*     BETWEEN THE PHYSICAL AND LOGICAL DRIVER IS DISCUSSED
*     IN THE DVS00 PHYSICAL DRIVER MANUAL 12920-94001.
* 
      SKP 
* 
*   THE DRIVER SAVES STATUS INFORMATION IN EQT5 AND EQT19 
*   TO KEEP UP WITH THE DATA TRANSMISSIONS. THE FOLLOWING 
*   INFORMATION IS PROVIDED TO ASSIST IN UNDERSTANDING
* 
*     EQT5
* 
*       BIT 7       BUFFER FLUSH
*       BIT 6       BREAK KEY HIT 
*       BIT 5       END-OF-TAPE STATUS
*       BIT 4       TIME OUT
*       BIT 3       SPEED SENSE MODE - IN PROGRESS
*       BIT 2       BAD COMM LINE 
*       BIT 1       PAUSE MODE (USER INTERRUPTED OUTPUT)
*       BIT 0       TERMINAL IS - ENABLED(1),DISABLED(0). 
      SPC 2 
*     EQT19 
* 
*       BIT 7       READ STALL MODE 
*       BIT 6       NOT USED
*       BIT 5       TIME OUT CAUSED BY GOOD COMPLETION
*       BIT 4       1=READ, 0=WRITE IN PROGRESS (USER REQUEST)
*       BIT 3       0=HARDWIRED, 1=MODEMS ENABLED 
*       BIT 2       BACKSPACE MODE
*       BIT 1       LINE FEED DELAY MODE
*       BIT 0       CARRIAGE RETURN DELAY MODE
      HED  12920B  INITIATION SECTION 
CTABL EQU *         CONTROL JUMP TABLE
      DEF EXINT     - EXIT
      DEF EXINT     - WRITE EOF 
      DEF EXINT     - BACKSPACE RECORD
      DEF EXINT     - FORWARD SPACE RECORD
      DEF EXINT     - REWIND
      DEF STREC     - SET RECEIVE PARAMETERS
      DEF EXINT     - DYNAMIC STATUS
      DEF SEOT      - SET END-OF-TAPE STATUS
      DEF EXINT     - WRITE EOF 
      DEF EXINT     - CLOSE LINE - DOWN THE MODEM 
      DEF CLDLY     - R.LF DELAY
      DEF EXINT     - FORWARD SPACE FILE
      DEF EXINT     - BACKSPACE FILE
      DEF EXINT     - FORM FEED 
      DEF STTRM     - SET SEND PARAMETERS 
      DEF SSM       - SPEED SENSE MODE
      DEF ENAB      - GO ENABLE TERMINAL
      DEF DISAB     - GO DISABLE TERMINAL 
      DEF EXINT     - GO SET TIMEOUT - NON MODEM ONLY 
      DEF KAO       - GO SET BUFFER FLUSH 
      DEF UKAO      - REMOVE BUFFER FLUSH 
      DEF SETLG     - SET LOGICAL DRIVER ADDRESS
      DEF EXINT     - WRITE END OF VALID DATA <EOV> 
      DEF EXINT     - LOCATE ABS. FILE/SPACE N LINES
      DEF LCLOS     - CLOSE LINE - DOWN THE MODEM 
      DEF LOPEN     - LINE OPEN - UP THE MODEM
      DEF EXINT     - UPDATE THE TERMINAL STATUS
* 
*   INITIATION SECTION
* 
      DEC 1926      (R04) REVISION CODE FOR CURIOUS FE'S, SE'S & CE'S 
* 
IS00  NOP           ENTRY FROM IOC
      SFS 0         SAVE INT SYS. STATUS (SPECIAL CASE
      CCA,RSS       OF FIRST ENTRY WITH INT OFF. FROM START-UP ROUTINE) 
      CLA 
      STA CS00      SAVE FOR EXIT 
      CLF 0         DISABLE INTERRUPTS
RTE39 JSB RTE3E     (R02) ENABLE SYSTEM MAP INCASE RTE 3
I.0   JMP I.00      OVERLAYED AFTER FIRST EXECUTION BY "NOP"
* 
* 
I.004 LDB EQT1      GET EQT ADDRESS 1805
      JSB SETP      SET UP INTERNAL EQT'S 1805
      JSB TIMSB     GO SET UNIT,DUNIT,NDUNT, AND CONFG. 
RTE31 JSB RTE3B     COULD BE NOP, IF NOT SAVE STATUS
RTE37 JSB RTE3A     SET UP FOR MAP SWAP.
      LDB EQ18,I    FIRST 
      SZB           ENTRY FOR THIS PORT?
      JMP CONT      NO
      LDA EQT12,I   CHECK FOR 
      ADA DM11      AT LEAST ELEVEN EQT EXTENTIONS
      SSA           1805
      JMP ERROR     NOT ELEVEN, SOMETHINGS WRONG, ABORT.. 
      LDA EQT4,I    GET PORT NUMBER 
      AND B77 
      ADA DM6       YES  SET UP FOR PROGRAM SCHED 
      ADA INTBA 
INTBA EQU 1654B     INTERRUPT TABLE POINTER 
      LDB A,I       GET INTERRUPT TABLE ENTRY 
A     EQU 0 
B     EQU 1 
      CMB,CLE,SSB,INB  ID SEG ADDRESS OR EQT ADDRESS
      CCB,CCE       MUST BE EQT ADDRESS 
      STB EQ18,I    SAVE FOR LATER ENTRY
      LDB EQT1      PUT EQT ADDRESS 
      STB A,I       INTO INTERRUPT TABLE
      LDA EQT4,I
      IOR BIT12     INDICATE WE HANDLE TIMEOUT
      STA EQT4,I
* 
      LDA DSPD      SET DEFAULT SPEEDS
      STA EQT11,I   SET FOR 110 BAUD
      LDA DLCH      SET DEFAULT CHAR
      STA EQ22,I    ECHO,FULL DUPLEX
      JSB CF920     GO SET IN EQT TABLE 
      LDA LOADR     DEFAULT LOGICAL DVR 
      STA EQ17,I    PUT INTO EQT TABLE
      LDA B1201 
      STA EQ26,I
* 
CONT  LDA EQT5,I    GET STATUS
      AND ECLM      CLEAR OLD FIELD 
      STA EQT5,I
      LDA EQT6,I
      LDB EQ17,I    TTY DVR?
      CPB LOADR     ? 
      RAL,CLE,SLA,ERA   YES 
      STA EQT6,I    CLR SYS REQ.
      AND B3
      CPA B3        CONTROL REQUEST ? 
      JMP CNTRL     YES 
* 
      JMP R.W       PREPARE FOR READ/WRITE
* 
DSPD  OCT 101202    DEFAULT XMIT-RCV 110 BAUD 
DM11  DEC -11       1805
      SKP 
      HED CONTROL REQUEST PROCESSING
************************************************* 
*  <CNTRL> DOES CONTROL REQUEST PROCESSING       *
************************************************* 
* 
* 
CNTRL EQU * 
      LDA EQT6,I     GET CONTROL WORD 
      LSR 6          SHIFT
      AND B37        MASK IT
      STA COUNT      SAVE FOR LOG DVR 
      LDB A          SAVE IT
      CPA B24       IS THIS REMOVE FLUSH? 
      JMP CNTR1     YES 
      CPA B31       (R08) LINE OPEN?
      JMP CNTR1     (R08) YES, ALLOW TO EXECUTE ALWAYS
      LDA EQT5,I    NOW CHECK FOR BUFFER FLUSH
      AND BIT7      IN BIT 7
      SZA,RSS 
      JMP CNTR1     NO, PROCESS COMMAMND
      JSB NXQU      YES, GO CHECK 'Q' 
      JMP EXIT      IS FLUSH, IGNORE REQUEST
CNTR1 LDA COUNT 
      ADB NB33       CHECK THE RANGE FOR < 33B
      SSB,RSS 
      JMP ERROR      EXIT 
      ADA TBLAD      DO TABLE LOOKUP
      LDA A,I 
      JMP A,I        AND GO THERE 
TBLAD DEF CTABL      JUMP ADDRESS TABLE 
* 
EXINT LDA EQ17,I    GET INIT ADDRESS
      STA LOGR      SAVE
      LDA COUNT     RETRIVE EXEC SUB FUNCTION 
      LDB EQT1      ADDRESS OF THE EQT
      JSB LOGR,I    GO TO INIT OF LOGICAL DVR 
      JMP EXIT      IMMEDIATE RETURN
      STA DADIR     SAVE DATA AND DIRECTIVE 
      JSB SRTIM     SET LOG TIME IF ANY 
      RAL           READ OR WRITE?
      SSA,RSS       WRITE?? 
      JMP ERROR     UNLEGAL RESPONSE
      JMP SWRIT     START WRITE 
* 
* 
ERROR LDA B2         ILLEGAL REQUEST
      JMP EXIT0    AND RETURN 
* 
*   SET RECEIVE SPEED 
* 
STREC LDA EQT7,I    GET USER PARAMETER
      SZA,RSS       SUPPLIED ?
      JMP ERROR     NO
      AND B377     USE BAUD RATE ONLY 
      ALF,ALF       POSITION
      STA EQ11,I    PUT INTO TEMP LOC.
      JSB CF92B     GO SET SPEED
      LDA EQ24,I    (R05) SEND TO CARD
      JSB OUT       (R05) 
      JMP EXIT      RETURN
* 
*   SET TRANSMIT SPEED
* 
STTRM LDA EQT7,I    GET USER PARAMETER
      SZA,RSS       VALUE SUPPLIED ?
      JMP ERROR     NO
      STA EQ11,I    PUT IN TEMP LOCATION
      JSB CF92B     GO UPDATE SPEED 
      LDA EQ25,I    (R05) SEND TO CARD
      JSB OUT       (R05) 
      JMP EXIT      RETURN
* 
*   KILL OUTPUT 
* 
KAO   LDA EQT5,I    GET STATUS WORD 
      IOR BIT7     SET IGNORE BIT(7)
      STA EQT5,I
      JSB NXQU      SEE IF ANYONE ELSE WAITING
      JMP EXIT      THEN RETURN 
* 
*  REMOVE BUFFER FLUSH
* 
UKAO  LDA EQT5,I    GET STATUS
      AND CMB7      REMOVE BIT 7
      STA EQT5,I    AND RESTORE EQT5
      JMP EXIT      RETURN
* 
NXQU  NOP 
RTE36 JMP GTDMS     NOP IF NOT MAPPED 1805 (1740 RTE) 
CLDSY LDA EQT1,I    ANYONE SUSPENDED?      1740 RTE 
      RAL,CLE,ERA   CLEAR SIGN  1805
TPARI LDA A,I       CONST. 160000B TRANS. WITH PARITY 1805
CHECK SZA           1740 RTE
      JMP NXQU,I    YES; RETURN 
      LDA EQT5,I    NO; CLEAR 
      AND NBIT7       IGNORE BIT 7
      STA EQT5,I
      JMP NXQU,I    AND RETURN
* 
* 
NBIT7 OCT 177577    NOT BIT 7 
B1201 OCT 10001 
B24   OCT 24
B31   OCT 31        (R08) 
DTMSK OCT 140377    (R09) DRIVER TYPE MASK
CMB05 OCT 177700
CMASK OCT 177710
CMB13 OCT 157777
CMB7  EQU NBIT7 
DCLM  OCT 177600
DLCH  OCT 100210    TERM. DEFAULT LP=1,SC=0,SB=0,E=1,P=0,CZ=8 
DM6K  DEC -6000     1805
* 
* 
*    IF IT GETS HERE IT IS MAPPED III/MIII/IV SYSTEM
* 
GTDMS RSA           1740 RTE  GET DMS STATUS REG. 
      ALF,SLA       1740 RTE BIT 12 0\1 SYSTEM\USER 
      RSS           1740 RTE
      JMP CLDSY     1740 RTE  SYSTEM MAP
      XLA EQT1,I    1740 RTE  USER MAP CROSS LOAD 
      RAL,CLE,ERA   CLEAR SIGN  1805
      OCT 101724    1740 RTE XLA A,I IN 2 WORDS 1805
BIT15 DEF A,I       OCTAL 100000  1805
      JMP CHECK     1740 RTE
* 
*   THE ABOVE WORKS ONLY IN 1740 OR LATER RTE SYSTEMS 
* 
* 
*   SET END-OF-TAPE 
* 
SEOT  LDA EQT5,I    FETCH STATUS
      IOR B40       MERGE EOT 
      STA EQT5,I
      JMP EXIT
* 
*   SPEED SENSE MODE
* 
SSM   LDA EQT7,I    GET SEARCH FOR CHAR.
      STA EQ21,I    SAVE IN EQT 
      LDA B2405     (R05) SET REC&XMIT SPEED TO 2400
      STA EQ11,I    PUT IN EQT
      JSB CF92B     SET SPEEDS
      LDA EQ24,I    GET INPUT PRAM
      IOR BIT11     TURN ON AUTO SPEED
      AND CMB12     TURN EHCO OFF 
      JSB OUT       SEND TO MUX 
      LDA EQ25,I    FETCH TRANS PRAM
      AND CMB13     CLEAR INT. ENABLE 
      JSB OUT       DISABLE CHANNEL FOR TRANS 
      LDA EQ26,I    GET STATE WORD
      IOR BIT15     TURN ON 'AS'
      STA EQ26,I    RESTORE 
      LDA EQT5,I    SET 
      IOR B10       STATUS FOR
      STA EQT5,I    SPEED SENSE 
      LDB DM6K      WAIT FOR UP TO 60        1805 
      STB EQ16,I    SECONDS FOR CHARACTER    1805 
      JMP EXIT1    AND RETURN 
* 
*   ENABLE TERMINAL 
* 
ENAB  LDA EQ7,I     GET ENABLE PRAM.
      SZA,RSS       PRAM OF ZERO? 
      JMP ENAB1     YES,DEFAULT TO 100210B,OR PREVIOUS
      STA EQ22,I    SAVE FOR SETUP
      LDA EQ24,I    GET REC PRAMS 
      AND RHALF     GET SPEED 
      ALF,ALF       PUT IN LEFT HALF
      STA B         SAVE
      LDA EQ25,I    GET TRANS PRAMS 
      AND RHALF     GET SPEED 
      IOR B         REC. AND TRANS SPEED
      STA EQ11,I    SAVE FOR NEW EQ24 AND EQ25
      JSB CF920     GO SET UP EQT 
ENAB1 LDA EQ26,I    DEFAULT  (R03)
      AND DM4       TO
      INA           READ
      STA EQ26,I    RESTORE 
      LDA EQ24,I    RECEIVE PRAMATERS 
      JSB OUT       SEND TO MUX 
      LDA EQ25,I    TRANS PRAM
      JSB OUT       TO BOARD
      LDA EQT5,I    SET THE 
      IOR B1        ENABLE BIT NO. 0
      STA EQT5,I    IN STATUS 
      JMP EXIT      (R07) 
* 
*   DISABLE TERMINAL
* 
DISAB LDA EQT1      IS THS THE
      CPA SYSTY     SYSTEM TTY??
      JMP EXIT      YES,CAN'T DOWN THE SYS TTY, IGNORE
      LDA EQT5,I    TAKE OUT THE
      AND DCLM      THE ENABLE BIT NO. 0
      STA EQT5,I    RESTORE 
      LDA BIT15     NO, DISABLE PORT
      JSB OUT 
      JMP EXIT
* 
*  SET THE LOGICAL DRIVER ADDRESS INTO EQ17 
* 
SETLG LDA EQ22,I    (R02) COPY ECHO BIT TO EQ24 
      AND BIT7      (R02) ...FROM EQ 22 
      ALF,RAL       (R02) 
      STA B         (R02) SAVE ECHO BIT 
      LDA EQ24,I    (R02) FETCH...
      AND NBT12     (R02) ...CLEAR BIT 12 
      IOR B         (R02) ...SET UP 
      STA EQ24,I    (R02) ...& STUFF
      LDA EQ7,I     GET ADDRESS 
      SZA,RSS       IS IT ZERO? 
      LDA LOADR     DEFAULT OR RESET TO INTEG. - LOG DVR
      STA EQ17,I    NO, SET IN EQ17 
      CPA LOADR     (R09) DEFAULT LDVR? 
      RSS           (R09) 
      JMP EXIT      NO, RETURN AS IS
      LDA EQT5,I    (R09) YES, SET DRIVER TYPE TO 00
      AND DTMSK     (R09) 
      STA EQT5,I    (R09) 
      JMP EXIT      (R09) NOW RETURN
* 
*   SET R/LF DELAY TIMES
* 
CLDLY LDA EQT7,I    GET PARAMETER 
      AND B377
      ALF,ALF       POSITION & SAVE 
      STA B 
      LDA EQ19,I    GET OLD VALUE 
      AND B377
      IOR B         AND UPDATE
      STA EQ19,I    YES 
      SPC 1 
EXIT  LDA B4        SHOW IMMED COMPL. 
EXIT0 STA ASAVE     SAVE A
      LDA EQ1       CHECK IF THE
      SSA,RSS       MAPS WERE SWAPPED 
      JMP EXIT3     NO
      LDA MAPAD     YES, SWAP BACK
      USA 
EXIT3 LDA ASAVE 
      ISZ CS00      SKIP IF INT SYS OFF ON ENTRY
      STF 0         ENABLE INTERRUPTS 
      JMP IS00,I    AND RETURN
      SPC 1 
* 
*    CLOSE LINE - DISCONNECT MODEM
* 
LCLOS EQU * 
      JSB LCS1      GO CLOSE THE LINE 
      LDA B40       SHOW A GOOD      (BIT 5)
      IOR EQ19,I    1840 DON'T WIPE OUT EQT19 
      STA EQ19,I    COMPLETION
      JMP EXIT1     RETURN
* 
LCS1  NOP 
      LDA BIT15     DISABLE 
      JSB OUT       FOR DISCONNECT
      LDA SCDBS     DISCONNECT. 
      JSB COUT
      LDA EQ22,I    HALF-DUPLEX?
      SSA 
      JMP LCS1F     NO, FULL
      LDA SCDBS     YES, DROP SA, DISABLE 
      JSB COUT2     INTERRUPTS ON SECOND CONT BOARD 
LCS1F LDA BIT12     SIGNAL LINE CLOSE TO TIMPH
      STA EQ26,I     LINE STATUS = 0; DOWN. 
      LDB DM500     DELAY 5 SECONDS FOR MODEM HANGUP,     1805
      STB EQ16,I    THEN COMPLETE LINE CLOSE REQ.    1805 
      JMP LCS1,I
* 
*     PROCESS LINE OPEN REQ.
* 
      SPC 1 
LOPEN EQU * 
      LDA EQ26,I    IS THE LINE IN
      AND BIT12     USE?
      SZA,RSS 
      JMP ERROR     YES,ERROR RETURN
      LDA BIT3      (R08) SET ENABLED 
      IOR EQ19,I    (R08) ..BIT IN STATUS 
      STA EQ19,I    (R08) 
      LDA BIT15     DISABLE 
      JSB OUT       DURING LINE UP
      CLA           SET LINE
      STA EQ21,I    FLAG TO ZERO
      JMP RECOP     YES ALWAYS
      SPC 1 
*   RECEIVE OPTIONS 
      SPC 1 
RECOP EQU * 
      LDA DM4       (R05) SET HDX TURN-AROUND COUNTER 
      STA EQT8,I    (R05) 
      JSB RECX1 
      LDA EQ7,I     (R02) SET LOGICAL TIMER...
      SSA           (R02) .. IF PARAM1 IS NEG.
      STA EQ12,I    (R02) 
      JMP EXIT1 
* 
RECX1 NOP 
      LDA B20       SET TRANSITION STATE TO RECEIVE 
      IOR BIT12     SIGNAL LINE OPEN TO TIMPH 
      STA EQ26,I
      LDA EQ22,I
      SSA           103 MODEM-HW
      JMP RECO1     YES 
      LDA SCDAB     NO, 202 MODEM HALF DUPLEX 
      JSB COUT      A=CD UP AND CA DOWN 
      LDA SSAF      RAISE SA AND ENABLE FOR CB
      JSB COUT2     EQUAL TO ZERO 
      JMP RECX1,I   CONTROL REQ. INITIATED
RECO1 EQU *         ECHO PLEX 
      LDA SCDCA     A= CD & CA UP (ECHOPLEX)
      JSB COUT      OUTPUT TO CONTROL BOARD 
      JMP RECX1,I   CONTROL REQ. INITIATED. 
      SPC 1 
*  SEND OPTION
      SPC 1 
* 
SENXP NOP 
      LDA B40       SET TRANSITION STATE TO TRANSMIT
      IOR BIT12     SIGNAL LINE OPEN TO TIMPH 
      STA EQ26,I
      LDB EQ22,I
      SSB,RSS       FULL DUPLEX? (103 MODEM)
      JMP SENXQ     NO
      LDA SCDCA     YES, CD,CA=1 ENAB CC,CF=0 
      JSB COUT
      JMP SENXP,I 
SENXQ LDA SCDAS     RAISE CD,CA, DIS. CF,ENABL CC 
      JSB COUT      OUT TO MUX CONT #1
      LDA SSAB      NO. 202 MODEM 
      JSB COUT2     OUTPUT SA DOWN TO MUX BOARD # 2 
      JMP SENXP,I 
* 
SCDBS OCT 140300    LOWER CD,CA & INH. ALL INTERRUPTS 
SCDCA OCT 140374    RAISE CD,CA (ECHOPLEX 103,HALF DUX SEND 202)
      SPC 1 
      HED  12920A-B  READ WRITE REQUEST PROCESSING
*   READ/WRITE REQUEST PROCESSOR
* 
R.W   LDB EQT5,I    GET STATUS
      BLF,BLF       CHECK BIT 7 
      SSB           IGNORE ?
B10   SLA           ONLY IF WRITE 1805 ALSO CONSTANT (10B)
      JMP R.1       CAN'T IGNORE
      JSB NXQU      SEE IF ANYONE ELSE WAITING
      JMP EXIT
* 
R.1   EQU * 
      LDA EQT5,I    SINCE THIS IS AN INPUT REQUEST, 
      AND CMB7      CLEAR THE BUFFER FLUSH BIT
      STA EQT5,I    IN CASE IT MIGHT BE SET 
      LDA EQ19,I    CLEAR STATUS AND
      AND CMASK     (R08) COMPLETION BITS 
      LDB EQT6,I    (R04) SET R/W FLAG
      SLB           (R04) 
      IOR BIT4      (R04) FOR PAUSE CODE
      STA EQ19,I    RESTORE 
      LDA EQT7,I    GET BUFFER ADDRESS
      CLE,ELA       MAKE BYTE POINTER 
      STA EQT9,I
      LDA EQT8,I    GET BUFFER LENGTH 
      SSA           WORDS OR CHARS? 
      JMP CHARS 
      CLE,ALS       WORDS TO CHARS
      CMA,INA 
CHARS STA EQT10,I   SAVE AS COUNTER 
* 
      LDA EQT6,I    GET REQUEST 
      LDB EQ17,I    GET LOG DVR ADRESS
      ADB B2        BUMP
      SLA,RSS 
      ADB B2        GO TO WRITE 
      STB LOGR      SAVE
RTE38 JSB RTE3C     SWAP MAPS 
      CCA 
      LDB EQ1       ADDRESS OF EQT
      JSB LOGR,I    GO GET FIRST CHAR 
      JMP ERROR     UNACCEPTABLE RESPONSE 
      STA DADIR     SAVE CHAR 
      JSB SRTIM     GO SET TIMER, IF ANY
      RAL,SLA       BIT 15 ON 
      JMP SREAD     FOR START READ
      SSA           BIT 15 FOR
      JMP SWRIT     START WRITE 
      JMP ERROR     NOT LEGAL HERE
* 
EXIT1 JSB E15ST     SET EQT 15 TO RIGHT VALUE 
EXIT2 CLA           FOR CONT, RETURN
      JMP EXIT0 
      SKP 
* 
* 
* 
RTE3A NOP 
      LDX DUNIT    SAVE PORT # IN "X" REGISTER
      CLA          OK TO USE X-REG. SINCE RTE-III IS SAVING IT
      SAX MAPTB    CLEAR PORT# ENTRY IN CASE USER MAP IS NOT USED 
      LDB EQT1,I   GET LINKAGE TO SUSPENDED PROCESS 
      RBL,CLE,ERB   CLEAR SIGN 1805 
      INB          POINT TO CONWD 
      LDA B,I      GET CONWD
      RAL          SAVE "T-FIELD"IN BIT 15 AND 0
      CMA,SSA,SLA,RSS I/O TYPE = CLASS,BUFFERED, OR SYSTEM
      JMP RTE3A,I  YES!  THEN USE SYSTEM MAP
      INB          POINT TO BUFFER ADDRESS IN CALLER'S QUEUE
      LDA B,I      NOTE!  NOT BUFFER ADDRESS IN EQT 7 
      SSA          IS THIS REIO REQUEST, OR OTHER BUFFER IN "SAM" 
      JMP RTE3A,I  YES THEN USE SYSTEM MAP
* 
*      NOTE THAT USING SYSTEM MAP (REIO ETC.) WILL BE MORE
*      EFFICIENT IN THE PRIVILEGED SECTION OF THIS DRIVER 
* 
      LDA EQT1,I   GET CURRENT USERS ID SEGMENT ADDRESS 
      RAL,CLE,ERA   CLEAR SIGN 1805 
      SAX MAPTB    AND SAVE AS NON-ZERO ENTRY IN MAP-TABLE
      JMP RTE3A,I 
* 
*   RTE3E:  ENABLE SYSTEM MAP.  IF RTE-III SYSTEM AND USER TERM. IS 
*           NOT BUFFERED, SYSTEM WILL ENTER IS00 & CS00 WITH USER 
*           MAP ENABLED.  IF USER HAS NOT DECLARED SSGA DURING PGM LOAD,
*           LOGICAL DRIVERS RESIDING IN SSGA CANNOT BE ACCESSED WITH
*           USER MAP ENABLED. (SYSTEM GOES SPLAT)  ENABLING SYSTEM MAP
*           SIMULATES "M" BIT (RTE-IV) SO EVERYTHING WILL EXIST.
*           THIS ROUTINE IS (R02) 
* 
RTE3E NOP           (R02) ENABLE SYSTEM MAP 
      SJP RTE3E,I   (R02) ..AND RETURN
* 
* 
*  CONFG - CONFIGURES THE OUTPUT INSTRUCTIONS FOR THE 
*           OUTPUT SUBROUTINES. 
* 
*           CALLING SEQUENCE:  JSB CONFG
      SPC 1 
CONFG EQU * 
      NOP 
      LDA SAVSC 
      IOR OTACC     CONFIGURE  1805 
      CPA OTA10     SEE IF CONFIGURED 1805
      JMP CONFG,I   RETURN 1805 
      STA OTA10       ALL 
      INA               OTA 
      STA OTA20           INSTRUCTIONS. 
      INA 
      STA OTA30 
      INA 
      STA OTA40 
* 
      LDA SAVSC     CONFIGURE 
      IOR STCAC       STC   1027XX    1805
      STA STC10         INST. 
      ADA B3601       LIB   1065XX+1  1805
      STA LIB20     CONFIGURE 
      STA LIB21      LIB INSTRUCTIONS 
      XOR B5200     FORM STC,C  1037XX+1  1805
      INA           BUMP IT 1 1805
      STA STCF3 
      INA 
      STA STCF4 
      JMP CONFG,I      RETURN.
      SPC 2 
      SPC 1 
OTACC OTA 0 
STCAC STC 0 
B3601 OCT 3601      1805
B5200 OCT 5200      1805
B2405 OCT 2405      (R05) 
      SKP 
      SPC 2 920,I   RETURN.  CHAR.R S.OMPLETED. ITS.A WAY T ENTRY TS.  REQ.)
*  COUT2 OUTPUTS CONTROL PARAMETERS TO THE 2ND CONTROL BOARD. 
      SPC 1 
COUT2 EQU * 
      NOP 
      IOR UNIT      INSERT UNIT # 
OTA40 OTA SC+3      4TH BOARD (2ND CONTROL BOARD) 
STCF4 STC SC+3,C
      JMP COUT2,I 
      SPC 2 
*  COUT OUTPUTS CONTROL PARAMETERS TO THE 1ST CONTROL BOARD.
      SPC 1 
COUT  EQU * 
      NOP 
      IOR UNIT
OTA30 OTA SC+2      CONTROL BOARD # 1 
STCF3 STC SC+2,C
      JMP COUT,I
      SPC 2 
*  OUT - TRANSMITS 16 BITS TO THE MUX BOARD.
      SPC 1 
OUT   EQU * 
      NOP 
LIB20 LIB SC+1      CHK SEEKING.
      SSB           OK TO SEND? 
      JMP LIB20     NO. WAIT. 
OTA10 OTA SC        OUTPUT DATA/PARAMETERS. 
      LDA UNIT
OTA20 OTA SC+1      SEND UNIT #.
STC10 STC SC        INITIATE TRANSFER.
      JMP OUT,I 
      SPC 2 
*  CHAR - TRANSMIT A CHARACTER
      SPC 1 
CHAR  EQU * 
      NOP 
      IOR EQ20,I    ADD STOP BITS.
      JSB OUT       SEND CHAR TO MUX BOARD. 
      JMP CHAR,I
      SPC 2 
*  THIS SUBR OUTPUTS THE A-REGISTER TO THE CONTROL
*  BOARD CURRENTLY INTERRUPTING. ALLOWS INHIBITING INTERRUPTS.
      SPC 1 
OUTCC EQU * 
      NOP 
OCCSC OTA SC
STCSC STC SC,C
      JMP OUTCC,I 
      SPC 2 
CISUB EQU * 
      NOP 
      JSB SRSCU 
      LDA SAVSC 
      IOR OTACC 
      STA OCCSC 
      IOR STCF0     1805   1037XX 
      STA STCSC 
      LDA DUNIT 
      JMP CISUB,I 
* 
STCF0 STC 0,C       1805
      SPC 2 
      SKP 
*  *** CONTINUATION SECTION *** 
* 
*   AT THIS POINT A TIMEOUT HAS OCCURED ON THE BASE EQT15 
*   CLOCK. EITHER THE LOGICAL OR PHYSICAL TIME VALUES ARE BUMPED
*   IF ENABLED. IF EITHER TIMES OUT, CONTROL IS PASSED TO THE 
*   RESPECTIVE TIMEOUT PROCESSOR. IF NEITHER IS ENABLED, THEN 
*   THE NORMAL TIMEOUT PROCESSING OCCURS.  THE PHYSICAL TIMER 
*   TAKES PRECEDENCE OVER THE LOGICAL TIMER.  THE LOGICAL TIMER 
*   WILL BE STARTED IF THE PHYSICAL TIMER IS NOT ENABLED. 
*   TIMEOUT IS THE  METHOD PRIVILEGED ROUTINE 
*   HANDLES I/O COMPLETION. 
* 
CS00  NOP           INTERRUPT ENTRY 
      CLF 0 
RTE40 JSB RTE3E     (R02) ENABLE SYSTEM MAP 
      LDB EQT1      SET UP THE INTERNAL EQTS 1805 
      JSB SETP      1805
      LDA EQT1,I    IS A
      RAL,CLE,ERA   CLEAR SIGN 1805 
      SZA           PROGRAM WAITING ? 
      JMP C.1       YES 
      STA EQT15,I   DISALLOW TO 
      LDA EQ24,I    PASS SPEED TO 
      AND B377
      STA EQT6,I    SCHEDULED PROGRAM 
      LDA EQ21,I    GET CAUSING 
      STA EQT7,I    CHAR AND SAVE 
      JSB SCHED     GO SCHEDULE 
      JMP C.2       AND EXIT
* 
C.05  EQU * 
      LDB EQ16,I    LOOK AT PHYSICAL TIMER  1805
      SZB           ENABLED 1805
      ISZ EQ16,I    YES - BUMP  1805
      RSS           NOT TIMED OUT YET 1805
      JMP TIMPH     YES - TIMED OUT 1805
* 
      LDA EQT12,I   IS LOGICAL TIME ENABLED 
      SZA 
      ISZ EQT12,I   YES, BUMP, IS IT TIMED OUT??
      RSS           NO CONTINUE 
      JMP TIMRT     YES PROCESS LOG. T.O. 
      LDA EQT12,I   IS EITHER  1805 
      IOR EQ16,I    TIMER ENABLED? 1805 
      SZA 
      JMP C.2B      (R07) YES, CONTINUE 1805
      STA EQT15,I   CLEAR BASE CLOCK
      JMP C.11
C.2B  LDA EQ19,I    (R08) MODEMS ENABLED? 
      AND BIT3      (R08) 
      SZA,RSS       (R08) WELL? 
      JMP C.2A      (R08) NO, LINE CONSIDERED GOOD
      LDB EQ21,I    (R07) CHECK FOR BAD LINE
      RBL           (R07) 
      SSB,RSS       (R07) 
      JMP C.2A      (R07) LINE OK.  CONTINUE
      JSB E15ST     (R07) LINE BAD. ABORT 
      JMP TMOUT     (R07) 
C.1   LDA EQT5,I    GET STATUS
      AND B100      CHECK FOR 
      SZA,RSS       BREAK KEY HIT 
      JMP C.05      NO   CONTINUE 
      JSB SCHED     GO SCHEDULE 
      JMP C.12      COMPLETE
* 
C.11  EQU * 
      LDA EQ19,I     GET STATUS 
      AND B40 
      SZA,RSS       END OF RECORD?
      JMP TMOUT     NO
* 
*  I/O COMPLETION PROCESSOR 
* 
C.12  EQU * 
      LDA EQ19,I    CLEAR 
      AND NBIT5      OLD
      STA EQ19,I      STATUS
      LDB EQT6,I    GET TLOG
      LDA EQT5,I    GET STATUS
      AND ECLM      CLEAR OLD STUFF 
      SZB,RSS       ZERO TLOG ? 
      IOR B40       YES SET EOT 
      STA EQT5,I    SAVE IN EQT 
      CLA           SHOW COMPLETION 
CEX.2 STF 0 
      JMP CS00,I    AND RETURN
* 
TMOUT EQU * 
      LDA EQ21,I    LOOK FOR LINE 
      AND BIT14     STATE IN BIT 14 
      ALF           PUT INTO BIT 2
      SZA           (R08) BAD?
      IOR BIT7      (R08) YES, SET FLUSH
      STA B         SAVE IN B 
      LDA EQT5,I    GET STATUS
      AND ECLM      CLEAR IT
      IOR B         BIT 2/7 -BAD LINE IF ON 
      IOR B20       BIT 4 -TIME OUT 
      STA EQT5,I   RESTORE
      CLB           ZERO TRANSMISSION LOG 
      LDA EQ22,I    LOOK AT THE DON'T 
      AND BIT13     DOWN BIT
      SZA           DOWN OR NOT?
      CLA,RSS       NO
      LDA B4        NOTIFY OPR AND PROGRAM
      JMP CEX.2     RETURN
* 
NBIT5 OCT 177737
      SKP 
* 
*   SCHEDULER 
* 
SCHED NOP 
      LDB EQT1
      CPB SYSTY     CHECK FOR SYSTEM CONSOLE
SYSTY EQU 1675B 
      RSS 
      JMP C.13      NO WE ARE NOT 
      ISZ OPATN     SET OPERATOR ATTN FLAG
OPATN EQU 1734B 
      JMP SCHED,I   AND RETURN
C.13  EQU * 
      LDA EQT5,I    IS TERMINAL ENABLED?
      SLA,RSS 
      JMP SCHED,I   NO,IGNORE 
      LDB EQ18,I    GET ID SEG ADDR 
      SZB           INITIALIZED ? 
      SSB           IS IT SET UP? 
      JMP SCHED,I   CAN'T SCHEDULE
      STB SCH       YES, PUT IN CALL
      LDB EQT4      SET POINTER TO EQT4 
      STB SCH1      FOR PROGRAM TO DETERMINE PORT CAUSING SCHEDULE
      JSB $LIST     MAKE SCHEDULE CALL
      OCT 601       1740 RTE
SCH   NOP          ID SEGMENT ADDRESS 
SCH1  NOP      1740 RTE  EQT4 ADDRESS 
      JMP SCHED,I 
* 
*   CONTINUATOR RETURN
* 
C.2A  JSB E15ST     SET UP EQT15 1805 
C.2   ISZ CS00      INCREMENT EXIT
      STF 0         ENABLE INTERRUPTS 
      JMP CS00,I    AND RETURN
* 
      HED  LOGICAL TTY DRIVER - READ
* 
*   THIS IS A DEFAULT TTY DRIVER
*   AND IS USED IF NO OTHER WAS SET UP
* 
LODVR NOP 
      JMP LINIT     INITIALIZE
      SPC 1 
LRRET NOP           LOGICAL READ
      JMP LREAD 
      SPC 1 
LWRET NOP           LOGICAL WRITE 
      JMP LWRTE 
      SPC 1 
LINIT CLA           CLEAR A FOR RETURN
      CLB 
      JMP LODVR,I   THIS DVR DOSEN'T HANDLE SUB FUNCT.
* 
* 
* 
LREAD EQU * 
      STA ASAVE     SAVE A
      CPA DM1       FIRST TIME??
      RSS           YES 
      JMP LREDC     NO PROCESS CHAR 
      LDA BIT15     START READ
      JMP RTNR
LREDC AND B177      MASK CHARACTER
      STA CH        SAVE IT 
      LDA ASAVE     LOOK FOR BAD LINE 
      SSA           LOGICAL TIME OUT? 
      JMP RTNR1     YES 
      AND B60T      OR DATA ERROR.
      SZA           OR  LINE ERROR
      JMP RTNR1     LOOKS BAD, EXIT TELL OPR. PRG 
      LDA EQ19,I    (R04) GET STATUS
      AND BIT4      (R04) CHECK R/W FLAG
      SZA,RSS       (R04) SKIP IF NOT WRITE 
      JMP PAUSE     CHECK FOR PAUSE 
      LDA CH        GET CURRENT CHARACTER 
      SZA           NULL ?
      JMP P.55      NO
      LDB EQ7,I     CHECK FOR 
      CLE,ELB       FIRST 
      CPB EQ9,I     CHARACTER 
      JMP RTNR0     YES , IGNORE
P.55  EQU * 
      CPA RETN      CARRIAGE RETURN ? 
      JMP EOL       YES; GO PROCESS END OF RECORD 
* 
      CPA RUB       RUBOUT? 
      JMP P.61
      CPA LF        LINE FEED?
      JMP RTNR0     YES IGNORE
      CPA B10       BACKSPACE??(10)?    1805
      JMP P.7 
      CPA BS        CNTRL-H??(31) 
      JMP P.7 
      CPA CA        CONTROL/A(1)? 
      JMP P.7 
      CPA CONTD     CONTROL/D??(4)? 
      JMP P.80
      CLB           CHECK FOR 
      CPB EQ10,I    BUFFER FULL 
      JMP RTNR0     ITS FULL; IGNORE
* 
*      STORE CHARACTER IN USER BUFFER 
* 
      LDB EQ9,I     GET CURRENT POSITION
      CLE,ERB       MAKE BYTE POINTER 
      ISZ EQ9,I     BUMP TO NEXT
      SEZ,RSS       LEFT OR RIGHT?
      ALF,ALF       LEFT
      STA CH        SAVE
      LDA B377      GET MASK
      SEZ 
      ALF,ALF 
      STA BSAVE     SAVE TEMP 
      JSB MAPRD     CROSS MAP I-O 
      AND BSAVE     FROM BUFFER 
      IOR CH        NEW CHAR
      JSB MAPWR     TO BUFFER 
      ISZ EQ10,I    BUMP BYTE COUNT 
      JMP RTNR0 
* 
*     READ RETURN TO PHYSCIAL DRIVER
* 
RTNR0 CLA 
RTNR  LDB EQ14,I
      ISZ LRRET     BUMP FOR GOOD RET 
RTNR1 JMP LRRET,I   RETURN
* 
CH    BSS 1         CURRENT CHAR. 
ASAVE NOP 
BSAVE NOP 
* 
*    THIS IS A TABLE - DO NOT REARRANGE 
* 
SPNTR DEF *+1       SPEED POINTER FOR DIAG. CHANNELS(16-20) 
      OCT 13        1200 BAUD 
      OCT 27        600 BAUD
B300  OCT 57        300 BAUD
B150  OCT 137       150 BAUD
B110  OCT 202       110 BAUD
* 
*   END OF BAUD TABLE 
* 
EQT0  NOP           ADDRESS OF EQT FOR PORT #0
EQTA  EQU 1650B     ADDRESS OF FIRST SYSTEM EQT ENTRY 
RETN  OCT 15        CARRIAGE RETURN 
LF    OCT 12        LINE FEED 
D10   EQU LF
RUB   OCT 177       RUBOUT
B177  EQU RUB 
B17   OCT 17        1805
BA    EQU B150      BACK ARROW (137B) 1805
BS    OCT 31        BACKSPACE 
B1    OCT 1         1805
CA    EQU B1        CONTROL/A 
B4    OCT 4         1805
CONTD EQU B4        CONTROL/D 
SLASH EQU B300      / 
B60T  OCT 60000 
BIT4  OCT 20        (R04) 
BIT3  OCT 10        (R08) 
* 
* CROSS MAP READ IF EQ1 IS NEG, ADDRESS IN B. 
* 
MAPRD NOP 
      LDA EQ1       CHECK FOR NEG 
      SSA 
      JMP *+3       DO CROSS LOAD 
      LDA B,I       STANDARD LOAD 
      JMP MAPRD,I 
      XLA B,I       FROM USER MAP 
      JMP MAPRD,I 
* 
* WRITE TO USER MAP IF EQ1 NEG. ADDRESS IN B. 
* 
MAPWR NOP 
      STA BSAVE 
      LDA EQ1       WERE MAPS SWAPPED?
      SSA 
      JMP *+4       YES 
      LDA BSAVE     NO
      STA B,I 
      JMP MAPWR,I 
      LDA BSAVE 
      XSA B,I       CROSS STORE 
      JMP MAPWR,I 
      HED LOGICAL TTY DRIVER - WRITE
* 
*   RUBOUT PROCESSOR
* 
P.6   EQU * 
      STB EQ6,I     CLEAR RUBOUT FLAG 
      LDA EQ7,I     RESET CURRENT BUFFER ADDRESS
      RAL           FOR RE-INPUT
      STA EQ9,I 
      LDA EQ8,I     RESET 
      SSA 
      JMP P.60      BUFFER
B60   CLE,ALS       1805 USED AS CONSTANT (60B) 
      CMA,INA       LENGTH
P.60  STA EQ10,I
      LDA BIT15     START READING 
      JMP RTNW      AGAIN 
* 
P.61  LDA EQ6,I     SET FLAG TO 
      IOR BIT15      SHOW RUBOUT IN 
      STA EQ6,I      PROCESS
      CLA           CLEAR CHAR COUNT
      STA EQ10,I    TO DUMMY OUTPUT 
      LDA SLASH     GET SLASH 
      IOR BIT14     START WRITE 
      JMP RTNR      RET TO P.D. 
* 
*   BACKSPACE PROCESSOR 
* 
P.7   LDA EQ7,I     IF BUFFER EMPTY 
      RAL           IGNORE
      CPA EQ9,I     BACKSPACE 
      JMP P.61
* 
      CCA 
      ADA EQ9,I     DECREMENT BYTE
      STA EQ9,I     POINTER 
      CCA 
      ADA EQ10,I    DECREMENT 
      STA EQ10,I    LENGTH
      LDA EQ22,I    (R03) SMART BACKSPACE?
      ALF,SLA       (R03) 
      JMP P.71      (R03) YES, BS ALREADY ECHO'D, RETURN
      LDA EQ19,I    BACKSPACE MODE
      IOR B4         SET BIT 2
      STA EQ19,I
      LDA BA        OUTPUT A BACK ARROW OR UNDERBAR 
      IOR BIT14     START WRITE 
      JMP RTNR      AND RETURN TO P.D.
P.71  CLA           (R03) WAIT FOR NEXT CHAR
      JMP RTNR      (R03) 
* 
* 
*   END OF INPUT PROCESSOR
* 
EOL   EQU * 
      LDB EQ9,I     IF ODD
      CLE,ERB       # OF
      JSB MAPRD     CHARACTERS
      AND B1774     INPUT, SET
      IOR B40       BLANK IN
      SEZ           LOWER HALF
      JSB MAPWR     OF LAST WORD
* 
      LDA EQ10,I    GET INPUT COUNT 
      LDB EQ8,I     AND REQUESTED LENGTH
      SSB 
      JMP P.8       REQUESTED CHARACTERS
      BLS 
      ADB A 
      SLB,BRS 
      INB 
      JMP P.8A
P.8   CMB,INB 
      ADB A 
P.8A  STB EQ6,I     STORE TRANSMISSION LOG
      LDB B200      (R03) READ FLAG 
      JSB CD        SET CR DELAY MODE 
      LDA BIT14     SET START WRITE 
      IOR B177      OUT DEL TO TURN LINE AROUND 
      JMP RTNR      RETURN TO PHYSICAL DVR
* 
P.80  EQU * 
      JSB GEND      GOOD END
      CLA           ZERO
      STA EQ6,I     TLOG
      JMP RTNR1     RETURN TO P.D. FOR COMPLETION 
* 
*   INDICATE A GOOD COMPLETION, SET BIT 
*   5 OF EQT 19, FOR PHYSICAL DRIVER. 
* 
GEND  NOP 
      LDA EQ19,I    GET EQT 19
      IOR B40       SET BIT 5 
      STA EQ19,I    RESTOTR 
      JMP GEND,I    RETURN
* 
* 
B1774 OCT 177400
NBT12 OCT 167777    (R02) NOT-BIT-12
LHALF EQU B1774 
B200  OCT 200 
B400  OCT 400 
DMASK OCT 177574    (R02) 
BIT8  EQU B400
      SKP 
* 
*   OUTPUT SECTION
* 
LWRTE EQU * 
      STA SAVEA     SAVE FOR INIT. CHECK
      CPA DM1       FIRST TIME??
      CLA           YES 
      ALF,SLA       IS IT BREAK?? 
      JMP BREAK     BIT-12, YES. BREAK
      JMP P.92      STATUS OK?.YES; CONTINUE
BREAK LDA EQ5,I 
      STA B 
      AND DM3       CLEAR PAUSE BIT 
      IOR B100      SET BREAK STATUS
      STA EQ5,I 
      LDA EQ21,I    CLEAR THE 
      AND CMB12     BREAK FLAG
      STA EQ21,I    AND RESTORE 
      RBR,SLB       PAUSE MODE ?
      JMP P.92      YES   RESTART OUTPUT
      JMP PAUS1     RETURN FOR CONT TO P.D. 
* 
PAUSE LDA EQ5,I     GET STATUS
      XOR B2        INVERT PAUSE FLAG 
      STA EQ5,I 
      RAR,SLA       ALREADY WAITING ? 
      JMP RTNR0     NO-WE WILL WAIT NOW 
      LDA BIT14     YES,START WRITE AGAIN 
      JMP RTNR      WITH A SYNC CHAR
PAUS1 LDA BIT13     THIS IS A NOP 
      JMP RTNW0     UNTIL THE NEXT REC INT
P.92  EQU * 
      LDA SAVEA     RESTORE A 
      CPA DM1       IS THIS THE FIRST TIME??
      JMP P.93      YEP..  IGNORE LINE CHECK
      RAL,SLA       LOGICAL TIME-OUT? 
      JMP RTNW1     YES 
      SSA           LOOK FOR BAD LINE 
      JMP RTNW1     RETURN TO SYSTEM AND TELL THEM. 
P.93  LDA EQ5,I     (R02) PAUSE MODE? 
      RAR,SLA       (R02) 
      RSS           (R02) 
      JMP *+4       (R02) NO
      LDA BIT13     (R03) YES, IGNORE INT.
      CLB           (R03) 
      JMP RTNW      (R02) WAIT FOR "GO" FROM READ INT.
      LDA EQ19,I    BACKSPACE MODE? 
      AND B4        LOOK FOR
      SZA,RSS 
      JMP P.94      NO, CONTINUE
      XOR EQ19,I    YES,BACKSPACE MODE
      STA EQ19,I    KNOCK OUT BIT 2 
      LDA BIT15     START READ
      JMP RTNW      UPON RETURN 
P.94  LDA EQ19,I     CHECK FOR R/LF DELAY MODE
      AND B3        CHECK FOR STALL 
      SZA 
      JMP STALL     WE MUST DELAY 
      CPA EQ10,I    BUFFER EMPTY ?
      JMP EOR       YES; OUTPUT END OF RECORD 
P.95  LDB EQ9,I     GET BYTE POINTER
      ISZ EQ9,I 
      CLE,ERB 
      JSB MAPRD     GET NEXT CHARACTER
      SEZ,RSS 
      ALF,ALF 
      AND B177
      ISZ EQ10,I    END OF BUFFER 
      JMP RTNW      NO, CONTINUE
      CPA BA        YES; BACK ARROW?
      RSS           YES OMIT R/LF 
      JMP RTNW      OUTPUT CHARACTER
      LDA EQ8,I     GET TRANSMISSION
      SSA           LOG AND 
      CMA,INA       MAKE POSITIVE IF NEEDED 
      STA EQ6,I 
      JSB GEND      TELL P GOOD END 
      JMP RTNW1     FORCE TIMEOUT 
* 
CD    NOP 
      LDA EQ19,I    GET CR DELAY
      ALF           (R02) COUNT 
      AND B17 
      CMA 
      STA EQ10,I
      LDA EQ19,I    SET 
      AND DMASK     (R02) CR DELAY
      IOR B         (R02) PUT IN FLAG 
      INA           MODE
      STA EQ19,I    IN STATUS 
      JMP CD,I
* 
*   END OF OUTPUT PROCESSOR 
* 
EOR   CLB           (R02) WRITE FLAG
      JSB CD        SET UP EQT FOR STALL
      LDA RETN      SEND CR 
RTNW  LDB SAVEA     IS THIS INIT.?? 
      CPB DM1 
      IOR BIT14     YES, START WRITE
RTNW0 LDB EQ14,I
      ISZ LWRET     RET TO P.D. 
RTNW1 JMP LWRET,I 
* 
      SKP 
* 
*   STALL PROCESSING
* 
STALL ISZ EQ10,I    BUMP STALL COUNT
      JMP P.14      CONTINUE STALL
      LDA EQ19,I    GET STATUS
      SLA,RSS 
      JMP P.13      LINE FEED DELAY SO FINISHED 
      INA           SWITCH
      STA EQ19,I    TO LINE 
      ALF,ALF       (R02) DELAY 
      ELA,RAR       (R03) SET E=READ/WRITE FLAG 
      AND B17 
      CMA           LF DELAY COUNT
      STA EQ10,I    AND SET COUNTER 
      LDA EQ24,I    IS THE ECHO 
      CMA           BIT, BIT 12 OFF?
      AND BIT12 
      SZA,RSS       (R03) 
      JMP *+3       (R03) ECHO ON 
      LDA BIT12     (R03) DOING READ? 
      SEZ,RSS       (R03) 
      LDA LF        (R03) NO, OUTPUT LF 
      JMP RTNW      RETURN TO P.D.
* 
P.13  EQU * 
      LDA EQ19,I
      AND DM4       CLEAR DELAY MODES 
      STA EQ19,I
      LDB EQ6,I     CHECK RUBOUT FLAG 
      RBL,CLE,SLB,ERB 
      JMP P.6       WE GOT RUBOUT 
      JSB GEND      TELL P. GOOD END
      JMP RTNW1     WRITE; FORCE T/O
P.14  EQU * 
      LDA BIT12     SEND NULL 
      JMP RTNW      RETURN TO WRITE 
      HED  12920A-B   TABLES AND CONSTANTS
* 
*   TABLES AND CONSTANTS
* 
UNIT  BSS 1         CURRENT PORT
SAVSC BSS 1        SELECT CODE
LOADR DEF LODVR 
IS00A DEF IS00
SC    EQU 10B         DUMMY SC, RE-DONE BY CONFG AND A INTER. 
SPEED NOP           SENSED SPEED OF CURRENT PORT
COUNT OCT 0         GENERAL COUNTER 
B20   OCT 20
CMB12 OCT 167777
BIT7  OCT 200 
BIT11 OCT 4000
BIT12 OCT 10000 
BIT13 OCT 20000 
BIT14 OCT 40000 
B2    OCT 2 
B3    OCT 3 
B5    OCT 5 
B7    OCT 7         1805
B37   OCT 37
B40   OCT 40
B77   OCT 77
B100  OCT 100 
B377  OCT 377 
RHALF EQU B377
ECLM  OCT 177601
NB33  OCT -33 
DM1   DEC -1
DM4   DEC -4
DM500 DEC -500       1805 
      SPC 2 
SSAB  OCT 140114    LOWER SA FOR HALF DUPLEX SEND.
SCDAB OCT 140334    RAISE CD & LOWER CA - 202 RECEIVE.
SCDAS OCT 140365    SUPPRESS CF INTERRUPTS. 
SSAF  OCT 140134    RAISE SA ENABLE FOR CB AND SB=0.
* 
RPARI OCT 120000    1805
SBITP DEF *+1       STOP BIT ADDRESS 1805 
      OCT 43400     1805 EVEN OR NO PARITY
      OCT 43600     1805 ODD PARITY 
      SPC 2 
* 
*   SET UP THE EQT FOR 12920A-B 
* 
CF920 EQU * 
      NOP 
      LDB SBITP     ADDR OF STOP BITS 
      LDA EQ22,I
      AND B60 
      STA SAVEX     SAVE PARITY ITEM
      CPA B20       ODD PARITY? 
      INB           YES BUMP TO S.B. OF 43600B
      CPA B60       PAD BIT 7 ??
      INB           YES 
      LDA B,I       GET S.B. WORD 
      STA EQ20,I    SAVE DEVICES STOP BITS. 
      LDA EQ22,I
      AND B17       CALC. 
      ADA B2         1 START AND 1 STOP BIT.
      STA B 
      LDA EQ22,I
      AND BIT8      LOOK FOR STOP BITS
      SZA            2 STOP BITS? 
      INB            YES. 
      LDA SAVEX      NO. ONE. CHK PARITY. 
      SZA            PARITY ON? 
      INB            YES. 
      STB A 
      ADA DM1 
      AND B7        SAVE 3 BITS ONLY. 
      ALF,ALF           LENGTH
      STA EQ24,I    SAVE CHAR LENGTH
      LDB SAVEX 
      CPB B60 
      JMP *+3 
      SZB           PARITY ON ? 
      IOR BIT12     YES. PARITY PARAMETER.
      IOR TPARI     SET TRANSMIT AND PARAMETER BITS.
      STA EQ25,I    SAVE PARTIAL TRANS/PARM NO. 
      LDB EQ22,I    GET DIRECTOR
      LDA EQ24,I    GET REC PRAM
      BLF,BLF       LOOK AT SIGN
      SSB           FOR ECHO??
      IOR BIT12     YES 
      IOR RPARI     PUT IN REC ENAB BITS
      STA EQ24,I    RESTOR TO EQT 
      JSB CF92B     GO SET SPEED
*  OUTPUT PARAMETERS COMPLETED. 
      CLA 
      STA EQ21,I
      STA EQ23,I
      STA EQ16,I    INITIALIZE OTHER
      STA EQ12,I       COUNTERS 
      JMP CF920,I   RETURN. 
* 
*   SET THE SPEED PRAMETERS AND ECHO
* 
CF92B EQU * 
      NOP 
      LDA EQ11,I    FIND TRANSMIT 
      AND B377       SPEED
      SZA,RSS       ANYTHING THERE? 
      JMP CF92C     NO, LEAVE UNCHANGED 
      CPA B110      110 BAUD??
      IOR BIT8      YES,BUMP CHAR COUNT FOR 2 STOP BITS 
      STA B         YES, SAVE 
      LDA EQ25,I    GET CURRENT 
      JSB SZCK      CHECK SIZE
      ADA B         PUT IN NEW
      STA EQ25,I    RESTORE 
CF92C LDA EQ11,I    FIND THE
      ALF,ALF          RECEIVE
      AND B377         PARAMETER
      SZA,RSS       ANYTHING THERE? 
      JMP CF92D     NOPE,CONTINUE 
      CPA B110      110 BAUD??
      IOR BIT8      YES, BUMP CHAR SIZE 
      STA B         SAVE TEMP 
      LDA EQ24,I    GET OLD 
      JSB SZCK      CHECK SIZE
      ADA B         AND IN NEW
      STA EQ24,I    SAVE
CF92D CLA            CLEAR
      STA EQ11,I    LOC FOR TO ROUTINE
      JMP CF92B,I   RETURN
* 
* 
SZCK  NOP 
      STA COUNT     SAVE TEMP 
      AND RHALF     LOOK AT BAUD RATE 
      CPA B110      IS IT 110BAUD?? 
      JMP SZCK0     YES, DEC. CHAR COUNT
      LDA COUNT     NO, MASK FOR NEW SPEED
      AND LHALF 
      JMP SZCK,I    RETURN
SZCK0 LDA COUNT     GET PRAM
      AND LHALF     MASK OUT SPEED
      ALF,ALF       MOVE TO LOWER 
      ADA DM1       DEC. CHAR SIZE BY 1 
      ALF,ALF       MOVE BACK TO UPPER
      JMP SZCK,I    RETURN
* 
      SPC 2 
B36K  OCT 36000 
B76K  OCT 76000 
* 
*  SRSCU - SAVES RETURN ADDR, SC, CONFIGURES OUTPUT ROUTINE FOR 
*          OUTCC SUBROUTINE AND ACKNOWLEDGEMENT INSTRUCTION.
* 
*          CALLING SEQUENCE:   LDB X00YZ     INTERRUPT ENTRY ADDR.
*                              JSB SRSCU
      SPC 1 
SRSCU EQU * 
      NOP 
      STB RTADD     SAVE RETURN ADDR. 
      LIA 4 
      STA SAVSC     SAVE SELECT CODE. 
      IOR CLFAC     CONFIGURE INTERRUPT 
      STA CLFSC       ACKNOWLEDGEMENT INST  1031XX
      XOR B1400     CONFIGURE LIA INST. 1025XX  1805 (R01)
      STA *+1 
      NOP 
      STA DATA
      AND B76K       STRIP OUT
      LDB SAVSC     SEE IF EITHER 
      CPB SAVS1     MUX DATA #1 
      RSS           YES 
      IFZ 
      CPB SAVS2     MUX DATA #2 
      RSS           YES 
      XIF           1805
      AND B36K       NO KNOCK OUT BIT 14
      STA UNIT        UNIT AND RT.
      ALF           JUSTIFY UNIT #. 
      RAL,RAL 
      IFZ           1805
      LDB SAVS2     WHICH MUX CAUSED
      CMB,INB,SZB,RSS 
      JMP MUX1      MUX #1 ,NO MUX#2
      ADB SAVSC 
      SSB,RSS 
      ADA B20       MUST BE MUX #2, BUMP 16 
      XIF           1805
MUX1  STA DUNIT 
      CMA,INA 
      STA NDUNT 
      JMP SRSCU,I 
* 
* 
*  SETP SETS POINTERS TO CURRENT ENTRY PLUS ITS EXTENSIONS
* 
*         CALLING SEQUENCE: LDB ADEQT   ADDR OF CURRENT EQT ENTRY 
*                           JSB SETP
      SPC 1 
SETP  EQU * 
      NOP 
      RBL,CLE,ERB 
      CPB EQ1       ALREADY SET UP? 
      JMP SETP,I    YES, DON'T SET EQT'S
      STB EQ1       NO, UPDATE EQ'S 
      ADB B4        1805
      LDA WORK
LOOP1 STB A,I 
      INB 
      INA 
      CPA E16A      LAST+1 1805 
      RSS           DONE 1805 
      JMP LOOP1 
* 
      LDB EQ13,I
LOOP2 STB A,I 
      CPA E26A      SEE IF LAST ONE 1805
      JMP SETP,I    RETURN 1805 
      INB 
      INA 
      JMP LOOP2 
* 
WORK  DEF EQ5       WORKING BUFFER ADDRESS  1805
E16A  DEF EQ16      POINTS TO EQ16 1805 
E26A  DEF EQ26      POINTS TO EQ26 1805 
DM16  DEC -16 
      HED  PRIVILEGED INTERRUPT PROCESSING
* 
*       P00D1 - PROCESSES DATA INTERRUPTS FROM MUX # 1. 
* 
P00D1 EQU * 
      NOP 
      CLF 0 
      JSB SAVAL     SAVE A,B,E, AND O.
      LDB P00D1 
      JSB P00DA     1805
      ADA DM16      ADD -16 BASE 10 
      SSA           UNIT # < 16 ? 
      JMP P00D0   YES.
      LDB LASM1     IGNORE SPURIOUS INTERRUPTS IN SETUP 1805
P00DB EQU *         1805
      ADA SPNTR     FIND RIGHT SPEED FROM TABLE 1805
      LDA A,I       1805
      STA SPEED     DIAG. SPEED 1805
      SZB,RSS       IF LASMX = 0, RETURN 1805 
      JMP RTN       1805
      JSB SETP      SET EQT POINTERS 1805 
      LDB EQ26,I    1805
      SSB,RSS       AUTO SPEED ACTIVE FOR THIS DEVICE? 1805 
      JMP RTN       NO 1805 
      JMP P.00D     GO PROCESS CHAR FOR AUX CHNLS 
* 
P00D0 ADA B20       ADD +16 
      JSB P00DC     FIX UP EQT STUFF 1805 
      SSA           AUTO SPEED REQUIRED FOR THIS MAIN? 1805 
      STB LASM1     NO - UPDATE LAST MAIN. 1805 
      JMP P.00D 
* 
* 
P00DC NOP           FIX UP EQT'S IN AUTO SPEED 1805 
      ALF 
      ADA NDUNT 
      ADA EQT0        TO FIND THE 
      LDB A,I           PROPER EQT. 
      SZB,RSS       EQT ENTRY = 0 ? 
      JMP P00DD     YES.
      LDB A         GET EQT ADDRESS 
      JSB SETP
      LDB EQ1 
      LDA EQ26,I
      JMP P00DC,I   RETURN 1805 
* 
* 
P00DA NOP           SET DEFAULT SPEED & SAVE ADDRESSES 1805 
      JSB SRSCU     SAVE RTN ADDR,SC,ETC. 1805
      LDA B5        MAIN SPEED 1805 
      STA SPEED     SAVE IF THIS IS IT 1805 
      LDA DUNIT     GET UNIT 1805 
      JMP P00DA,I   RETURN 1805 
* 
* 
* 
B14   OCT 14        1805
* 
P00DD ADA B14       FIND
      LDB A,I       ADDR OF EXTENT
      ADB B5        AND SAVE
      ADA B2        BUMP TO 
      STA COUNT     EQT15 ADDRESS FOR TO 1805 
      LDA DATA      CAUSED THE INT
      AND RHALF     MASK OUT UPPER
      STA TSAVE     (R10) SAVE CHAR 
      LDA B,I       (R10) GET EQ21 WORD 
      AND LHALF     (R10) SAVE STATUS 
      IOR TSAVE     (R10) MERGE WITH CHAR 
      STA B,I       SAVE IN EQ21 FOR SCHED
      CCA           TIME OUT RETURN 
      STA COUNT,I    ON NEXT CLOCK  1805
      JMP RTN 
TSAVE NOP           (R10) 
      SKP 
* 
*   P00D2 PROCESSES DATA INTERRUPTS FROM MUX # 2. 
* 
      IFZ 
DM32  DEC -32       1805
      SPC 1 
P00D2 EQU * 
      NOP 
      CLF 0 
      JSB SAVAL     SAVE A,B,E, AND O.
      LDB P00D2 
      JSB P00DA     SET STUFF UP 1805 
      ADA DM32      ADD -32 BASE 10 
      SSA           UNIT # < 16 ? 
      JMP P00DR     YES.
      LDB LASM2     IGNORE SPURIOUS INTERRUPTS DURING SETUP 
      JMP P00DB     USE COMMON CODE 1805
* 
P00DR EQU * 
      ADA B40       RESTORE UNIT #. 
      JSB P00DC     FIX UP EQT'S, ETC. 1805 
      SSA 
      STB LASM2 
      JMP P.00D 
LASM2 NOP           LAST MAIN TO INT. FOR MUX#2 1805
SAVS2 NOP           MUX#2 S.C. 1805 
      XIF 
LASM1 NOP           LAST MAIN TO INT. FOR MUX#1 1805
SAVS1 NOP           MUX#1 S.C. 1805 
      SKP 
* 
*    P00C1 - PROCESSING INTERRUPT FROM MUX #1 CONTROL BOARD # 1.
* 
P00C1 EQU * 
      NOP 
      CLF 0 
      JSB SAVAL     SAVE ENVIRONMENT
      LDB P00C1 
P00CA EQU * 
      JSB CISUB     SAVE RETURN ADDR,SC, CONFIG. ETC. 
      ALF 
      ADA NDUNT 
      ADA EQT0      ADDR OF EQT TBL 
      JMP P.00C 
      SKP 
* 
*     P00C2 - PROCESSES INTERRUPTS FROM MUX # 1, CONTROL BOARD # 2. 
* 
P00C2 EQU * 
      NOP 
CLFAC CLF 0         1805
      JSB SAVAL     SAVE ENVIRONMENT
      LDB P00C2 
      JMP P00CA 
      SKP 
* 
*     P00C3 - PROCESSES INTERRUPTS FROM MUX # 2. CONTROL BOARD # 1. 
* 
      IFZ 
      SPC 1 
P00C3 EQU * 
      NOP 
      CLF 0 
      JSB SAVAL 
      LDB P00C3 
      STB P00C1     FLAG FOR CONTROL BOARD 1
      JMP P00CA     1805
      SKP 
      SPC 1 
* 
*     P00C4 - PROCESSES INTERRUPTS FROM MUX # 2, CONTROL BOARD # 2. 
* 
P00C4 EQU * 
      NOP 
      CLF 0 
      JSB SAVAL 
      LDB P00C4 
      JMP P00CA     1805
      XIF 
      SKP 
* 
*    P.00C IS CALLED BY P00C1-4 TO COMPLETE CONTROL BOARD 
*    INTERRUPT PROCESSING.
* 
      SPC 2 
P.00C EQU * 
      LDB A         EQT ADDRESS 
      JSB SETP      SET POINTERS
      LDA DATA
      JSB OUTCC 
      JSB UPD23     UPDATE EQT23. (CURRENT LINE STATUS. 
      LDB EQ22,I    WHICH CONTROL SIGNAL CHANGED ?
      SSB           FULL DUPLEX TERM? 
      JMP P00C9     YES.
      LDA EQ26,I
      AND B60 
      SZA,RSS       XFLG = 0 ?
      JMP ERTN       YES. EXIT. 
      CPA B20       TRANSITION STATE = RECEIVE ?
      JMP PC1       YES. CHK LINE OPEN STATUS.
      JSB FCL12     NO. TRANSITIONING TO SEND STATE.
      CPA B1        CC UP AND CF DOWN?
      RSS           YES 
      JMP RTN       NO
      LDA EQ26,I    LOOK FOR LINE TURN
      AND B3        TO FROM READ TO WRITE-FIRST TIME
      SZA,RSS 
      JMP P00C8     NOT FIRST TIME
      XOR EQ26,I    REMOVE FIRST TIME 
      STA EQ26,I    FLAG
      LDA EQ22,I    IS THIS HALF DUPLEX 
      AND BIT14     WITH SECONDARY
      SZA,RSS       CHANNEL?
      JMP P00C8     NO THE NEXT COMMANDS ALREADY GIVEN
      LDA SCDAS     DIS CF, CC,CA=1, ENAB CD=0
      JSB COUT      TO MUX CONT. #1 
      JMP RTN 
P00C8 STB A         YES. CHKCB AND SB.
      AND B3
      CPA B3        "CB AND SB" UP ?
      JMP PC2       YES.
      JMP RTN       NO. WAIT FOR THEM.
* 
*     PROCESS FULL DUPLEX INTERRUPTS HERE.
* 
      SPC 1 
P00C9 EQU * 
      LDA EQ26,I
      AND B60 
      SZA,RSS       DO WE EXPECT THIS INTERRUPT?
      JMP ERTN       NO 
      JSB CLINE     GO CHECK THE LINE 
      SSB,RSS       CC AND CF UP? 
      JMP PC2       YES. COMPLETE LINE OPEN.
      JMP RTN       NO. EXIT. 
* 
*     PROCESS LINE OPEN RECEIVE/AUTO SPEED FOR HALF DUPLEX DEVICES. 
* 
      SPC 1 
PC1   EQU * 
      JSB CLINE 
      SSB           LINE STATUS = RECEIVE?
      JMP PC5 
PC2   LDA EQ26,I
      SSA           AUTO-SPEED IN PROGRESS? 
      JMP RTN       YES. WAIT FOR DATA INTERRUPTS.
      ALF,SLA       IS THIS LINE OPEN - BIT 12 ON?
      RSS 
      JMP PC3A      NO,LINE TURNAROUND
PC3   LDA DM200     YES, WAIT 2 SECONDS    1805       9/30/77 
      JMP COM06     EXIT AND WAIT FOR TIMEOUT.  1805
PC3A  SSA           SPECIAL XFER TO READ? 
      JMP PC4       YES, LET T.O. DO WORK 
      LDA EQ26,I    IS THIS A WRITE 
      AND B60 
      CPA B40       OR A READ 
      JMP PC4       WRITE, LET T.O.DO WORK
      IFZ           1805
      LDB SAVS1     GET MUX #1 SC 
      LDA SAVS2     MUX #2 SC 
      CMA,INA,SZA,RSS 
      JMP PC3B      USE MUX #1 SC 
      ADA SAVSC     IS THIS MUX #2? 
      SSA,RSS 
      LDB SAVS2     YES USE #2
PC3B  STB SAVSC     SAVE SC 
      JSB CONFG     GO CONFIGURE
      XIF           1805
      CLA,INA       SET STATE READ
      STA EQ26,I    RESTORE 
      LDA EQ24,I    RE-ENABLE FOR 
      JSB OUT       READ
      CLA           CLEAR TIMERS
      JMP COM06     AND EXIT 1805 
PC4   CCA 
      STA EQ15,I    SET SYSTEM AND
      STA EQ16,I    PHYSICAL FOR NEXT TICK. 
      JMP RTN       RETURN
PC5   LDA EQ26,I    LINE OPEN OR TURN 
      ALF,SLA       BIT 12 ON IF OPEN 
      JMP PC3       OPEN, WAIT 2 SEC MORE. LET T.O. DO WORK 
      JMP RTN       LINE TURN 
* 
DM200 DEC -200       1805 
FSTAT NOP 
* 
* 
*     LINE ERROR DURING READ OR WRITE 
* 
ERTN  EQU * 
      IFZ 
      LDB SAVS1     GET 1ST MUX S.C.
      LDA DUNIT     SEE IF REQ FOR
      AND B20       1ST OR 2ND MUX  (BIT 4) 
      SZA           WELL??? 
      LDB SAVS2     2ND MUX 
      STB SAVSC     (R06) SET BASE SELECT CODE
      JSB CONFG     GO CONGIGURE
      XIF 
      LDA EQ21,I    FIND OUT
      AND BIT14     WHAT HAPPENED 
      SZA,RSS       IS SOMETHING IS WRONG 
      JMP ERT1      NO MUST BE BREAK
      JSB LCS1      YES, CLOSE THAT LINE...NOW. 
      CLA           NOW RESET THE PHYSICAL
      STA EQ16,I    TIME-OUT CLOCK
      CCA           TIMEOUT TO TELL 
      STA EQ15,I    OPERATOR OR SYSTEM
ERT1  LDA EQ1,I     IS THERE A PROGRAM WAITING??
      SZA,RSS 
      JMP RTN       RETURN TO SYSTEM
      CLA           NOW SEE IF THE LINE WAS IN
      LDB EQ6,I     READ OR WRITE 
      SLB,RSS 
      JMP P00WR     TRYING TO DO WRITE
      JMP P00RR     TRYING TO DO READ 
      SKP 
*    P.00D IS USED TO PROCESS ALL DATA INTERRUPTS.
*    BOTH P00D1 AND P00D2 CALL P.00D TO COMPLETE DATA INTERRUPT 
*    PROCESSING.
* 
      SPC 1 
P.00D EQU * 
      LDA EQ26,I
      AND B60 
      SZA           DROP DATA INTER. DURING TRANSITION. 
      JMP RTN 
      LDA EQ19,I    (R02) TRYING TO COMPLETE? 
      AND B40       (R02) 
      SZA           (R02) 
      JMP RTN       (R02) YES, IGNORE ALL INTS! 
      IFZ           1805
      JSB CONFG     CONFIGURE I/O INSTRUCTIONS. 
      XIF           1805
LIB21 LIB SC+1      = CURRENT DATA STATUS. 1805 
      STB FSTAT 
      SPC 1 
      LDB EQ26,I
      SSB           AUTO-SPEED IN PROGRESS? 
      JMP P00CR     YES.
      SLB,RBR       LINE STATE = RECEIVE ?
      JMP RDSTA     YES.
      SLB,RSS       NO. LINE STATE = SEND ? 
      JMP RTN       ERROR.
      SPC 2 
*  CHECK STATUS FOR WRITE REQ. DATA BOARD INTERRUPT.
      SPC 1 
      LDA EQ22,I
      SSA,RSS       FULL DUPLEX ? 
      JMP CWST1     NO. SKIP DATA STATUS TEST.
      LDB FSTAT       GET DATA STAUTS.
      SLB,RSS       INTERRUPT DUE TO DATA XMIT ?
      JMP BKCHK     NO. RECEIVED DATA. CHK BREAK. 
CWST1 CLA           YES.
      JMP P00WR     CONTINUE WRITE. 
      SPC 1 
*  CHECK DATA FOR BREAK CHAR (10 ZEROS IN LSB)
      SPC 1 
BKCHK EQU * 
      LDA DATA      IF 10 LSB OF
      AND B1777     DATA = 0, THEN
      SZA             BREAK.
      JMP RDSTA     NO BREAK DETECTED. PAUSE? 
      LDA BIT12     SET BREAK STATUS BIT. 
      JMP P00WR     CALL LOGICAL DVR. 
* 
B1777 OCT 1777
B50T  OCT 50000     1805
      SPC 1 
*  CHECK STATUS FOR READ REQUEST DATA BOARD INTERRUPT.
      SPC 1 
RDSTA EQU * 
      LDB FSTAT      GET DATA STATUS. 
      SLB           IF X-MIT INTERRUPT RETURN.
      JMP RTN 
      LDA DATA      (R02) CHECK FOR BRK ON READ 
      AND B1777     (R02) 
      SZA,RSS       (R03) TEN ZEROS ??? 
      JMP RTN       (R02) YES, IGNORE BREAK 
      CLA 
      RBR,SLB       LOST CHAR INDICATED ? 
      IOR BIT13     YES. DATA ERROR.
      STA SAVEX 
      LDB EQ22,I
      BLF,BLF 
      BLF,SLB       ODD PARITY ?
      JMP RDOPC     YES. CHK PARITY BIT.
      RBR,SLB       EVEN PARITY ? 
      JMP RDEPC     YES.
RDST1 LDA DATA      PARITY OFF !!!
      AND RHALF     MERGE STATUS
      IOR SAVEX      WITH CHAR AND
      JMP P00RR        CALL LOGICAL DVR.
RDOPC EQU *         ODD PARITY CHECKING ROUTINE.
      LDB DATA
      SSB,RSS       ODD PARITY INDICATED? 
RDOPE IOR BIT13     NO.  EVEN.  ERROR!!!! 
RDOKP STA SAVEX     YES.    - PARITY OK 
      JMP RDST1 
      SPC 1 
RDEPC EQU *         EVEN PARITY CHECKING ROUTINE. 
      LDB DATA
      SSB           EVEN PARITY INDICATED ? 
      JMP RDOPE     NO. ODD.  ERROR !!!!
      JMP RDOKP     YES.  - OK
      SPC 1 
*  CALL LOGICAL DVR WITH CHARACTER AND STATUS FROM PHYSICAL DVR. (READ REQ.)
      SPC 1 
P00RR EQU * 
      LDB EQ17,I    LOGR DVR ADDR 
      ADB B2
      STB LOGR      SAVE
      STA SAVEX     SAVE A
RTE33 JSB RTE3C     SWAP MAP IF USER AREA 
      LDA EQ21,I    GET LINE STATE
      AND B50T      SAVE BITS 12 AND 14 
      IOR SAVEX     RESTORE FOR LOGICAL DRIVER
      STA EQ21,I
      LDB EQ1 
      JSB LOGR,I     INDICATING CONTINUATION
      JMP COM00     COMPLETION RETURN    1805 
      STA DADIR 
      JSB SRTIM 
      RAL,SLA       START READ DIRECTIVE ?
      JMP P00SR     YES.
      RAL,SLA       START WRITE DIRECTIVE ? 
      JMP P00SW     YES, START WRITE
      RAL,SLA       BIT 13? 
      JMP COM05     YES, CONTINUE 
      SSA           BIT 12??
      JMP NOOP      YES,  WRITE  NULL 
      JMP COM05     CONTINUE
      SPC 2 
*  START A READ OPERATION DIRECTIVE ISSUED BY LOGICAL 
*  DRIVER IN RESPONSE TO BEING CALLED FROM P00D(PRIVILEDGED 
*  INTERRUPT DATA PROCESSOR.
      SPC 1 
P00SR EQU * 
      JSB LNCK      GO CHECK THE LINE 
      JMP COM01     BAD LINE
      LDA DADIR     IS IT 
      AND BT152     START READ WITH 
      CPA BT152     ECHO? 
      JMP P00S1     YES 
      LDA EQ22,I    FIND OUT IF 
      AND BIT7      IF ECHO IS REQUESTED
      ALF,RAL       MOVE TO POS 12
      STA B         SAVE
      LDA EQ24,I    GET REC PRAM. 
      AND CMB12     CLEAR ECHO IF ON
      IOR B         UPDATE
      STA EQ24,I    AND RESTORE 
      JMP P00S2 
P00S1 LDA EQ24,I    GET REC PRAM. 
      AND CMB12     TAKE OUT ECHO 
      STA EQ24,I    RESTORE 
P00S2 JSB SR202     TURN LINE AROUND TO READ STATE. 
      JMP COM05     EXIT. 
BT152 OCT 104000    1805
      SPC 1 
*  START A WRITE OPERATION DIRECTIVE ISSUED BY LOGICAL
*  DRIVER IN RESPONSE TO BEING CALLED FROM P00D.
      SPC 1 
P00SW EQU * 
      JSB LNCK      GO CHECK THE LINE 
      JMP COM01     BAD LINE
      JSB SW202 
      JMP P00SX     LINE ALREADY = SEND STATE.
      JMP COM05     TURNING LINE TO SEND STATE. 
P00SX LDA DADIR 
      AND RHALF 
      JSB CHAR      OUTPUT CHAR 
      JMP COM05 
      SPC 2 
*  CALL LOGICAL DVR WITH STATUS FROM PHYSICAL DVR.  (WRITE REQ.)
      SPC 1 
P00WR EQU * 
      LDB EQ17,I    LOG ADDR
      ADB B4
      STB LOGR      SAVE
      STA SAVEX     SAVE A
RTE35 JSB RTE3C     SWAP MAP IF USER AREA 
      LDA EQ21,I    GET LINE STATE
      AND B50T      SAVE BITS 12 AND 14 
      IOR SAVEX     RESTOR FOR LOGICAL DRIVER 
      STA EQ21,I
      LDB EQ1 
      JSB LOGR,I     CALL TO LOGICAL DVR. 
      JMP COM00     COMPLETION RETURN  1805 
      STA DADIR      TO BE OUTPUT & DIRECTIVES. 
      JSB SRTIM 
      RAL,SLA       START READ DIRECTIVE ?
      JMP P00SR     YES.
      RAL,SLA        NO. DIRECTIVE = START WRITE? 
      JMP P00SW     YES.
      RAL,SLA       NOP?
      JMP COM05     RETURN, IGNORE INTERRUPT
      SSA           NULL REQUESTED? 
      JMP NOOP      YES. SEND NULL
      JMP P00SX     NO. CONTINUATION. 
      SPC 1 
*  PROCESS AUTO SPEED 
      SPC 1 
P00CR EQU * 
      LDA DATA      GET INPUT 
      AND RHALF     CHAR. AND 
      STA B 
      LDA EQ21,I
      AND RHALF     MASK
      CPA B         LOOK LIKE EQ21 ENTRY? 
      RSS           YES 
      JMP RTN       NO, RETURN FOR NEXT 
      LDA EQ26,I    GET LINE STATE WORD 
      IOR BIT8      TURN ON AC COMPLETE 
      STA EQ26,I    RESTORE 
      LDA SPEED     THIS IS IT
      ALF,ALF       GET THAT SPEED
      IOR SPEED     AND ADJUST IT 
      STA EQ11,I    SAVE FOR THE
      JSB CF92B     SPEED SET ROUTINE 
      JMP COM04     COMPLETE RETURN 
* 
* 
* 
*  SEND NULL CHAR FOR STALL 
* 
NOOP  LDA EQ20,I    GET STOP BITS 
      IOR B4377    TURN ON SYNC BIT 
      JSB OUT       SEND OUT
      JMP COM05     RETURN
* 
B4377 OCT 4377
* 
* 
      HED   ASYNC MUX UTILITY ROUTINES
* 
*   COMMON RETURN 
* 
RTN   EQU * 
      LDA SAVEO 
      CLO 
      SLA,ELA 
      STF 1         REGISTERS 
      CLA 
      STA P00C1 
      LDB SAVB      RESTORE B 
CLFSC CLF SC        ACKNOWLEDGE INTERRUPT 
RTE34 JMP RTE3D     OVERLAID IF RTE-II
      LDA MPFSV     LOOK AT MP FLAG 
      SZA,RSS       SYSTEM; WAS IT ON?
      JMP RTN2      YES 
      LDA SAVA       RESTORE A REG
      STF 0         ENABLE INTERRUPTS 
      JMP RTADD,I   AND RETURN
RTN2  LDA SAVA      RESTORE A REG 
      STF 0         ENABLE SYSTEM 
      STC 5         AND MP
      JMP RTADD,I   EXIT
* 
* 
RTE3D LDX XSV      RESTORE PREVIOUS STATE OF CPU
      LDY YSV 
      LDA UMPFL    WERE USER MAPS SWAPPED?
      SZA,RSS 
      JMP *+3      NO NEED TO RESTORE USER MAP
      LDA MAPAD    YES POINT TO OLD MAP SAVE AREA 
      USA          RELOAD THE OLD MAP 
      LDA MPFSV     WAS MP FLAG ON??
      SZA,RSS 
      JMP RTN3      YES TURN ON MP
      LDA SAVA      RESTORE A 
      STF 0         TURN ON INT SYS.
      JRS DMSTS RTADD,I   RELOAD STATUS, OLD MAP &RETURN
RTN3  LDA SAVA      RESTORE A 
      STF 0         INT. SYS. ON
      STC 5         MP ON 
      JRS DMSTS RTADD,I  RELOAD STATUS, OLD MAP & RETURN
* 
* 
RTE3B NOP 
      SSM DMSTS    SAVE STATUS OF MEMORY MAPPING SYSTEM 
      CLA 
      STA UMPFL    CLEAR USER MAP SWAP FLAG JUST IN CASE
      STX XSV        SAVE X&Y 
      STY YSV 
      JMP RTE3B,I 
* 
* 
RTE3C NOP           MAP SWAP SUBROUTINE 
      LDX DUNIT    GET PORT # 
      LBX MAPTB    GET USER ID ADDRESS ( 0 FOR NO USER MAP) 
      SZB,RSS      NEED TO SWAP USER MAP? 
      JMP RTE3C,I  NO!
      STB UMPFL    SET USER MAP RESTORE FLAG  TO NON-ZERO 
      LDA MAPAD    POINT TO TEMPORARY STORAGE AREA FOR CRNT 
      IOR BIT15    USER MAP, AND SET SIGN BIT TO
      USA          UNLOAD OLD USER'S MAP.  RESTORE ON EXIT
      LDA B        GET ID SEGMENT ADDRESS 
      JSB $PVMP    ATTEMPT TO LOAD MAP OF CURRENT USER ID.
      SZA,RSS      IF A#0 THEN MAP LOADED OK. 
      JMP RTN      FATAL ERROR (USER NOT IN MEMORY).
*                  THEN DO NOT TRANSFER A CHARACTER, BUT MERELY IGNORE
*                  THIS INTERRUPT. RTE-3 WILL HOUSEKEEP THE EQT FOR YOU 
* 
      LDA EQ1       SET EQ1 NEG 
      CMA,INA       AS A FLAG 
      STA EQ1 
      JMP RTE3C,I  RETURN WITH USER MAP ENABLED 
MAPAD DEF MAPSV 
* 
      SPC 2 
*  LOGR ISSUED A "START WRITE" DIRECTIVE WHEN CALLED FROM I.73 TO 
*  INITIATE A WRITE I/O REQ.
      SPC 1 
SWRIT EQU * 
      JSB LNCK      LINE STATUS = DOWN ?
      JMP BADLN     YES 
      JSB SW202     NO. LINE IN SEND STATE ?
      RSS           YES. SKIP NEXT INSTRUCTION. 
      JMP EXIT1     NO. LINE BEING TURNED TO SEND 
      LDA DADIR     GOOD LINE STATUS: 
      AND RHALF 
      JSB CHAR      OUTPUT CHAR 
      JMP EXIT1 
      SPC 1 
*  START WRITE ON A HALF DUPLEX LINE (202 MODEM). 
*     RETURN: P+1 = LINE IN SEND DIRECTION (READY). 
*             P+2 = LINE NOT IN SEND DIRECTION. 
      SPC 1 
SW202 EQU * 
      NOP 
      LDA EQ25,I    GET TRANS PRAM
      JSB OUT       SEND TO MUX 
      LDB EQ22,I
      SSB,RSS       FULL DUPLEX LINE? 
      JMP SW20A     NO. HALF DUPLEX.
      LDA EQ24,I    YES.
      AND CMB12     INHIBIT ECHO
      JSB OUT        ENABLE INTERRUPTS ON READ CHNL.
      LDA EQ19,I    (R08) MODEM ENABLED?
      AND BIT3      (R08) 
      SZA           (R08) 
      LDA DM4       (R08) 
      STA B         (R08) SET MASK 0=HW, -4=MODEM 
      LDA EQ26,I    (R07) SET TO SEND STATE.. 
      AND B         (R08) ..BUT DON'T CLEAR MODEM BIT UNLESS HARDWIRED
      ADA B2        (R07) STATE = SEND. 
      STA EQ26,I
SW20A EQU * 
      LDA EQ26,I
      CPA B2        LINE ALREADY IN SEND STATE? 
      JMP SW202,I   YES. RETURN.
      SPC 1 
*     TURN OFF READ CHANNEL INTERRUPTS DURING WRITES !!!!!
      SPC 1 
      LDA BIT15     INHIBIT INTS. DURING T.A. 
      JSB OUT        OUTPUT NEW PARMS. TO MUX . 
      SPC 1 
      LDA SSAB       AND LOWER SA 
      JSB COUT2 
      LDA EQ22,I    IS THIS HALF-DUPLEX 
      AND BIT14     WITHOUT SECONDARY 
      SZA           CHANNEL?
      JMP SW20B     NO, COMMANDS TO BE GIVEN LATER
      LDA SCDAS     DISABLE CF,CD=1,CA=1,ENABLE CC=0
      JSB COUT      OUT TO MUX
SW20B LDA DADIR     GET DATA AND DIREC. 
      AND RHALF     KEEP DATA 
      STA B         SAVE
      LDA EQ21,I    EQT ENTRY 
      AND LHALF     SAVE STATUS 
      IOR B         BUILD NEW STATUS AND DATA FOR 
      STA EQ21,I    LINE TURN AROUND
      LDA EQ26,I    SET 
      IOR B40           STATE FLAG
      STA EQ26,I          = SEND (2). 
      LDB DM500     DELAY UP TO 5 SECONDS  1805 
      STB EQ16,I     1805 
      ISZ SW202 
      JMP SW202,I 
* 
*   CHECK LINE AND
*   REPORT BAD LINE TO SYSTEM 
* 
LNCK  NOP 
      LDA EQ26,I    SEE IF LINE IS
      AND B3        IN TRANS, OR REC. 
      SZA,RSS 
      JMP LNCK,I    NO, LOOKS BAD 
      LDA EQ21,I    LOOK FOR BAD LINE 
      AND BIT14     IN THE LINE STATUS
      SZA 
      JMP LNCK,I    LOOKS BAD  RETURN 
      ISZ LNCK      LOOK OK BUMP FOR
      JMP LNCK,I    RETURN
* 
*  REPORT BAD LINE TO SYSTEM
* 
BADLN CCA 
      STA EQ15,I    TIME OUT TO 
      JMP EXIT2     TELL OPERATOR OR SYSTEM 
* 
* 
      SPC 1 
*  READ 
      SPC 1 
SREAD EQU * 
      JSB LNCK      LINE DOWN ? 
      JMP BADLN     YES 
      JSB SR202     NO. TURN LINE TO RECEIVE STATE. 
      JMP EXIT1      RETURN TO RTE. 
      SPC 1 
*   THIS SUBROUTINE TURNS HALF DUPLEX LINES TO THE RECEIVE DIRECTION
* 
*     RETURN: 
*       A=1 = LINE ALREADY IN RECEIVE DIRECTION.    1805
*       A=0 = LINE IN PROCESS OF BEING TURNED TO RECEIVE DIRECTION. 
      SPC 1 
SR202 EQU * 
      NOP 
      LDB EQ22,I
      SSB,RSS       FULL DUPLEX?
      JMP SR20A     NO. HALF DUPLEX.
      LDA EQ19,I    (R08) MODEM ENABLED?
      AND BIT3      (R08) 
      SZA           (R08) CONFIGURE MASK
      LDA DM4       (R08) 
      STA B         (R08) SAVE
      LDA EQ26,I    (R07) SET LINE TO RECEIVE.. 
      AND B         (R08) WITHOUT TOUCHING MODEM BIT UNLESS HARDWIRED 
      INA           (R07) SET LINE STATE TO READ
      STA EQ26,I
      LDA EQ24,I
      JSB OUT 
      SPC 1 
*     TURN ON READ CHANNEL INTERRUPTS DURING READS !!!!!
SR20A EQU * 
      LDA EQ26,I
      CPA B1        ALREADY THERE?
      JMP SR202,I 
      LDA BIT15     INHIBIT INTS. DURING T.A. 
      JSB OUT       INHIBIT INT THIS PORT DURING LINE T.A.
      LDA SSAF      SA=1, ENAB SB=0,CB=0
      JSB COUT2     TO MUX CONT. #2 
      LDA SCDAB     NO. TURN LINE AROUND
      JSB COUT      KEEP  CD AND LOWER CA 
      LDA EQ26,I    SET ITEM SR (START READ 
      IOR B20         LINE STATE = RECEIVE
      STA EQ26,I
      LDB DM500     DELAY UP TO 5 SECONDS 1805
      STB EQ16,I     1805 
      CLA           CLEAR A FOR RETURN 1805 
      JMP SR202,I   RETURN
      SPC 2 
* 
      SPC 2 
*    THIS SUBR UPDATES THE STATI OF BOTH CONTROL BOARDS.
      SPC 1 
UPD23 EQU * 
      NOP 
      LDA DATA
      AND B3        STRIP UPPER BITS
      LDB RTADD 
      CPB P00C1     BOARD # 1 INT.
      JMP P003      YES.
      LDB EQ22,I    NO. BOARD # 2.
      SSB           FULL DUPLEX?
      JMP RTN       YES. ERROR.  EXIT.
P003  LDB EQ22,I     UPDATE EQT23 
      SSB           FULL DUPLEX?
      JMP P005      YES.
      LDB RTADD     NO. 
      CPB P00C1     CONTROL BOARD # 1 INT?
      JMP P004      YES.
      ALF,ALF       NO. 
      STA B         BOARD # 2.
      LDA EQ23,I
      AND B3        KEEP BOARD # 1'S STATUS.
      JMP P005A 
P004  EQU * 
      STA B 
      LDA EQ23,I
      AND B1400     KEEP BOARD # 2'S STATUS.
P005A IOR B 
P005  EQU * 
      LDB EQ22,I
      RBL 
      SSB,RSS       IS SEC. CH. AVAILABLE ? 
      IOR BIT8      NO. SET SEC. REC. (SB) ON.
      STA EQ23,I    SET BOARD STATUS. 
      SLB           DEVICE HALF DUPLEX ?
      JMP TIMD1     NO.  FULL DUPLEX. 
      CLB           YES.
      LDA EQ26,I
      AND B77 
      CPA B1        LINE IN RECEIVE STATE ? 
      JMP P006R     YES.
      CPA B2        LINE IN SEND STATE ?
      JMP P007W     YES.
      JMP TIMD2     NO. GOOD STATUS. LET TIMPH TURN 
*                                      THE LINE AROUND AND CHECK STATUS.
P006R EQU * 
      LDA EQ23,I    CHK LINE STATUS SIGNALS.
      AND B1003    KEEP "CB,CF, AND CC".
      CPA B3        "CF AND CC" UP ?
      JMP TIMD2     YES. GOOD RECEIVE STATUS. 
      JMP TIMD0     NO. BAD RECEIVE STATUS. 
      SPC 1 
P007W EQU * 
      LDA EQ23,I    CHK LINE STATUS 
      AND B1401    KEEP "CB,SB, AND CC" . 
      CPA B1401    "CB,SB, AND CC"  UP ?
      JMP TIMD2     YES. GOOD SEND STATUS.
      SLA,RSS       IS "CC" UP??
      JMP TIMD0     NO,DATA SET IS DOWN 
      ALF,ALF 
      SLA           "SB"  DOWN ?  1805 USED AS CONSTANT (8) 
      JMP TIMD0     NO. LINE ERROR. 
      LDB BIT12     YES. BREAK. 
      JMP TIMD2 
TIMD1 EQU *         FULL DUPLEX.
      CLB 
      LDA EQ23,I
      AND B3        103 ,S SHOULD ALWAYS = B3.
      CPA B3        BOTH CF AND CC UP???? 
      RSS 
TIMD0 LDB BIT14     LINE ERROR !!!!!!!!!! 
TIMD2 EQU * 
      LDA EQ21,I    SAVE LINE STATUS IN EQ21, LEFT HALF 
      AND RHALF     MASK
      IOR B         PUT IN STATUS 
      STA EQ21,I    SAVE
      JMP UPD23,I    RETURN.
      SPC 2 
*   CHECK LINE STATUS TO SEE IF HALF DUPLEX LINE HAS
*   COMPLETED LINE TURNAROUND FROM SEND TO RECEIVE
* 
* 
CLINE EQU * 
      NOP 
*          FETCH CONTROL STATUS AND FORMAT
*          I EXPECT THE FOLLOWING STATUS: 
* 
* 
*            1. CC (DATA SET READY) - UP
*            2. CF (CARRIER)        - UP
*            3. CB (CLEAR TO SEND)  - DOWN
* 
      JSB FCL12 
      AND B3
      CPA B3        CC AND CF UP? 
      JMP CLENY     YES 
CLENX CCB           NO
      JMP CLINE,I   RETURN INDICATING BAD LINE
CLENY LDA B 
      AND B2
      SZA           CB DOWN? AND SB DON'T CARE
      JMP CLENX     NO
      CLB           INDICATE LINE IN READ STATE 
      JMP CLINE,I   RETURN
* 
* 
B1003 OCT 1003
B1401 OCT 1401
B1400 OCT 1400
B7717 OCT 77717     1805
DM3   DEC -3        1805
DM30  DEC -30       1805
      SPC 2 
* 
*   GET CONTROL LINE STATUS FOR HALF DUPLEX LINE
* 
FCL12 EQU * 
      NOP 
      LDA EQ23,I
      AND LHALF 
      ALF,ALF 
      STA B 
      LDA EQ23,I
      AND RHALF 
      JMP FCL12,I 
* 
      SPC 2 
*  INITIATE LOGICAL TIMER 
      SPC 1 
SRTIM EQU * 
      NOP 
      SSB,RSS       INITIATE/RESET TIMING ? 
      JMP SRTM1      AND RETURN.
      STB EQ12,I    SET TIME OUT VALUE
      JMP SRTRN     RETURN
SRTM1 SZB,RSS       LOOK FOR LEAVE SAME 
      STB EQ12,I    CLEAR LOG TIMER 
SRTRN LDB EQ21,I    CLEAR ANY 
      ELB,CLE,ERB    TIME OUT 
      STB EQ21,I    FROM PAST 
      JMP SRTIM,I       RETURN. 
      SPC 2 
* 
*          SETUP   SUBROUTINE 
* 
      SPC 1 
TIMSB EQU * 
      NOP 
      CLA 
      STA EQT15,I    CLEAR CLOCK
      LDA EQT4,I    FIND PORT NUMBER
      AND B37       GET 5 BIT PORT NUMBER 
      JSB UNSET     GO SET DUNIT,UNIT ETC.
      IFZ 
      LDA DUNIT     IS THIS MUX#1 OR MUX#2? 
      AND B20       LOOK FOR THAT IN BIT 4 OF DUNIT 
      LDB SAVS1     MUX#1 SELECT CODE 
      SZA           WELL??
      LDB SAVS2     MUX#2 
      STB SAVSC     SAVE FOR CONFIG.
      JSB CONFG     CONFIGURE I/O INST. 
      XIF           1805
      JMP TIMSB,I   RETURN
* 
*  SET DUNIT,NDUNT AND UNIT 
* 
* ENTER A=LOG. CHAN(SC) OR PORT NUMBER
* 
UNSET NOP 
      STA DUNIT 
      CMA,INA 
      STA NDUNT     NEG OF DUNIT FOR EQT SEARCH 
      CMA,INA       MAKE POS AGAIN
      AND B17       TAKE ONLY LAST 4 BITS 
      ALF,ALF       SHIFT INTO HIGH ORDER 
      RAL,RAL       BITS 10-13
      STA UNIT      SAVE FOR OUTPUT 
      JMP UNSET,I   RETURN
* 
*   TIMRT HANDLES LOGICAL TIMEOUT 
* 
TIMRT JSB TIMSB 
      LDA EQ21,I    GET STATE FLAG
      IOR BIT15     SET LOGICAL TIME OUT
      STA EQ21,I    FLAG
TIMRX LDA EQ17,I    ADDR OF LOG DVR 
      LDB EQ6,I     LOOK AT REQUEST 
      SLB,RSS 
      ADA B2        WRITE BUMP 4
      ADA B2
      STA LOGR      SAVE IT 
      LDA EQ21,I          GET LAST LINE STAT+CHAR 
      LDB EQ1       EQT ADDRESS IN B
      JSB LOGR,I    THAT IT HAS TIMED OUT 
      JMP C.11      ALLOW TIME OUT
      STA DADIR     SAVE DATA-DIR.
      JSB SRTIM     TRY AGAIN 
      SSA,RSS       START READ?  BIT 15 
      JMP TWRIT     NO
      JSB LNCK      GO CHECK LINE 
      RSS           LOOKS BAD 
      JMP TIMRG     LOOKS GOOD
      JSB RECX1     OPEN LINE TO READ 
      JMP TCONT     FINISH UP 
TIMRG JSB SR202     START READ
      JMP TIMR1     MUST BE TURNED
TWRIT RAL           LOOK FOR
      SSA,RSS       START WRITE.  BIT 14
      JMP TIMR1     ASSUME NOP,  IGNORE 
      JSB LNCK      GO CHECK LINE 
      RSS           LOOKS BAD 
      JMP TIMRH     LOOKS GOOD
      JSB SENXP     OPEN LINE TO WRITE
      JMP TCONT 
TIMRH JSB SW202     START WRITE 
      RSS           LINE IN WRITE 
      JMP TIMR1     MUST TURN TO WRITE
      LDA DADIR     GET DATA AND DIR. 
      JMP TIMR4     OUTPUT LOWER 8 BITS 
TCONT LDA DADIR     GET DATA
      AND RHALF     KEEP RIGHT HALF 
      STA EQ21,I    SAVE AND CLEAR BAD LINE FLAG
      LDA EQ26,I    TAKE OUT THE
      XOR BIT12     OPEN LINE FLAG
      STA EQ26,I
      JMP TIMR1     RETURN
* 
*    TIMPH HANDLES PHYSICAL TIMEOUTS
* 
TIMPH EQU * 
      JSB TIMSB 
      LDA EQ26,I
      AND B60 
      SZA           TRANSITION STATE NE 0?
      JMP TIMR2     YES                               9/30/77 
      LDA EQ26,I    CHECK TO SEE IF 
      AND BIT8      TIME OUT IS FROM AUTO SPEED 
      SZA,RSS       COMPLETION
      JMP C.11      NO,LAST CHANCE,SOMETHING WRONG
      XOR EQ26,I    YES,COMPLETE AUTO SPEED 
      STA EQ26,I    UPDATE EQ26 
      JMP C.12      COMPLETION RETURN 
TIMR1 JSB E15ST     SET UP EQT 15 
      JMP C.2       RETURN THROUGH CONT.
* 
*   CHECK LINE OPEN BIT-12
* 
TIMP1 NOP 
      LDA EQ26,I    LOOK FOR
      AND BIT12     LINE OPEN-CLOSE???? 
      SZA 
      JMP TIMP2     (R05) NO, CHECK LINE TURN AROUND COUNT
      ISZ TIMP1     BUMP FOR ZERO IN BIT 12 
      JMP TIMP1,I   RETURN
* 
TIMP2 ISZ EQT8,I    (R05) INC TURN COUNTER
      JMP TIMP1,I   (R05) STILL OK, RETURN
      JMP XOFF      (R05) BAD LINE, ABORT 
* 
TIMR2 CPA B20     RECEIVE?                            9/30/77 
      RSS            CK STATUS                        9/30/77 
      JMP TIMWR     NO,CONTINUE                       9/30/77 
* 
* WE HAVE HAD A TIME OUT IN RECEIVE. CHECK STATUS IF NO CF TURN LINE
* 
      JSB CLINE       GO CHECK LINE FOR READ
      SSB,RSS         IS IT READ? 
      JMP TIMR3       YES,WE ARE OK                   9/30/77 
      JSB TIMP1     IS THIS A LINE OPEN?
      RSS           YES  GO TO SEND 
      JMP XOFF      NO. THEN CAN'T TURN LINE
      JSB SENXP      NO,TURN THE LINE TO SEND         9/30/77 
      JMP TIMR1      EXIT                             9/30/77 
* 
TIMR3 EQU * 
      LDA EQ24,I    ENABLE READ PORT
      JSB OUT 
      CLA,INA       LINE STATE TO 
      STA EQ26,I          RECEIVE STATE.
      JMP C.12      COMPLETION RETURN 
*     TURNING LINE TO SEND STATE. 
TIMWR EQU * 
      LDA EQ22,I    IS THIS FULL DUPLEX?
      SSA,RSS 
      JMP TIMW1     NO, HALF-DULPLEX
      JSB CLINE     YES, CHECK LINE 
      SSB           LINE OK. IF B IS POS
      JMP XOFF     SOMETHING WRONG, TIMEOUT 
      JMP TIMW2     LOOKS OK. CONTINUE
TIMW1 JSB FCL12 
      SLA,RSS       CC UP ? 
      JMP XOFF     NO. TIMEOUT
      STB A         YES.
      AND B3
      CPA B3        CB AND SB  UP ? 
      RSS           YES. LINE IN WRITE STATE. SKIP. 
      JMP XOFF     TIME OUT 
TIMW2 LDA EQ26,I    SET 
      AND B1177       LINE STATE
      IOR B2            TO SEND.
      STA EQ26,I
      JSB TIMP1     LOOK FOR LINE OPEN
      JMP TIMR5     IT IS LINE OPEN, COMPLETE 
      LDA EQ21,I
TIMR4 AND RHALF     OUTPUT  CHAR
      JSB CHAR        FROM LOGICAL DVR. 
      JMP TIMR1     EXIT. 
TIMR5 JSB SR202     LINE OPEN READ AFTER
      JMP TIMR1     ANY LINE OPEN 
* 
B1177 OCT 117000
* 
*   DOWN THE LINE, CAN'T TURN.
* 
XOFF  JSB LCS1      CLOSE THAT LINE.
      LDA EQ21,I    NOW SET THE 
      IOR BIT14     BAD LINE FLAG 
      STA EQ21,I
      CLA           CLEAR THE 
      STA EQ16,I    PHY COUNTER 
      JMP TIMRX      GO TELL LOGICAL-BAD LINE 
* 
*    COMPLETION HOUSEKEEPING
* 
COM00 EQU * 
      JSB LNCK      GO CHECK LINE 
      JMP COM01     LOOKS BAD 
      LDA EQ5,I     SPECIAL CASE... BREAK...
      AND B100      LOOK FOR IT 
      SZA           IF ZERO (NOT BREAK) SET TO RECEIVE
      JMP COM01     YES, IS BREAK SKIP SETTING TO REC.
      JSB SR202     LEAVE WITH LINE IN RECEIVE
      SZA           1805
      JMP COM01     ALREADY THERE 
      LDA EQ26,I    SET PSEUDO
      IOR BIT11     LINE OPEN MODE
      STA EQ26,I    IN STATE FLAG 
      JMP COM05     CONTINUE TILL LINE TURN 
COM01 CLA 
      STA EQ12,I    CLEAR LOGICAL TIMER 
      STA EQ16,I    CLEAR PHYSICAL TIMER
      CCA 
      STA EQ15,I    INT ON NEXT CLOCK 
      JMP RTN 
      SPC 1 
COM04 EQU * 
      LDA EQ26,I
      AND B7717     CLEAR BITS 5&4(TRANS STATE) 4-15-75 
      STA EQ26,I
      LDA DM30      AUTO SPEED COMPLETE   1805
COM06 STA EQ16,I    WAIT 300 MS TO CLEAR DIAG. PORTS  1805
COM05 JSB E15ST     SET UP EQT15 1805 
      JMP RTN       RETURN
* 
*   SET UP EQT15 SUBROUTINE 
* 
E15ST NOP           SET EQT15 1805
      CCB           SET B TO -1 1805
      LDA EQ16,I    CHECK PHYSICAL 1805 
      SZA,RSS       IS PHYSICAL SET? 1805 
      JMP E15L      NO - CHECK LOGICAL 1805 
      STB EQ16,I    FIX UP EQT16 FOR 1 TICK 1805
      JMP E15X      AND EXIT 1805 
E15L  LDA EQ12,I    GET PHYSICAL TIMER 1805 
      SZA,RSS       ACTIVE? 1805
      JMP E15X      NO - CLEAR EQT15 1805 
      STB EQ12,I    -1 TO EQT12 1805
      MPY D10       CHANGE FROM 100MS TO 10MS 1805
      SSA,RSS       IS IT POSITIVE? 
      LDA BIT15     YES - MAKE BIG NEG. NUMBER 1805 
E15X  STA EQ15,I    SET UP THE EQT AND EXIT 1805
      JMP E15ST,I   1805
* 
*    SAVAL - SAVES THE A,B,E,O, AND MPTFL DATA. 
      SPC 1 
SAVAL EQU * 
      NOP 
      DST SAVA      SAVE A-AND B-REG. 1805
      ERA,ALS       SAVE E
      SOC 
      INA 
      STA SAVEO     SAVE O
      LDA MPTFL 
      STA MPFSV 
RTE32 JSB RTE3B 
      JMP SAVAL,I 
* 
**************************************************************
*   THIS AREA WILL BE USED ONLY AT STARTUP. 
*   IT WILL THEN BE USED BY THE MAP SAVE TABLE
*   AND THE 16 OR 32 WORD MAP POINTER TABLE 
*   DEPENDING ON THE NUMBER OF MULTIPLEXERS.
* 
*    *************CAUTION******************** 
*   DO NOT USE CONSTANTS WHICH ARE DEFINED IN 
*   THIS 48 OR 64 WORD AREA FOR ANYTHING ELSE,
*   AS THEY MAY BE WIPED OUT. 
*    *************CAUTION******************** 
* 
************************************************************* 
I.00  EQU *         1805
      CLB           BUILD "NOP" 
      STB I.0       OVERLAY ENTRY TO PREVENT ANY REUSE
      LDA $OPSY 
      RAR,SLA       IS THE DMS FLAG ON? 
      JMP I.01      YES!  THEN THIS IS RTE-III
      STB RTE31     NO! ONLY RTE-II.  KILL RTE-III CODE ENTRY POINTS
      STB RTE32     DITTO!
      STB RTE33     DITTO!
      STB RTE34     DITTO!
      STB RTE35     DITTO!
      STB RTE36     DITTO! 1805 
      STB RTE37     DITTO 
      STB RTE38     DITTO 
      STB RTE39     (R02) ..TWO MORE..
      STB RTE40     (R02) 
      SKP 
* 
I.01  EQU * 
      LDA EQT#      SET UP COUNT
      CMA,INA       OF THE TOTAL NUMBER 
      STA COUNT     OF EQT ENTRIES
* 
      LDB EQTA       SEARCH 
      ADB B4        ALL 
I.001 LDA B,I       ENTRIES UNTIL 
      AND M374      DVS00 
      SZA,RSS       EQT TYPE FOUND
      JMP I.002 
NEXT1 ADB B17       MOVE TO NEXT ONE
      ISZ COUNT     END OF EQT'S? 
      JMP I.001     NO  RETRY 
      JMP ERROR     YES,ERROR-NOT CONFIGURED RIGHT
I.002 LDA B         CHECK FOR THIS
      ADA DM3       DRIVER OR 
      LDA A,I       THE OTHER DVR00 
      CPA IS00A     WELL??
      RSS           YES THIS IS THE RIGHT ONE 
      JMP NEXT1     NOPE NOT IT CONTINUE
      ADB DM4       GET START ADDRESS 
      STB EQT0      AND SAVE ADDR OF MUX#1 EQT'S
      ADB B3        BUMB TO CHANNEL SELECT CODE 
      LDA B,I       GET S.C.
      AND B77       MASK
      STA SAVS1     MUX#1 S.C.
      LDA B,I       FIRST EQT WD 4
      AND CMB05     MASK S.C. (PORT 0) TO 0 
      IOR B40       SELECT CODE 40 FOR PORT 0 
      STA B,I       AND RESTORE 
*  CHECK FOR 2ND MUX
      IFZ 
      ADB D241      LOOK WHERE THE EQT
      LDA B,I       SHOULD BE 
      AND M374      MASK FOR TYPE 
      SZA           IS IT THERE?
      JMP I.003     NO,CONTINUE 
      LDA B         LOOK FOR THE
      ADA DM3       RIGHT DRIVER
      LDA A,I       IN THE EQT
      CPA IS00A     DVS00?? 
      RSS           YES 
      JMP I.003     NO,NOT THERE
      ADB DM1       DROP BACK ONE 
      LDA B,I       GET MUX#2 CHANNEL 
      AND B77       SELECT CODE 
      STA SAVS2     SAVE IT 
      LDA B,I       RESTORE THE FIRST 
      AND CMB05     EQT TO 0
      IOR B60       MAKE ADDRESS 16 
      STA B,I       FOR PORT NUMBER 0 ON MUX#2
      ADB DM3       BUILD EQT ADDERSS 
      STB EQMX2     SAVE ADDR 
      XIF 
*  SET THE AUTO SPEEDS
I.003 LDA SAVS1     GET MUX#1 S.C.
      STA SAVSC     MUX#1 S.C.
      JSB CONFG     CONFIGURE FOR MUX#1 
      LDA BIT14     SET DIAG. SPEEDS AND CLEAR ALL PORTS
      STA UNIT      INTO UNIT ADDRESS 
      JSB SPSET     SPEED FOR AUTO SPEED DETECT 
      IFZ 
      LDA SAVS2     DO WE HAVE THE MUX#2? 
      SZA,RSS 
      JMP I.004     NO,DO NOT SET SPEED MUX#2 
      STA SAVSC     YES,CONFIGURE MUX#2 
      JSB CONFG     CONFG ALL I-O 
      LDA BIT14     SET FIRST DIAG CHANNEL
      STA UNIT      INTO UNIT ADDRESS 
      JSB SPSET     OUTPUT AUTO SPEEDS
      LDA EQMX2     IS THERE A MUX#2? 
      SZA,RSS       WELL? 
      JMP I.004     NOPE,CONTINUE 
      CMA,INA       YES,MAKE NEG. 
      ADA EQT1      REQUEST FOR MUX#2?
      SSA,RSS 
      JMP I.004     YES,DON'T RE-CONFG
      LDA SAVS1     NO,A MUX#1 REQUEST
      STA SAVSC     RE-CONFG I-O INST.
      JSB CONFG     FOR MUX#1 
      XIF 
      JMP I.004     SKIP CONSTANTS, ETC. 1805 
* 
*    SET AUTO SPEEDS AND INHIBIT
*    INTERRUPTS ON ALL PORTS
* 
SPSET EQU * 
      NOP 
      LDA SAVSC     GET SELECT CODE 1805
      IOR CLFAC     SET UP CLF INSTR. 1805
      STA CLFSE     1805
      LDA DM5       SET COUNTER 
      STA COUNT     FOR 5 SPEEDS
      LDB SPNTR     ADDR SPEED BUFFER 
      STB SPEED     SAVE FOR INDEX
SPSE1 LDA SPEED,I   GET SPEED 
      CPA B110      110 BAUD ?? 
      ADA B400      YES BUMP CHAR SIZE
      ADA B1204 
      JSB OUT       OUTPUT TO MUX 
      LDA UNIT      GET UNIT ADDRESS
      ADA BIT10     BUMP TO NEXT
      STA UNIT      RESTORE CHANNEL ADDRESS 
      ISZ SPEED     BUMP B TO NEXT SPEED
      ISZ COUNT     ALL DONE? 
      JMP SPSE1     NO,GO TO NEXT 
*   INHIBIT INTERRUPTS
      CLA           SET UNIT ADDRESS
      STA UNIT      TO FIRST PORT 
      LDB DM16      16 PORTS
      STB COUNT     COUNTER 
SPSE2 LDA BIT15     ENABLE FOR READ PRAM
      JSB OUT       SEND TO MUX 
      LDB UNIT      BUMP UNIT 
      ADB BIT10     TO NEXT PORT
      STB UNIT      AND SAVE
      ISZ COUNT     THROUGH?? 
      JMP SPSE2     NO
CLFSE CLF SC        CLEAR FLAG CAUSE ITS ON.
      JMP SPSET,I   ALL DONE,RETURN 
* 
      IFZ 
EQMX2 NOP           ADDR OF MUX 2 EQT (R05) 
      XIF 
* 
B1204 OCT 120400
BIT10 OCT 2000
DM5   DEC -5
* 
M374  OCT 37400     EXPENDABLE CONSTANT 1805
D241  DEC 241       EXPENDABLE CONSTANT 1805
DM6   DEC -6        EXPENDABLE CONSTANT 1805
************************************************************* 
*    THE DEFINITIONS BELOW ARE FOR VARIABLES AND TABLES 
*    WHICH OVERLAY THE AREA FROM I.00 TO JUST BEFORE I.004
*    BECAUSE THIS CODE IS USED ONLY ONCE AT STARTUP.
*    THIS ALLOWS SOME SAVINGS IN MEMORY USAGE.
* 
************************************************************* 
* 
MAPSV EQU I.00      SAVE AREA FOR ALTERNATE MAP 1805
MAPTB EQU MAPSV+32  ID SEGMENT ADDRESSES (1 PER PORT) 1805
      IFN 
###   EQU MAPTB+16  SINGLE MUX 16 WORD MAPSV 1805 
      XIF 
      IFZ 
###   EQU MAPTB+32  DUAL MUX 32 WORD MAPSV 1805 
      XIF 
EQ5   EQU ###       1805
EQ6   EQU ###+1     1805
EQ7   EQU ###+2     1805
EQ8   EQU ###+3     1805
EQ9   EQU ###+4     1805
EQ10  EQU ###+5     1805
EQ11  EQU ###+6     1805
EQ12  EQU ###+7     1805
EQ13  EQU ###+8     1805
EQ14  EQU ###+9     1805
EQ15  EQU ###+10    1805
EQ16  EQU ###+11    1805
EQ17  EQU ###+12    1805
EQ18  EQU ###+13    1805
EQ19  EQU ###+14    1805
EQ20  EQU ###+15    1805
EQ21  EQU ###+16    1805
EQ22  EQU ###+17    1805
EQ23  EQU ###+18    1805
EQ24  EQU ###+19    1805
EQ25  EQU ###+20    1805
EQ26  EQU ###+21    1805
DUNIT EQU ###+22    1805 RIGHT JUSTIFIED UNIT NO. 
NDUNT EQU ###+23    1805 NEGATIVE DUNIT 
EQ1   EQU ###+24    1805 FIRST ADDRESS OF EQT 
LOGR  EQU ###+25    1805 POINTS TO LOGICAL DRIVER 
DATA  EQU ###+26    1805 TEMP. DATA STORAGE 
DADIR EQU ###+27    1805 DATA AND DIRECTIVE 
SAVEX EQU ###+28    1805 TEMP. STORAGE
SAVA  EQU ###+29    1805 A REG. SAVE
SAVB  EQU ###+30    1805 B REG. SAVE MUST FOLLOW SAVA 
SAVEO EQU ###+31    1805 E & O REG. SAVE
DMSTS EQU ###+32    1805 DMS STATUS SAVE
XSV   EQU ###+33    1805 X REG. SAVE
YSV   EQU ###+34    1805 Y REG. SAVE
UMPFL EQU ###+35    1805 USER MAP RESTORE FLAG
RTADD EQU ###+36    1805 RETURN ADDR. AFTER INTERRUPT 
SAVEA EQU ###+37    1805 DIFFERENT A REG. SAVERERRUPT 
MPFSV EQU ###+38    1805 MEM. PROTECT FLAG SAVE 
* 
* 
*     END OF EXPENDABLE CODE
* 
* 
.     EQU 1650B 
EQT#  EQU .+1 
MPTFL EQU .+80
EQT1  EQU .+8 
EQT4  EQU .+11
EQT5  EQU .+12
EQT6  EQU .+13
EQT7  EQU .+14
EQT8  EQU .+15
EQT9  EQU .+16
EQT10 EQU .+17
EQT11 EQU .+18
EQT12 EQU .+81
EQT15 EQU .+84
      ORG *         DRIVER LENGTH 
      END 
                                                                                                                                                                              