ASMB,L,C,N
*     NAME  :  DVR07--2645 MULTIPOINT DVRIVER 
*     SOURCE:  91730-18001 2001 
*     RELOC:   91730-16001 2001 
*     PROGMR: G.W.J.
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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.        * 
*  **************************************************************** 
* 
* 
      HED 2645 MULTIPOINT DRIVER (DVR07)  10-02-79 1007  &DV07A 
      NAM DVR07 91730-16001 REV 2001 791022 &DV07A
      ENT I.07,C.07 
      EXT $LIST,$TIME 
* 
* 
* 
*   15  14  13  12  11  10  09  08  07  06  05  04  03  02  01  00
* 
*  [                                                              ] EQT1
*  [                                                              ] EQT2
*  [                                                              ] EQT3
*  [D ][B ][P ][S ][T ][<------UNIT------>][<---SELECT CODE------>] EQT4
*  [  AV  ][<---EQUIPMENT TYPE--->][DO][OR][ET][BR][<-ERROR CODE->] EQT5
*  [                   [<-----FUNCTION--->][<---REQUEST CODE----->] EQT6
*  [<-----------------INPUT OUTPUT BUFFER POINTER---------------->] EQT7
*  [<-------------------INPUT OUTPUT BUFFER LENGTH--------------->] EQT8
*  [<------------------------IP1--------------------------------->] EQT9
*  [<------------------------IP2--------------------------------->] EQT10 
*  [<-------------------LINK LIST POINTER------------------------>] EQT11 
*  [RP][RS][LF][CR][HO][CL][NL][SC]<--------EQT EXT. LTH.-------->] EQT12 
*  [<-------------------EQT EXT. POINTER------------------------->] EQT13--]
*  [                                                              ] EQT14  ]
*  [                                                              ] EQT15  ]
*  [L ][<-------GROUP ID.------->][<------DEVICE ID.------------->] EQT16<-]
*  [DF][BF][SK][OB][AA][LINE NUMBER][<---------STATE------------->] EQT17 
*  [<---------------WORD COUNT FOR THIS OPERATION---------------->] EQT18 
*  [<-------------MEMORY ADDRESS POINTER------------------------->] EQT19 
*  [<-------------LAST WORD AV. MEMORY USER BUFFER--------------->] EQT20 
* 
*  NOTE: IF EQT IS A LINE EQT (EQT16 B15=1) EQT16 B0-14 CONTAINS ID SEG ADD 
*        OF A PROGRAM TO BE SCEDULED IF A POS. RESP. RECEVED TO A POLL
*        AND THERE IS NO PENDING READ RQ. 
* 
*      INITIATION CALLS:
* 
*      LINE:
* 
*      CALL EXEC(3,ILU+2000B,ICW) 
* 
*      WHERE:  ILU IS AN LU POINTING TO AN EQT WHICH IS LINKED TO 
*              A 12790A INTERFACE CARD AND DVR07.  BIT 15 OF ICW IS 
*              SET TO 1 TO INDICATE THIS IS A LINE SET UP REQUEST.
* 
*              15  14  13  12  11  10  9  8  7  6  5  4  3  2  1  0 
*         ICW = 1         [    TO VAL      ]               [  LN   ]
*      TO VAL = THE NUMBER OF 100MS (0-30) ALLOWED FOR LINE TURNAROUND. 
*               A ZERO IN THIS POSITION IMPLIES THE DEFAULT.  (3 SEC.)
*      LN     = LOGICAL LINE NUMBER (0-7) 
*               THIS ARGUMENT MUST ALWAYS BE SUPPLIED.
* 
*               TOV*256+LN     NOTE:  IN THE EVENT OF A POWER FAIL AND
*                              THE RESTARTING OF THE MP SYSTEM BY (FIXMP) 
*                              THE TIME-OUT VALUE WILL REVERT TO THE
*                              DEFAULT OF 3 SEC.
*      TERMINAL:
* 
*      CALL EXEC(3,2000B+LUN,ICW) 
* 
*      WHERE:  LUN IS A LU POINTING TO AN EQT WHICH IS LINKED TO DVR07. 
*              BIT 15 OF ICW MUST BE ZERO.
*               15  14  13  12  11  10  9  8  7  6  5  4  3  2  1  0
*         ICW = 0  [    LN    ][  6 BITS  GID     ][ 6 BITS  DID    ] 
*         LN  = LINE NUMBER (0-7) 
* 
*      NOTE:  WHEN A TERMINAL IS INITIATED THE "CH" (SELECT CODE) CONTAINED 
*             IN ITS LINE EQT IS MOVED TO THE "CH" IN THE TERMINAL EQT. 
*             USING THE LU AND EQ COMMANDS IN RTE ONE CAN EASILY TELL 
*             WHICH LINE A TERMINAL LU IS LINKED TO.
* 
*             GID (GROUP ID) AND DID (DEVICE ID) ARE PRODUCED BY ANDING 
*             ALPHABETIC CHARACTER WITH 77B.
* 
*      LINE OPERATIONS: 
* 
*  LINE OPERATIONS ARE THOSE SPECIAL FUNCTIONS WHICH CAN ONLY BE DONE ON A
*  LINE CONTROL LOGICAL UNIT.  SEE 02645-90005 PP.5.38-5.41.
* 
*      "WHO ARE YOU"  CALL EXEC (1,LUN,IBUF,IBUFL,ID) 
* 
*         LUN = A LINE CONTROL LOGICAL UNIT NUMBER. 
*         IBUFL  MUST BE LONG ENOUGH TO CONTAIN 3 WORDS PER TERMINAL
* 
*               15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 
*         ID  = [ GROUP ID CHARACTOR  ][ PARENTHESIS CHARACTOR ]
* 
*         RESULTING BUFFER FORMAT:
*                                   NOTE:  THE RIGHT BYTE OF ID IS FORCED 
*         -----------               TO A PARENTHESIS BY THE DRIVER.  IT IS
*        \ GID \ DID \              IMPORTANT HOWEVER THAT THE GROUP ID 
*         -----------               CHARACTOR BE SUPPLYED AS THE LEFT BYTE
*        \ ST0 \ ST1 \              OF THE ARGUMENT "ID" IN THE CALL. 
*         ----------- 
*        \ ST2 \ 40B \
*         ----------- 
* 
*      "GROUP/LINE SELECT AND WRITE"
* 
*         CALL EXEC (2,LUN,IBUF,IBUFL,ID) 
* 
*         LUN = A LINE CONTROL LOGICAL UNIT NUMBER
* 
*               15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 
*  GROUP  ID  = [  GROUP ID CHARACTOR ][        (176B)         ]
* 
*  LINE   ID  = [      (176B)         ][       (176B)          ]
* 
*               NOTE:  THE RIGHT BYTE OF THE ID IS FORCED TO A 176B 
*               BY THE DRIVER.  IT IS IMPORTANT THAT THE GROUP ID 
*               CHARACTOR BE SUPPLYED AS THE LEFT BYTE OF THE ARGUMENT
*               "ID".  SUPPLYING A 176B AS THE LEFT BYTE  RESULTS IN
*               DOING A LINE SELECT WRITE OR A WRITE TOO ALL THE
*               TERMINALS ON THE LINE.  IF A NULL IS IN THE LEFT BYTE 
*               A "^" WILL BE USED RESULTING IN A "LINE" SELECT.
* 
      SKP 
* 
*      SPECIAL CONTROL FUNCTIONS: 
* 
*      FUNCTION 21B - REMOVE
* 
*      TO REMOVE A LINE FROM A SYSTEM.
*         CALL EXEC(3,ILU+2100B,LN) 
* 
*         ILU = LINE CONTROL LOGICAL UNIT NUMBER
*         LN  = LOGICAL LINE NUMBER  WITH BIT 15 SET TO A 1 
* 
*      TO REMOVE A TERMINAL FROM A LINE.
*         CALL EXEC(3,ILU+2100B)
* 
*         ILU = TERMINAL CONTROL LOGICAL UNIT NUMBER
* 
*      FUNCTION 22B - SET "NAK" AND "WACK" COUNT. 
*         CALL EXEC(3,ILU+2200B,IM) 
* 
*         ILU = LINE CONTROL LOGICAL UNIT NUMBER
*               15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 
*         IM  = [  TBF  ][ WACK CNT.  ][ RECV NAK ][ XMIT NAK  ]
*                1,2,4      0-32           0-16        0-16 
*      FUNCTION 23B - DISABLE ROUTINE POLLING AND/OR SET EDIT MODE FLAGS. 
*         CALL EXEC(3,ILU+2300B,IM) 
* 
*         ILU = TERMINAL CONTROL LOGICAL UNIT NUMBER
*               15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 
*         IM  = D  R  L  C  H  X  N S               A 
*         WHERE:
*               S=1-->SCHEDUAL THE ASYNCHRONUS INTERRUPT PROGRAM ON BREAK.
*               A=1-->ENABLE "AUTO-ACKNOWLEDGEMENT" 
*               D=1-->DISABLE ROUTINE POLLING.
*               R=1-->STRIP "RECORD SEPERATOR" FROM INCOMING TEXT.
*               L=1-->STRIP "LINE FEED" FROM INCOMING TEXT. 
*               C=1-->STRIP "CARRAIGE RETURN" FROM INCOMING TEXT. 
*               H=1-->SEND "HOME" BEFOR SENDING TEXT. 
*               X=1-->SEND "CLEAR DISPLAY" BEFOR SENDING TEXT.
*               N=1-->APPEND A " CR-LF-ESC-137B " TO TEXT.
*                     NOTE: IF THE TEXT IS TERMINATED WITH A "_" (137B) 
*                     THE "CR-LF" WILL NOT BE APPENDED. 
* 
*    TBF- TERMINAL BLOCKING FACTOR
* 
*    0--> USE THE DEFAULT 256 BYTE RECEIVE BLOCK.  DATA COMM. BUFFER=512
*    1--> SPECIFY THE 256 BYTE RECEIVE BLOCK SIZE. DATA COMM. BUFFER=512
*    2--> SPECIFY THE 512 BYTE RECEIVE BLOCK SIZE. DATA COMM. BUFFER=1024 
*    3--> MUST NOT BE USED. 
*    4--> SPECIFY THE 1024 BYTE RECEIVE BLOCK SIZE. DATA COM. BUFFER=2048 
*  5-7--> MUST NOT BE USED. 
* 
*     NOTE: "AUTO-ACKNOWLEDGEMENT" CAUSES (BELL-BELL-CR-LF-ESC-137B)
*     TO BE SENT TO THE TERMINAL AFTER A FULL MESSAGE IS RECEVED.  THIS 
*     IS USEFULL WHEN OPERATIND INTERACTIVLY. 
      SKP 
* 
*     EQT FLAG DEFINITION:
* 
*     EQT12 - ROUTINE POLL FLAG, EDIT MODE FLAGS AND EQT EXT LTH. 
* 
*       BITS 0-2  CONTAIN THE EQT EXT LENGTH  (CURRENTLY = 5) 
* 
* 
*  (S)  BIT  8....1-->SCHEDUAL THE ASYNCHRONUS INTERRUPT PROGRAM ON BREAK.
*  (N)  BIT  9....1-->APPEND A "CR-LF-ESC-137B" TO OUT GOING TEXT.
*  (X)  BIT 10....1-->SEND A "CLEAR DISPLAY" BEFOR SENDING TEXT.
*  (H)  BIT 11....1-->SEND A "HOME UP" BEFOR SENDING TEST.
*  (C)  BIT 12....1-->STRIP "CR" FROM INCOMING TEXT.
*  (L)  BIT 13....1-->STRIP "LF" FROM INCOMING TEXT.
*  (R)  BIT 14....1-->STRIP "RS" FROM INCOMING TEXT.
*       BIT 15....1-->ROUTINE POLLING DISABLED. 
* 
*     EQT16 - ID/ID SEG. ADD. 
* 
*       IF BIT 15 OF EQT16 = 0 THAN THIS EQT IS A TERMNIAL EQT AND THE
*     REMANING (0-14) BITS CONTAIN THE ID OF THE TERMINAL ASSOCIATED
*     WITH THIS EQT.
* 
*       IF BIT 15 OF EQT16 = 1 THAN THIS EQT IS A LINE CONTROL EQT AND
*     THE REMAING (0-14) BITS CONTAIN THE ID SEGMENT ADDRESS OF A 
*     PROGRAM TO BE SCEDULED ON ASYNCHRONUS INTERRUPTS. 
* 
*     EQT17 - CONTROL FLAGS, LINE NUMBER AND DRIVER STATE 
* 
*       BITS 0-7..STATE OF THE DRIVER RELATIVE TO THIS EQT. (0-256) 
*                 STATE 0-->INACTIVE. 
* 
*       BITS 8-10.LOGICAL LINE NUMBER TO WHICH THIS EQT IS LINKED.
* 
*       BIT 11....1-->AUTO-ACKNOWLEDGE EACH FULL MESSAGE AS IT IS RECEVED.
*       BIT 12....1-->ODD NUMBER OF BYTES IN WRITE BUFFER.
*       BIT 13....1-->THIS EQT WAS SKIPED ON THE LAST TIME AROUND.
*       BIT 14....1-->LAST TRANSACTION WAS TERMINATED WITH AN ETB 
*       BIT 15....1-->WAITING FOR A DMA CHANEL. 
* 
*     EQT5  - STATUS BITS 0-7 
* 
*       BITS 0-3..ERROR CODE  SEE CONTINUATION ERRORS 
*       BIT  4....1-->BREAK DETECTED. 
*       BIT  5....1-->CONTROL-Y DETECTED (EM) OR ZERO LTH. READ 
*       BIT  6....1-->ODD NUMBER OF BYTES IN THE LAST READ. 
*       BIT  7....1-->(D-O-R-E) DATA OVERRUN ERROR.  INPUT MESSAGE
*                     EXCEEDED THE BUFFER.
* 
      SKP 
* 
*      DETECT AND SET MODEM CONTROL LINES.  F=06B 
* 
*      TO DETECT AND SET SELECTED MODEM CONTROL LINES.
*    R=CALL EXEC(3,ILU+600B,IP)   THE "B" REGESTER CONTAINES MODEM STATUS.
* 
*      ILU = LINE CONTROL LOGICAL UNIT NUMBER ONLY. 
*      IP  = 0-->RETURN MODEM STATUS ONLY.
*      IP  # 0-->SET OR CLEAR THE SELECTED LINES AND RETURN STATUS. 
* 
*      "B" REGESTER FORMAT
* 
*      BIT 15...INTERNAL USE ONLY.
*          14...INTERNAL USE ONLY.
*          13...(IC) RING DETECTED. 
*          12...(RR) CARRIER DETECTED.
*          11...(CS) CLEAR TO SEND DETECTED.
*          10...(DM) DATA SET READY DETECTED. 
*          09...(SRR) SECONDARY CARRIER DETECTED. 
*          08...(RT) RECEIVE CLOCK
*          07...
*          06...    BITS 4-7 CONTROL THE BAUD RATE GENERATOR
*          05...    ON THE 12790A CARD.  SEE THE 12790A MANUAL. 
*          04...
*          03...(RS) REQUEST TO SEND ASSERTED.
*          02...(SRS) SEC. R-T-S
*          01...(TR) DATA TERMINAL READY
*          00...(J2 PIN 19) RATE SEL. 
*      NOTE: ONLY (TR) AND (J2 PIN 19-RATE SEL.) CAN BE MODIFIED. 
* 
*          IP FORMAT FOR DOING MODEM CONTROL: 
* 
*          BIT 00 =1--> ASSERT J2 PIN 19 (RATE SEL.)
*          BIT 01 =1--> DEASSERT J2 PIN 19 (RATE SEL.)
*          BIT 02 =1--> ASSERT DATA TERMINAL READY (TR) 
*          BIT 03 =1--> DEASSERT DATA TERMINAL READY (TR) 
*          BIT 04-15  UNUSED
* 
*          NOTE: SETING BOTH ASSERT AND DEASSERT RESULTS IN DEASSERT. 
* 
*        BIT ASSIGNMENTS IN IP MAY CHANGE DEPENDING ON THE MODEM USED.
*      CHECK THE 12790A MANUAL FOR SPECIFIC ASSIGNMENTS.
*        FUNCTION  6 IS NOT EXECUTED UNTIL THE NEXT TIME THE DRIVER IS
*      POINTING TO THE LINE CONTROL EQT, SO THERE CAN BE SOME TIME DELAY
*      BEFORE THE RESULT OF THE CALL IS REALIZED.  MAKE THIS CALL TO LINE 
*      CONTROL LU'S ONLY. 
* 
      SKP 
*     LINKED LIST STRUCTURE 
* 
* 
*     THE LINE CONTROL EQT AND ALL OF THE TREMINAL CONTROL EQT'S
* ASSOCIATED WITH IT ARE LINKED BY WAY OF A LINK WORD IN EQT11 OF EACH
* EQT.  EQT11 CONTAINS THE EQT1 ADDRESS OF THE NEXT EQT IN THE LIST, WITH 
* THE LAST  MEMBER OF THE LIST POINTING BACK TO THE LINE CONTROL EQT. 
*     AS TERMNIAL EQT'S ARE ADDED TO THE LINE THEY ARE INSERTED BETWEEN 
* THE LINE EQT AND THE FIRST TERMINAL EQT.  THIS RESULTS IN THE LAST
* EQT INITATED BEEING THE FIRST  EQT IN THE LIST FOLOWING THE LINE EQT. 
*     IF AN ACTION RELATIVE TO AN EQT WILL RESULT IN AN SUBSEQUENT
* INTERRUPT FORM THE INTERFACE CONTROLING THE LINE, THE INTERRUPT TABLE 
* ENTERY ASSOCIATED WITH THAT INTERFACE WILL BE MODIFIED TO POINT TO
* EQT1 OF THE ACTIVE EQT. 
* 
*       LINE
*      ______ 
* EQT1 \    \<----- 
*      /    /     \ 
* EQT11\    \---  \ 
*      /    /   \ \ 
* EQT16\1---\   \ \   NOTE: EQT16 BIT 15=1-->LINE CONTROL EQT 
*      /    /   \ \ 
* EQT20\____\   \ \ 
*               \ \ 
*       TERM    \ \   NOTE: THIS WAS THE LAST EQT INITATED. 
*      ______   \ \ 
* EQT1 \    \<--- \ 
*      /    /     \ 
* EQT11\    \---  \ 
*      /    /   \ \ 
* EQT16\0---\   \ \   NOTE: TERMINAL EQT'S HAVE A 0 IN BIT 15 OF EQT16. 
*      /    /   \ \ 
* EQT20\____\   \ \ 
*               \ \   NOTE: INTERNAL TO THE DRIVER THERE IS A 8 WORD
*       TERM    \ \   TABLE CALLED THE "LINE TABLE".  THIS TABLE IS 
*      ______   \ \   ORDERD ON LOGICLA LINE NUMBER (0-7) AND EACH
* EQT1 \    \<--- \   ENTERY POINTS TO THE EQT1 WOED ADDRESS OF THE 
*      /    /     \   LINE CONTROL EQT FOR THAT LINE. 
* EQT11\    \------ 
*      /    / 
* EQT16\0---\ 
*      /    / 
* EQT20\____\ 
* 
      SKP 
* 
*     ERROR-CODES 
* 
*     INITATOR ERRORS:
* 
*     SEE PP.15 FOR INITATOR ERROR CODES
* 
* 
*     CONTINUATION ERRORS 
*    A REGESTER=1 ERROR CODE IN EQT5 BITS 0-3=: 
* 
*    0-REQUEST REJECTED          10-RECEVE BYTE OVERRUN 
*    1-MODEM OFF                 11-TEXT BLOCK OVERRUN
*    2-NO TRANSMIT CLOCK         12-NAK OVERRUN 
*    3-NO CLEAR TO SEND          13-WACK OVERRUN
*    4-NO RECEVE CLOCK           14-ACK SEQUENCE ERROR
*    5-NO CARRIER DETECT         15-UNRECOGNIZED RESPONSE 
*    6-NO RESPONSE               16-TERMINAL BUFFER OVERFLOW
*    7-BREAK, NO STOP BIT        17-INTERNAL LOGIC ERROR
* 
      SKP 
* 
*     SAMPLE SYSTEM GENERATION: 
* 
*EQT ENT. 
*  .
*  .
*  M1...SC,DVR07,X=5 <--\-THESE EQT'S ARE GOING TO BE USE FOR LINE
*  M2...SC,DVR07,X=5    \ CONTROL AND MUST HAVE A 12790A CARD ASSOCIATED
*  M3...SC,DVR07,X=5    \ WITH THERE SC.
*  M4...SC,DVR07,X=5    \ 
*  M5...SC,DVR07,X=5 <--\ 
*  M6...SC,DVR07,X=5
*  M7...SC,DVR07,X=5
*  M8...SC,DVR07,X=5
*  .
*  .
*LU ENT.
*  .
*  .
*  N1,M1      LINE CONTROL
*  N2,M2
*  N3,M3
*  N4,M4
*  N5,M5      LINE CONTROL
*  N6,M6
*  N7,M7
*  N8,M8
*  .
*  .
*INT ENT. 
*  .
*  .
*  SC FOR THE FIRST CARD,PRG,ASIP<--PROGRAM NAME
*  SC FOR THE SECOND CARD,PRG,ASIP<--PROGRAM NAME 
*  .
* 
* 
      SKP 
I.07  NOP 
      JSB SETIO          GO SETUP IO INST (SC IN A) 
      CLA                "A"=0 FOR EQT EXT ONLY 
      STA EQT15,I        CLEAR ANY TO VALUE IN EQT15
      JSB SETEQ         SETUP EQT EXT 
      LDA EQT6,I        GET "RC"
      AND D3            LOW 2 BITS OF EQT6
      STA TEMP          SAVE RC FOR SETING  STATE 
      CPA D3            "RC"=3(CONTROL)?
      JMP CONT          YES, GOTO CONTROL 
      LDB EQT17,I       TEST FOR DMA FLAG 
      SSB               EQ17 BIT 15=1?
      JMP STDMA         FLAG SET,GO TO DMA SETUP
      LDB EQT11,I       "LLP"=0?
      SZB,RSS 
      JMP ERR31         ERROR 
      CPA D1            READ? 
      JMP I.01          YES, GO ON
      LDA EQT16,I       NO, OK
      AND RBYTE         CHECK DEV. ID.
      CPA QM            DEV. ID.= A QUOTE MARK? 
      JMP ERR32         YES, ERROR-WRITE TO A GROUP ID. 
I.01  LDB EQT8,I        TEST BUFFER LENGTH
      CPA D1            READ REQUEST? 
      SZB               YES, BUFF LTH=0?
      JMP I.01A         NO, OK
      JMP ERR01         YES, ERROR
* 
*     NORMAL READ/WRITE  OPERATIONS GET STARTED HERE. 
* 
I.01A CLE,SZB,RSS       IF BF LT=0 DO NOT DO CH WD CHK
      JMP I.02          NO, GO ON 
      SSB,RSS           -(CH)?
      JMP I.02          NO, GO ON 
      CMB,INB           MAKE POSITIVE 
      CLE,SLB           ODD?
      CCE,INB           YES, ADD 1 AND SET "E"
      RBR               B=B/2 
I.02  LDA EQT17,I       SETUP TO CLEAR FLAGS
      AND B7.4K         AND STATE 
      SEZ               ODD BYTE? 
      IOR OBWF          YES, SET FLAG 
      STA EQT17,I 
      CLA 
      STA EQT18,I       CLEAR EQT18 (WC)
      SZB,RSS           BF LTH=0? 
      JMP I.04          YES, GO ON
      ADB EQT7,I        CALC LAST WD AV MEM 
      ADB MIN1          SUBTRACT 1
I.03  STB EQT20,I       PUT IT INTO EQT20 (LWAM)
      LDA EQT7,I        GET FIRST WD AV MEM 
      STA EQT19,I       PUT IT INTO EQ19(FWAM)
      LDA EQT5,I        CLEAR STATUS IN EQT5
      AND LBYTE 
      STA EQT5,I
      LDB TEMP          SET STATE 
      LDA EQT16,I       LINE EQT ?
      SSA               EQ16-B15=1-->LINE 
      LDB PLNRS         SET STATE TO PROC. LINE RC
      CCE 
      JSB STE17         SET STATE 
      CPB PLNRS         IF DOING A LINE RQ
      JMP RTNI0          DO NOT DO TIME OUT.
      JSB GT$TM         GET THE CURRENT TIME FROM $TIME 
      DST EQT9,I         KEEP IT IN EQ09 AND EQ10.
      JMP RTNI0         RETURN, GOOD
* 
*     IF A ZERO LENGTH WRITE IS DETECTED WE CHECK FOR AN APPEND.
*     I.E. HOME-UP,CLEAR,CR/LF-ESC 137B 
* 
I.04  LDA EQT6,I        CHECK FOR EDIT FLAGS IN RQ
      AND B3.4K 
      SZA 
      JMP I.03          YES, GO ON
      LDA EQT12,I       CHECK FOR EDIT FLAGS IN EQ12
      AND B7.0K 
      SZA 
      JMP I.03          YES, GO ON
      JMP ERR01         NO, ERROR 
      SKP 
* 
*2
* 
CONT  LDA EQT6,I        GET FUNCTION CODE 
      AND B3.7K         EQT6,B6-10
      SZA,RSS           F=0 (CLEAR)?
      JMP CLEAR         YES, GO TO CLEAR RTN
      CPA FINIT         F=20(INIT)? 
      JMP INIT          YES, GO TO INIT RTN.
      CPA FDINT         F=21(DINIT)?
      JMP DINIT         YES, GO TO DINIT RTN. 
      CPA FSNWK         F=22(SET NAK WACK CNT.)?
      JMP STNKW         YES,GO DO IT
      CPA FSEMS         F=23(SET EDIT MODE FLAGS)?
      JMP STEMF          YES, GO DO IT
      CPA FMDCT         F=6(MODEM CONTROL)? 
      JMP STNKW         YES, GO DO IT 
      JMP RTNI4         DO AN AMED. COMP. RTN.
INIT  LDA EQT7,I        GET IPRAM 
      SSA,RSS           LINE SETUP REQUEST? 
      JMP TINIT         NO, GO TO TERM. INIT RT 
* 
*     LINE INITIATION STARTS HERE 
* 
      AND D7            EQT7,B0-2 
      STA LN            SAVE IT 
      ADA LTP           ADD TO LINE TAB POINTER 
      STA TEMP          SAVE
      LDA A,I           GET TABLE ENTERY
      SZA               =0? 
      JMP ERR33         NO, ERROR-LINE ASSIGNED 
      LDA EQT11,I       ALLREADY LINKED?
      SZA               =0? 
      JMP ERR34         YES, ERROR-ALLREADY LINKED
* 
*     CHECK FOR THE RESULTS OF THE DIAGNOSTIC IF ANY. 
*     IF ERROR POST ERROR CODE IN EQT5. 
* 
      JSB GETA          GET CONT. OF OUT REG
      SSA,RSS           DIAG.?
      JMP LIN1          NO, GO ON 
      ELA,CLE,ERA       YES, CLEAR BIT 15 
      SZA,RSS           "A"#0-->ERROR 
      JMP LIN1          NO, GO ON 
      AND B17           YES, POST ERROR CODE
      STA B              IN EQT5
      LDA EQT5,I
      AND ECM 
      IOR B 
      STA EQT5,I
      JMP ERR30         RETURN ERROR
* 
*     MAKE ENTERY 
* 
LIN1  LDA EQT1          PUT POINTER IN LINE TABLE 
      STA TEMP,I
      STA EQT11,I       DUMMY UP EQT11
      LDA EQT12,I       SET "RP" FLAG 
      IOR SIGNB 
      STA EQT12,I 
      LDA LN            SAVE LN IN EQT17
      ALF,ALF           LEFT BYTE 
      STA EQT17,I 
      CLA 
      STA EQT18,I        CLEAR (WC) 
      STA EQT19,I        CLEAR (FWAM) 
      STA EQT20,I        CLEAR (LWAM) 
      LDA EQT4,I         SET "S" BIT IN EQT4
      IOR B10K
      STA EQT4,I
* 
*     MAKE PROG ENTERY IF POSILBLE
* 
      LDA EQT16,I       CHECK TO SEE IF SET 
      SSA               EQ16-B15=0? 
      JMP LIN1A         NO,GO DO TO RQ. 
      JSB INTEN         GET INT. TABEL ENT. 
      STB TEMP          SAVE ENT. ADD.
      LDB EQT1          SETUP TO REPLACE INT ENT
      CMA,CLE,SSA,INA   ID. SEG. ENT.?
      CLA               EQT ENT.
      IOR SIGNB         SET L 
      STA EQT16,I       ID, PUT IT IN PROG ENT
      STB TEMP,I
LIN1A LDA EQT7,I        CHECK FOR A NEW TIME-OUT VALUE
      AND B17.4         LEFT BYTE OF IPRAM
      SZA,RSS           NEW VALUE?
      JMP LIN2          NO, SKIP IT 
      RAL,RAL           MOVE IT 
      RAL 
      IOR STTOV         MERG THE COMMND.
      JSB OUTAF         SEND IT 
      JSB WATE          WAIT FOR THE FLAG 
LIN2  LDA TORQC         REQUEST A TIMEOUT 
      JSB OUTAF 
      JMP RTNI4 
* 
*     ROUTINE TO GET DMA FROM THE C.07+3 EXIT.
* 
GTDMA LDB SIGNB         SET THE WATEING FOR DMA FLAG
      CLE                 IN EQT17. 
      JSB STE17 
      LDB C.07          BUMP THE RETURN POINT 
      ADB D2
      LDA D5            A=5-->WANT DMA
      JMP B,I           GO BACK TO THE SYSTEM 
* 
* 
FINIT OCT 2000
FDINT OCT 2100
FSNWK OCT 2200
FSEMS OCT 2300
FMDCT OCT 600 
      SKP 
* 
* 
ERR01 LDA D1            REQUEST REJECTED
      JMP ERX+1 
ERR30 CLA           DIAGNOSTIC FAILED 
      JMP ERX 
ERR31 LDA D1        INACTIVE LU-EQT (NOT IN LINKED LIST)
      JMP ERX 
ERR32 LDA D2        WRITE TO A GROUP POLL ID
      JMP ERX 
ERR33 LDA D3        LOGICAL LINE NUMBER ALLREADY ACTIVE 
      JMP ERX 
ERR34 LDA D4        LU-EQT ALLREADY ACTIVE (IN LINKED LIST) 
      JMP ERX 
ERR35 LDA D5        LU-EQT CAN NOT BE USED AS A TERMINAL LU-EQT 
      JMP ERX 
ERR36 LDA D6        WRONG LINE NUMBER 
      JMP ERX 
ERR37 LDA D7        NOT A LINE LU 
      JMP ERX 
ERR38 LDA D8        TERMINALS STILL ON LINE 
      JMP ERX 
ERR39 LDA D9        NOT A TERMINAL LU 
ERX   ADA D30       ADD OFFSET
RTNI  CLB           CLEAR XLOG FOR RETURN 
      JMP I.07,I    RETURN
* 
* 
RTNI0 CLA           NORMAL RETURN 
      JMP RTNI
* 
* 
RTNI4 LDA D4        IMMEDIATE COMPLETION
      JMP RTNI
* 
* 
D8    DEC 8 
D9    DEC 9 
D30   DEC 30
                            