home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / pdp8 / os278-src.tar.Z / os278-src.tar / lpts.pa < prev    next >
Text File  |  1992-09-18  |  6KB  |  287 lines

  1. /LPTS SERIAL LINE PRINTER
  2. /
  3. /
  4. /
  5. / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  6. / AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  7. / CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  8. / FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  9. /
  10. / THE SOFTWARE DESCRIBED HEREIN IS FURNISHED TO THE PURCHASER
  11. / UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  12. / (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  13. / SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  14. / DIGITAL EQUIPMENT ASSUMES NO RESPONSIBILITY FOR THE USE
  15. / OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED
  16. / BY DIGITAL.
  17. /
  18. /    COPYRIGHT (C) 1977,1978,1979,1981,1982, 1984
  19. /                BY
  20. /        DIGITAL EQUIPMENT CORPORATION
  21. /
  22.  
  23. PDPC=6336        /PRINT CHARACTER
  24. PDSF=6331        /SKIP ON FLAG
  25. PDBD=6333        /SET BAUD RATE
  26.  
  27. RDSKP=6321        /SKIP ON SERIAL PORT INPUT FLAG
  28. RDXF=6326        /READ SERIAL XON/OFF FLAG
  29. XON=21
  30. XOFF=23
  31.  
  32. LPVERSION="B&77^100+PATCH+60    /VERSION B
  33. PATCH=3                /PATCH LEVEL
  34.  
  35. NOCHK=    1    / 0 = Don't check for ctrl c, 1 = check for ctrl c
  36. AUTOFF= 0    / 0 = No auto FF, 1 = Auto FF
  37.  
  38. *0        /ORIGIN FOR BUILD INFO
  39.  
  40. -1        /ONE ENTRY POINT
  41. DEVICE LPTS
  42. DEVICE LPT    /DEVICE NAME
  43. 1040        /DEVICE TYPE
  44. LQP&177+4000    /ENTRY POINT + TWO-PAGE FLAG
  45. 0        /REQUIRED ZEROES
  46. 0
  47.  
  48. PAGE
  49.  
  50.  
  51. LQPORG=.
  52. STLINE,    -205        /-(WIDTH+1)  MODIFIED BY "SET LPT WIDTH NN"
  53. LINE,    0        /POINTER TO SECOND PAGE LINE COUNTER
  54. LPTSER,    DEVICE LPTS    /USED BY "SET" FOR IDENTIFICATION OF SERIAL HANDLER
  55. STBAUD,    14        /CAN BE MODIFIED BY "SET LPT BAUD NN"
  56.  
  57. LQP,    LPVERSION    /ENTRY POINT (MH)
  58.     CLL CLA
  59. LQBAUD,    TAD STBAUD    /INIT PRINTER BAUD RATE
  60.     PDBD
  61.     CLA
  62.     JMS LQPDCZ    /INIT SECOND PAGE LINK
  63.     RDF        /SAVE RETURN FIELD
  64.     TAD (CIF CDF)
  65.     DCA LQPRDF
  66.     TAD I LQP    /GET FUNCTION WORD
  67.     AND (70)
  68.     TAD (CDF)
  69.     DCA LQPBDF    /SET BUFFER CDF
  70.     TAD I LQP
  71.     AND (3700)
  72.     CMA
  73.     DCA LQPDWC    /SET DOUBLE-WORD COUNT +1
  74.     ISZ LQP
  75.     TAD I LQP
  76.     DCA LQPBUF    /SET BUFFER PTR
  77.     ISZ LQP
  78.     TAD I LQP
  79. LQPBDF,    0        /CDF TO BUFFER
  80.     SZA CLA
  81.     JMP LQPGO
  82.     TAD (15)
  83.     JMS LQPDOC    /NEW PAGE PN BLOCK 0
  84.     TAD (14)
  85.     JMS LQPDOC
  86. LQPGO,    ISZ LQPDWC
  87.     JMP LQPGO1    /LOOP IF MORE TO DO
  88. LQPCZ,    CLL CLA
  89.     JMS LQPDOC    /CLEAR SPACE ACCUMULATORS
  90. LQPRDF,    0        /THEN RETURN TO CALLER
  91.     ISZ LQP
  92.     ISZ LQP
  93.     JMP I LQP
  94.  
  95. LQPGO1,    TAD I LQPBUF    /GET NEXT WORD
  96.     AND (7400)
  97.     CLL RTR
  98.     DCA LQPCSV    /SAVE PART OF THIRD CHAR
  99.     TAD I LQPBUF
  100.     JMS LQPDOC    /OUTPUT FIRST CHAR
  101.     ISZ LQPBUF
  102.     NOP        /PATCH TO AVOID SKIP ON ZERO
  103.     TAD I LQPBUF
  104.     JMS LQPDOC    /OUTPUT SECOND CHAR
  105.     TAD I LQPBUF
  106.     AND (7400)    /PUT THIRD CHAR TOGETHER
  107.     BSW
  108.     TAD LQPCSV
  109.     CLL RTR
  110.     JMS LQPDOC    /OUTPUT THIRD CHAR
  111.     ISZ LQPBUF
  112.     NOP        /PATCH TO AVOID SKIP ON ZERO
  113.     JMP LQPGO    /LOOP FOR DONE TEST
  114.  
  115. LQPDCZ,    0        /SET UP SECOND PAGE POINTERS
  116.     TAD LQPDCZ
  117.     AND (7600)
  118.     DCA CORPAG    /SAVE CURRENT PAGE #
  119.     TAD CORPAG
  120.     TAD (LQPDCX-LQPORG)
  121.     DCA LQPDCY
  122.     RDF        /GET RETURN FIELD
  123.     TAD (CDF    /BUILD DATA FIELD INSTRUCTION
  124.     DCA RTFLD    /SAVE IT FOR LATER
  125.     CDF 0        /SET DF TO OUR FIELD
  126.     TAD (LQLINE-LQPORG
  127.     TAD CORPAG    /ADD BASE PAGE
  128.     DCA LINE    /SAVE IT AS A POINTER
  129.     TAD STLINE    /GET THE MINUS CHARACTER COUNT
  130.     IAC        /SUBTRACT ONE FROM IT, BECAUSE "SET LPT WIDTH" ADDS ONE.
  131.     DCA I LINE    /SET IT IN THE SECOND PAGE
  132. RTFLD,    CDF
  133.     JMP I LQPDCZ
  134.  
  135. LQPDOC,    0
  136.     JMS I LQPDCY
  137.     JMP LQPCZ
  138.     JMP I LQPDOC
  139.  
  140. CORPAG,    0
  141. LQPCSV,    0
  142. LQPBUF,    0
  143. LQPDWC,    0
  144. LQPDCY,    0
  145.  
  146. PAGE
  147.  
  148. LQPDCX,    0        /OUTPUT ONE CHAR
  149.     AND (177)
  150.     TAD (-40)    /TEST FOR SPECIAL OR BLANK
  151.     SPA
  152.     JMP LQPSPC    /JUMP IF SPECIAL
  153.     ISZ LQPX    /PRINTABLE CHAR; BUMP CHAR COUNTER
  154.     TAD K40        /RESTORE THE CHAR CODE
  155. LQPDC1,    DCA LQPCTM    /SAVE CHAR CODE
  156.     JMS LQPNDX    /PRINT A CHAR
  157. LQPDCR,    ISZ LQPDCX    /BUMP TO OK RETURN
  158.     JMS LQPEOL    /CHECK FOR END OF LINE
  159.     JMP I LQPDCX    /RETURN TO CALLER
  160.  
  161. LQPNDX,    0        /ROUTINE TO PRINT A CHAR
  162.     JMS XONOFF    //LOOK FOR XONOFF
  163.     TAD LQPCTM    /RETRIEVE SAVED CHAR
  164.     SNA
  165.     JMP I LQPNDX    /EXIT IF NONE
  166.     PDPC        /PRINT CHAR
  167.     PDSF
  168.     JMP .-1
  169. L7600,    7600        /SHADY CLA
  170.     JMP I LQPNDX    /XON, EXIT
  171.  
  172. XONOFF,    0
  173. IFNZRO    NOCHK < KSF >
  174. IFZERO    NOCHK < NOP >
  175.     JMP    XONOFA
  176.     KRB
  177.     TAD (-3
  178.     SNA CLA
  179.     JMP XONOF3    //EASIER THAN REWRITING FOR 2-WAY CROSS PAGE LINKAGE.
  180. XONOFA,    RDSKP
  181.     JMP XONOF1    //NO FLAG. CHECK XON STATUS.
  182.     RDXF
  183.     AND (177
  184.     TAD (-XON
  185.     SNA
  186.     JMP XONOF2    //XON. RESET OR KEEP OUTPUT GOING.
  187.     TAD (XON-XOFF
  188.     SNA CLA
  189.     JMP .+3        //XOFF. SET THE WAIT FLAG.
  190. XONOF1,    ISZ XOFLAG
  191.     JMP XONOF2    //NOTHING DOING, SO EXIT TO PRINT.
  192.     STA        //KEEP XOFF SET,
  193.     DCA XOFLAG
  194.     JMP XONOFF+1    //UNTIL WE GET XON.
  195. XONOF2,    DCA XOFLAG
  196.     JMP I XONOFF    //LEGIT XON.
  197.  
  198. XONOF3,    CDF CIF 0
  199.     JMP I L7600
  200.  
  201. XOFLAG,    0
  202.  
  203.  
  204. /CHECK FOR END OF LINE TO BE FORCED.
  205.  
  206. LQPEOL,    0
  207.     TAD LQPX    /GET AMOUNT OF CHAR SO FAR ON THIS LINE
  208.     TAD LQLINE    /ARE WE OVER THE LIMIT?
  209.     SPA CLA
  210.     JMP I LQPEOL    /OK, KEEP PRINTING ON CURRENT LINE
  211.     JMS LQCRLF    /THAT'S IT, OUTPUT CR/LF
  212.     JMP I LQPEOL
  213.  
  214. LQCRLF,    0
  215.     DCA LQPX    /CLEAR CHARACTER COUNTER
  216.     TAD (15
  217.     DCA LQPCTM    /OUTPUT CR
  218.     JMS LQPNDX
  219.     TAD (12
  220.     DCA LQPCTM    /OUTPUT LF
  221.     JMS LQPNDX
  222.     JMP I LQCRLF
  223.  
  224.  
  225. /SPECIAL CHARACTER CHECKING
  226. LQPSPC,    TAD (40-32)    /CONTROL Z?
  227.     SNA
  228.     JMP I LQPDCX    /TAKE EOF RETURN IF SO
  229.  
  230.     TAD (32-15)    /CARRIAGE RETURN?
  231.     SNA
  232.     JMP LQPCR    /JUMP IF SO
  233.  
  234.     IAC        /FORM FEED?
  235.     SNA
  236.     JMP LQPFF    /JUMP IF SO
  237.  
  238.     IAC
  239.     IAC        /LINE FEED?
  240.     SNA
  241.     JMP LQPLF    /JUMP IF SO
  242.  
  243.     IAC        /TAB?
  244.     SNA
  245.     JMP LQPTB
  246.  
  247.     TAD (11
  248.     JMP LQPDC1    /AND PRINT IT
  249.  
  250. LQPTB,    TAD LQPX    /DO TAB
  251.     AND (7        /8 COLUMNS PER TAB
  252.     TAD (-10    /SUBTRACT 8
  253.     DCA CRCNTR    /MAKE IT A COUNTER
  254. LQPTB1,    TAD K40
  255.     DCA LQPCTM
  256.     ISZ LQPX    /BUMP CHAR COUNTER
  257.     JMS LQPNDX    /PRINT A SPACE
  258.     ISZ CRCNTR
  259.     JMP LQPTB1    /KEEP GOING ROUND
  260.     JMP LQPDCR    /EXIT
  261. LQPCR,    DCA LQPX    /CLEAR CHAR COUNTER
  262.     TAD (15
  263.     JMP LQPDC1    /OUTPUT A CR
  264.  
  265. LQPLF,    ISZ LQPDY    /BUMP LINE COUNTER
  266.     TAD LQPDY    /CHECK FOR NEXT PAGE
  267.     TAD LQPAGE
  268.     SMA CLA
  269. IFNZRO AUTOFF < JMP LQPFF >    / Auto page break
  270. IFZERO AUTOFF < DCA LQPDY >    / No auto page break
  271.     TAD (12
  272.     JMP LQPDC1    /OUTPUT A LF
  273.  
  274. LQPFF,    DCA LQPDY    /CLEAR LINE COUNTER
  275.     TAD (14        /DO FORM FEED
  276.     JMP LQPDC1    /DO PAGE EJECT NOW
  277.  
  278. LQPX,    0
  279. CRCNTR,    0
  280. LQPDY,    0
  281. LQPCTM,    0
  282. LQPAGE,    -102        /-NUMBER OF LINES PER PAGE
  283. LQLINE,    -205        /-NUMBER OF CHARACTERS PER LINE
  284. K40,    0040        /EFFECTIVE NOP
  285.  
  286.