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 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 ora 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 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+1 sta .20+1 sta .30+1 ldx LBUF.C1 x C1->C2 >X2PageY 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 >X2PageY 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 >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 .30 ora (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 cpx LBUF.C2 bne .1 ora LBUF.C2.MASK special case : C1=C2 and (ZPBasePtr),y sta ZPTmpByte lda LBUF.DATA,x and LBUF.C1.DATA and LBUF.C2.DATA ora ZPTmpByte sta (ZPBasePtr),y update screen rts .1 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 bra .3 .2 >X2PageY lda (ZPBasePtr),y and LBUF.MASK,x ora LBUF.DATA,x set all bytes between C1+1 & C2-1 .3 sta (ZPBasePtr),y update screen inx cpx LBUF.C2 bne .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