A2osX/DRV/DHGR.DRV.S.LINE.txt

250 lines
4.4 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* HLINE X1,X2 at Y1
*--------------------------------------
2017-11-14 16:57:34 +00:00
HLINE lda CB.Cache+S.CB.MODE
2017-11-14 16:57:34 +00:00
cmp #S.CB.MODE.MONO
bne HLINE.C16
HLINE.MONO >LDYA CB.Cache+S.CB.X1
jsr LBUF.SetBounds1YA
>LDYA CB.Cache+S.CB.X2
jsr LBUF.SetBounds2YA
2017-11-14 16:57:34 +00:00
lda CB.Cache+S.CB.MODE
bit #S.CB.MODE.C16
bne HLINE.C16
2017-11-14 16:57:34 +00:00
lda CB.Cache+S.CB.COLOR
beq .1
2017-11-14 16:57:34 +00:00
lda #%01111111
2017-11-14 16:57:34 +00:00
.1 ldy LBUF.C1
2017-11-14 16:57:34 +00:00
.2 pha
and LBUF.AND,y
sta LBUF.ORA,y
pla
iny
cpy LBUF.C2
bcs .2
2017-11-14 16:57:34 +00:00
ldy CB.Cache+S.CB.Y1
jmp LBUF.DrawAtY
2017-11-14 16:57:34 +00:00
HLINE.C16 lda CB.Cache+S.CB.X1
and #%11111100
tay
lda CB.Cache+S.CB.X1+1
2017-11-14 16:57:34 +00:00
jsr LBUF.SetBounds1YA
2017-11-14 16:57:34 +00:00
lda CB.Cache+S.CB.X2
and #%11111100
tay
lda CB.Cache+S.CB.X2+1
2017-11-14 16:57:34 +00:00
jsr LBUF.SetBounds2YA
rts
*--------------------------------------
* VLINE Y1,Y2 at X1
*--------------------------------------
2017-11-14 16:57:34 +00:00
VLINE lda CB.Cache+S.CB.OP
beq VLINE.OP0
VLINE.XOR jsr VLINE.DIVMOD7
ldy XMOD7
lda Mono.Masks,y
sta .2+1
ldy XCOL7
ldx CB.Cache+S.CB.Y1
.1 lda BASEL,x
sta ZPBase
lda BASEH,x
sta ZPBase+1
lda (ZPBase),y XOR
.2 eor #$ff
sta (ZPBase),y
inx
cpx CB.Cache+S.CB.Y2
bcc .1
beq .1
rts
VLINE.OP0 lda CB.Cache+S.CB.MODE
dec
bne VLINE.C16
VLINE.MONO jsr VLINE.DIVMOD7
ldy XMOD7
lda Mono.NMasks,y includes And $7F for mono
sta .3+1
lda CB.Cache+S.CB.COLOR get color
beq .1
lda Mono.Masks,y
.1 sta .4+1
ldy XCOL7
ldx CB.Cache+S.CB.Y1
.2 lda BASEL,x
sta ZPBase
lda BASEH,x
sta ZPBase+1
lda (ZPBase),y
.3 and #$ff
.4 ora #$ff
sta (ZPBase),y
inx
cpx CB.Cache+S.CB.Y2
bcc .2
beq .2
rts
VLINE.C16 lda CB.Cache+S.CB.X1
lsr CB.Cache+S.CB.X1+1 divide by 4
ror
lsr CB.Cache+S.CB.X1+1
ror
tay Y=X/4 (range 0->139)
lda DIV7.0,y A=X/4/7 (range 0->19)
asl times 2 (range 0->38)
ldx CB.Cache+S.CB.Y1
adc BASEL,x setup line Base Ptr (cc by asl)
sta ZPBase ZPBase now point to first of...
lda BASEH,x
sta ZPBase+1 ...the 4 columns
lda MOD7.0,y get MOD
asl times 4 to compute index in MASK tables
asl
tax set in X for Masks,NMasks
lda CB.Cache+S.CB.COLOR
asl times 4 to compute index in PIXELS table
asl
tay
lda Color.Masks,x bits in 1st byte to light?
beq .10
and Color.Pixels,y apply color
sta GBYTE
sta SETPAGE2
lda (ZPBase)
and Color.NMasks,x reset existing pixel,
ora GBYTE
sta (ZPBase)
.10 inx
iny
lda Color.Masks,x
beq .11
and Color.Pixels,y apply color
sta GBYTE
sta CLRPAGE2
lda (ZPBase)
and Color.NMasks,x reset existing pixel,
ora GBYTE
sta (ZPBase)
.11 inc ZPBase
inx
iny
lda Color.Masks,x
beq .12
and Color.Pixels,y apply color
sta GBYTE
sta SETPAGE2
lda (ZPBase)
and Color.NMasks,x reset existing pixel,
ora GBYTE
sta (ZPBase)
.12 inx
iny
lda Color.Masks,x
beq .13
and Color.Pixels,y apply color
sta GBYTE
sta CLRPAGE2
lda (ZPBase)
and Color.NMasks,x reset existing pixel,
ora GBYTE
sta (ZPBase)
2017-11-14 16:57:34 +00:00
.13 rts
*--------------------------------------
VLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X HI byte....
lda DIV7.lo,x
sta .2+1
lda DIV7.hi,x
sta .2+2
lda MOD7.lo,x
sta .3+1
lda MOD7.hi,x
sta .3+2
lda DIV7.BASE,x
ldx CB.Cache+S.CB.X1 Get X LO byte....
clc
.2 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7
sta XDIV7 save X DIV 7
tay
lsr
sta XCOL7
ldx COL.BANK,y
sta $C000,x
.3 lda $ffff,x MOD7 : x = X.LO, y = X MOD 7
sta XMOD7
rts
*--------------------------------------
MAN
2017-11-14 16:57:34 +00:00
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LINE
LOAD /A2OSX.SRC/DRV/DHGR.DRV.S
ASM