/******* MULTI8 LINEPRINTER DRIVER ******* /LAST EDIT: 17-DEC-75, JV /LAST EDIT: 4-SEP-75, JV /LAST EDIT: 12-AUG-75, ELC /NAME: LP /FUNCTION:TO PRINT A BUFFER (BLOCK) IN CORE ON THE LINEPRINTER. /CONCEPT: THIS MODULE BELONGS TO THE FAMILY OF BLOCKDRIVERS / AND SHOULD BE HANDLED ACCORDINGLY. CHARACTERS ARE / UNPACKED FROM THE BLOCK BUFFER AND PRINTED ON THE / LINEPRINTER. CTRL/Z TERMINATES PRINTING. / THE BLOCKDRIVER RECOGNIZES THE FOLLOWING CHARACTERS: / BLANK :IGNORED / RUBS :IGNORED / 215 :CARRIAGE RETURN; RESET POSITION COUNTER / 214 :FORMFEED;RESETS POSITION COUNTER / 232 :STOPS PRINTING AND SWPOUTS LP WITH 20 IN AC / TAB :PRINTS REQUIRED NUMBER OF SPACES. /SPECIAL:WE TRIED TO MAKE THIS TASK MORE OR LESS INTELLIGENT / FOR INSTANCE IT SUPPLIES AN EXTRA LF JUST / BEFORE THE CHARACTER THAT DOESN'T FIT ON THE LINE / AND IT WILL NEVER GIVE TWO CONSEQUTIVE FORMFEEDS ! / IF THE SYMBOL LE8E HAS A POSITIVE VALUE (BIT 0=0) / ALL LOWERCASE CHARACTERS ARE CONVERTED TO THEIR / UPPERCASE EQUIVALENTS. / A ^Z (232) SHOULD BE SEND TO LP AS THE LAST CHARACTER, / TO RELEASE THE CLAIM. /USE: TAD (POINTER TO TRANSFER VECTOR / JMS MONITOR / CALL / "L^100+"P&3777 / JMP BUSY /STILL BUSY; AC UNCHANGED / DCA LPSLOT /RETURNS WAIT SLOT NUMBER / JMS MONITOR /NOW WAIT FOR COMPLETION / WAIT /LPSLOT, 0 /WAIT SLOT / RETURN /AC='HRDERR' IF READ-REQUEST / /AC=0 IF ALL OK. > /SERIALY INTERFACED CENTRONICS LINEPRINTER /LPT DRIVER MODULE /CHANNEL=1 /MULTIPLEXER CHANNEL# /NAME: LP /FUNCTION: TO PRINT A BUFFER IN CORE ON THE CENTRONICS LINE- / PRINTER. /CONCEPT: THE CENTRONICS LINEPRINTER IS A DOT-MATRIX PRINTER. / THIS TASK ASSUMES IT HAS BEEN CONNECTED TO THE / COMPUTER THROUGH A BIT-SERIAL CONNECTION, HAVING / A 512 CHARACTER BUFFER. STILL THE BITRATE (1200 BAUD) / IS TOO HIGH TO COPE UP WITH EXCESSIVE AMOUNTS OF LINE- / FEEDS OR A FORMFEED. ADDITIONAL FILLER CHARACTERS HAVE / TO BE INSERTED. / THIS TASK RECOGNISES THE FOLLOWING CHARACTERS: / BLANK :IGNORED / RUB :IGNORED / 232 :EXIT SWPOUT WITH STATUS EOFERR (=20) / 214 :FORMFEED: ADDS 330 BLANKS / 212 :LF; ADDS 24 BLANKS / 211 :TAB;ADDS THE REQUIRED NUMBER OF SPACES. /USE: THIS TASK IS MEMBER OF THE FAMILY OF BLOCK-DRIVERS / AND SHOULD BE USED ACCORDINGLY: / TAD (PTR TO INFO / JMS MONITOR / CALL / "L^100+"P&3777 / BUSY RETURN /AC UNCHANGED / DCA LPSLOT /NORMAL RETURN WITH SLOT# IN AC / JMS MONITOR /WAIT FOR COMPLETION / WAIT /LPSLOT, 0 /COMPLETION SLOT / RETURN /ALL IS OK WHEN AC=0 / /WHEN AC='HRDERR' THEN A TRANSFER ERROR / /OCCURRED OR CTRL/Z TERMINATION / /INFO, FUNCTION WORD /WLL.LLL.FFF.000 / ADDRESS IN CORE /AAA.AAA.AAA.AAA / NOT APPLICABLE LPCA, "L^100+"P&3777 LPWC, 200 LPCHAR, 0 LP, DCA LPCHAR //SAVE POINTER TO REQUEST AC4000 TAD I LPCHAR //FETCH FIRST ARGUMENT AND C7700 //GET READ/WRITE+LENGTH CIA /WORDCOUNT IS NEGATIVE DCA LPWC TAD I LPCHAR /GET FIELDBITS AND C70 TAD C6201 DCA LPCDF ISZ LPCHAR //ADVANCE POINTER TO BUFFERADDRESS TAD I LPCHAR DCA LPCA //SET UP CURRENT ADDRESS CDTOIF CIF MONFLD JMS I ZRESERV /GERESEV INTERRUPTSLOT JMS ALARM /NO SLOT AVAILABLE ! DCA LPSLOT TAD LPSLOT JMS MONITOR RETURN CONTINUE /GIVE INTERRUPT SLOT TO USER DCA ERSLOT /AND COPY SLOT# IN ERRORRETURN SNL /LINK STIL CONTAINS READ/WRITE BIT JMP LPERR /CAN'T READ FROM THE PRINTER LPCDF, CDF //OVERLAID WITH CDF TO BUFFER FIELD LPLOOP, JMS LPSUB DCA LPCDF JMS LPSUB //SOME RECURRING INSTRUCTIONS CLL RTR RTR TAD LPCDF //ADD IN HIGHORDER BITS RTR RTR JMS PRINT ISZ LPWC JMP LPLOOP JMS MONITOR SIGNAL HALT LPSLOT, 0 LPSUB, 0 TAD I LPCA JMS PRINT TAD I LPCA AND C7400 ISZ LPCA JMP I LPSUB LPEXIT, IFNZRO LE8E&4000 < TAD C215 JMS LPOUT / > TAD (214 JMS PRINT / TAD C17 /(EOFERR-PROGER LPERR, IAC /TAD (PROGER JMS MONITOR SIGNAL HALT CLEAR SWPOUT ERSLOT, 0 PRINT, 0 AND C177 LPWDTH=LE8E&377 //# OF COLUMNS DCA LPCHAR TAD LPCHAR SZA //SKIP NULL'S TAD M177 SNA JMP I PRINT //IGNORE RUBOUTS TAD (377-232 SNA JMP LPEXIT //^Z TAD (232-214 SNA JMP FF //FORM FEED TAD M1 //(214-215 SZA TAD C3 //(215-212 SNA JMP CRLF //LINE FEED IAC //TAD (212-211 K7640, SZA CLA JMP NOTAB TAD C240 JMS LPOUT //PRINT SPACE ISZ POS TAD POS AND C7 K7740, SZA CLA SMA JMP LPTAB JMP I PRINT NOTAB, STA DCA FFFLG //FORMFEEDS ALLOWED FROM NOW TAD POS LF, TAD (-LPWDTH SMA JMP LFEXTR TAD (LPWDTH+1 //INCREMENT POS CRLF, DCA POS //RESET POS FOR CR AND LF TAD LPCHAR IFZERO LE8E&4000 < //IF YOUR LPT CAN'T HANDLE L.C. TAD K7640 SMA TAD K7740 TAD (340 / > JMS LPOUT JMP I PRINT LFEXTR, M177, 7601 /CLA TAD C212 JMS LPOUT //GIVE EXTRA LF JMP LF FF, ISZ FFFLG //FORMFEED NECESARY ? JMP I PRINT //NO JMP CRLF LPOUT, 0 DCA LPTMP LPTAB, CLA IAC 6665 CLA CLL JMS MONITOR WAIT LPT TAD LPTMP 6666 CLA JMP I LPOUT POS, 0 FFFLG, 0 LPTMP, 0 PAGE