/******* MULTI8 LINEPRINTER DRIVER ******* /******* CENTRONICS - DR8EA INTERF ******* /LAST EDIT: 28-SEP-78, HOU /LAST EDIT: 21-NOV-77, HOU /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. > LPCA, TASKNA LP LPWC, 400 LOAD, XLOAD 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, LE8E=LE8C 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, TAD LPTMP JMS I LOAD JMS MONITOR WAIT LPT JMP I LPOUT LPTMP, 0 POS, 0 FFFLG, 0 PAGE 0 XLOAD, 0 AND (177 6505 CMA AND (177 6506 CLA TAD (4000 6503 6506 6505 CLA 6501 JMP I XLOAD $$$$$$