[Coco] Printing from Coco3 Disk Basic to the Drivewire4 printer

Robert Gault robert.gault at att.net
Fri Feb 12 09:27:19 EST 2016

While we have an easy method of using the DW4 "printer" from NitrOS-9, there is 
no built-in method of accessing the DW4 printer from Drivewire HDBDOS. I've 
managed to write some code that will integrate this capability into HDBDOS at 
least as far as LLIST is concerned. It may work for any PRINT #-2 command but 
I've not yet tested that.
I thought the group would find this interesting and there has been little if any 
interest lately in programming on the list. :)


* This example is intended to replace the bit-banger print routine on a Coco3
* so that text is sent to the DW4 printer.
* Feb 12, 2016  Robert Gault

lptpos	equ	$9C	printer position
lptwid	equ	$9B	printer page width

	org	$FA0C		Unused memory in SEB
Main	pshs	d,x,y
	ldb	#$FF		mark that data will have been sent to DW4
	stb	<flag,pcr	set our flag	
	ldy	#2		sending two bytes
	leax	<Param,pcr	temp storage
	tfr	a,b		data to regB
	cmpa	#$0d		carriage return?
	bne	a@
	clr	lptpos		clear position
	dec	lptpos
	lda	#$0a		line feed
	sta	3,x		add to data
	ldy	#4		sending 4 bytes
a@	lda	#'P		print OP_Code
	std	,x		store code and data
	sta     2,x		just in case of line feed
	jsr	[$D941]		got to HDBDOS routine
	inc	lptpos		update line position
	ldb	lptpos		test it for
	cmpb	lptwid		edge of page
	bne	b@
	clr	lptpos		clear position
b@	puls	d,x,y,pc

Flush	pshs	d,x,y		flush the DW4 print buffer
	ldy	#1		one byte to send
	lda	#'F
	leax	<Param,pcr	temp storage
	sta	,x		set Flush code
	clr	<flag,pcr	clear our flag
	jsr	[$D941]		go to HDBDOS routine
	puls	d,x,y,pc
tstchg	pshs	cc,a		test for a change from printer to anything else
	tst	<flag,pcr
	beq	a@
	lda	#'F
	jsr	Flush
a@	puls	cc,a
	jmp	$8C37		the code that was at $A30A
flag	fcb	0
Param	fcb	'P,0,'P,0	DW4 print, data, DW4 print, data
zend	equ	*

	org	$A30A		put character on the screen
	jmp	tstchg

	org	$A2BF
	jmp	Main

	end	$0000

More information about the Coco mailing list