/13 LPT DRIVER TASK FOR RTS8 V3 / / #10 V2B CONVERSION TO MACREL / #11 NEW TASK MACRO FOR NAME, NO MORE CDF, CIF TO 0 / #12 LEVEL=0, CUR OUT / #13 TABS, MINUS 2 OUT OF FIELD BUFFER / VERS=13. / / / / / / / / / / /COPYRIGHT (C) 1974,1975,1976,1977,1978,1979 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /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 IN THIS DOCUMENT 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 CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / XLIST 0 /LIST TASK /HANDLES LE8, LS8E, LV8 LINE PRINTERS. /INPUT MESSAGE FORMAT IS COMPATIBLE WITH THE TELETYPE HANDLER LSF= 6661 LCF= 6662 LSE= 6663 /ERROR SKIP FOR LE8 ONLY LIE= 6665 LLS= 6666 LIF= 6667 /DISABLE INTERRUPT - LE8 ONLY .RSECT LPTT, LEVEL=0 .TASK LPT FLAGS, /FLAGS MUST LEAD OFF PAGE !!! START, CAL MEVFLG, SKPINS HALF, LPINT LPMSLP, TAD ASGNEE /GET ASIGNEE (IF ANY) CAL RECEIV /TAKE THE MESSAGE OFF THE Q MADDR, 0 /GETS ADDRESS OF MESSAGE DCA MF /FIELD OF MSG IN AC TAD MF /HAVE SET EXIT CALL, NOW SET SELF DCA MSGCDF /FIELD OF MSG IN AC MSGCDF, HLT AC7775 TAD MADDR DCA MEVFLG /SAVE MESSAGE EVENT FLAG ADDRESS TAD MSGCDF /SET UP CDF TO BUFFER REJOIN, DCA BUFCDF /EITHER THAT OF MESSAGE, OR MINUS2 CALL TAD I MADDR ISZ MADDR /MOVE POINTER TO NEXT CMA CLL RAR /CHECK FOR MINUS2 CALL, BUFFER IN ANOTHER FIELD SNA /SKIP IF NOT JMP MINUS2 /GO TO SPECIAL PROCESSING CML CMA RAL /RESTORE AC DCA FLAGS /FIRST WORD OF MESSAGE IS FLAGS ISZ MADDR /SKIP REPLY WORD L1200, TAD FLAGS /FLAGS MUST BE FIRST ON PAGE FOR LITERAL AND L1200 /KEEP INDIRECT AND ASSIGN CLL RTL /INDIRECT IN SIGN BIT, ASSIGN AT 1000 SMA SZA /SKIP UNLESS ASSIGN JMP ASSIGN /BIT 200 ON MEANS THIS IS AN ASSIGN CALL SMA CLA /BIT 1000 OF FLAG WORD INDICATES JMP .+3 /IF MESSAGE OR POINTER TO IT FOLLOWS TAD I MADDR DCA MADDR STA DCA HALF /INITIALIZE LEFT/RIGHT SWITCH /LOOP TO UNPACK AND OUTPUT MESSAGE LPOLP, BUFCDF, HLT /CDF TO DATA BUFFER PLACED HERE TAD FLAGS SPA CLA /BIT 0 IF FLAG WD TELLS WHETHER JMP ONEPWD /MESSAGE IS PACKED OR UNPACKED ASCII ISZ HALF JMP RGHTHF AC7776 DCA HALF TAD I MADDR CLL RTR RTR RTR JMP .+3 RGHTHF, TAD I MADDR ISZ MADDR AND (77 SNA JMP CKCRLF TAD (240 AND (77 TAD (240 OUTCH, JMS LPOUTX JMP LPOLP ONEPWD, TAD I MADDR ISZ MADDR SZA JMP OUTCH CKCRLF, TAD FLAGS RAL /BIT 1 OF FLAGS TELLS WHETHER SMA CLA /TO FOLLOW MESSAGE BY A CR/LF JMS CRLF LPOVER, TAD MEVFLG CAL POST MF, 0 /POST EVENT FLAG FOR SENDER JMP LPMSLP ASSIGN, TAD FLAGS /ENTER WITH AC 1000 BUT WHO CARES AND (177 /GET TASK TO BE ASSIGN TO DCA ASGNEE JMP LPOVER /POST ASSIGNMENT EVENT FLAG ASGNEE, 0 /TASK ASSIGNMENT - 0 MEANS UNASSIGNED / / FOUND -2 IN CALL! / MINUS2, TAD I MADDR /HERE IS CDF TO BUFFER FIELD ISZ MADDR /MOVE TO REAL FLAGS WORD JMP REJOIN /REJOIN THE ACTION /LOW-LEVEL LPT OUTPUT CODE CRLF, 0 TAD (215 JMS LPOUTX TAD (212 JMS LPOUTX JMP I CRLF LPOUT, 0 DCA MSGCDF TAD LPOEV SNA CLA /EVENT FLAG POSTED? JMP LPREDY /YES - SKIP SOME OVERHEAD CLA IAC LIE /ENABLE LINE PRINTER INTERRUPTS CLA /JUST IN CASE CAL WAITE /WAIT FOR LAST CHAR TO FINISH PLPOEV, LPOEV LPREDY, TAD MSGCDF IOF /INHIBIT INTERRUPTS LLS CLA AND I 0 /WASTE SOME TIME ISZ LPOEV LSF JMP .+3 /TEST FOR IMMEDIATE FLAG LCF DCA LPOEV ION /RESTORE INTERRUPTS JMP I LPOUT /YES - DON'T BOTHER WITH EVENT FLAG LPINT, 0;0 /USED FOR LINKING INTO SKIP CHAIN LSE /CHECK FOR LPT POWER LOW SKP /NO LIF /YES - DISABLE INTERRUPTS LSF JMP I LPINT CDF .FLD CIF RTS8 /FLOAT RTS8 LCF TAD PLPOEV POSTDS /POST "LPT COMPLETE" EVENT FLAG LPOEV, 0 PAGE / .FSECT LPF FIELD LPTT / / CODE TO DO TABBING / LPOUTX, 0 AND (177 /STRIP OFF TOP SO WE CAN COMPARE TAD (-11 /CHECK FOR TAB SNA /SKIP IF NOT JMP TABB TAD (-15+11 /CHECK IF CARRIAGE RETURN SNA /SKIP IF NOT DCA COLCNT /YES, RESTART COLOMN COUNTER TAD (-40+15 /CHECK IF CHAR REALLY COUNTS A COLUMN SMA /SKIP IF NOT ISZ COLCNT /CHARS 40 AND ABOVE COUNT TAD (40 /REFURBISH THE CHARACTER JMS LPOUT /GO TO LOW LEVEL OUTPUT ROUTINE JMP I LPOUTX /RETURNING TO CALLER / TABB, TAD (40 /MUST BE ABLE TO PRINT AT LEAST ONE SPACE JMS LPOUT /DO THE SPACE ISZ COLCNT TAD COLCNT /CHECK FOR BOUNDARY AND (7 SZA CLA /SKIP IF DONE JMP TABB /MORE JMP I LPOUTX / COLCNT, 0 /START AT ZERO COUNTING COLUMN POSITION