*******************************************************************************
* Parallel Printer Output
* ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
*	Will send ascii text to parallel port via hardware control. For use 
* when system is not available for text redirection to printer.
*
* INPUTS ; a0 = Ptr to ASCIIZ Text to print 
* OUTPUTS; d0 = Error code.. if d0 =-1 the printing was aborted 
*		ELSE d0=0 All text printed okay
*******************************************************************************
		
PrintTest:	lea	PrintText(pc),a0 ; ptr to text to print
		bsr.s	PrintAscii
		rts
		
PrintAscii:	movem.l	a1-a3/d1-d2,-(sp) ;preserve trashed regs
		lea	$bfd000,a2	; Ptr to Print signal clear
		lea	$1101(a2),a1	; Ptr to Data Direction B
		lea	$200(a1),a3	; Ptr to Data Register B
		moveq	#0,d0		; erase d0
		move.l	d0,d1		; erase d1
		move.b	(a3),d1		; save (PIAA) Data Direction B
		move.b	(a1),d2		; save (PIAA) Data Register B
		move.b	#-1,(a3)	; set printer direction
		
ByteLoop:	move.b	(a0)+,d0	; read a byte character to print
		beq.s	PrintDone	; was it a NULL byte.. end of text?
PrintChar	move.b	d0,(a1)		; move data dir for parallel interface

PrtWait		btst	#6,-$100(a1)	; left mouse ?
		beq.s	PrintAborted	; if pressed abort printing...
		
		btst	d1,(a2)		; wait until print signal clear
		bne.s	PrtWait		; has byte been printed?
		bra.s	ByteLoop	; keep on looping

PrintAborted:	move.w	#$f0f,$dff180
		moveq	#-1,d0		; d0=error code
PrintDone	move.b	d1,(a3)		; restore old PIAA Data Direction B
		move.b	d2,(a1)		; restore old PIAA Data Register B
		movem.l	(sp)+,a1-a3/d1-d2 ; restore trashed registers
		rts

PrintText:	dc.b	$a,'Parallel Printer TEST! 1234567890 Parallel Printer TEST! 1234567890 '
		dc.b	0
