File LP.TK

Directory of image this file is from
This file as a plain text file

/******* 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



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search