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 >
Wrap
Text File
|
1992-09-18
|
6KB
|
287 lines
/LPTS SERIAL LINE PRINTER
/
/
/
/ THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/ AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/ CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/ FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/ THE SOFTWARE DESCRIBED HEREIN IS FURNISHED TO THE PURCHASER
/ UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/ (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/ SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/ DIGITAL EQUIPMENT ASSUMES NO RESPONSIBILITY FOR THE USE
/ OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED
/ BY DIGITAL.
/
/ COPYRIGHT (C) 1977,1978,1979,1981,1982, 1984
/ BY
/ DIGITAL EQUIPMENT CORPORATION
/
PDPC=6336 /PRINT CHARACTER
PDSF=6331 /SKIP ON FLAG
PDBD=6333 /SET BAUD RATE
RDSKP=6321 /SKIP ON SERIAL PORT INPUT FLAG
RDXF=6326 /READ SERIAL XON/OFF FLAG
XON=21
XOFF=23
LPVERSION="B&77^100+PATCH+60 /VERSION B
PATCH=3 /PATCH LEVEL
NOCHK= 1 / 0 = Don't check for ctrl c, 1 = check for ctrl c
AUTOFF= 0 / 0 = No auto FF, 1 = Auto FF
*0 /ORIGIN FOR BUILD INFO
-1 /ONE ENTRY POINT
DEVICE LPTS
DEVICE LPT /DEVICE NAME
1040 /DEVICE TYPE
LQP&177+4000 /ENTRY POINT + TWO-PAGE FLAG
0 /REQUIRED ZEROES
0
PAGE
LQPORG=.
STLINE, -205 /-(WIDTH+1) MODIFIED BY "SET LPT WIDTH NN"
LINE, 0 /POINTER TO SECOND PAGE LINE COUNTER
LPTSER, DEVICE LPTS /USED BY "SET" FOR IDENTIFICATION OF SERIAL HANDLER
STBAUD, 14 /CAN BE MODIFIED BY "SET LPT BAUD NN"
LQP, LPVERSION /ENTRY POINT (MH)
CLL CLA
LQBAUD, TAD STBAUD /INIT PRINTER BAUD RATE
PDBD
CLA
JMS LQPDCZ /INIT SECOND PAGE LINK
RDF /SAVE RETURN FIELD
TAD (CIF CDF)
DCA LQPRDF
TAD I LQP /GET FUNCTION WORD
AND (70)
TAD (CDF)
DCA LQPBDF /SET BUFFER CDF
TAD I LQP
AND (3700)
CMA
DCA LQPDWC /SET DOUBLE-WORD COUNT +1
ISZ LQP
TAD I LQP
DCA LQPBUF /SET BUFFER PTR
ISZ LQP
TAD I LQP
LQPBDF, 0 /CDF TO BUFFER
SZA CLA
JMP LQPGO
TAD (15)
JMS LQPDOC /NEW PAGE PN BLOCK 0
TAD (14)
JMS LQPDOC
LQPGO, ISZ LQPDWC
JMP LQPGO1 /LOOP IF MORE TO DO
LQPCZ, CLL CLA
JMS LQPDOC /CLEAR SPACE ACCUMULATORS
LQPRDF, 0 /THEN RETURN TO CALLER
ISZ LQP
ISZ LQP
JMP I LQP
LQPGO1, TAD I LQPBUF /GET NEXT WORD
AND (7400)
CLL RTR
DCA LQPCSV /SAVE PART OF THIRD CHAR
TAD I LQPBUF
JMS LQPDOC /OUTPUT FIRST CHAR
ISZ LQPBUF
NOP /PATCH TO AVOID SKIP ON ZERO
TAD I LQPBUF
JMS LQPDOC /OUTPUT SECOND CHAR
TAD I LQPBUF
AND (7400) /PUT THIRD CHAR TOGETHER
BSW
TAD LQPCSV
CLL RTR
JMS LQPDOC /OUTPUT THIRD CHAR
ISZ LQPBUF
NOP /PATCH TO AVOID SKIP ON ZERO
JMP LQPGO /LOOP FOR DONE TEST
LQPDCZ, 0 /SET UP SECOND PAGE POINTERS
TAD LQPDCZ
AND (7600)
DCA CORPAG /SAVE CURRENT PAGE #
TAD CORPAG
TAD (LQPDCX-LQPORG)
DCA LQPDCY
RDF /GET RETURN FIELD
TAD (CDF /BUILD DATA FIELD INSTRUCTION
DCA RTFLD /SAVE IT FOR LATER
CDF 0 /SET DF TO OUR FIELD
TAD (LQLINE-LQPORG
TAD CORPAG /ADD BASE PAGE
DCA LINE /SAVE IT AS A POINTER
TAD STLINE /GET THE MINUS CHARACTER COUNT
IAC /SUBTRACT ONE FROM IT, BECAUSE "SET LPT WIDTH" ADDS ONE.
DCA I LINE /SET IT IN THE SECOND PAGE
RTFLD, CDF
JMP I LQPDCZ
LQPDOC, 0
JMS I LQPDCY
JMP LQPCZ
JMP I LQPDOC
CORPAG, 0
LQPCSV, 0
LQPBUF, 0
LQPDWC, 0
LQPDCY, 0
PAGE
LQPDCX, 0 /OUTPUT ONE CHAR
AND (177)
TAD (-40) /TEST FOR SPECIAL OR BLANK
SPA
JMP LQPSPC /JUMP IF SPECIAL
ISZ LQPX /PRINTABLE CHAR; BUMP CHAR COUNTER
TAD K40 /RESTORE THE CHAR CODE
LQPDC1, DCA LQPCTM /SAVE CHAR CODE
JMS LQPNDX /PRINT A CHAR
LQPDCR, ISZ LQPDCX /BUMP TO OK RETURN
JMS LQPEOL /CHECK FOR END OF LINE
JMP I LQPDCX /RETURN TO CALLER
LQPNDX, 0 /ROUTINE TO PRINT A CHAR
JMS XONOFF //LOOK FOR XONOFF
TAD LQPCTM /RETRIEVE SAVED CHAR
SNA
JMP I LQPNDX /EXIT IF NONE
PDPC /PRINT CHAR
PDSF
JMP .-1
L7600, 7600 /SHADY CLA
JMP I LQPNDX /XON, EXIT
XONOFF, 0
IFNZRO NOCHK < KSF >
IFZERO NOCHK < NOP >
JMP XONOFA
KRB
TAD (-3
SNA CLA
JMP XONOF3 //EASIER THAN REWRITING FOR 2-WAY CROSS PAGE LINKAGE.
XONOFA, RDSKP
JMP XONOF1 //NO FLAG. CHECK XON STATUS.
RDXF
AND (177
TAD (-XON
SNA
JMP XONOF2 //XON. RESET OR KEEP OUTPUT GOING.
TAD (XON-XOFF
SNA CLA
JMP .+3 //XOFF. SET THE WAIT FLAG.
XONOF1, ISZ XOFLAG
JMP XONOF2 //NOTHING DOING, SO EXIT TO PRINT.
STA //KEEP XOFF SET,
DCA XOFLAG
JMP XONOFF+1 //UNTIL WE GET XON.
XONOF2, DCA XOFLAG
JMP I XONOFF //LEGIT XON.
XONOF3, CDF CIF 0
JMP I L7600
XOFLAG, 0
/CHECK FOR END OF LINE TO BE FORCED.
LQPEOL, 0
TAD LQPX /GET AMOUNT OF CHAR SO FAR ON THIS LINE
TAD LQLINE /ARE WE OVER THE LIMIT?
SPA CLA
JMP I LQPEOL /OK, KEEP PRINTING ON CURRENT LINE
JMS LQCRLF /THAT'S IT, OUTPUT CR/LF
JMP I LQPEOL
LQCRLF, 0
DCA LQPX /CLEAR CHARACTER COUNTER
TAD (15
DCA LQPCTM /OUTPUT CR
JMS LQPNDX
TAD (12
DCA LQPCTM /OUTPUT LF
JMS LQPNDX
JMP I LQCRLF
/SPECIAL CHARACTER CHECKING
LQPSPC, TAD (40-32) /CONTROL Z?
SNA
JMP I LQPDCX /TAKE EOF RETURN IF SO
TAD (32-15) /CARRIAGE RETURN?
SNA
JMP LQPCR /JUMP IF SO
IAC /FORM FEED?
SNA
JMP LQPFF /JUMP IF SO
IAC
IAC /LINE FEED?
SNA
JMP LQPLF /JUMP IF SO
IAC /TAB?
SNA
JMP LQPTB
TAD (11
JMP LQPDC1 /AND PRINT IT
LQPTB, TAD LQPX /DO TAB
AND (7 /8 COLUMNS PER TAB
TAD (-10 /SUBTRACT 8
DCA CRCNTR /MAKE IT A COUNTER
LQPTB1, TAD K40
DCA LQPCTM
ISZ LQPX /BUMP CHAR COUNTER
JMS LQPNDX /PRINT A SPACE
ISZ CRCNTR
JMP LQPTB1 /KEEP GOING ROUND
JMP LQPDCR /EXIT
LQPCR, DCA LQPX /CLEAR CHAR COUNTER
TAD (15
JMP LQPDC1 /OUTPUT A CR
LQPLF, ISZ LQPDY /BUMP LINE COUNTER
TAD LQPDY /CHECK FOR NEXT PAGE
TAD LQPAGE
SMA CLA
IFNZRO AUTOFF < JMP LQPFF > / Auto page break
IFZERO AUTOFF < DCA LQPDY > / No auto page break
TAD (12
JMP LQPDC1 /OUTPUT A LF
LQPFF, DCA LQPDY /CLEAR LINE COUNTER
TAD (14 /DO FORM FEED
JMP LQPDC1 /DO PAGE EJECT NOW
LQPX, 0
CRCNTR, 0
LQPDY, 0
LQPCTM, 0
LQPAGE, -102 /-NUMBER OF LINES PER PAGE
LQLINE, -205 /-NUMBER OF CHARACTERS PER LINE
K40, 0040 /EFFECTIVE NOP