A2osX/DRV/DHGR.DRV.S.LINE.txt
2020-06-09 15:40:21 +02:00

150 lines
2.7 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.

NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* HLINE X1,X2 at Y1 (XOR,SET,ORA)
*--------------------------------------
HLINE lda CB.Cache+S.CB.M
cmp #S.CB.M.MONO
bne HLINE.C16
HLINE.MONO >LDYA CB.Cache+S.CB.X1
jsr LBUF.SetBounds1YA
>LDYA CB.Cache+S.CB.X2
jsr LBUF.SetBounds2YA
lda CB.Cache+S.CB.COLOR
beq .1
lda #%01111111
.1 ldx LBUF.C1
.2 sta LBUF.DATA,x
cpx LBUF.C2
inx
bcc .2
ldy CB.Cache+S.CB.Y1
jmp LBUF.DrawAtY
HLINE.C16 lda CB.Cache+S.CB.X1
and #%11111100
tay
lda CB.Cache+S.CB.X1+1
jsr LBUF.SetBounds1YA
lda CB.Cache+S.CB.X2
ora #%00000011
tay
lda CB.Cache+S.CB.X2+1
jsr LBUF.SetBounds2YA
lda CB.Cache+S.CB.COLOR
asl
asl
clc
adc L.Color.Pixels
sta ZPTmpWord
lda L.Color.Pixels+1
adc #0
sta ZPTmpWord+1
ldx LBUF.C1
.1 txa
and #3 Compute index in Palette (Mod 4)
tay
.2 lda (ZPTmpWord),y
sta LBUF.DATA,x
cpx LBUF.C2
inx
bcc .1
ldy CB.Cache+S.CB.Y1
jmp LBUF.DrawAtY
*--------------------------------------
* VLINE Y1,Y2 at X1 (XOR,SET,ORA)
*--------------------------------------
VLINE lda CB.Cache+S.CB.M
cmp #S.CB.M.MONO
bne VLINE.C16
VLINE.MONO >LDYA CB.Cache+S.CB.X1
jsr DIVMOD7YA X = MOD 7
tay
lda COL.OFS,y
sta ZPTmpByte Save COL (DIV)
lda COL.BANK,y
tay
sta $C000,y Select proper BANK
ldy CB.Cache+S.CB.Y1
clc
lda CB.Cache+S.CB.OP
* cmp #S.CB.OP.XOR
beq VLINE.MONO.XOR
lda CB.Cache+S.CB.COLOR
bne VLINE.MONO.WHITE
VLINE.MONO.BLACK
.1 lda BASEL,y
adc ZPTmpByte
sta ZPBasePtr
lda BASEH,y
sta ZPBasePtr+1
lda (ZPBasePtr)
and Mono.NMasks,x
sta (ZPBasePtr)
cpy CB.Cache+S.CB.Y2
iny
bcc .1
rts
VLINE.MONO.WHITE
lda #$1D ORA abs,x
.HS 2C BIT ABS
VLINE.MONO.XOR
lda #$5D EOR abs,x
sta .2
.1 lda BASEL,y
adc ZPTmpByte
sta ZPBasePtr
lda BASEH,y
sta ZPBasePtr+1
lda (ZPBasePtr)
.2 eor Mono.Masks,x SELF MODIFIED
sta (ZPBasePtr)
cpy CB.Cache+S.CB.Y2
iny
bcc .1
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)
ldx CB.Cache+S.CB.Y1
.1 phy
phx
jsr SETPIXEL.C16.YX
plx
ply
cpy CB.Cache+S.CB.Y2
iny
bcc .1
rts
*--------------------------------------
MAN
SAVE usr/src/drv/dhgr.drv.s.line
LOAD usr/src/drv/dhgr.drv.s
ASM