/MANNESMANN TP80 PRINTER HANDLER / LPVERSION="B&77 *0 -1 DEVICE LPSV;DEVICE LPT;1040;LPT&177;ZBLOCK 2 /LPT HANDLER FOR EITHER LP08 OR LS8E LINE PRINTER /HANDLES TABS, PASSES EVERYTHING ELSE ON THE HARDWARE. LSF=6661 /SKIP ON FLAG LSR=6663 /SKIP ON ERROR LLS=6666 /LOAD LPT BUFFER *200 LPWDTH, -205 /-(WIDTH+1) [USE -121 FOR 80 COLUMNS] LTERMC, 14 /4 FOR LV8 LVCCNV, -40 /0 IF PRINTER PRINTS LC LPT, LPVERSION /NORMAL ENTRY POINT CLA STL RAR TAD I LPT / R/W BIT TO LINK AND LP7700 CMA /TREAT 0 PG CNT AS 0 WD CNT DCA LPTWC /SAVE -(DBLWD COUNT+1) LPT214, RDF TAD LPTCIF DCA LPTXIT /SAVE CIF CDF RETRN FIELD TAD I LPT AND (70 TAD (CDF 0 DCA LPTCDF ISZ LPT /PT TO BUFFER TAD I LPT /GET BUFFER ADR DCA LPTCA /SAVE BUFFER PTR ISZ LPT /PT TO BLOCK # TAD I LPT /GET IT ISZ LPT /POINT TO ERROR RETURN LPTCDF, HLT SNL JMP LPTERR /CAN'T READ FROM LPT SNA CLA TAD LPT214 /OUTPUT FORM FEED IF BLOCK 0 JMP LPTELP /JUMP INTO END OF LOOP /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 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 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-140 SMA TAD LVCCNV /CONVERT LC TO UC IF DESIRED TAD (140-33 SNA TAD (11 /CHANGE ALTMODE TO $ IAC SNA JMP LPTCTZ /^Z - END OF FILE TAD (32-11 SNA JMP LPTTAB /TABS MUST BE SIMULATED LPLFHK, TAD (11 /RESTORE CHAR SZA /FLUSH NULLS JMS LPCHAR TAD LPLPTR /IF COL. CTR GET 0 SMA /WE HIT A CONTROL CHAR TAD LPWDTH /OR EOL - SET TO FULL DCA LPLPTR /WIDTH (NOT LPLPTR=1 !) LP7700, LPFLSH, SMA CLA /NEVER SKIPS JMP I LPTPCH /RETURN LPCHAR, 0 /LOW LEVEL PRINT ROUTINE LLS /PUT CHAR IN LP BUFFER AND (7770 /KLUDGE - CLEARS COLUMN COUNTER TAD (7770 /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 (7 LPBLNK, SZA CLA /LOOP 'TILL MULTIPLE OF 8 JMP LPTTAB JMP I LPTPCH LPLPTR, 0 $