mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 05:32:20 +00:00
289 lines
5.0 KiB
Plaintext
289 lines
5.0 KiB
Plaintext
PR#3
|
||
PREFIX /A2OSX.BUILD
|
||
LOMEM $A00
|
||
INC 1
|
||
AUTO 6
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
* HLINE X1,X2 at Y1
|
||
*--------------------------------------
|
||
HLINE >STYA ZPBase
|
||
ldy #S.CB.X2+1
|
||
|
||
.1 lda (ZPBase),y
|
||
sta CB.Cache,y
|
||
dey
|
||
bpl .1
|
||
|
||
HLINE.I lda CB.Cache+S.CB.MODE
|
||
bit #S.CB.MODE.C16
|
||
bne HLINE.C16
|
||
|
||
HLINE.MONO lda CB.Cache+S.CB.X2 Count=X2-X1
|
||
sec
|
||
sbc CB.Cache+S.CB.X1
|
||
sta ZPCount
|
||
tay
|
||
|
||
lda CB.Cache+S.CB.X2+1
|
||
sbc CB.Cache+S.CB.X1+1
|
||
sta ZPCount+1
|
||
tax
|
||
jsr DIVMOD7YX
|
||
|
||
ldy CB.Cache+S.CB.X1
|
||
ldx CB.Cache+S.CB.X1+1
|
||
|
||
jsr DIVMOD7YX A=X1 DIV 7, X=MOD 7
|
||
|
||
|
||
pha save X DIV 7
|
||
lsr
|
||
ldy CB.Cache+S.CB.Y1
|
||
clc
|
||
adc BASEL,y setup line Base Ptr (A=Col)
|
||
sta ZPBase
|
||
lda BASEH,y
|
||
sta ZPBase+1
|
||
ply
|
||
lda COL.BANK,y
|
||
tay
|
||
sta $c000,y
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
HLINE.C16
|
||
rts
|
||
*--------------------------------------
|
||
HLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X Hi byte....
|
||
|
||
lda DIV7.lo,x
|
||
sta .1+1
|
||
lda DIV7.hi,x
|
||
sta .1+2
|
||
|
||
lda MOD7.lo,x
|
||
sta .2+1
|
||
lda MOD7.hi,x
|
||
sta .2+2
|
||
|
||
lda DIV7.BASE,x
|
||
ldx CB.Cache+S.CB.X1
|
||
|
||
clc
|
||
.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7
|
||
sta XDIV7
|
||
.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7
|
||
sta XMOD7
|
||
rts
|
||
*--------------------------------------
|
||
* VLINE Y1,Y2 at X1
|
||
*--------------------------------------
|
||
VLINE >STYA ZPBase
|
||
ldy #S.CB.Y2
|
||
|
||
.1 lda (ZPBase),y
|
||
sta CB.Cache,y
|
||
dey
|
||
bpl .1
|
||
|
||
sta SET80STORE
|
||
|
||
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
|
||
|
||
sta CLR80STORE
|
||
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
|
||
|
||
sta CLR80STORE
|
||
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)
|
||
|
||
.13 sta CLR80STORE
|
||
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
|
||
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LIN
|
||
LOAD /A2OSX.SRC/DRV/DHGR.DRV.S
|
||
ASM
|