/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 XONCK 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 COOFF //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. CHE, -205 /-NUMBER OF CHARACTERS PER LINE K40, 0040 /EFFECTIVE NOP