/3 PRINTRONIX 300 HANDLER / FILE: LP300C.PA / / / / LPVERSION="C&77 /*** PAD=0 /DEFINE THIS SYMBOL TO PAD IOT WITH NOP'S *0 -1 DEVICE LPSV;DEVICE LPT;1040;LPT&177;ZBLOCK 2 /LPT HANDLER FOR PRINTRONIX MODEL 300 PRINTER /MODIFIED BY RON LARKIN FROM THE LPSV.PA HANDLER VERSION 3 FROM DEC /THIS PRINTRONIX HANDLER IS DESIGNED SO THAT THE WIDTH-SETTING /COMMAND VIA CCL "SET" IS AVAILABLE. TO DO THIS, THE FIRST LOCATIONS /AND THE VERSION NUMBER ARE KEPT THE SAME AS IN THE DEC HANDLER. / /HANDLES TABS. ALSO CATCHES SOME CONTROL CHARACTERS /THAT HAVE THE UPSETTING EFFECT OF CAUSING THE PRINTER TO /EJECT PAGES CONTINUOUSLY, EVEN IF TURNED OFF-LINE. / THESE CHARACTERS SEEM TO BE: / 013 VT ^K VERTICAL TAB / 021 DC1 ^Q ? / 030 CAN ^X ? / / IN FACT, I TRIED ^Q, ^R, ETC. UNTIL I GREW TIRED OF STOPPING /THE PRINTER. I ASSUME THAT ^Q THROUGH ^Y (020-031) ARE OF NO USE /TO THE PRINTER AND SHOULD BE SUPPRESSED. / / / WE HAVE LIMITED ROOM IN THIS HANDLER. THEREFORE, THE /CODES 005 (PLOT MODE), 013 (VT), AND 020 (^P) ARE PASSED TO THE /HARDWARE EVEN THOUGH THEY ARE KNOWN TO GIVE TROUBLE TO ORDINARY /LINE PRINTER OUTPUT. / NOTE: YOU CAN'T USE OS/8 "SET" TO MAKE THIS AN UPPER-CASE-ONLY /PRINTER! THE CONSEQUENCES WILL BE UNDEFINED. //RECONSTRUCTED FROM DISSASSEMBLY OF "LPSV.BN" AND FROM /THE VERSION B SOURCE. RL 16-DEC-81 LSF=6661 /SKIP ON FLAG LSR=6663 /SKIP ON ERROR LLS=6666 /LOAD LPT BUFFER EJECT *200 LPWDTH, -205 /-(WIDTH+1) [USE -121 FOR 80 COLUMNS] LTERMC, 14 /4 FOR LV8 LP0011, 11 /CONSTANT 11 LP7770, 7770 /CONSTANT FOR PRINT ROUTINE LP0007, 7 /CONSTANT 7 LPT, LPVERSION /NORMAL ENTRY POINT CLA STL RAR /4000 TO ACC TAD I LPT / R/W BIT TO LINK L AND LP7700 / I CMA /TREAT 0 PG CNT AS 0 WD CNT N DCA LPTWC /SAVE -(DBLWD COUNT+1) K LPT214, RDF / TAD LPTCIF / M DCA LPTXIT /SAVE CIF CDF RETRN FIELD U TAD I LPT / S AND (70 / T TAD (CDF 0 / DCA LPTCDF / N ISZ LPT /PT TO BUFFER O TAD I LPT /GET BUFFER ADDRESS T DCA LPTCA /SAVE BUFFER PTR ISZ LPT /PT TO BLOCK # C TAD I LPT /GET IT H ISZ LPT /POINT TO ERROR RETURN G LPTCDF, HLT / ! SNL JMP LPTERR /CAN'T READ FROM LPT SNA CLA TAD LPT214 /OUTPUT FORM FEED IF BLOCK 0 LPTELP, JMS LPTPCH /PRINT 3RD CHAR OF DOUBLEWORD ISZ LPTWC JMP LPTLP /GET 3 MORE CHARS SKP LPTCTZ, TAD LTERMC JMS LPTPCH /OUTPUT FORM FEED IF ^Z SEEN (EOT OF LV8) ISZ LPT /BUMP TO NORMAL RETURN LPTXIT, HLT /RESTORE FIELDS JMP I LPT /EXIT /UNPACKING LOOP - USES A SHIFT REGISTER METHOD TO GET THE /THIRD CHARACTER IN EACH DOUBLEWORD. LPTLP, STL /GUARD BIT OF SHIFT REGISTER LPROTL, RTL RTL SPA /DO WE HAVE 8 BITS SHIFTED IN? JMP LPTELP DCA LPTCDF /SAVE SHIFT REGISTER TAD I LPTCA JMS LPTPCH /PRINT A CHAR TAD I LPTCA ISZ LPTCA /BUMP INPUT POINTER LP7400, 7400 /PROTECT ISZ AND LP7400 CLL RAL TAD LPTCDF /SHIFT HIGH 4 BITS INTO JMP LPROTL /SHIFT REGISTER LPTERR, STL CLA RAR /PUT 4000 IN AC JMP LPTXIT /AND TAKE ERROR RETURN LPTWC, 0 LPTCA, 0 /CHAR PRINT ROUTINE LPTPCH, 0 AND (177 TAD (-175 SMA JMP LPFLSH /FLUSH CODES 175-177 TAD (175-33 SNA TAD LP0011 /CHANGE ALTMODE TO $ IAC SNA JMP LPTCTZ /^Z - END OF FILE SMA /FOLLOWING CODE IS NEW FOR PRINTRONIX 300 JMP CHKTAB /CHARACTER CODE IS OVER 33 TAD LP0011 / = 32-21 SMA /FLUSH IF CODE IS 21-32 JMP LPFLSH /LETS CODE 20 BY, BUT NO MORE ROOM IN THIS PAGE TAD (21-32 /RESTORE ACC TO PREVIOUS VALUE CHKTAB, TAD (32-11 SNA JMP LPTTAB /TABS MUST BE SIMULATED LPLFHK, TAD LP0011 /RESTORE CHAR SZA /FLUSH NULLS JMS LPCHAR / TAD LPLPTR /IF COL. CTR GT 0 SMA /WE HIT A CONTROL CHAR TAD LPWDTH /OR EOL- SET TO FULL DCA LPLPTR /WIDTH (NOTE LPLPTR=1 !) LP7700, LPFLSH, SMA CLA /NEVER SKIPS JMP I LPTPCH /RETURN LPCHAR, 0 /LOW LEVEL PRINT ROUTINE IFDEF PAD < NOP /PAD IOT WITH A NOP > LLS /PUT CHAR IN LP BUFFER IFDEF PAD < NOP /PAD IOT WITH A NOP > AND LP7770 /KLUDGE - CLEARS COLUMN CTR TAD LP7770 /ON CR, LF, VT, FF BUT ALSO SNA CLA /ON ^H,^N, AND ^O. BIG DEAL DCA LPLPTR /?SR RICHIE SAID 'LPCRFG' LP7600, 7600 /CLEAR AC LPCTCL, TAD LP7600 KRS TAD (-7603 /CHECK FOR ^C FROM CONSOLE SNA CLA KSF /WITH FLAG UP JMP .+3 LPTCIF, CDF CIF 0 /YES, RETURN TO OS/8 JMP I LP7600 LSF /NO JMP LPCTCL /WAIT FOR FLAG ISZ LPLPTR /CHECK LINE OVERFLOW JMP I LPCHAR TAD (15 JMS LPCHAR CLA IAC JMP LPLFHK LPTTAB, TAD LPBLNK /GET PSEUDO BLANK JMS LPCHAR /PRINT IT TAD LPWDTH CMA TAD LPLPTR /GET # CHARS IN LINE AND LP0007 LPBLNK, SZA CLA /LOOP 'TILL MULTIPLE OF 8 JMP LPTTAB JMP I LPTPCH LPLPTR, 0 $