ASMB,R,B,L,C
      HED *** DOS III DRIVER  DVR00 FOR 2752, 2754, AND 2600 ***
      NAM DVR00,0,0 
* 
***  REVISION DATE MARCH 1975  ***
* 
* 
      ENT I.00,C.00 
* 
****** PROGRAM  DESCRIPTION ******
* 
*    DRIVER 00  OPERATES UNDER THE CONTROL OF THE 
* I/O CONTROL MODULE OF THE D.O.S. EXECUTIVE
* THIS DRIVER IS RESPONSIBLE FOR CONTROLLING DATA 
* TRANSMISSION WITH A TELETYPE ASR 33/35 WITH THE 
* 2116 PARALLEL INTERFACE. <00> IS THE EQUIPMENT
* CODE ASSIGNED TO THIS TYPE OF DEVICE. I.00 IS 
* THE ENTRY POINT FOR THE *INITIATION* SECTION AND
* C.00 FOR 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-EQT17" - 
* 
*           (A) = I/O ADDRESS OF DEVICE 
* 
*        (P)   JSB  I.00
*        (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).
* 
* 
*  - 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-EQT17" - 
* 
*           (A) = I/O ADDRESS OF DEVICE 
* 
*        (P)   JSB  C.00
*        (P+1) -- COMPLETION RETURN   --
*        (P+2) -- CONTINUATION RETURN --
* 
*         - COMPLETION RETURN:
*            (A) = 0, SUCCESSFUL COMPLETION WITH
*               (B) = # WORDS OR CHARS. TRANSFERRED 
*            (A) = 2 IF SIMULATED EOT ENCOUNTERED,
*               (B) = 0 
* 
*         - CONTINUATION RETURN: REGISTERS
*               MEANINGLESS.
* 
* 
*  - RECORD FORMATS:
* 
*     ASCII (INPUT): A STRING OF CHARACTERS TERMIN- 
*     -----          ATED BY A LINE-FEED. IF THE
*                    REQUESTED LENGTH IS FULFILLED
*                    BEFORE A LINE FEED, THE RE-
*                    MAINING CHARACTERS ARE IGNORED 
*                    UNTIL A LINE-FEED IS INPUT.
*                    THE 8-LEVEL BIT (BIT 07) IS
*                    SET = 0 FOR 7-BIT ASCII CODE.
* 
*         SPECIAL CHARACTER PROCESSING: 
* 
*          RETURN - ALWAYS IGNORED AND IS NOT 
*                   TRANSMITTED TO USER BUFFER
*          LINE-FEED - IGNORED IF INPUT BEFORE
*                   THE FIRST VALID CHARACTER 
*                   OF A RECORD; RECORD TERMINATOR
*                   AT THE END OF A RECORD AND IS 
*                   NOT TRANSMITTED TO BUFFER OR
*                   COUNTED.
*          CONTROL/A  - DELETES PREVIOUS CHARACTER
*          RUB-OUT    - DELETES CURRENT RECORD; 
*                       AFTER LINE-FEED IS INPUT, 
*                       NEXT RECORD IS READ.
* 
*     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.
* 
*          A ZERO BUFFER LENGTH CAUSES ONLY A 
*                    RETURN/LINE-FEED TO BE OUTPUT. 
* 
* 
*     BINARY (INPUT): A STRING OF CHARACTERS
*     ------          SPECIFIED BY THE BUFFER 
*                     "LENGTH" IN THE REQUEST.
* 
*                   "V-FORMAT": IF THE "V" FIELD
*                    IN THE CONTROL WORD OF THE 
*                    REQUEST = 1, THE LENGTH OF 
*                    THE RECORD IS DESIGNATED (IN 
*                    WORDS) BY THE FIRST CHARACTER
*                    OF THE RECORD. THE WORD COUNT
*                    INCLUDES THE FIRST WORD. IF
*                    THE WORD COUNT IS LARGER THAN
*                    THE BUFFER LENGTH, THE BUFFER
*                    LENGTH IS USED.
* 
* 
*                    "ABSOLUTE FORMAT" : IF BIT 10
*                    IN THE CONTROL WORD = 1, AND 
*                    THE B AND V BITS ARE SET, THE
*                    TAPE IS READ AS ABSOLUTE BINARY
*                    - THE WORD COUNT ON THE TAPE 
*                    IS INCREMENTED BY 3 TO INCLUDE 
*                    THE ENTIRE RECORD. 
* 
* 
*     BINARY (OUTPUT): A STRING OF CHARACTERS 
*     ------          SPECIFIED BY THE BUFFER 
*                     "LENGTH" IN THE REQUEST.
* 
* 
*  -  SIMULATED END-OF-TAPE: IF 30 FEED-FRAMES
*    ---------- --- -- ----  (ZEROS) ARE INPUT
*                            BEFORE THE FIRST CHAR- 
*                            ACTER OF A RECORD, AN
*                            EOT INDICATION IS
*                            SET IN THE STATUS FIELD
*                            (BIT 05 OF WORD 5) OF
*                            THE EQT ENTRY AND THE
*                            INPUT TERMINATED. IF 
*                            THE EOT BIT IS SET 
*                            WHEN THE CONDITION IS
*                            ENCOUNTERED, THE EOT 
*                            IS IGNORED AND CHARS 
*                            ARE INPUT UNTIL A
*                            RECORD IS STARTED (I.E,
*                            LEADER IS AUTOMATICALLY
*                            SKIPPED AFTER EOT).
* 
* 
*  -  CONTROL FUNCTIONS ACCEPTED: 
* 
*     10 - TEN INCHES OF ZEROS (FEED-FRAMES) ARE
*         OUTPUT FOR LEADER/TRAILER.
* 
*     11 - LINE SPACING: THE PARAMETER WORD OF THE
*           REQUEST DETERMINES THE NUMBER OF
*           LINE-FEEDS TO BE OUTPUT.
* 
*     07 - THE EOT STATUS BIT IS SET TO ALLOW 
*          "LEADER" TO BE SKIPPED ON THE NEXT 
*          INPUT REQUEST. 
* 
*     00 - CLEAR REQUEST - EXECUTES SAME AS 07
* 
* 
*  -  SYSTEM TELETYPE PROCESSING: THE SYSTEM
*              TELETYPE IS ALWAYS LEFT IN THE 
*              "INPUT STATE" WITH CONTROL SET/
*              FLAG CLEARED TO LEAVE THE KEYBOARD 
*              ACTIVE.  IF A KEY IS STRUCK WITH 
*              NO INPUT IN EFFECT, THE FLAG 
*              "OPATN" IN BASE PAGE IS SET NON- 
*              ZERO. IF A KEY IS STRUCK DURING
*              AN OUTPUT OPERATION TO THE SYSTEM
*              TTY, THE FLAG IS SET.
* 
* 
* 
      HED < DRIVER 00  *INITIATION*  SECTION  > 
* 
********* INITIATION  SECTION **********
* 
* 
I.00  NOP 
* 
      JSB SETIO    SET I/O INSTRUCTIONS FOR UNIT. 
* 
      CCA,CCE       SET COMPLETION SECTION
      ADA I.00        TO EXIT VIA 
      STA C.00        INITIATION ENTRY
* 
      LDA EQT9,I   GET CONTROL WORD OF REQUEST, 
      AND ..+3      ISOLATE AND 
      STA B         SAVE REQUEST CODE.
      XOR EQT9,I
      ALF           POSITION CONTROL
      ALF,RAL         BITS FOR MODE, ETC. 
* 
* CONSTRUCT DEVICE PROGRAM CODE ACCORDING TO REQUEST
* 
* 
      RBR,SLB,RBL   READ REQUEST? 
      JMP D01        -NO
* 
      ADB DATAI     SET BIT 14 FOR DATA IN
      RAR,SLA       IF KEYBOARD MODE (K-BIT ON),
      ADB PRINT     TURN ON PRINTER 
      JMP D02 
* 
D01   ADB PUNCH 
      SLB 
      JMP CONTL     - CONTROL REQUEST - 
* 
      SSA,RSS       IF ASCII MODE, TURN ON PRINTER
      ADB PUNCH      (PUNCH + PUNCH = PRINT)
* 
D02   JSB BFSET 
* 
* SELECT DEVICE OPERATING CONDITIONS - DEVICE 
*  NEEDS TO BE SELECTED ONLY ONCE FOR EACH
*  OPERATION. 
* 
D03   LDA B     GET COMMAND WORD FOR THE BOARD
      AND MASK4 MASK OUT DATA BITS
      IOR BIT15 SET BIT 15 FOR CONTROL
IO2   OTA 0 
      RBR,SLB   IS IT READ
      JMP D20        -NO, GO EXECUTE CONTINUATOR
* 
      JSB EQT9X     SET BIT 15 IN EQT9,I
      JMP CXT1      GO STC,C AND EXIT 
BIT15 OCT 100000
      SKP 
* 
* 
* CONTROL REQUEST PROCESSING
* 
CONTL RAL           POSITION & ISOLATE FUNCTION 
      AND MASK1 
      CPA .10B     FIELD = <10> TO GENERATE 
      JMP D05       LEADER (10 INCHES OF BLANK TAPE)
      CPA .11B     FIELD = <11> FOR LINE
      JMP D06       SPACING 
* 
      ISZ C.00      ADJUST RETURN 
      SZA           CLEAR REQUEST?
      JMP NOCLR       NO. 
      LDA ..+4
      JMP D29 
NOCLR CPA ..+7       SIMULATED EOT? 
      JMP D28       GO SET EOT STATUS 
* 
      LDA ..+2      SET ILLEGAL CNTRL REQ.
      JMP I.00,I
* 
* LEADER/TRAILER GENERATOR
* 
D05   LDA N100     SET INDEX COUNTER FOR FEED FRAMES
      STA EQT12,I   = -100. 
PRINT OCT 020000    <XOR A> EQUIVALENT TO <CLA> 
      JMP D07       FEED FRAME. 
* 
* LINE SPACING
* 
D06   LDA EQT10,I  GET LINE COUNTER WORD. 
      SSA,RSS      INSURE VALUE 
      CMA,INA       IS NEGATIVE.
      SZA,RSS      PROTECT AGAINST
      CCA           A ZERO VALUE. 
      STA EQT12,I  SET INDEX. 
      ADB PUNCH      = PRINT
      LDA LINF     (A) = LINE FEED CODE 
D07   STA EQT13,I  SET ACTION CODE, 
      JMP D03       RETURN TO START OUTPUT,(B)00 = 0
* 
* 
      HED  < MISCELLANEOUS SUBROUTINES >
* 
* INITIALIZE FLAGS, EOT COUNTER, CURRENT
*  BUFFER ADDRESS AND LENGTH. 
* 
BFSET NOP 
      LDA EQT10,I   CONVERT BFR ADR TO EVEN CHAR ADR
DATAI OCT 040000    (<ADA A> EQUIVALENT TO <RAL>) 
      STA EQT12,I   SET CURRENT BFR. POINTER
      LDA EQT11,I  GET BUFFER LENGTH. 
      CMA,SSA,INA   POSITIVE WORD COUNT REQUESTED?
      ALS,SLA        -YES, CONVERT TO NEG. CHARS. 
      CMA,INA        -NO, RESET TO NEG. CHARS.
      SLB,RSS      SKIP ZERO CHECK
      JMP *+3       IF WRITE. 
      SZA,RSS      IF CHAR, COUNT = ZERO, SET  = -1 
      CCA           FOR SYSTEM PROTECTION.
      STA EQT13,I  SET CURRENT BUFFER LENGTH. 
* 
      LDA EOTC     FOR INPUT, SET  EOT  COUNTER 
      STA EQT14,I   WRITE.
      JMP BFSET,I 
* 
* 
* SUBROUTINE:  <SETIO>
* 
*  PURPOSE: TO CONFIGURE THE I/O INSTRUCTIONS 
*           IN THE DRIVER TO REFERENCE THE
*           SUBJECT TELETYPE. 
* 
*  CALL:      (A)05-00 CONTAINS I/O ADDRESS 
*       (P)    JSB  SETIO 
*       (P+1)  -RETURN- (B) = EQT4,I
* 
SETIO NOP 
      IOR CLC       COMBINE <CLC> WITH I/O ADDRESS
      CPA IO5       ALREADY CONFIGURED? 
      JMP SETIO,I    -YES, EXIT 
      STA IO5 
* 
      XOR B5200     CONSTRUCT <LIA> INSTRUCTION 
      STA IO3 
* 
      ADA .100B     CONSTRUCT <OTA> INSTRUCTION.
      STA IO2 
      STA IO6 
      STA IO9 
* 
      ADA .1100    CONSTRUCT  <STC,C> INSTRUCTION 
      STA IO4 
      STA IO7 
* 
      JMP SETIO,I 
      HED  < DRIVER 00  *COMPLETION*  SECTION > 
* 
********* COMPLETION  SECTION **********
* 
* 
C.00  NOP 
* 
      JSB SETIO    SET I/O INSTRUCTIONS FOR UNIT. 
* 
      LDB EQT4,I
      SSB,RSS 
      JSB STEST     CHECK IF SYSTEM TELETYPE
      JMP IO3 
* 
      ISZ OPATN      OPERATOR ATTENTION FLAG
      JMP CXTZ
* 
IO3   LIA 0         INPUT CHARACTER 
* 
D20   LDB EQT9,I    GET REQUEST CONTROL WORD
      RBL 
      BLF,BLF       <V> TO 0, <MODE> TO 15
      STB EQT6,I
      CLE,ELB       ALSO PUT MODE IN E
      BLF,RBL 
      SLB,RBL       IF BIT 1 = 1, 
      JMP D31       WRITE OR CONTROL REQUEST. 
* 
* INTERRUPT  INPUT  SECTION 
* 
      SEZ,RSS       ASCII MODE? 
      AND MASK1      -YES, REMOVE 8-BIT 
* 
      RBL,SLB       IF VALID DATA RECEIVED, PROCESS.
      SZA          IF NON-ZERO CHARACTER, 
      JMP D21       PROCESS.
* 
* CHECK FOR POSSIBLE EOT CONDITION
* 
      ISZ EQT14,I  INDEX EOT COUNTER. 
      JMP CXT1      -INDEX NOT ZERO, EXIT.
      LDA EQT4,I   COUNT EXHAUSTED. IF LAST VALID 
      AND .40       OPERATION CAUSED EOT, 
      SZA           THEN IGNORE LEADER UNTIL
      JMP CXT1      NON-ZERO DATA RECEIVED. 
      CLB,CCE       SET B = 0, E = 1 FOR EOT AND GO 
      JMP D28       TO STATUS COMPLETION SECTION. 
* 
* PROCESS  INPUT  CHARACTER 
* 
D21   SEZ,CCE       IF BINARY MODE, GO TO 
      JMP D22       CHECK FOR VARIABLE FORMAT.
* 
* ASCII INPUT PROCESSING
* 
      CPA MASK1     <OCT 177 = RUBOUT>
      JMP D24       - RUBOUT -
      CPA RETN
      JMP CXT1      - RETURN -
      CPA LINF
      JMP D26       - LINE FEED - 
      CPA ..+3      <EOM> CHAR. 
      JMP D26 
      SSB          IF DRIVER IS WAITING FOR LINE
      JMP CXT1      FEED, EXIT. 
      CPA ..+1
      CCA,RSS        -CONTROL/A 
      JMP D23       VALID CHARACTER, STORE. 
* 
* 
* CONTROL/A PROCESSOR  (CHARACTER DELETION) 
* 
      JSB D2526 
* 
      ADB ..-1      SUBTRACT 1 FROM CURRENT 
      STB EQT12,I    BUFFER CHARACTER ADDRESS 
      ADA EQT13,I   SUBTRACT 1 FROM 
      STA EQT13,I   CHARACTER INDEX.
      JMP CXT1     - EXIT -.
* 
* BINARY INPUT PROCESSING 
* 
D22   SLB           CHECK IF FIRST CHAR. INPUT
* 
* VARIABLE LENGTH CHECK AND PROCESSING
* 
      LDB EQT6,I    CONTINUE IF 
      SLB,RSS       INPUT RECORD IS 
      JMP D23        NOT VARIABLE LENGTH
* 
      LDB EQT9,I
      BLF,RBL 
      SSB           VARIABLE ABSOLUTE BINARY? 
      ADA ..+3       -YES, BUMP RECORD LENGTH 
* 
      STA B        SAVE RECORD LENGTH (WORDS).
      BLS           CONVERT TO # OF CHARS., 
      ADB EQT13,I    SUBTRACT REQUESTED LENGTH. 
      SSB,RSS       USE REQUESTED LENGTH IF SMALLER 
      JMP D23        TO AVOID DESTROYING USER.
      STA B         SET RECORD WORD COUNT 
      ALS          CONVERT COUNT TO 
      CMA,INA       A NEGATIVE CHARACTER COUNT
      STA EQT13,I    AND SET IN EQT ENTRY.
      LDA EQT11,I    GET REQUEST LENGTH 
      CLE,ELA       PUT SIGN BIT IN E 
      LDA B         RECORD LENGTH IN A
      SEZ           SKIP-IF WORDS 
      LDB EQT13,I   SET NEG CHARS AS RECORD LENGTH
      STB EQT11,I    AND RESTORE
* 
* STORE CHARACTER IN USER BUFFER
* 
D23   LDB EQT12,I  GET CURRENT BUFFER ADDRESS.
      CLE,ERB       CONVERT TO WORD ADDR., CHARACTER
      ISZ EQT12,I   POSITION IN E, INDEX ADDRESS. 
      SEZ,RSS      SHIFT TO UPPER POSITION IF 
      ALF,ALF       EVEN ADDRESS. 
      STA STEST     -SAVE CHAR.-
      LDA MASK2    POSITION 
      SEZ,CLE        CHARACTER MASK (377) 
      ALF,ALF       TO PROPER POSITION
      AND B,I      GET OPPOSITE CHAR. FROM BUFFER,
      IOR STEST     INSERT NEW AND
      STA B,I       REPLACE FULL WORD.
* 
      JSB EQT9X     CLEAR BIT 14,15 IN EQT9 
      ISZ EQT13,I  ADD 1 TO CHARACTER INDEX.
      JMP CXT1     -RECORD CONTINUED. 
* 
* CHARACTER COUNT EXHAUSTED 
* 
      LDA EQT6,I    IF BINARY MODE, 
      SSA           GO TO TERMINATE 
      JMP D27       OPERATION.
CXT0  LDA EQT9,I   SET L-FEED  FLAG BACK TO 1 TO
      IOR DATAI     FORCE A LINE-FEED TO TERMINATE
      STA EQT9,I    AN ASCII RECORD.
* 
* CONTINUATION EXIT 
* 
IO4   STC 0        SET DEVICE TO INPUT NEXT CHAR. 
CXT1  EQU IO4 
* 
CXTZ  ISZ C.00      SET FOR (P+2) RETURN
      CLA           SET A = 0 FOR INITIATOR 
      JMP C.00,I   -RETURN TO INTERRUPT CONTROL - 
* 
* 
* RUB-OUT CODE PROCESSOR  (DELETION OF ASCII RECORD)
* 
D24   CLB,INB 
      JSB BFSET 
      JMP CXT0
* 
* 
D2526 NOP 
      LDB EQT10,I 
B5200 OCT 5200      <RBL> 
      CPB EQT12,I   CURRENT BFR ADR = ORIGINAL? 
      JMP CXT1       -YES, EXIT 
      LDB EQT12,I 
      JMP D2526,I 
* 
* 
* LINE-FEED PROCESSOR (RECORD TERMINATOR) 
* 
D26   JSB EQT9X     SET BIT 15 IN EQT9
      JSB D2526 
      CLE,ERB       IF ODD # OF 
      LDA B,I       CHARACTERS
      AND MASK4     INPUT,SET 
      IOR .40       LOWER CHARACTER 
      SEZ           OF LAST WORD
      STA B,I       = TO BLANK (SPACE). 
* 
* STATUS AND TRANSMISSION COMPLETION SECTION
* 
D27   LDA EQT13,I  GET CHARACTER INDEX (NEG. OR 0)
      LDB EQT11,I   AND ORIGINAL BUFFER LENGTH. 
      INA 
      SSB,RSS 
.1100 OCT 1100      <ARS> 
      SSB 
      CMB 
      ADB A 
      CLE 
D28   LDA EQT4,I    IF SIMULATED
      AND MASK4     EOT CONDITION 
      SEZ             DETECTED
      IOR .40        SET EOT BIT IN WORD 5. 
      STA EQT4,I
      CLA,SEZ,CCE   IF EOT DETECTED, SET
      LDA ..+2       RETURN STATUS = 2 FOR EOT. 
D29   STA EQT9X       FOR RETURN TO I/O COMPLETION
* 
* COMPLETION EXIT SECTION 
* 
IO5   CLC 0,C       CLEAR DEVICE CONTROL
      JSB STEST     DEVICE SYSTEM CONSOLE?
      JMP EZOUT      P+1 = NOT SYS CONSOLE
* 
      ERA,ARS       FORM CONSOLE CONTROL WORD 
IO6   OTA 0         OUTPUT IT 
IO7   STC 0,C 
EZOUT LDA EQT9X 
      JMP C.00,I    EXIT TO INTERRUPT CONTROL.
* 
* 
* 
EQT9X NOP 
      LDB EQT9,I
      BLR,ERB 
      STB EQT9,I
      JMP EQT9X,I 
      HED < OUTPUT COMPLETION SECTION > 
* 
* INTERRUPT  OUTPUT  SECTION
* 
* 
D31   SSA,RSS 
      CPA MASK2    IF = 377 (I.E, NO KEY STRUCK DUR-
      JMP D32       ING LAST OUTPUT), CONTINUE. 
* 
* 
      JSB STEST 
      RSS 
* 
* OPERATOR DESIRES SYSTEM ATTENTION AT SYSTEM TTY.
* 
      STA OPATN    SET OP-ATTN FLAG NON-ZERO. 
* 
* WRITE RECORD REQUEST
* 
D32   CLA          IF CURRENT BUFFER ADDRESS
      CPA EQT12,I   = ZERO, THEN
      JMP D27        OPERATION COMPLETED
* 
      SLB 
      JMP D40      - CONTROL FUNCTION - 
* 
      CPA EQT13,I  IF CURRENT CHARACTER INDEX = 
      JMP D33       0, THEN OUTPUT END OF RECORD. 
      LDB EQT12,I  GET CURRENT CHAR. BUFFER ADDRESS.
      ISZ EQT12,I  INDEX FOR NEXT CHAR. 
      CLE,ERB      CONVERT TO WORD ADDR.
      LDA B,I      GER WORD AND 
      SEZ,RSS       POSITION PROPER 
      ALF,ALF       CHARACTER IN A(07-00).
      AND MASK2    REMOVE UPPER POSITION DATA.
* 
      LDB EQT6,I    PUT MODE IN B(15) 
      ISZ EQT13,I  INDEX CHARACTER COUNTER. 
      JMP IO9       -NOT LAST CHARACTER-
* 
      SSB          IF BINARY MODE,
      JMP IO9       WRITE LAST CHARACTER. 
* 
      CPA ARROW    IF CHAR = <_>, THEN OMIT IT
      JMP D27         AND CR/LF ON ASCII RECORD 
* 
* OUTPUT CHARACTER TO PRINTER/PUNCH UNIT
* 
IO9   OTA 0        OUTPUT CHAR. TO INTERFACE BUFFER.
* 
      JMP CXT1     RETURN TO INTERRUPT CONTROL. 
      SKP 
* 
* END-OF-RECORD PROCESSING
* 
D33   LDA EQT6,I    CHECK MODE
      SSA           OF TRANSFER.
      JMP D27        -BINARY, GO COMPLETE 
* 
      LDA RETN      OUTPUT FIRST A
      CPA EQT14,I     RETURN AND THEN 
      LDA LINF        A LINE-FEED 
      STA EQT14,I   SET FOR LINE-FEED CHECK 
* 
      CLB 
      CPA LINF      LAST CHARACTER? 
      STB EQT12,I    -YES, SET BFR ADRS = 0 
      JMP IO9 
* 
* CONTROL FUNCTION OUTPUT 
* 
D40   LDA EQT13,I  (A) = LINE-FEED OR FEED FRAME
      ISZ EQT12,I  INDEX OUTPUT COUNT FOR LEADER/ 
.40   OCT 40        <CLE> 
      JMP IO9      GO TO OUTPUT CHARACTER.
* 
* 
* CONVERT LOGICAL UNIT TO EQT VALUE 
* 
STEST NOP 
      CCA 
      ADA LUTAB,I 
      STA SETIO 
      ALF 
      ADA SETIO 
      ADA EQTAB 
      CPA EQT1      EQT1 = SYSTEM TTY?
      ISZ STEST      -YES, EXIT (P+2) 
* 
      JMP STEST,I            THEN RETURN
* 
      HED  CONSTANT STORAGE AND BASE PAGE 
* 
CLC   CLC 0,C 
* 
PUNCH OCT 010000    BIT 12
* 
RETN  OCT 15        < RETURN  > 
ARROW OCT 137       < LEFT ARROW >
* 
EOTC  DEC -30      $ EOT COUNTER - 3 INCHES $ 
N100  DEC -100
* 
* 
A     EQU 0        DEFINE SYMBOLIC REFERENCE FOR
B     EQU 1         A AND B REGISTERS.
* 
* 
* 
*** SYSTEM BASE PAGE  COMMUNICATION  AREA *** 
* 
..    EQU 53B 
.10B  EQU ..+8
.11B  EQU ..+9
LINF  EQU ..+10     OCT 12
.100B EQU ..+12 
MASK1 EQU ..+16     OCT 177 
MASK2 EQU ..+17     OCT 377 
MASK4 EQU ..+18     OCT 177400
.     EQU 100B     ESTABLISH ORIGIN OF AREA 
* 
* 
* I/O MODULE/DRIVER COMMUNICATION 
* 
EQT1  EQU .+67
EQT4  EQU .+70
EQT5  EQU .+71
EQT6  EQU .+72
EQT9  EQU .+75
EQT10 EQU .+76
EQT11 EQU .+77
EQT12 EQU .+78
EQT13 EQU .+79
EQT14 EQU .+80
* 
* 
* SYSTEM MODULE COMMUNICATION FLAGS * 
* 
EQTAB EQU .+15      ADDRESS OF START OF EQPMT TABLE 
LUTAB EQU .+17      ADDRESS OF START OF L.U. TABLE
OPATN EQU .+112    OPERATOR/KEYBOARD ATTENTION FLAG 
* 
* 
      END 
                                                                                                                                              