/******* 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) / AARE CONVERTED TO THEIR / A ^Z (232) SHOULD BECHARACTER, / TO RELEASEPOINTER 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, /AC='HRDERR' IF READ-REOK. > /SERIALY INTERNTER /LPT DRIVER MODULEXER 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 /LPSOT / RETURN /ALL IS OK='HRDERR' THEN A TRANSFER CTRL/Z TERMINATION /LL.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 CIA /WORDCOUNT IS NEI LPCHAR /GET FIELDBITSDCA LPCDF ISZ LPCHAR /ERADDRESS 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 A //SKIP NULL'S TAD T //IGNORE RUBOUTS TADPEXIT //^Z TAD (232-21M 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 CP I PRINT NOTAB, STA LLOWED FROM NOW TAD POA JMP LFEXTR TAD (L 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