NEW
  AUTO 3,1
*--------------------------------------
LBUF.SetBounds1YA
				jsr DIVMOD7YA			A=DIV, X=MOD
				sta LBUF.C1

				lda C1.MASK,x
				sta LBUF.C1.MASK
				lda C1.DATA,x
				sta LBUF.C1.DATA
				rts
*--------------------------------------
LBUF.SetBounds2YA
				jsr DIVMOD7YA			A=DIV, X=MOD
				sta LBUF.C2
				cmp LBUF.C1
				beq .1

				lda C2.MASK,x
				sta LBUF.C2.MASK
				lda C2.DATA,x
				sta LBUF.C2.DATA
				rts

.1				lda C2.MASK,x			C1=C2, go combine in C1
				tsb	LBUF.C1.MASK
				lda C2.DATA,x
				tsb LBUF.C1.DATA
				rts
*--------------------------------------
LBUF.DrawAtY	lda BASEL,y				setup line Base Ptr
				sta ZPBasePtr
				lda BASEH,y
				sta ZPBasePtr+1

				lda CB.Cache+S.CB.OP
				and #$F
				tax
				jmp (J.LBUF.DrawAtY,x)
*--------------------------------------
LBUF.DrawAtY.SET
LBUF.DrawAtY.AND.SET
				ldx LBUF.C1				x C1->C2

				>X2PageY

				lda (ZPBasePtr),y		Clear screen at C1
				and LBUF.C1.MASK		with MASK bits
				sta ZPTmpByte

				lda LBUF.DATA,x			get DATA bits
				and LBUF.C1.DATA		set ONLY bits starting at X1 mod 7
				ora ZPTmpByte			ora with screen bits
				sta (ZPBasePtr),y		update screen

				inx
				cpx LBUF.C2
				beq .2					C1=C2, go setup C2

				bcs .8					C1+1 > C2, we are done...

.1				>X2PageY

				lda LBUF.DATA,x			set all bytes between C1+1 & C2-1
				sta (ZPBasePtr),y

				inx
				cpx LBUF.C2
				bcc .1

.2				>X2PageY

				lda (ZPBasePtr),y		Get C2
				and LBUF.C2.MASK		clear ONLY bits ending at X2 mod 7
				sta ZPTmpByte

				lda LBUF.DATA,x			get DATA bits
				and LBUF.C2.DATA		set ONLY bits ending at X2 mod 7
				ora ZPTmpByte
				sta (ZPBasePtr),y		update screen

.8				rts
*--------------------------------------
LBUF.DrawAtY.XOR
LBUF.DrawAtY.AND.XOR
				lda #$51				EOR (Indirect),Y
				bra LBUF.DrawAtY.XXX
*--------------------------------------
LBUF.DrawAtY.ORA
				lda #$11				ORA (Indirect),Y
LBUF.DrawAtY.XXX
				sta .10
				sta .20
				sta .30

				ldx LBUF.C1				x C1->C2

				>X2PageY

				lda LBUF.DATA,x			get DATA bits
				and LBUF.C1.DATA		set ONLY bits starting at X1 mod 7

.10			eor (ZPBasePtr),y
				sta (ZPBasePtr),y		update screen
				inx
				cpx LBUF.C2
				beq .2					C1=C2, go setup C2

				bcs .8					C1+1 > C2, we are done...

.1				>X2PageY

				lda LBUF.DATA,x			set all bytes between C1+1 & C2-1
.20			eor (ZPBasePtr),y
				sta (ZPBasePtr),y

				inx
				cpx LBUF.C2
				bne .1

.2				>X2PageY

				lda LBUF.DATA,x			get DATA bits
				and LBUF.C2.DATA		set ONLY bits ending at X2 mod 7

.30			eor (ZPBasePtr),y
				sta (ZPBasePtr),y		update screen

.8				rts
*--------------------------------------
LBUF.DrawAtY.AND.ORA
				ldx LBUF.C1				x C1->C2

				>X2PageY

				lda LBUF.MASK,x			get MASK bits
				ora LBUF.C1.MASK		clear ONLY bits starting at X1 mod 7
			and (ZPBasePtr),y
				sta ZPTmpByte

				lda LBUF.DATA,x
				and LBUF.C1.DATA
			ora ZPTmpByte
				sta (ZPBasePtr),y		update screen

				inx
				cpx LBUF.C2
				beq .2					C1=C2, go setup C2

				bcs .8					C1+1 > C2, we are done...

.1				>X2PageY

				lda (ZPBasePtr),y
			and LBUF.MASK,x
			ora LBUF.DATA,x				set all bytes between C1+1 & C2-1

				sta (ZPBasePtr),y		update screen

				inx
				cpx LBUF.C2
				bne .1

.2				>X2PageY

				lda LBUF.MASK,x			get MASK bits
				ora LBUF.C2.MASK
			and (ZPBasePtr),y
				sta ZPTmpByte

				lda LBUF.DATA,x			get DATA bits
				and LBUF.C2.DATA		set ONLY bits ending at X2 mod 7
			ora ZPTmpByte
				sta (ZPBasePtr),y		update screen

.8				rts
*--------------------------------------
MAN
SAVE usr/src/drv/dhgr.drv.s.lbuf
LOAD usr/src/drv/dhgr.drv.s
ASM
