File: LP.TK of Tape: Sources/Multi8/m8-tk-etc-20-10-80
(Source file text) 

/LP.TK 21-MAY-80
/THIS TASK SERVES AS A LINEPRINTER BLOCKDRIVER. IT WRITES
/THE DATA IN THE DISKFILE "SPOOL.LP" ON THE SYSTEM DISK.
/INTERNAL IN THE TASK IS A SECOND TASK THAT MOVES THE DATA
/FROM THE DISKFILE TO THE LINEPRINTER.

/CONFIGURATION PARAMETERS:

LOWER=LE8E&4000
LS8E=LE8E&2000
NSPOOL=LE8E&1000
KL8E=LE8E&400
WIDTH=LE8E&376		/MAXIMUM LINE LENGTH
DKC8=LE8E&1

IFDEF DIABLO < IFZERO KL8E <LPERR,__	/DIABLO IS KL SERIAL >>

MASSDEV="S^100+"Y&3777	/NAME OF MASS STORAGE DEVICE
UNIT=0			/UNIT NUMBER
IFDEF SINGL8 <
IFZERO LE8E&1 <		/ALL THIS FOR ZM16 REPLACEABLE LPT'S
	*0
	CDF 0
	LPT^4+INT
	6661		///TEST LINEPRINTER FLAG
	*0
	CDF 0
	LPT^4+INT+2
	6662		///CLEAR PRINTER FLAG
IFZERO LE8E&400 <	///FOR NORMAL INTERFACE
	*0
	CDF 0
	LPTER^4+INT
	6663		///SKIP ON LINEPRINTER ERROR
	*0
	CDF 0
	LPTER^4+INT+2
	6667		///DISABLE LPT INTERRUPTS >
IFNZRO LE8E&400 <	///FOR KL8E INTERFACE
	*0
	CDF 0
	LPTER^4+INT
	6651		///SKIP ON INPUT FLAG
	*0
	CDF 0
	LPTER^4+INT+2
	6652		///CLEAR INPUT FLAG >>
IFNZRO LE8E&1 <
	*0
	CDF 0
	LPT^4+INT
	6570		///SKIP ON FLAG
	*0
	CDF 0
	LPT^4+INT+2
	NOP		///
	*0
	CDF 0
	LPTER^4+INT
	LPTER^4+INT+4&177+5200	///NO ERRORS >
			/// >
IFZERO NSPOOL <
	*200

REQ,	"L^100+"P&3777
	1200		/A FIVE-PAGE TASK

XINIT,	INIT		/POINTER TO INITIALIZATION CODE AND BUFFER
XRTV,	RTV		/POINTER TO READER TRANSFER VECTOR
XTEST,	TEST		/ROUTINE TO TEST FOR ^Z AND ^Y
XCLDTV,	CLODTV		/POINTER TO CLOSE BLOCK DESCRIPTOR
LEN,	0		/NUMBER OF BLOCKS OF REQUEST

LP,	JMP I XINIT	//GO INITIALIZE THIS TASK. OVERLAYED WITH:
/	SNA		//CLOSE OR EXIT CALL FROM WRITER ?
	 JMP SHUTUP	//YES
	DCA REQ		//STORE POINTER TO USERS REQUEST PARAMETERS
	DCA CLOSED	//FILE IS NOW OPEN
	TAD (SIGNAL HALT
	DCA EXITS+1	//SETUP FOR PROPER RETURN
LP1,	JMS MONITOR
	   RESERV RETURN CONTINUE
	DCA EVENT
	TAD I REQ	//GET FUNCTION WORD
	SMA		//WRITE ?
	 JMP ERROR	//NO, CAN'T READ FROM PRINTER
	AND C3700	//EXTRACT LENGTH
	BSW		//
	CLL IAC RAR	//ROUND UP TO BLOCKS
	CIA		//MAKE NEGATIVE FOR COUNTING
	DCA LEN		//LENGTH OF TRANSFER IN BLOCKS
	TAD I REQ	//GET FUNCTION WORD AGAIN
	AND C70		//FIELD OF BUFFER
	TAD (4200+UNIT	//WRITE 1 BLOCK
	DCA RTV		//STORE IN READ TRANSFER VECTOR
	ISZ REQ
	TAD I REQ	//GET CORE ADDRESS
	DCA RTV+1
/SEE IF THERE IS ENOUGH ROOM FOR THIS
TRY,	CLA CLL		//13BIT COMPARISON AHEAD
	TAD COUNT	//NUMBER OF BLOCKS OCCUPIED
	TAD MLNGTH	//COUNT-LENGTH+1
	SNL CLA		//OK ?
	 JMP GO		//YES, PROCEED
	JMS MONITOR	//NO, WAIT A WHILE
	   STALL
	   DGNTICK	//1 SECOND
	JMP TRY		//TRY AGAIN

/TRANSFER THE DATA TO DISK NOW:
GO,	TAD FIRST
	TAD INBLK	//THE CURRENT INPUT BLOCK#
	DCA RTV+2
	CDTOIF		/
	TAD XRTV
	JMS MONITOR
	   CALL
	   MASSDEV
	 JMP .-3	/LOOP ON BUSY
	DCA EVNT1
	JMS MONITOR
	   WAIT
EVNT1,	   0
	SZA CLA
	 JMP ERROR	/DISK WRITE LOCK ?
	CDTOIF
	TAD INBLK
	TAD MLNGTH	/BLOCK-LENGTH+1
	SZA		/END OF FILE ?
	 TAD LENGTH	/NO, BLOCK+1
	DCA INBLK
	ISZ COUNT	/UPDATE COUNTER
	TAD RTV+1
	TAD (400	/UPDATE THE BUFFER ADDRESS
	DCA RTV+1
	JMS I XTEST	/^Z IN BUFFER ?
	 JMP .+3	/^Z: IGNORE THE REST OF THIS TRANSFER
	ISZ LEN		/MORE TO DO ?
	 JMP TRY	/YES
	JMS MONITOR	/START THE WRITER
	   RUN
TCBPW,	   0		/GET TCBP OF WRITER TASK
LPHRDE,	HRDERR		/OK, HE'S RUNNING ALREADY
EXITS,	JMS MONITOR
	   SIGNAL HALT
EVENT,	   0
ERROR,	TAD LPHRDE
	JMP EXITS
SHUTUP,	TAD CLOSED
	SNA CLA		//FILE OPEN ?
	 JMP CLOSE	//YES, MUST BE CLOSE
	TAD M4
	TAD TCBPW
	DCA X
	CDF 0
	TAD I LPHEAD
	DCA I X
	TAD X
	DCA I LPHEAD
	DCA I PNAME	//CLEAR NAME TABLE ENTRY
	ACM1
	JMS MONITOR
	   EXIT SWPOUT

CLOSE,	ISZ CLOSED
	TAD (SIGNAL HALT CLEAR
	DCA EXITS+1	/ADD CLEAR FOR FINAL RETURN
	TAD XCLDTV
	DCA REQ
	CDTOIF
	JMP LP1		/WRITE CLOSE BLOCK IN THE SPOOL FILE

END,	JMS MONITOR	/THIS PIECE BELONGS TO 'WRITER'
	   RUN
	   "L^100+"P&3777
LPHEAD,	 FHEAD		/PAGE ZERO LOC = NOP
	JMS MONITOR
	   EXIT
CLOSED,	0
MLNGTH,	0	/-LENGTH+1
LENGTH,	0	/LENGTH OF FILE
FIRST,	0
INBLK,	0
COUNT,	0
PNAME,	0
RTV,	ZBLOCK 3
CLODTV,	ZBLOCK 3
PAGE
YMLNGTH,MLNGTH
YLENGTH,LENGTH
YPRINT,	PRINT
YCOUNT,	COUNT
YFIRST,	FIRST
YTCBPW,	TCBPW
YEND,	END
YBUF,	BUFFER
YWTV,	WTV
YRTV,	RTV
YRTV1,	RTV+1
YSKIPF,	SKIPF
OUTBLK,	0

/THE OUTPUT WRITER. A SEPARATE TASK CREATED BY THE INITIALIZATION

WRITER,	JMS MONITOR	/TEST THE BREAK FLAG
	   BREAK
	   0
	 SKP		/
	JMP WRITR1	/NOT SET, CONTINUE
	ACM1		/SET, SET SKIP FLAG TO SKIP THE REST
	DCA I YSKIPF	/OF THIS FILE
WRITR1,	CDTOIF
	TAD I YCOUNT	/ANYTHING IN FILE
	SNA CLA
	 JMP I YEND	/NOTHING TO DO
	TAD I YFIRST
	TAD OUTBLK
	DCA WTV+2	/ACTUAL BLOKNUMBER
	TAD YWTV
	JMS MONITOR
	   CALL
	   MASSDEV
	 JMP .-3	/LOOP ON BUSY
	DCA .+3
	JMS MONITOR
	   WAIT
	   0
	CLA CLL		/NO ERRORS EXPECTED
	CDTOIF
	JMS PRNT	/OUTPUT THE STUFF
	ACM1
	TAD I YCOUNT
	DCA I YCOUNT	/UPDATE THE COUNTER
	TAD OUTBLK
	TAD I YMLNGTH	/BLOCK-LENGTH+1
	SZA		/END OF FILE ?
	 TAD I YLENGTH	/NO, BLOCK+1
	DCA OUTBLK
	JMP WRITER	/MORE, CHECK BREAK FLAG FIRST
TEST,	0		/ROUTINE TO SCAN BUFFER FOR ^Z
	CDTOIF
	TAD (-401
	TAD I YRTV1
	DCA AUTO10	/ADDRESS OF BUFFER
	TAD M200
	DCA X		/COUNTER
	TAD I YRTV
	CDTOAC		/CDF TO FIELD OF BUFFER
TEST1,	TAD I AUTO10
	MQL		/SAVE WORD
	CLA MQA		/GET WORD
	TAD (-232
	AND C177
	SNA CLA		/^Z ?
	 JMP TEST2	/YES, NON-SKIP RETURN OF TEST
	CLA MQA		/GET WORD AGAIN
	AND (3400
	TAD M400
	SNA CLA		/CHAR IN RANGE 220 - 237 ?
	 ACM1		/SET FLAG FOR NEXT BYTE
	DCA FLAG
	TAD I AUTO10
	MQL
	CLA MQA
	TAD (-232
	AND C177
	SNA CLA
	 JMP TEST2
	ISZ FLAG	/NEED TO TEST HIGH BYTE ?
	 JMP TEST3	/NO
	MQA		/GET WORD AGAIN
	AND C7400	/HIGH ORDER 4 BITS
	TAD (-5000	/
	SNA CLA		/PART OF ^Z ?
	 JMP TEST2	/YES, END OF FILE DETECTED !
TEST3,	ISZ X		/NO, ALL BUFFER DONE ?
	 JMP TEST1	/NO, CYCLE
	ISZ TEST	/YES, NO ^Z IN THIS BUFFER (SKIP)
TEST2,	CDTOIF		/RETURN WITH NORMAL DATA FIELD
	JMP I TEST	/RETURN
PRNT,	0
	TAD M200
	DCA LPWC
	TAD YBUF
	DCA LPCA
LPLOOP,	JMS LPSUB
	CLL RTR
	DCA PRNTEM
	JMS LPSUB	//SOME RECURRING INSTRUCTIONS
	BSW
	TAD PRNTEM
	CLL RTR
	JMS I YPRINT
	ISZ LPWC
	 JMP LPLOOP
LPFINI,	JMP I PRNT	/RETURN

LPSUB,	0
	TAD I LPCA
	JMS I YPRINT
	TAD I LPCA
	AND C7400
	ISZ LPCA
	JMP I LPSUB
	JMP I LPSUB

PRNTEM,	0
LPCA,	0
LPWC,	0
FLAG,	0
WTV,	ZBLOCK 3

PAGE
ULFINI,	LPFINI
	/0

PRINT,	0
	AND C177
IFNDEF DIABLO <
	TAD (-33
	SNA		/ESCAPE ?
	 TAD (44-33
	TAD (33		/ESC REQUIRED FOR DIABLO >
	DCA LPCHAR
	TAD LPCHAR
	SZA		//SKIP NULL'S
	 TAD M177
	SNA
	 JMP I PRINT	//IGNORE RUBOUTS
	TAD (177-32
	SNA
	 JMP I ULFINI	//^Z: IGNORE THE REST OF THE BUFFER
	IAC
	SNA CLA
	 JMP LPEXIT	//^Y: END OF FILE
	TAD SKIPF	//SKIP THIS FILE ?
	SZA CLA		//?
	 JMP I PRINT	//YES, FLUSH
	TAD LPCHAR
	TAD (-14
	SNA
	 JMP FF		//FORM FEED
	TAD M1		//(14-15
	SZA
	 TAD C3		//(15-12
	SNA
	 JMP CRLF	//LINE FEED
IFNDEF DIABLO <
	IAC		//TAD (12-11
K7640,	SZA CLA
	 JMP NOTAB
LPTAB,	TAD C240
	JMS LPOUT	//PRINT SPACE
	ISZ POS
	TAD POS
	AND C7
K7740,	SZA CLA SMA
	 JMP LPTAB
	JMP I PRINT	/DIABLO IS SMART >
NOTAB,	CLL STA		//
	DCA FFFLG	//FORMFEEDS ALLOWED FROM NOW
	TAD POS
LF,	TAD (-WIDTH
	SMA
	 JMP LFEXTR
	TAD (WIDTH+1	//INCREMENT POS
CRLF,	DCA POS		//RESET POS FOR CR AND LF
	TAD LPCHAR
IFZERO LOWER <		//IF YOUR LPT CAN'T HANDLE L.C.
	TAD K7640
	SMA
	 TAD K7740
	TAD (340	/ >
	JMS LPOUT
IFDEF DIABLO <
	ISZ DIACNT	/BUFFER FULL ? >
	JMP I PRINT
IFDEF DIABLO <
	TAD M200	/HALF BUFFER
	DCA DIACNT	/RESET COUNTER
	AC0003		/SEND ETX
	JMS LPOUT
	AC0001
	LIION		/ENABLE INTENA
	TAD (-DGNTICK^20/16 SECONDS FOR FF BUT
	JMS MONITOR	/SHOULD ANSWER IN 1-2 SECONDS
	   WAIT
	   LPTER	/BACK CHANNEL FROM KL
	CLA		/IGNORE TIMOUT
	JMP I PRINT	/ >

LFEXTR,
M177,	7601		/CLA
	TAD C215
	JMS LPOUT
	TAD C212
	JMS LPOUT	//GIVE EXTRA CR-LF
	JMP LF

FF,	JMS MONITOR	/TEST THE BREAK FLAG
	   BREAK
	   0
	JMP LPZAP	/SET, SET SKIP FLAG TO SKIP THE REST
	ISZ FFFLG	//FORMFEED NECESARY ?
	 JMP I PRINT	//NO
IFDEF DIABLO <
	JMP CRLF	// >
IFNDEF DIABLO <
IFZERO KL8E <
	JMP CRLF	// >
IFNZRO KL8E <
	TAD LPCHAR	//FORMFEED OUT
	JMS LPOUT
	TAD M100	//NOW INITIALIZE COUNTER TO 64
	DCA POS		//POS IS TO BE RESET ANYWAY
	JMS LPOUT	//GIVE SOME NULLS FOR DELAY
	ISZ POS		//
	JMP .-2		//ALL 64
	JMP I PRINT	// >>
LISKIP=6661
LILOAD=6666
LIION=6665	/AC0001
LIIOF=6665	/AC0000

IFZERO LS8E <
LIIOF=6667 >

IFNZRO KL8E <
LIKLDV=6650
LISKIP=LIKLDV+11
LIION=LIKLDV+5	/AC0001
LIIOF=LIKLDV+5	/AC0000
LILOAD=LIKLDV+16 >

IFNZRO DKC8 <
LISKIP=6570
LIION=6575
LIIOF=6576
LILOAD=6574 >

LPOUT,	0
	AND C177	/SOME LINEPRINTERS LIKE THIS
	IOF		///AVOID PROBLEMS
	DCA LPTMP	///SAVE THE CHARACTER
LPQUICK,LISKIP		///IS THE FLAG UP ALREADY (STILL)
	 SKP		///
	JMP LPFAST	///YES, HURRY ON
	ION		///INTERRUPTS ON AGAIN
	AC0001		/FOR SOME IOTS
	LIION		/ENABLE PRINTER INT'S
	TAD (-DGNTICK	/DELAY 1 SECOND
	JMS MONITOR
	   WAIT
	   LPT
	SZA CLA		/WAS THERE A TIME-OUT ?
	 JMP LPTIMO	/YES
LPFAST,	LIIOF		/DISABLE INTERRUPTS
	TAD LPTMP
IFNZRO DKC8 <
	CMA		/DKC8AA IS FUNNY >
	LILOAD		/PRINT THE CHARACTER, CLEAR THE FLAG
	ION
	CLA		/
	JMP I LPOUT
LPTIMO,	LIIOF		/TURN OFF LP INTENA
	IOF		/AND PDP8 INTENA
	LILOAD		/KICK LP AGAIN TO KEEP IT ALIVE
	AND I 0
	AND I 0
	AND I 0		/DELAY 20MMS
	JMP LPQUICK	/AND CHECK FOR QUICK FLAG

LPZAP,	ACM1		/SET THE SKIPFLAG
LPEXIT,	DCA SKIPF	/RESET THE SKIPFLAG
	TAD C215
	JMS LPOUT
	TAD (214
	JMS PRINT
	STA
	DCA FFFLG	/ALLOW FF FOR NEXT JOB
	JMP I ULFINI


IFDEF DIABLO <
DIACNT,	-200		/HALF OF 256 CHAR BUFFER >
SKIPF,	0
POS,	0
FFFLG,	-1
LPTMP,	0
LPCDF,	0
LPCHAR,	0
K231,	231		/FIRST WORD OF ^Y BUFFER

PAGE
BUFFER,			/INIT AND BUFFER
ZFILE,	FILE
ZTCBPW,	TCBPW		/ARGUMENT IN RUN-REQUEST
ZWRITER,WRITER		/START ADDRESS OF WRITER TASK
ZFIRST,	FIRST
ZMLNGTH,MLNGTH
ZLENGTH,LENGTH
ZLP,	LP
ZBUF,	BUFFER
ZWTV,	WTV
ZWTV1,	WTV+1
ZCLDTV,	CLODTV
ZCLDT1,	CLODTV+1
ZK231,	K231
ZNAME,	PNAME
	0

INIT,	SNA		//CLOSE ?
	 JMP INCLOSE	//YES, THATS EASY
	DCA INIT	//SAVE POINTER TO REQUEST PARAMETERS
	TAD I ZMYCDF	//CDF TO PARAMETERS
	DCA CDF1
	CDTOIF
	TAD ZFILE	/POINTER TO FILE LOOKUP REQUEST BLOCK
	JMS MONITOR
	   CALL
	   "D^100+"I&3777
	 JMP .-3
	SZA CLA
	 JMP INERROR	/*** SPOOL.LP NOT FOUND ***
	TAD FILE+2
	CIA
	DCA I ZLENGTH	/LENGTH OF SPOOLFILE
	TAD FILE+2
	IAC
	DCA I ZMLNGTH	/-LENGTH+1
	TAD FILE+4
	DCA I ZFIRST	/STARTBLOCK OF SPOOLFILE
INIT1,	CDF 00
	TAD I (FHEAD
	SNA
	 JMP WAITS	/NO BLOCKLET AVAILABLE
	JMS DEFER
	DCA I (FHEAD
	TAD X
	TAD (-TCBTAB	/COMPUTE NAMETABLE ENTRY
	CLL RTR
	RAR
	TAD (NAMLST
	DCA ZTEM1	/POINTS IN NAMLST
	TAD ("P^100+"S&3777
	DCA I ZTEM1	/DROP "PS" AS NAME FOR SPOOL WRITER
	ACM1
	TAD X
	DCA AUTO10
	DCA I AUTO10	/ZERO BACKLINK
	DCA I AUTO10	/ZERO THREAD
	TAD ZWRITER
	DCA I AUTO10	/START ADDRESS
	DCA I AUTO10	/ZERO BLOCKNUMBER
	RIF
	DCA I AUTO10	/INSTRUCTION FIELD
	TAD AUTO10
	CDTOIF
	DCA I ZTCBPW	/TCBP OF WRITER TASK
	TAD ZTEM1	/
	DCA I ZNAME	/AND GIVE SHUTUP A POINTER TO REMOVE IT
	TAD (200+UNIT
	RIF
	DCA I ZWTV
	TAD ZBUF
	DCA I ZWTV1
	TAD (4200	/WRITE ONE BLOCK
	RIF		/FROM THIS FIELD
	DCA I ZCLDTV	/THAT'S THE FUNCTION FOR CLOSE
	TAD ZK231	/ADDRESS OF K231
	DCA I ZCLDT1	/THAT'S THE BUFFER ADDRESS FOR CLOSE
RET,	TAD (SNA
	DCA I ZLP	/PATCH FIRST INSTRUCTION OF TASK
CDF1,	CDF		//
	TAD INIT
	JMP I ZLP	//START THE TASK
WAITS,	JMS MONITOR
	   STALL
	   DGNTICK
	CLA CLL
	JMP INIT1

INCLOSE,ACM1
	JMS MONITOR
	   EXIT SWPOUT

INERROR,TAD (-HRDERR-1
	JMS MONITOR
	   EXIT SWPOUT

FILE,	MASSDEV		/NAME OF DEVICE HANDLER
	UNIT		/UNIT NUMBER
	FILENAME SPOOL.LP /FILENAME

PAGE 	/ >
IFNZRO NSPOOL <
	*200

LPCA,	"L^100+"P&3777
	200
LPCHAR,	0

LP,	SNA		//CLOSE ?
	 JMP LPCLOSE	//
	JMS DEFER	//GET FUNCTION WORD
	AND C3700	//GET LENGTH BITS
	CIA		/WORDCOUNT IS NEGATIVE
	DCA LPWC
	TAD I X		/GET FIELDBITS
	AND C70
	TAD C6201
	DCA LPCDF
	ISZ X		//ADVANCE POINTER TO BUFFERADDRESS
	TAD I X	
	DCA LPCA	//SET UP CURRENT ADDRESS
	JMS MONITOR
	   RESERV RETURN CONTINUE
	DCA LPSLOT	/EVENT # FOR COMPLETION
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
LPEND,	JMS MONITOR
C14,	   SIGNAL HALT
LPSLOT,	   0

LPSUB,	0
	TAD I LPCA
	JMS PRINT
	TAD I LPCA
	AND C7400
	ISZ LPCA
	NOP		/PROTECT ISZ
	JMP I LPSUB

LPCLOSE,TAD C215
	JMS LPOUT
	TAD C14
	JMS PRINT	/
	ACM1
	JMS MONITOR
	   EXIT SWPOUT

PRINT,	0
	AND C177
	TAD (-33
	SNA		/ESCAPE ?
	 TAD (44-33	/YES, MAKE "$
	TAD (33
	DCA LPCHAR
	TAD LPCHAR
	SZA		//SKIP NULL'S
	 TAD M177
	SNA
	 JMP I PRINT	//IGNORE RUBOUTS
	TAD (377-232
	SNA
	 JMP LPEND	//^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
LPTAB,	TAD C240
	JMS LPOUT	//PRINT SPACE
	ISZ POS
	TAD POS
	AND C7
K7740,	SZA CLA SMA
	 JMP LPTAB
	JMP I PRINT

C340,
NOTAB,	7340		/CLL STA
	DCA FFFLG	//FORMFEEDS ALLOWED FROM NOW
	TAD POS
LF,	TAD (-WIDTH
	SMA
	 JMP LFEXTR
	TAD (WIDTH+1	//INCREMENT POS
CRLF,	DCA POS		//RESET POS FOR CR AND LF
	TAD LPCHAR
IFZERO LOWER <		//IF YOUR LPT CAN'T HANDLE L.C.
	TAD K7640
	SMA
	 TAD K7740
	TAD C340	/ >
	JMS LPOUT
	JMP I PRINT

LFEXTR,
M177,	7601	/CLA
	TAD C212
	JMS LPOUT	//GIVE EXTRA LF
	JMP LF

FF,	ISZ FFFLG	//FORMFEED NECESSARY ?
	 JMP I PRINT	//NO
	JMP CRLF

LPOUT,	0
	DCA LPTMP
IFZERO DKC8 <AC0001
IFZERO KL8E <6665	/SET INTERRUPT ENABLE >>
IFNZRO KL8E <6655	/SET INTERRUPT ENABLE >
IFNZRO DKC8 <6575	/SET INTERRUPT ENABLE >
	JMS MONITOR
	   WAIT
	   LPT
	TAD LPTMP
IFZERO DKC8 <6666	/ >
IFNZRO DKC8 <CMA
	6574
	6577		/ >
	CLA
	JMP I LPOUT

LPWC,	0
POS,	0
FFFLG,	0
LPTMP,	0

PAGE	/END IFNZRO NSPOOL >
$