A2osX/DRV/DHGR.DRV.S.PIX.txt

184 lines
3.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* SETPIXEL
* In : YA = Ptr to CtrlBlk :
* 1 : OP (XOR only)
* 2 : Mode
* 3 : Color
* 4 : SrcX1
* 6 : SrcY1
*--------------------------------------
SETPIXEL >STYA ZPBase
ldy #S.CB.Y1 Skip S.CB.Y1+1.....always 0
.1 lda (ZPBase),y
sta CB.Cache,y
dey
bpl .1
sta SET80STORE
lda CB.Cache+S.CB.MODE
bit #S.CB.MODE.C16
bne SETPIXEL.C16
SETPIXEL.MONO 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
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
.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7
lda CB.Cache+S.CB.OP
beq .5
lda (ZPBase) XOR
eor Mono.Masks,y y = mod 7
sta (ZPBase)
sta CLR80STORE
rts
.5 lda (ZPBase)
ldx CB.Cache+S.CB.COLOR get color
bne .6
and Mono.NMasks,y includes And $7F for mono
sta (ZPBase)
sta CLR80STORE
rts
.6 and #$7F switch back this byte to mono
ora Mono.Masks,y
sta (ZPBase)
sta CLR80STORE
rts
SETPIXEL.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
*--------------------------------------
* GETPIXEL
*--------------------------------------
GETPIXEL rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.PIX
LOAD /A2OSX.SRC/DRV/DHGR.DRV.S
ASM