A2osX/DRV/DHGR.DRV.S.LBUF.txt
burniouf 9a7d20a7e1 ProDOS 203 / FX:TC mod for year 2022-2026
FORMAT: new switches & checks
SH:BREAK in FOR and WHILE
ASM / S-C MASM: new directives, CString support and .HX
LC / UC:bugfix
DHGR.DRV:bugfix
LIBGUI:wip
CC:wip
2022-12-07 08:02:29 +01:00

183 lines
3.7 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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