	CSECT   text
;use SC BLINK option to merge this guy with our default c code hunk
	XDEF	@ReadPix
	XDEF	@FastPix
@FastPix
; D0 has x pos
; D1 has Y pos
; 4(sp) has color
	Movem.l	d2-d3/a2,-(sp)
	lea	_ytable(a4),a0 ; ytable array base addr
	asl.l	#1,d1 ; array offset for shorts
	move.w	0(a0,d1.l),a2 ; byteoffset = ytable[y]
	move.l	d0,d2 ; get x in d2
	asr.l	#3,d2 ; div 8 for col byte
	adda.l	d2,a2 ; add to byteoffset
	
	and.l	#7,d0 ; x = x % 8
	move.l	#7,d2
	sub.w	d0,d2
	ext.l	d2
	moveq.l	#0,d3
	move.w	_nplanes(a4),d3
	moveq.l	#0,d0
pixloop	move.w	d3,d0
	asl.l	#2,d0
	lea	_bp(a4),a0
	move.l	a2,d1
	move.l	0(a0,d0.l),a1
	add.l	d1,a1

checkcolor
	move.l	16(sp),d0 ; load color
	btst	d3,d0
	bne	setpixel

clearpixel
	bclr	d2,(a1)
	dbra	d3,pixloop
	movem.l	(sp)+,d2-d3/a2
	rts

setpixel
	bset	d2,(a1)
	dbra	d3,pixloop
	movem.l	(sp)+,d2-d3/a2
	rts


@ReadPix
; D0 has x pos
; D1 has Y pos
	Movem.l	d2-d4/a2,-(sp)
	lea	_ytable(a4),a0 ; ytable array base addr
	asl.l	#1,d1 ; array offset for shorts
	move.w	0(a0,d1.l),a2 ; byteoffset = ytable[y]
	move.l	d0,d2 ; get x in d2
	asr.l	#3,d2 ; div 8 for col byte
	adda.l	d2,a2 ; add to byteoffset
	
	and.l	#7,d0 ; x = x % 8
	move.l	#7,d2
	sub.w	d0,d2
	ext.l	d2
	moveq.l	#0,d3
	move.w	_nplanes(a4),d3
	moveq.l	#0,d0
	moveq.l	#0,d4
pixloo	move.w	d3,d4
	asl.l	#2,d4
	lea	_bp(a4),a0
	move.l	a2,d1
	move.l	0(a0,d4.l),a1
	add.l	d1,a1

	btst.b	d2,(a1)
	bne	setpixel2

	dbra	d3,pixloo
	movem.l	(sp)+,d2-d4/a2
	rts

setpixel2
	bset.l	d3,d0
	dbra	d3,pixloo
	movem.l	(sp)+,d2-d4/a2
	rts


	CSECT	__MERGED,data ; naming this hunk __MERGED means a4 relative
	XREF	_bp
	XREF	_nplanes
	XREF	_ytable
	end
