NEW
  AUTO 3,1
				.LIST OFF	
*--------------------------------------
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				C1=C2, go combine in C1
				beq .1
			
				lda C2.MASK,x			
				sta LBUF.C2.MASK
				lda C2.DATA,x
				sta LBUF.C2.DATA
				rts

.1				lda C1.MASK,x
				and C2.MASK,x
				sta	LBUF.C1.MASK
				lda C1.DATA,x
				ora C2.DATA,x
				sta 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
				bit #S.CB.OP.RESTORE
				bne .4
				bit #S.CB.OP.SAVE
				beq .3
				ldx LBUF.C1

.1				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				lda (ZPBasePtr),y
				sta (ZPBMSavePtr)
				inc ZPBMSavePtr
				bne .2
				inc ZPBMSavePtr+1
.2				cpx LBUF.C2
				inx
				bcc .1
				lda CB.Cache+S.CB.OP
.3				and #$F
				tax
				jmp (J.LBUF.DrawAtY,x)
.4				ldx LBUF.C1

.5				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				lda (ZPBMSavePtr)
				sta (ZPBasePtr),y
				inc ZPBMSavePtr
				bne .6
				inc ZPBMSavePtr+1
.6				cpx LBUF.C2
				inx
				bcc .5

				rts
*--------------------------------------
LBUF.DrawAtY.SET
LBUF.DrawAtY.AND.SET					USELESS
				ldx LBUF.C1				x C1->C2
				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				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				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				lda LBUF.DATA,x			set all bytes between C1+1 & C2-1
				sta (ZPBasePtr),y

				inx
				cpx LBUF.C2
				bcc .1
.2				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x

				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					UELESS
				lda #$51				EOR (Indirect),Y
				bra LBUF.DrawAtY.XXX
*--------------------------------------
LBUF.DrawAtY.ORA
				lda #$11				ORA (Indirect),Y
LBUF.DrawAtY.XXX
				sta .10+1
				sta .20+1
				sta .30+1
				ldx LBUF.C1				x C1->C2
				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				lda (ZPBasePtr),y		Get C1
				and LBUF.C1.MASK		clear ONLY bits starting at X1 mod 7
				sta ZPTmpByte
				lda LBUF.DATA,x			get DATA bits
				and LBUF.C1.DATA		set ONLY bits starting at X1 mod 7
				ora ZPTmpByte
.10			ora (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				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				lda LBUF.DATA,x			set all bytes between C1+1 & C2-1
.20			ora (ZPBasePtr),y
				sta (ZPBasePtr),y

				inx
				cpx LBUF.C2
				bne .1
.2				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				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
.30			ora (ZPBasePtr),y
				sta (ZPBasePtr),y		update screen	

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

				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				lda LBUF.MASK,x			get MASK bits
				ora LBUF.C1.MASK		clear ONLY bits starting at X1 mod 7
				and (ZPBasePtr),y		Clear screen at C1
				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				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				lda (ZPBasePtr),y
				and LBUF.MASK,x
				ora LBUF.DATA,x			set all bytes between C1+1 & C2-1
				sta (ZPBasePtr),y

				inx
				cpx LBUF.C2
				bne .1
.2				ldy COL.BANK,x
				sta $C000,y
				ldy COL.OFS,x
				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/RV/DHGR.DRV.S.LBUF
LOAD USR/SRC/DRV/DHGR.DRV.S
ASM
