ASMB,R,L,C
*     NAME:    DD.12
*     SOURCE:  92070-18086
*     RELOC:   92070-16086
*     PGRM:   D.L.M.
* 
*  *****************************************************************
*  * COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS RESERVED   *
*  * NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,                   *
*  * REPRODUCED OR TRANSLATED INTO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.         *
*  *****************************************************************
      HED DD.12 HP-IB LINE PRINTER DRIVER 
      NAM DD.12     92070-16086 REV.2001 800109 
      ENT DD.12 
      EXT $DV1,$DV6,$DV12,$DV15,$DV16,$DV17,$DV18 
      EXT $DV19,$DV20,$DV22,.MVW
      GEN 25,EDD.12,DX:1,TX:26,TO:1000,DT:12B 
      GEN 3,M2631 
* 
* 
A     EQU 0 
B     EQU 1 
* 
DD.12 NOP 
      LDB $DV1       ARE WE 
      CPB DX15,I       SET UP?
      JMP START      YES. 
      STA TEMP       NO, DO IT. 
      LDA M.26
      STA CNTR
      LDA $DV22,I         DVT EXTENSION ADDRESS 
      LDB DXAD
DXSET STA B,I 
      INA 
      INB 
      ISZ CNTR
      JMP DXSET 
      LDA $DV1         WE ARE SET UP NOW
      STA DX15,I
* 
      LDA TEMP         GET ENTRY DIRECTIVE
START AND B7           GET LOWER 3 BITS 
      ADA JTBLA        ADD TO JUMP TABLE ADDR.
      JMP A,I          GO TO IT!
JTBLA DEF *+1,I        ADDRESS OF TABLE 
      DEF ABORT        ZERO = ABORT 
      DEF INIT         ONE = INITIATE 
      DEF CONT         TWO = CONTINUE 
      DEF TIMOT        THREE = TIME OUT 
      DEF PFAIL        FOUR = POWER FAIL
      DEF CONT         FIVE = RESUME ON INTERRUPT 
      DEF REJ1         SIX AND SEVEN ARE ILLEGAL
      DEF REJ1
* 
PFAIL JSB RSET         DO A RESET.
      LDA RSTRT        THEN RESTART THE REQUEST.
      CLB 
      JMP NR
* 
* 
M.26  DEC -26 
NDDF  OCT 140000
CNTR  NOP 
TEMP  NOP 
DXAD  DEF DX1 
DX1   BSS 1         Q 
DX2   BSS 1           U 
DX3   BSS 1             I 
DX4   BSS 1               N 
DX5   BSS 1                 T 
DX6   BSS 1 
DX7   BSS 1                    A
DX8   BSS 1                      R
DX9   BSS 1                        E
DX10  BSS 1                          A
DX11  BSS 1         TEMPORARY LOCATION/STATUS 
DX12  BSS 1         TEMPORARY LOCATION/DSJ
DX13  BSS 1         REQUEST AND FUNCTION CODE 
DX14  BSS 1         USER'S BUFFER ADDRESS/PRAM 1
DX15  BSS 1         DVT ADDRESS 
DX16  BSS 1         CONTINUE/RESUME ENTRY POINT 
DX17  BSS 1         LENGTH OF BUFFER
DX18  BSS 1         END OF LINE MODIFIER
DX19  BSS 1         SPACE SUPPRESS FLAG 
DX20  BSS 1         CARRIAGE CONTROL FLAG 
DX21  BSS 1         SUBROUTINE RETURN ADDRESS 
DX22  BSS 1         FIRST WORD OF USER'S BUFFER 
DX23  BSS 1         PAPER OUT FLAG
DX24  BSS 1         STATUS WORD 
DX25  BSS 1         COUNT 
DX26  BSS 1         PAPER FLAG
      SKP 
*           INITIATE THE REQUEST
* 
INIT  LDA $DV15,I      SAVE REQUEST CODE & FUNCTION CODE
      AND B7703 
      STA DX13,I          TEMPORARILY.
      LDA $DV15,I 
      AND MSK          CHANGE REQUEST TO
      STA $DV15,I        MULTI-BUFFERED.
      LDA $DV16,I      SAVE USER'S BUFFER (OR PRAM1)
      STA DX14,I
      LDA $DV17,I      SAVE LENGTH
      STA DX17,I
      STA DX25,I
INIT1 JSB DSJ0         FIRST CHECK DSJ
      JSB EXITC        DO IT
* 
      JSB BDDSJ        CHECK STATUS 
      LDB $DV20,I   GET PAPER RETURN ADDRESS
      LDA DX18,I    AND FINAL TERMINATOR
      SSB           WAS IT OUT? 
      SSA           AND WAS THE TERMINATOR TO BE DONE?
      JMP INIT2     NO - CONTINUE 
      JSB SLEW      YES - DO TERMINATOR 
* 
      JSB EXITC     DO IT!
* 
      JSB EXITR     WAIT FOR PARALLEL POLL
* 
INIT2 LDA $DV20,I   GET FIRST TIME BIT AGAIN
      ELA,CLE,ERA   CLEAR 
      STA $DV20,I   AND RESTORE 
      CLA           CLEAR:
      STA DX22,I        FIRST WORD FLAG 
      STA DX26,I        AND PAPER FLAG
      LDA DX13,I       REQUEST CODE 
      CPA B3           CONTROL REQUEST CLEAR? 
      JMP CLEAR        YES
      CPA B1103        CONTROL REQUEST FORMS? 
      JMP FORMS        YES
* 
      AND B3           LOWER BITS ONLY
      CPA B2           IS IT A WRITE??
      JMP WRITE        YES DO IT
      CPA B3           IS IT ANOTHER CONTROL REQUEST
      JMP CNTRL 
REJ1  LDA NDDF         DON'T DOWN, DO FLUSH.
      INA              ILLEGAL REQUEST
      CLB 
      JMP NR1 
* 
CNTRL CLA           NOT RECOGNIZED CONTROL REQUESTS 
      JMP EXITD       NORMAL COMPLETION EXIT
* 
      SKP 
*  ALL NOT READY CODES COME HERE EXCEPT PAPER OUT 
* 
NR    CLB 
      STB DX16,I
      STA DX23,I    SAVE FAILURE CODE 
      JSB RSTR      RESTORE FIRST WORD
      LDB B4103     DISABLE PROGRAM SCHEDULING
      JSB SDV15     PUT IN DV15 
      JSB EXITC     DO IT 
* 
      CLB           CLEAR DX23 AND
      LDA DX23,I      FETCH ERROR CODE
      STB DX23,I
      JMP NR1 
NREDY LDA B2           NOT READY CODE 
NR1   STA $DV16,I 
      LDA DX24,I    GET STATUS
      STA $DV18,I     AND POST
      CLA 
      STA $DV17,I      XLOG 
      JMP DD.12,I      RETURN.
* 
*  TIME OUT ROUTINE 
* 
TIMOT LDA DX23,I       GET PAPER FLAG 
      SZA              WAS PAPER OUT? 
      JMP PPR1         YES - GO CHECK STATUS
TMOT1 LDA B3           TIME OUT CODE
      JMP NR
* 
*     CONTINUES ALL COME HERE 
* 
CONT  LDA DX16,I    GET RETURN
      LDB $DV16,I   GET IFD STATUS
      CPB B3        CHECK STATUS
      JMP TMOT1     TIME  OUT 
CT1   SZA              SPURIOUS INT.? 
      JMP A,I          O.K. 
      LDA B4           ILL. INT.
      CLB 
      ISZ DD.12        P+3
      JMP EXIT2 
* 
* ABORT HANDLES ABORT REQUESTS
* 
ABORT LDA ABADD     GET RETURN ADDRESS
      STA EXITC     STORE IN CONTINUE EXIT
      LDA B4
      JMP EXTC1 
ABADD DEF AB1 
* 
AB1   JSB RSTR      RESTORE FIRST WORD IF ANY 
      LDB B4103     DISABLE DRIVER SCHEDULING 
      JSB SDV15     PUT IN DVT
      CLA           CLEAR DVT16 
      STA $DV16,I 
      JSB EXITC     DO IT 
* 
AB2   CLA 
      STA DX21,I    CLEAR RE-ENTRANT POINTS 
      LDB DX25,I    GET TRANSMISSION LOG
      JMP EXTD1     ALL DONE
* 
* 
      SKP 
* 
*     WRITE CAUSES THE CHARACTERS IN THE USERS BUFFER TO BE PRINTED 
*     BASED ON THE CONTROL WORD PASSED TO IT. 
* 
WRITE CLA,INA           CARRIAGE CONTROL SET
      STA DX18,I          TO DO CR,LF.
      LDA DX19,I        CHECK IF SUPPRESS SPACE 
      CLB 
      SLA               IS IT SET?? 
      STB DX18,I        YES - CR MODIFIER ONLY
      STB DX19,I        CLEAR SPACE SUPPRESS BIT. 
SLLEN LDA DX17,I        REQUEST LENGTH. 
      ALS               CHANGE WORD COUNT TO CHARS. 
      CMA,INA           NEGATE. 
      SSA 
* 
* PROCESS INITIAL CARRIAGE CONTROL REQ. 
* 
STCHR STA DX17,I        RUNNING COUNT HERE. 
      LDA DX13,I        FETCH CONWORD 
      AND BIT10 
      SZA               HONESTY MODE ?
      JMP HNSTY           YEP. GO DO IT'S THING.
      LDA DX13,I
      AND BIT7          GET CONTROL BIT 7.
      SZA               SS = 1
      JMP NOCC            MEANS NO CARRIAGE CONTROL.
      STA DX20,I          NO CC FLAG. 
      LDA DX17,I    GET LENGTH
      SZA,RSS       IF ITS ZERO DO CR-LF
      JMP TRM       DO TERMINATOR 
      LDB DX14,I        BUFFER ADDRESS
      LDA B,I           GET THE FIRST CHAR. IN BUFFER 
      ALF,ALF 
      AND B377
      LDB PEJEC 
      CPA EJECT         PAGE EJECT ?
      JMP PEJCT         YES.
      CLB,INB           GET DOUBLE SPACE MODIFIER IN CASE.
      CPA DOUBL         DOUBLE SPACE ?
      JMP PEJCT         YES.
      CLB           PUT A 0 MODIFIER
      CPA STAR          SPACE SUPPRESS ?
      STB DX18,I    YES - RESET MODIFIER FOR CARRIAGE RETURN ONLY 
      JMP LOUT      GO OUTPUT THE LINE
      SKP 
* 
* NOCC SUPRESSES CARRIAGE CONTROL AT BEGINNING
* 
NOCC  CLB,INB          SET NO CC FLAG TO 1. 
      STB DX20,I
      JMP LOUT         GO OUTPUT A LINE.
* 
PEJCT LDA B          MODIFIER 
      JSB SLEW         SET UP TO DO BEGINNING LINE MODIFIER 
      JSB EXITC 
* 
      JSB EXITR     WAIT FOR PARALLEL POLL
* 
      JSB DSJ0      BUILD DSJ QUINT 
      JSB EXITC     GO DO IT
* 
      JSB CKDSJ     CHECK DSJ 
      JSB BDDSJ     DSJ BAD - CHECK STATUS
* 
* LOUT CHECKS THE LAST WORD TO BE OUT FOR AN UNDERSCORE "_" 
* IF FOUND IT DECREASES THE BUFFER LENGTH BY ONE TO BE TRANSMITTED
* AND DOESN'T DO END-OF-LINE MODIFIER 
* 
LOUT  LDB DX17,I    GET LENGTH OF BUFFER
      CMB,INB       TWO'S COMPLEMENT
      CLE,ERB       DIVIDE BY 2 AND SAVE REM. 
      SEZ,RSS       ADD -1 IF REM. IS ZERO
      ADB M1        ADD MINUS ONE 
      ADB DX14,I    ADD START ADDR. FOR LAST WORD ADDR. 
      LDA B,I       GET LAST WORD 
      LDB DX17,I      AND LENGTH AGAIN
      SLB           ODD MEANS BYTE IN UPPER HALF
      ALF,ALF       MAKE SURE IN LOWER HALF 
      AND B377      IS IT UNDERSCORE? 
      CPA B137
      RSS           YES 
      JMP LT1       NO - PRINT ENTIRE BUFFER
      ISZ DX17,I    DECREASE CHAR. COUNT BY ONE 
      CCB           SET B 
      STB DX18,I      FORGET ABOUT MODIFIER 
      SKP 
* 
* NOW PRINT THE BUFFER
* 
LT1   LDA DX17,I    GET LENGTH
      SZA,RSS       IS IT ZERO? 
      JMP TRM       YES - DO TERMINATOR ONLY
      LDA DX20,I    GET NOCC FLAG 
      CLE,SLA,RSS   SKIP IF SET 
      CCE           SET E 
SETUP LDB DX14,I    GET ADDRESS OF FIRST WORD 
      LDA B,I       GET FIRST WORD
      STA DX22,I      AND SAVE IN EXT.
      AND B377      PUT A NULL IN UPPER BYTE
      SEZ           IF E=1 UPDATE THE FIRST WORD
      STA B,I       RESTORE TO BUFFER 
      JSB PRNBF     GO SET UP QUINTS
      JSB EXITC     PRINT THEM!  CONTINUE  P+2
* 
      JSB EXITR     WAIT FOR PARALLEL POLL
* 
      JSB RSTR      RESTORE FIRST WORD
      JSB DSJ0      BUILD DSJ QUINT 
      JSB EXITC     GO DO IT
* 
      JSB CKDSJ     CHECK DSJ 
      JSB BDDSJ     BAD DSJ - ANALYZE 
TRM   LDA DX18,I    CHECK FOR TERMINATION.
      SSA           IS MODIFIER CORRECT?
      JMP NOTRM     DON'T DO TERMINATOR 
      CCB           SET 
      STB DX26,I      PAPER FLAG
      JSB SLEW
      JSB EXITC        P+2
* 
      JSB EXITR     WAIT FOR PARALLEL POLL
* 
* NOTRM DOES COMPLETION DSJ 
* 
NOTRM JSB DSJ0      BUILD DSJ QUINT 
      JSB EXITC     GO DO IT
* 
      JSB CKDSJ        CHECK DSJ
      JSB BDDSJ        ERROR !
      LDB DX25,I
      SKP 
* 
* EXITD IS DRIVER DONE EXIT POINT 
* 
EXITD LDA $DV6,I    GET STATUS
      IOR BIT5      OR IN BIT TO
      XOR BIT5         CLEAR EOM BIT
      STA $DV6,I      AND RESTORE 
EXTD1 STB $DV17,I      STORE XLOG.
      CLA 
      STA $DV16,I      ERROR CODE 
      STA DX16,I       CLEAR NEXT ENTRY 
      LDB DX24,I       PUT CURRENT STATUS 
      STB $DV18,I        AND STATUS.
      JMP DD.12,I      COMPLETION RETURN. 
* 
*     PRNBF SETS UP THE QUINT TO TRANSMIT THE USER'S BUFFER FOR 
*     THE PHYSICAL DRIVER.
* 
PRNBF NOP 
      LDA DX14,I    GET BUFFER ADDRESS
      STA BUFR        AND STORE IN BUFFER 
      LDA DX17,I    GET CHAR. COUNT 
      STA LEN         AND STORE IN LENGTH 
      LDA M1        PUT -1 IN A 
      STA $DV17,I     NUMBER OF QUINTS IN $DV17 
      LDA PRTQA     GET QUINT ADDRESS 
      JSB MOVE      GO MOVE QUINTS INTO EXT.
      DEF DX1       STARTING HERE 
      JMP PRNBF,I   RETURN
* 
*     HNSTY JUST PRINTS THE USERS BUFFER (NO CARRIAGE CONTROL PERIOD!)
* 
HNSTY LDB DX17,I    GET LENGTH
      SZB,RSS       IF ZERO, DON'T DO ANYTHING
      JMP EXITD     ALL DONE IF ZERO
      JSB PRNBF     GO PRINT THE BUFFER 
      JSB EXITC     EXIT P+1 TO PRINT 
* 
      JSB EXITR     WAIT FOR PARALLEL POLL
* 
      JMP NOTRM     ALL DONE - COMPLETE 
      SKP 
* 
* 
* FORMS CONTROL REQUESTS COME HERE. 
* 
FORMS LDB DX14,I    GET PRAM1 
      SZB,RSS       IS IT ZERO? 
      JMP SSPC      YES - SUPPRESS SPACE
      LDA PEJEC 
      SSB           TOP OF FORM?
      JMP FRM1      YES - DO IT 
      ADB M64       ADD -64 TO PRAM1
      SSB,RSS       IS IT STILL POSITIVE? 
      JMP CNTRL     YES - ILLEGAL PRAM1, COMPLETE REQUEST 
      LDA DX14,I    GET PRAM1 AGAIN 
FRM1  JSB SLEW      GO SET UP QUINTS
      JSB EXITC     GO DO IT! P+2 
* 
      JSB EXITR     WAIT FOR PARALLEL POLL
* 
      CLA           CLEAR 
      STA DX25,I      DX25
      JMP NOTRM     GO DO FINAL DSJ 
* 
* 
* 
* 
SSPC  CLA,INA       SET SPACE SUPPRESS BIT
      STA DX19,I    PUT IT IN EXTENSION 
      CLB 
      JMP EXITD     ALL DONE
* 
* 
*     SLEW SETS UP THE QUINT FOR FORMS CONTROL
* 
SLEW  NOP 
      ALF,ALF       MOVE TO UPPER BYTE
      STA DX11,I
      LDA DX11
      STA SLDX
      LDA M1        ONE QUINT 
      STA $DV17,I 
      LDA SLUQA        SLEW QUINT ADDRESS 
      JSB MOVE         PUT IT IN EXT. 
      DEF DX1       STARTING LOCATION 
      JMP SLEW,I
      SKP 
* 
*     CONTROL REQUEST CLEAR.  CAUSES 1.  RESET TO PRINTER 
*                                    2.  PUT PRINTER ON-LINE
* 
CLEAR JSB CLR       CLEAR PRINTER 
      JSB RSET      DO A TERMINAL RESET 
      JSB STAT      READ STATUS (DON'T CARE ABOUT DSJ)
      CLB 
      JMP EXITD     ALL DONE
* 
*     CLR READS 10 BYTES OF LONG STATUS. ALSO FREES CONTROLLER
*     AFTER PAPER OUT 
* 
CLR   NOP 
      LDA CLR       SAVE RETURN ADDRESS 
      STA DX21,I      IN DX21 
      LDA M1          ONE QUINT 
      STA $DV17,I 
      LDA DX11
      STA FLDX        POINTER TO MODIFIER 
      LDA B6          LONG STATUS MODIFIER
      ALF,ALF       MOVE TO PROPER POSITION 
      STA DX11,I
      LDA FLQA        QUINT ADDRESS 
      JSB MOVE        PUT THEM IN EXTENSION 
      DEF DX1       STARTING HERE 
      JSB EXITC     GO DO IT! 
* 
      JSB EXITR     WAIT FOR PARALLEL POLL
* 
      LDA SCRCH     DATA READY, SO READ LONG STATUS 
      STA RLDX
      LDA LSQA        READ LONG STATUS QUINT ADDRESS
      JSB MOVE
      DEF DX1       STARTING HERE 
      LDA M2        ONE QUINT 
      STA $DV17,I   PUT INTO DVT
      JSB EXITC     GO TO IT. 
* 
      LDA DX21,I    GET RETURN
      JMP A,I       RETURN
      SKP 
* 
*     RESET THE CONTROLLER
* 
RSET  NOP 
      LDA RSET        SAVE RETURN 
      STA DX21,I
      LDA B5        RESET  MODIFIER 
      ALF,ALF       PUT IN PROPER POSTION 
      STA DX11,I    PUT IN EXTENSION
      LDA DX11      GET ADDRESS 
      STA FLDX      STORE IN FLUSH QUINT
      LDA FLQA      GET QUINT ADDRESS 
      JSB MOVE      MOVE INTO EXT.
      DEF DX1       STARTING HERE 
      JSB EXITC     GO DO IT
* 
      JSB EXITR     WAIT FOR POLL 
* 
      JSB DSJ0      BUILD DSJ QUINT 
      JSB EXITC       CONTINUE EXIT 
* 
RS2   LDA B7        ON-LINE 
      ALF,ALF       PUT IN PROPER POSITION
      STA DX11,I
      LDA DX11      GET ADDRESS OF BUFFER 
      STA RSDX      STORE IN QUINT
      LDA B200
      ALF,ALF       PUT IN PROPER POSITION
      STA DX12,I
      LDA DX12
      STA FLDX
      LDA RSQA      GET QUINT ADDRESS 
      JSB MOVE      MOVE INTO EXT.
      DEF DX1 
      JSB MOVE      MOVE NEXT QUINT 
      DEF DX6 
      LDA M2          TWO QUINTS
      STA $DV17,I 
      JSB EXITC       CONTINUE EXIT 
* 
      JSB EXITR     WAIT FOR PARALLEL POLL
* 
      LDA DX21,I      FETCH RETURN
      JMP A,I 
      SKP 
* 
*     STATUS SUBROUTINE 
* 
STAT  NOP 
      LDA STAT      GET RETURN ADDRESS
      STA DX21,I    SAVE RE-ENTRANT POINT 
      LDA M2          TWO QUINTS
      STA $DV17,I 
      LDA DX11
      STA STATQ+1 
      LDA STAQA       STATUS QUINT ADDRESS
      JSB MOVE        MOVE IT INTO EXT. 
      DEF DX1          STARTING ADDRESS 
      LDA DX12
      STA DSJQ+1
      LDA DSJQA     MOVE DSJ QUINT
      JSB MOVE
      DEF DX6 
      JSB EXITC       P+2 
* 
      LDA DX11,I    GET STATUS
      JSB LBYTI     PUT IN PROPER LOCATION
      STA DX24,I      AND SAVE TEMPORARILY
      AND B300
      LDB DX21,I    GET RETURN ADDRESS
      CPA B300      ON-LINE? READY FOR DATA?
      JMP B,I       P+1 IS NOT READY RETURN 
* 
* 
*     IF  STATUS BAD, THEN ANALYZE
* 
      LDB DX24,I    GET STATUS
      LDA B2          AND ERROR CODE
      RBR,SLB       IS PRINTER OUT OF PAPER?
      JMP PPRO      DO PAPER OUT EXIT 
      RBR,RBR       MOVE TO NEXT POSITION 
      SLB           PRINTER RECEIVE PARITY ERROR? 
      LDA B5        YES 
      JMP NR
* 
* ALL BAD DSJ'S COME HERE 
* 
BDDSJ NOP 
      LDA BDDSJ     SAVE RETURN ADDRESS 
      STA DX23,I
      JSB STAT      CHECK STATUS
      CLA           CLEAR 
      STA DX23,I      RETURN POINT
      JMP BDDSJ,I   STATUS OK - CONTINUE
      SKP 
* 
*  PAPER IS OUT. CONTINUE TO READ STATUS AND DSJ EVERY 5 SECONDS
*  UNTIL THE DEVICE INDICATES ITS READY 
* 
PPRO  LDA $DV6,I    GET DEVICE STATUS 
      IOR BIT5      INDICATE EOM
      STA $DV6,I
      LDA =D-500    SET A LOGICAL TIMEOUT 
      STA $DV12,I     IN CLOCK
      LDA $DV20,I   SET 
      IOR BIT15       FIRST TIME BIT IN 
      STA $DV20,I       CASE OF ABORT 
      CLA,INA       START TIMEOUT 
      ISZ DD.12     EXIT
      ISZ DD.12       LOGICAL 
      JMP DD.12,I        WAIT 
* 
PPR1  JSB STAT      CHECK STATUS
      JSB CLR       CLEAR DEVICE
* 
      LDA $DV20,I   RESET FIRST TIME
      ELA,CLE,ERA     BIT 
      STA $DV20,I   RESTORE 
      CLB 
      LDA DX23,I      RETURN ADDRESS INTO THE DRIVER
      STB DX23,I    CLEAR THAT LOCATION 
      LDB DX26,I    GET PAPER FLAG
      CMB,SZB       IF SET DO TERMINATOR AGAIN
      JMP A,I       RETURN TO PROGRAM AT POINT OF EXIT
      JMP TRM       DO TERMINATOR AGAIN 
* 
      SKP 
* 
*     "MOVE" MOVES THE QUINTS INTO THE EXTENTION. 
* 
MOVE  NOP 
      LDB MOVE,I    GET ADDRESS OF ADDRESS IN EXT.
      LDB B,I       GET FINAL ADDRESS 
      CPB DX1       IF DX1 SET DVT
      STB $DV16,I      SET UP EXT ADDRESS WHERE QUINTS ARE. 
MO5   JSB .MVW      MOVE QUINT INTO EXTENSION 
      DEF B5        FIVE WORDS IN EXT.
      NOP 
      ISZ MOVE         BUMP RETURN
      JMP MOVE,I       RETURN P+2 
* 
* 
LBYTI NOP 
      ALF,ALF       MOVE TO LOWER BYTE
      AND B377      MASK OUT UPPER BYTE 
      JMP LBYTI,I   RETURN
* 
* 
*     CHECK DSJ SUB 
* 
CKDSJ NOP 
      LDA DX12,I       GET DSJ RESPONSE 
      JSB LBYTI     MOVE TO PROPER POSITION 
      SZA,RSS 
      ISZ CKDSJ      O.K. RETURN P+2
      JMP CKDSJ,I    ZERO IS COOL.
* 
DSJ0  NOP 
      LDA DX12
      STA DSJQ+1
      LDA DSJQA       DSJ QUINT ADDRESS 
      JSB MOVE      PUT IN EXT. 
      DEF DX1       STARTING HERE 
      LDA M1        ONE QUINT 
      STA $DV17,I   PUT IN DVT. 
      JMP DSJ0,I    RETURN
      SKP 
* 
*SDV15 MODIFIES DV15 WITHOUT DESTROYING BITS 14 AND 15
* 
SDV15 NOP 
      LDA $DV15,I   GET DV15
      AND NDDF      SAVE 14 AND 15
      IOR B         OR IN DESIRED PATTERN 
      STA $DV15,I   RESTORE TO DV15 
      JMP SDV15,I   BACK TO MAIN PROGRAM
* 
* RSTR: RESTORE FIRST WORD TO BUFFER
* 
RSTR  NOP 
      LDA DX22,I    GET FIRST WORD AGAIN
      LDB DX14,I    GET ADDRESS OF FIRST WORD 
      SZA           IF ITS ZERO DON'T RESTORE!! 
      STA B,I       RESTORE TO BUFFER LOCATION
      CLA           CLEAR A 
      STA DX22,I      AND STORE IN DX22 
      JMP RSTR,I     ALL DONE!! 
* 
* EXITC IS THE CONTINUE EXIT WHICH SAVES THE NEXT ENTRY POINT 
* 
EXITC NOP 
      CLA           CLEAR A 
EXTC1 LDB EXITC 
      STB DX16,I     SAVE NEXT ENTRY. 
EXIT2 ISZ DD.12 
      JMP DD.12,I    RETURN.
* 
* EXITR IS THE LOGICAL WAIT EXIT WHICH SETS THE RESUME ENTRY POINT
* 
EXITR NOP 
      CLA,INA       A=1 (SET TIMEOUT BIT) 
      LDB EXITR     GET ENTRY POINT 
      STB DX16,I      AND SAVE IT 
      LDB M3000     GET LOGICAL TIMEOUT 
      STB $DV12,I     AND STORE IN CLOCK
      ISZ DD.12     INCREMENT RETURN
      ISZ DD.12       TWICE 
      JMP DD.12,I   RETURN
      SKP 
*      CONSTANTS, QUINTS, ETC.
* 
* 
RSQA  DEF RSETQ 
STAQA DEF STATQ 
SLUQA DEF SLEWQ 
DSJQA DEF DSJQ
PRTQA DEF PRNTQ 
FLQA  DEF FLSHQ 
LSQA  DEF RLSQ
* 
PRNTQ OCT 120102       PRINT DATA 
BUFR  OCT 0 
LEN   OCT 0 
      OCT 20001          CACON
      OCT 140            SECONDARY
* 
DSJQ  OCT 120101       DSJ
      NOP 
M1    DEC -1
B1    OCT 1              CACON
      OCT 160            SECONDARY
* 
SLEWQ OCT 120102         SLEW 
SLDX  OCT 0 
      DEC -1
      OCT 20001 
      OCT 150            SECONDARY
* 
STATQ OCT 120101         STATUS (1 BYTE)
      NOP 
      DEC -1
      OCT 10001              CACON
      OCT 156            SECONDARY
* 
RSETQ OCT 120102         ON-LINE & DISPLAY FUNCTIONS
RSDX  OCT 0 
      DEC -1
      OCT 10001 
      OCT 142 
* 
FLSHQ OCT 120102    READ LONG STATUS QUINT
FLDX  OCT 0 
      DEC -1
      OCT 20001 
      OCT 142 
* 
RLSQ  OCT 120101    READ LONG STATUS QUINT
RLDX  OCT 0 
M10   DEC -10 
      OCT 1 
      OCT 140 
* 
B2    OCT 2 
B3    OCT 3 
B4    OCT 4 
B5    OCT 5 
B6    OCT 6 
B7    OCT 7 
B100  OCT 100 
B137  OCT 137 
B200  OCT 200 
B300  OCT 300 
B1103 OCT 1103
B4103 OCT 4103
B7703 OCT 7703
B377  OCT 377 
M2    DEC -2
M64   DEC -64 
M3000 DEC -3000 
BIT5  OCT 40
BIT7  EQU B200
BIT10 OCT 2000
MSK   OCT 167774
RSTRT OCT 100077
BIT15 OCT 100000
BUFAD OCT 0 
EJECT OCT 61
DOUBL OCT 60
STAR  OCT 52
PEJEC EQU B100
SCRCH DEF *+1       SCRATCH AREA FOR LONG STATUS
      BSS 5         MUST BE AT LEAST 5 WORDS
      END 
* 
    