mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-19 12:31:56 +00:00
218 lines
5.0 KiB
Plaintext
218 lines
5.0 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
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
|
||
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
|
||
|
||
rts
|
||
*--------------------------------------
|
||
LBUF.DrawAtY.SET
|
||
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
|
||
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 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
|
||
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
|
||
|
||
sta (ZPBasePtr),y update screen
|
||
.8 rts
|
||
*--------------------------------------
|
||
LBUF.DrawAtY.XOR
|
||
LBUF.DrawAtY.AND.XOR UELESS
|
||
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
|
||
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
|
||
.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
|
||
.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
|
||
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
|
||
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
|
||
SAVE USR/SRC/RV/DHGR.DRV.S.LBUF
|
||
LOAD USR/SRC/DRV/DHGR.DRV.S
|
||
ASM
|