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

273 lines
4.8 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-15 07:27:12 +00:00
ldy CB.Cache+S.CB.COLOR
2017-11-14 16:57:34 +00:00
beq .1
2017-11-15 07:27:12 +00:00
ldy #%01111111
2017-11-15 07:27:12 +00:00
.1 ldx LBUF.C1
2017-11-15 07:27:12 +00:00
.2 tya
2017-11-16 07:12:03 +00:00
sta LBUF.DATA,x
2017-11-15 07:27:12 +00:00
cpx LBUF.C2
inx
bcc .2
2017-11-14 16:57:34 +00:00
ldy CB.Cache+S.CB.Y1
jmp LBUF.DrawAtY
HLINE.C16 lda CB.Cache+S.CB.X1
2017-11-14 16:57:34 +00:00
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
ora #%00000011
2017-11-14 16:57:34 +00:00
tay
lda CB.Cache+S.CB.X2+1
2017-11-14 16:57:34 +00:00
jsr LBUF.SetBounds2YA
2017-11-15 07:27:12 +00:00
lda CB.Cache+S.CB.COLOR
asl
asl
clc
adc L.Color.Pixels
sta ZPPalettePtr
lda L.Color.Pixels+1
adc #0
sta ZPPalettePtr+1
ldx LBUF.C1
2017-11-15 07:27:12 +00:00
.1 txa
and #3 Compute index in Palette (Mod 4)
2017-11-14 16:57:34 +00:00
2017-11-15 07:27:12 +00:00
tay
lda (ZPPalettePtr),y
2017-11-16 07:12:03 +00:00
sta LBUF.DATA,x
2017-11-15 07:27:12 +00:00
cpx LBUF.C2
2017-11-15 16:29:23 +00:00
inx
bcc .1
2017-11-15 07:27:12 +00:00
ldy CB.Cache+S.CB.Y1
jmp LBUF.DrawAtY
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
2017-11-15 07:27:12 +00:00
sta ZPBasePtr
lda BASEH,x
2017-11-15 07:27:12 +00:00
sta ZPBasePtr+1
2017-11-15 07:27:12 +00:00
lda (ZPBasePtr),y XOR
.2 eor #$ff
2017-11-15 07:27:12 +00:00
sta (ZPBasePtr),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
2017-11-15 07:27:12 +00:00
sta ZPBasePtr
lda BASEH,x
2017-11-15 07:27:12 +00:00
sta ZPBasePtr+1
2017-11-15 07:27:12 +00:00
lda (ZPBasePtr),y
.3 and #$ff
.4 ora #$ff
2017-11-15 07:27:12 +00:00
sta (ZPBasePtr),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)
2017-11-15 07:27:12 +00:00
sta ZPBasePtr ZPBasePtr now point to first of...
lda BASEH,x
2017-11-15 07:27:12 +00:00
sta ZPBasePtr+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
2017-11-15 07:27:12 +00:00
lda (ZPBasePtr)
and Color.NMasks,x reset existing pixel,
ora GBYTE
2017-11-15 07:27:12 +00:00
sta (ZPBasePtr)
.10 inx
iny
lda Color.Masks,x
beq .11
and Color.Pixels,y apply color
sta GBYTE
sta CLRPAGE2
2017-11-15 07:27:12 +00:00
lda (ZPBasePtr)
and Color.NMasks,x reset existing pixel,
ora GBYTE
2017-11-15 07:27:12 +00:00
sta (ZPBasePtr)
2017-11-15 07:27:12 +00:00
.11 inc ZPBasePtr
inx
iny
lda Color.Masks,x
beq .12
and Color.Pixels,y apply color
sta GBYTE
sta SETPAGE2
2017-11-15 07:27:12 +00:00
lda (ZPBasePtr)
and Color.NMasks,x reset existing pixel,
ora GBYTE
2017-11-15 07:27:12 +00:00
sta (ZPBasePtr)
.12 inx
iny
lda Color.Masks,x
beq .13
and Color.Pixels,y apply color
sta GBYTE
sta CLRPAGE2
2017-11-15 07:27:12 +00:00
lda (ZPBasePtr)
and Color.NMasks,x reset existing pixel,
ora GBYTE
2017-11-15 07:27:12 +00:00
sta (ZPBasePtr)
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