/******* 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 TWO CONSEQUTIVE FORMFEE8E HAS A POSITIVE VALUE SE CHARACTERS ARE CONVERE 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 UNCTURNS WAIT SLOT NUMBER FOR COMPLETION / WAILOT / RETURN /AC='HRDE /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 JMS PRINT TAD I LPC JMP I LPSUB LPEXIT, JMS LPOUT / TAD (214/(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 ORE RUBOUTS TAD (377-2/^Z TAD (232-214 SNA TAD M1 //(214-215 S 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 $$$$$$