File: LPSS.PA of Disk: Disks/MyPDP/m8-backup-rka1-rkb1
(Source file text) 

/ LPSS SET LPT HANDLER V40
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1980   BY DATAPLAN GMBH, LAUDA, BRD
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH.
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR
/IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN.
/
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
/OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN.
/
/
/
/
/
/
/
/
/
/
/W.V.D.MARK, DP CONSULTING, ZUERICH, SWITZERLAND
/1-JAN-80
	LPVERSION="M&77

	*0

	-1
	DEVICE LPSS;DEVICE LPT;1040;LPT&177+4000;ZBLOCK 2

/THIS HANDLER IS MEANT TO BE USED FOR ANY KIND OF 
/LINEPRINTER ONE MAY ENCOUNTER. FOR THE MOMENT IT IS
/IMPLEMENTED FOR LP08,LS8E,LA180 OR LX180 (LOGABAX).
/LIKE THE KL8E HANDLER IT IS RECOMMENDED THAT THE CODE
/SHOULD BE WRITTEN IN SUCH A WAY, THAT THE CHANGES
/CAN BE MADE WITH A MODIFIED 'SET' PROGRAM, I.E.
/THIS HANDLER SHOULD NOT BE REASSEMBLED TOO OFTEN.

/	ASSEMBLING PARAMETERS:

	LX180=0	/1	/FOR LOGABAX PRINTER	SET LPT LX180
		/0	/FOR OTHER PRINTERS	-------------
	LA180=1	/1	/FOR LA180 PRINTER	SET LPT LA78
		/0	/FOR LP08,LS8E PRINTER	SET LPT LA8A
/	DEVC=66	/31	/OR SLU2 PORT VT78	SET LPT SLU2
		/33	/OR SLU3 PORT VT78	SET LPT SLU3
		/XX	/OR SLUX		SET LPT CODE XX
	W=205		/LINE-WIDTH OF PAPER	SET LPT WIDTH X
	F=14	/14	/ASCII FORMFEED		SET LPT PAGE
		/4	/LV8E EOT FORMFEED	SET LPT LV8E
		/0	/NO FORMFEEDS		SET LPT NO PAGE
			/OR			SET LPT NO LV8E
	C=0	/-40	/CONVERT LOWER-CASE	SET LPT NO LC
		/0	/PRINT LOWER-CASE	SET LPT LC
	P=110		/HEIGHT OF PAPER	SET LPT HEIGHT X
			/FOR FF SIMULATION
	T=10		/TAB LENGTH .GE.1	SET LPT TAB X
	S=0	/0	/USE HRDWR FFS		SET LPT NO PAUSE
			/OR			SET LPT NO FILL
		/4001	/HRDWR FFS + DELAY	SET LPT PAUSE
		/12	/SIMULATE FFS		SET LPT FILL
	A=-1	/136	/ARROW CONTROL CHARS	SET LPT ARROW
		/-1	/DON'T ARROW THEM	SET LPT NO ARROW
	E=0	/0	/PRINT ESC AS ^[(ARROW)	SET LPT ESC
		/11	/PRINT ESC AS $		SET LPT NO ESC
	UNIT=0	/0,1	/FOR SECOND LPT		SET LPT UNIT [0,1]
/SET UNIT=1 FOR THE SECOND LINE-PRINTER IN YOUR SYSTEM
	/LP08
	DCLP08=660
	IFDEF DEVC <
	DCLP08=DEVC^10>
	LSF=	6001+DCLP08	/SKIP ON FLAG
	LSR=	6003+DCLP08	/SKIP ON ERROR
	LLS=	6006+DCLP08	/LOAD LPT BUFFER
	IFNDEF DEVC <
	LIC=	6667>
	IFDEF DEVC <
	LIC=	6005+DCLP08-10>

	/LA180
	DBST=	6570	/SKIP IF DEMAND SET AND CLEAR IT
	DBTD=	6574	/LOAD COMPLEMENT OF AC0-11 TO TRANSMIT BUFFER
	DBSE=	6575	/SET INTERRUPT ENABLE
	DBCE=	6576	/CLEAR INTERRUPT ENABLE
	DBSS=	6577	/SEND STROBE PULSE

	/LOGABAX
	LPSC=	6576	/SEND CHARACTER
	LPCB=	6575	/CLEAR BUFFER
	LPSF=	6572	/SKIP ON FLAG

	MREAD=	7757	/BLEEP MONITOR LOC IN FLD 0
	IFZERO UNIT <
	LLINE=	MREAD+1
	LPAGE=	MREAD+2>
	IFNZRO UNIT <
	LLINE=	MREAD-1
	LPAGE=	MREAD+3>
	*200

LPWDTH,	-W	/**SET	/-WIDTH-1    [USE -121 FOR 80 COLUMNS]
LTERMC,	F	/**SET+	/4 FOR LV8		*
LVCCNV,	C	/**SET	/0 IF PRINTER PRINTS LC	*
LPTLCT,	LLINE	/**SET	/MODIFIED BY LPT UNIT	*
LPTWC,	0		/			*
LPTCA,	0		/			*
PLPLNK,	0		/GETS ADRESS OF PAGE 2	*
	TAD I	LPT	/ R/W BIT TO LINK	*	L
	AND	LP7700	/			*	I
	CMA		/TREAT 0 PG CNT AS 0 WD CNT	N
	DCA	LPTWC	/SAVE -(DBLWD COUNT+1)	*	K
LP70,	70		/			*
	DCA	LPTEOF	/INITIALIZE EOF		*
LPT177,	177		/			*
LPT106,	106		/			*
LPT214,	RDF		/DON'T MOVE THIS CODE ***
	TAD	LPTCIF	/				M
	DCA	LPTXIT	/SAVE CIF CDF RETRN FIELD	U
	TAD I	LPT	/				S
LPT213,	AND	LP70	/				T
	TAD	LPCDF	/
	DCA	LPTCDF	/				N
	ISZ	LPT	/PT TO BUFFER			O
	TAD I	LPT	/GET BUFFER ADDRESS		T
	DCA	LPTCA	/SAVE BUFFER PTR
	CLA IAC		/MAKE -WIDTH
	TAD	LPWDTH
	DCA	LPARG	/PASS WIDTH AS ARGUMENT
	ISZ	LPT	/PT TO BLOCK #			C
	TAD I	LPT	/GET IT				H
	ISZ	LPT	/POINT TO ERROR RETURN		G
	SNL
	JMP	LPTERR	/CAN'T READ FROM LPT
LPM140,	SZA CLA		/**SET SENTINEL
	JMP	LPSTRT
	IFNZRO LX180 <	NOP >	/?INTERRUPT DISABLE
	IFZERO LX180 <
	IFNZRO LA180 <	DBCE>	/INT DIS LA180
	IFZERO LA180 <	LIC >>	/INT DIS LP08
	TAD	LPT213
	JMS	LPTPCD	/RESET ALL
	TAD	LPT215
	JMS	LPTPCD	/CR ONLY
	TAD	LTERMC	/OUTPUT FORM FEED IF BLOCK 0
LPTELP,	JMS	LPTPCD	/PRINT 3RD CHAR OF DOUBLEWORD
	ISZ	LPTWC
	JMP	LPTLP	/GET 3 MORE CHARS
	TAD	LPTEOF	/WAS THIS A CLOSE OPERATION?
	SKP CLA	/SNA CLA/NO GOOD FOR FOTP PREDELETE!
LPTCTZ,	TAD	LTERMC	/YES, TREAT LIKE CTZ
	JMS	LPTPCD	/OUTPUT FORM FEED IF EOF SEEN (EOT OF LV8)
	ISZ	LPT	/BUMP TO NORMAL RETURN
LPTXIT,	HLT		/RESTORE FIELDS
	JMP I	LPT	/EXIT

/UNPACKING LOOP - USES A SHIFT REGISTER METHOD TO GET THE
/THIRD CHARACTER IN EACH DOUBLEWORD.

LPTLP,	STL		/GUARD BIT OF SHIFT REGISTER
LPROTL,	RTL
	RTL
	SPA		/DO WE HAVE 8 BITS SHIFTED IN?
	JMP	LPTELP
	DCA	LPTEOF	/SAVE SHIFT REGISTER
	TAD I	LPTCA
	JMS	LPTPCD	/PRINT A CHAR
	TAD I	LPTCA
	ISZ	LPTCA	/BUMP INPUT POINTER
LP7400,	7400		/PROTECT ISZ
	AND	LP7400
	CLL RAL
	TAD	LPTEOF	/SHIFT HIGH 4 BITS INTO
	JMP	LPROTL	/SHIFT REGISTER

LPTERR,	STL CLA RAR	/PUT 4000 IN AC
	JMP	LPTXIT	/AND TAKE ERROR RETURN

LPTPCD,	0		/INTER-PAGE JUNK
	JMS I	PLPLNK
LPARG,	0
LPP1,	0
	SZA		/ZERO PRINT MEANS END
	JMP	LPCHAR
LPTCDF,	HLT
	JMP I	LPTPCD

/CHAR PRINT ROUTINE

LPCHAR,			/LOW LEVEL PRINT ROUTINE
LPT215,	AND	LPT177
	TAD	LPM140	/IS IT LOWER CASE?
	SMA
	TAD	LVCCNV	/YES, CONVERT (MAYBE)
	TAD	LPT106	/IS IT AN EOF? (32)
	SZA
	JMP	.+3
LP7700,	7700		/**SET SENTINEL
	JMP	LPTCTZ	/YES, GET OUT
	TAD	LP7632	/RESTORE
	IFZERO LX180 <
	IFZERO LA180 <
	NOP		/NOP'S NEEDED FOR SET
	LLS		/PUT CHAR IN LPT BUFFER
	NOP
	>
	IFNZRO LA180 <
	CMA
	DBTD		/PUT CHAR IN LP BUFFER
	DBSS		/SEND STROBE FOR PRINTRONIX
	>>
	IFNZRO LX180 <
	NOP		/FOR SET
	LPCB		/CLEAR FIRST
	LPSC		/SEND TO LX180
	>
LP7600,	7600		/CLEAR AC
LPCTCL,	TAD	LP7600
	KRS
	TAD	LP175	/CHECK FOR ^C FROM CONSOLE
	SNA CLA
	KSF		/WITH FLAG UP
	JMP	.+3
LPTCIF,	CDF CIF 0	/**SET SENTINEL
	JMP I	LP7600	/YES, RETURN TO OS/8
	IFZERO LX180 <
	IFZERO	LA180	<LSF>	/NO	FOR SET
	IFNZRO	LA180	<DBST>>	/NO	MUST BE HERE
	IFNZRO   LX180	<LPSF>	/FOR LX180
	JMP	LPCTCL	/WAIT FOR FLAG
	ISZ I	LPTLCT	/COUNT ALL
LP175,	175		/PROTECT SKIP
	JMP I	LPP1	/BACK IN LINE TO P 2
LPCDF,			/** SET SENTINEL
LPSTRT,	CDF 0		/HERE ON NON-ZERO BLOCK#
	IFNZRO LX180 <
	SKP CLA		/GO TO PAGE INIT FOR LX
	>
	IFZERO LX180 <
	CLA		/START FOR OTHERS
	>
	JMP	LPTELP
	TAD I	LPTLCT	/-WIDTH+CNT
	CIA		/WIDTH-CNT
	TAD	LPWDTH	/-WIDTH-1=-CNT-1
	DCA	LPHOLD	/TEMPORARY
	TAD	LPT215	/CR ONLY
	JMS	LPTPCD
LPSPFL,	ISZ	LPHOLD
	SKP
	JMP	LPTELP
	TAD	LPM140
	JMS	LPTPCD
	JMP	LPSPFL
LP7632,	7632
LPTEOF,	0
LPHOLD,	0

	ZBLOCK 375-.

LPT,	LPVERSION	/NORMAL ENTRY POINT
	CLA STL RAR
	JMS	PLPLNK
	PAGE
	SEND=	JMS I	LPTOUT
LPTOUT,	0
	JMP	LPARGS	/JUMP OVER SET ARGS
LPPAGL,	-P	/**SET	/PAGE LENGTH
LPTABL,	T	/**SET	/TAB SIZE
LPSIMU,	S	/**SET	/4001 HW FF, 12 SW FF
LPCTRL,	A	/**SET	/CTRLS: 136=^X, -1=NO PRINT
LPTESC,	E	/**SET	/11: ESC=$, 0: ESC=^[
LPLINE,	LLINE	/**SET	/MODIFIED BY LPT UNIT
LPPAGE,	LPAGE	/**SET	/     "        "
LPARGS,	AND 	(177
	TAD	(-33	/IS IT ESCAPE?
	SNA
	TAD	LPTESC	/CONVERT TO PETRO-DOLLAR (MAYBE)
	TAD	(33
	DCA	LPTEMP
	CDF 0
	TAD I	LPTOUT
	ISZ	LPTOUT
	DCA	LWIDTH	/PASS WIDTH ARGUMENT
	TAD	LPTEMP
	SNA
	SEND		/IGNORE REAL NULLS
	TAD	(-177
	SNA
	SEND		/IGNORE RUBOUTS
	TAD 	(145
	SNA
	JMP	LPTNRM	/CTRLZ IS NEVER PRINTED!
	TAD	(14
	CLL
	TAD	(7
	SZL CLA		/FORMAT CHAR?
	JMP	LPTCTL	/YES
	TAD	LPTEMP
	AND	LPTNMV	/CONTROL CHAR?
	SZA CLA
	JMP	LPTNRM	/NO;OUT NORMAL
	TAD	LPCTRL	/CONVERT TO ^X?
	SMA		/-1=NO CONVERSION AND NO MOVE
	JMP	LPTCON	/136=CONVERSION AND ALSO=^
LPTMMV,	IAC		/WITH NEXT MAKES -2 FOR BCKSPC
LPTNMV,	CMA CLL		/-1 FOR NO MOVE, ALSO MASK 140
	TAD I	LPLINE
	DCA I	LPLINE	/MODIFIED CHAR. COUNT
LPTNRM,	TAD	LPTEMP	/SEND NORMAL
	SEND
LPTCHK,	TAD I	LPLINE	/CHECK IF LINE OVERFLOW
	SPA CLA
	SEND		/NO;GET OUT WITH 0 AC
	TAD	(15	/YES, RESET LINE
	SEND	
	TAD	(12
	DCA	LPTEMP
	TAD	LWIDTH
	DCA I	LPLINE	/RESET LINE
LPTLFD,	ISZ I	LPPAGE
	JMP	LPTNMV	/NOT AT END OF PAGE
	TAD	(12
	SEND
LPTPRE,	TAD	LPPAGL	/AT END *****
	DCA I	LPPAGE	/RESET PAGE
	JMP	LPTLRE	/RESET LINE
LPTCTL,	TAD	LPTEMP
	TAD	LPTJMP
	DCA	.+1
	HLT		/MUST BE 6 AFTER LPTPRE *****
	JMP	LPTNMV	/" 7":BELL;	UNCHANGED;	NO MOVE
	JMP	LPTMMV	/"10":BSPC;	UNCHANGED;	- MOVE
	JMP	LPTTAB	/"11":TAB;	CONVERT;	X MOVE
	JMP	LPTLFD	/"12";LF;	UNCHANGED;	NO MOVE, INC PAGE
LPTJMP,	JMP	LPTPRE	/"13":VTAB;	NOTHING;	RESET ALL
	JMP	LPTFF	/"14":FFED;	SIMU!DELAY;	RESET ALL
	TAD	(15	/"15":CR;	UNCHANGED;	RESET LINE
	SEND
LPTLRE,	TAD	LWIDTH	/RESET LINE COUNTER
	DCA I	LPLINE
	SEND		/GET OUT
LPTFF,	TAD	LPSIMU	/IF NEGATIVE USE HARDWARE
	SMA SZA CLA
	JMP	LPFFL	/POSITIVE: SIMULATE WITH LFS
	TAD	LPTEMP	/IT IS 14 FOR FF
	SEND
LPFFL,	TAD	LPSIMU	/IF HARDWARE DELAY WITH 4001
	SNA
	JMP	LPTPRE	/OR NO DELAY WITH 0000
	SEND		/IF SOFTWARE SIMULATE WITH 12
	ISZ I	LPPAGE	/PAGE FINISHED?
	JMP	LPFFL
	JMP	LPTPRE	/RESET ALL AND RETURN

LPTTAB,	TAD 	(40
	SEND		/ALWAYS ONE SPACE
	TAD I	LPLINE	/-WIDTH+CNT
	CIA		/WIDTH-CNT
	TAD 	LWIDTH	/-CNT
	TAD	LPTABL
	SPA
	JMP	.-2	/-CNT+X*TABL (POSITIVE)
	SZA CLA		/AT TAB STOP? 
	JMP 	LPTTAB
	JMP	LPTCHK	/END TABS IF LINE FULL

LPTCON,	SEND		/SEND ^
	TAD	(100	/AND ALPHA FOR CTRL
	JMP	LPTNRM

LWIDTH,	-120
LPTEMP,	0
	$$$