A2osX/DRV/DHGR.DRV.S.LBUF.txt

203 lines
4.2 KiB
Plaintext
Raw Normal View History

2017-12-22 21:24:30 +00:00
NEW
2019-07-25 15:10:59 +00:00
AUTO 3,1
*--------------------------------------
LBUF.SetBounds1YA
jsr DIVMOD7YA A=DIV, X=MOD
sta LBUF.C1
2017-11-20 06:59:59 +00:00
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
2020-06-09 13:40:21 +00:00
lda C2.MASK,x
sta LBUF.C2.MASK
lda C2.DATA,x
sta LBUF.C2.DATA
rts
.1 lda C1.MASK,x
2020-10-12 15:36:10 +00:00
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
2020-06-09 13:40:21 +00:00
lda CB.Cache+S.CB.OP
2020-10-12 15:36:10 +00:00
and #$F
tax
jmp (J.LBUF.DrawAtY,x)
*--------------------------------------
2019-10-03 06:25:27 +00:00
LBUF.DrawAtY.SET
2020-06-09 13:40:21 +00:00
LBUF.DrawAtY.AND.SET
ldx LBUF.C1 x C1->C2
2020-09-01 15:38:55 +00:00
2021-06-05 15:48:54 +00:00
>X2PageY
2020-09-01 15:38:55 +00:00
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
2019-07-25 15:10:59 +00:00
ora ZPTmpByte ora with screen bits
sta (ZPBasePtr),y update screen
2020-09-01 15:38:55 +00:00
inx
cpx LBUF.C2
2019-07-25 15:10:59 +00:00
beq .2 C1=C2, go setup C2
2020-06-09 13:40:21 +00:00
2019-10-03 06:25:27 +00:00
bcs .8 C1+1 > C2, we are done...
2021-06-05 15:48:54 +00:00
.1 >X2PageY
2020-09-01 15:38:55 +00:00
2019-07-25 15:10:59 +00:00
lda LBUF.DATA,x set all bytes between C1+1 & C2-1
sta (ZPBasePtr),y
2019-07-25 15:10:59 +00:00
inx
cpx LBUF.C2
2017-12-04 16:42:08 +00:00
bcc .1
2020-06-09 13:40:21 +00:00
2021-06-05 15:48:54 +00:00
.2 >X2PageY
lda (ZPBasePtr),y Get C2
and LBUF.C2.MASK clear ONLY bits ending at X2 mod 7
sta ZPTmpByte
2020-09-01 15:38:55 +00:00
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
2020-09-01 15:38:55 +00:00
.8 rts
2019-07-25 15:10:59 +00:00
*--------------------------------------
LBUF.DrawAtY.XOR
2020-06-09 13:40:21 +00:00
LBUF.DrawAtY.AND.XOR
2019-07-25 15:10:59 +00:00
lda #$51 EOR (Indirect),Y
bra LBUF.DrawAtY.XXX
*--------------------------------------
2019-07-25 15:10:59 +00:00
LBUF.DrawAtY.ORA
lda #$11 ORA (Indirect),Y
LBUF.DrawAtY.XXX
sta .10+1
sta .20+1
sta .30+1
2020-06-09 13:40:21 +00:00
ldx LBUF.C1 x C1->C2
2020-06-09 13:40:21 +00:00
2021-06-05 15:48:54 +00:00
>X2PageY
2020-09-01 15:38:55 +00:00
lda (ZPBasePtr),y Get C1
and LBUF.C1.MASK clear ONLY bits starting at X1 mod 7
sta ZPTmpByte
2020-06-09 13:40:21 +00:00
lda LBUF.DATA,x get DATA bits
and LBUF.C1.DATA set ONLY bits starting at X1 mod 7
ora ZPTmpByte
2019-07-25 15:10:59 +00:00
.10 ora (ZPBasePtr),y
sta (ZPBasePtr),y update screen
inx
cpx LBUF.C2
beq .2 C1=C2, go setup C2
2020-06-09 13:40:21 +00:00
bcs .8 C1+1 > C2, we are done...
2020-06-09 13:40:21 +00:00
2021-06-05 15:48:54 +00:00
.1 >X2PageY
2020-09-01 15:38:55 +00:00
lda LBUF.DATA,x set all bytes between C1+1 & C2-1
2019-07-25 15:10:59 +00:00
.20 ora (ZPBasePtr),y
sta (ZPBasePtr),y
inx
cpx LBUF.C2
bne .1
2020-06-09 13:40:21 +00:00
2021-06-05 15:48:54 +00:00
.2 >X2PageY
2020-09-01 15:38:55 +00:00
2019-07-25 15:10:59 +00:00
lda (ZPBasePtr),y Get C2
and LBUF.C2.MASK clear ONLY bits ending at X2 mod 7
sta ZPTmpByte
2019-07-25 15:10:59 +00:00
lda LBUF.DATA,x get DATA bits
and LBUF.C2.DATA set ONLY bits ending at X2 mod 7
ora ZPTmpByte
2019-07-25 15:10:59 +00:00
.30 ora (ZPBasePtr),y
sta (ZPBasePtr),y update screen
.8 rts
*--------------------------------------
LBUF.DrawAtY.AND.ORA
ldx LBUF.C1 x C1->C2
2017-12-22 21:24:30 +00:00
2021-06-05 15:48:54 +00:00
>X2PageY
2020-09-01 15:38:55 +00:00
lda LBUF.MASK,x get MASK bits
ora LBUF.C1.MASK clear ONLY bits starting at X1 mod 7
2020-09-06 12:24:04 +00:00
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
2020-09-06 12:24:04 +00:00
and LBUF.C1.DATA set ONLY bits starting at X1 mod 7
2020-06-09 13:40:21 +00:00
ora ZPTmpByte ora with screen bits
2020-09-06 12:24:04 +00:00
bra .3
2020-06-09 13:40:21 +00:00
2021-06-05 15:48:54 +00:00
.2 >X2PageY
2020-09-01 15:38:55 +00:00
lda (ZPBasePtr),y
2020-06-09 13:40:21 +00:00
and LBUF.MASK,x
2020-09-06 12:24:04 +00:00
ora LBUF.DATA,x set all bytes between C1+1 & C2-1
.3 sta (ZPBasePtr),y update screen
inx
cpx LBUF.C2
2020-09-06 12:24:04 +00:00
bne .2
2020-06-09 13:40:21 +00:00
2021-06-05 15:48:54 +00:00
>X2PageY
2020-09-01 15:38:55 +00:00
lda LBUF.MASK,x get MASK bits
ora LBUF.C2.MASK
and (ZPBasePtr),y
sta ZPTmpByte
2020-06-09 13:40:21 +00:00
lda LBUF.DATA,x get DATA bits
2020-09-06 12:24:04 +00:00
and LBUF.C2.DATA set ONLY bits ending at X2 mod 7
2020-06-09 13:40:21 +00:00
ora ZPTmpByte
sta (ZPBasePtr),y update screen
2020-09-01 15:38:55 +00:00
.8 rts
*--------------------------------------
MAN
2020-06-09 13:40:21 +00:00
SAVE usr/src/drv/dhgr.drv.s.lbuf
LOAD usr/src/drv/dhgr.drv.s
ASM