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 ldy COL.BANK,x sta $C000,y txa lsr tay 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 txa lsr tay 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 txa lsr tay 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 ldy COL.BANK,x sta $C000,y txa lsr tay 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 txa lsr tay 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 txa lsr tay 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 txa lsr tay 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 ldy COL.BANK,x sta $C000,y txa lsr tay 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 ldy COL.BANK,x sta $C000,y txa lsr tay 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