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

218 lines
5.0 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
.LIST OFF
*--------------------------------------
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
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
2019-10-03 06:25:27 +00:00
rts
*--------------------------------------
2019-10-03 06:25:27 +00:00
LBUF.DrawAtY.SET
2019-07-25 15:10:59 +00:00
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
2019-07-25 15:10:59 +00:00
ora ZPTmpByte ora with screen bits
sta (ZPBasePtr),y update screen
inx
cpx LBUF.C2
2019-07-25 15:10:59 +00:00
beq .2 C1=C2, go setup C2
2019-10-03 06:25:27 +00:00
bcs .8 C1+1 > C2, we are done...
2019-07-25 15:10:59 +00:00
.1 ldy COL.BANK,x
sta $C000,y
ldy COL.OFS,x
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
2019-07-25 15:10:59 +00:00
.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
2019-07-25 15:10:59 +00:00
sta (ZPBasePtr),y update screen
.8 rts
2019-07-25 15:10:59 +00:00
*--------------------------------------
LBUF.DrawAtY.XOR
LBUF.DrawAtY.AND.XOR UELESS
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
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
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
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
2019-07-25 15:10:59 +00:00
.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
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
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
2018-12-19 07:12:58 +00:00
SAVE USR/SRC/RV/DHGR.DRV.S.LBUF
LOAD USR/SRC/DRV/DHGR.DRV.S
ASM