mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-03 12:06:05 +00:00
280 lines
4.8 KiB
Plaintext
280 lines
4.8 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
Draw >PULLW ZPCBPtr Get CB
|
||
>PULLYA Get GC
|
||
jsr OBJ.Get
|
||
.1 >LDYA ZPCBPtr
|
||
jsr CB.Get
|
||
ldx CB.Cache+S.CB.CMD Get Cmd
|
||
beq .8
|
||
|
||
jsr CLIP.X
|
||
bcs .7
|
||
ldx CB.Cache+S.CB.CMD
|
||
cpx #S.CB.CMD.DRAWLINE
|
||
bcc .2 Native DRV Cmd
|
||
|
||
jsr Draw.Jmp
|
||
bra .7
|
||
.2 jsr GFXWrite.CB
|
||
.7 lda (ZPCBPtr) Get Cmd
|
||
tax
|
||
lda CB.CmdLen,x
|
||
sec
|
||
adc ZPCBPtr
|
||
sta ZPCBPtr
|
||
bcc .1
|
||
inc ZPCBPtr+1
|
||
bra .1
|
||
.8 clc
|
||
.9
|
||
rts
|
||
Draw.Jmp jmp (J.Cmds-S.CB.CMD.DRAWLINE,x)
|
||
*--------------------------------------
|
||
* In: Control Block in CB.Cache
|
||
* CMD
|
||
* OP
|
||
* MODE
|
||
* COLOR
|
||
* X1
|
||
* Y1
|
||
* X2
|
||
* Y2
|
||
*--------------------------------------
|
||
DrawLine lda CB.Cache+S.CB.X2
|
||
sec
|
||
sbc CB.Cache+S.CB.X1
|
||
sta DX
|
||
lda CB.Cache+S.CB.X2+1
|
||
sbc CB.Cache+S.CB.X1+1
|
||
sta DX+1 DX = X2 - X1
|
||
|
||
bmi .1 DX < 0....
|
||
ora DX
|
||
bne .2 DX > 0...
|
||
|
||
lda #S.CB.CMD.VLINE
|
||
sta CB.Cache+S.CB.CMD
|
||
jmp GFXWrite.CB DX=0 : VLIN Y1,Y2 At X1
|
||
.1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2
|
||
* >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2
|
||
lda CB.Cache+S.CB.Y1
|
||
ldx CB.Cache+S.CB.Y2
|
||
stx CB.Cache+S.CB.Y1
|
||
sta CB.Cache+S.CB.Y2
|
||
|
||
>NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive)
|
||
|
||
.2 lda #1
|
||
sta IY
|
||
|
||
lda CB.Cache+S.CB.Y2
|
||
sec
|
||
sbc CB.Cache+S.CB.Y1
|
||
sta DY
|
||
* lda CB.Cache+S.CB.Y2+1
|
||
lda #0
|
||
* sbc CB.Cache+S.CB.Y1+1
|
||
sbc #0
|
||
sta DY+1 DY = Y2 - Y1
|
||
bmi .3 DY < 0 ...
|
||
ora DY
|
||
bne .4
|
||
lda #S.CB.CMD.HLINE
|
||
sta CB.Cache+S.CB.CMD
|
||
jmp GFXWrite.CB DY=0 : HLIN X1,X2 At Y1
|
||
.3 >NOT16 DY set DY=-DY
|
||
lda #$ff
|
||
sta IY set IY=-1
|
||
|
||
.4 lda #S.CB.CMD.SETPIXEL
|
||
sta CB.Cache+S.CB.CMD
|
||
jsr GFXWrite.CB
|
||
lda DX
|
||
sec
|
||
sbc DY
|
||
tax
|
||
lda DX+1
|
||
* sbc DY+1
|
||
sbc #0
|
||
bmi DrawLine.IncY DY is greater than DX, we will increase on Y axis
|
||
txa
|
||
beq DrawLine.IncXY DX=DY, go inc X & Y
|
||
jmp DrawLine.IncX DY is lower than DX, we will increase on X axis
|
||
|
||
DrawLine.IncXY lda DX DX=DY
|
||
eor #$ff
|
||
sta Counter
|
||
lda DX+1
|
||
eor #$ff
|
||
sta Counter+1
|
||
|
||
.1 inc Counter
|
||
bne .2
|
||
inc Counter+1
|
||
beq .8
|
||
.2 inc CB.Cache+S.CB.X1
|
||
bne .3
|
||
inc CB.Cache+S.CB.X1+1
|
||
.3 lda CB.Cache+S.CB.Y1 Y1=Y1+IY
|
||
clc
|
||
adc IY
|
||
sta CB.Cache+S.CB.Y1
|
||
jsr GFXWrite.CB
|
||
bra .1
|
||
.8 rts
|
||
DrawLine.IncY lda DY
|
||
eor #$ff
|
||
sta Counter
|
||
lda DY+1
|
||
eor #$ff
|
||
sta Counter+1
|
||
|
||
lda DX IE=2*DX
|
||
asl
|
||
sta IE
|
||
pha
|
||
lda DX+1
|
||
rol
|
||
sta IE+1
|
||
tax
|
||
|
||
pla D=IE-DY
|
||
sec
|
||
sbc DY
|
||
sta D
|
||
txa
|
||
sbc DY+1
|
||
sta D+1
|
||
lda DX INE=2*(DX-DY)
|
||
sec
|
||
sbc DY
|
||
pha
|
||
lda DX+1
|
||
sbc DY+1
|
||
tax
|
||
pla
|
||
asl
|
||
sta INE
|
||
txa
|
||
rol
|
||
sta INE+1
|
||
.1 inc Counter
|
||
bne .2
|
||
inc Counter+1
|
||
beq .8
|
||
|
||
.2 lda D+1 IF D < 0 ...
|
||
bmi .4
|
||
lda D D > 0 : D=D+INE
|
||
clc
|
||
adc INE
|
||
sta D
|
||
lda D+1
|
||
adc INE+1
|
||
sta D+1
|
||
inc CB.Cache+S.CB.X1 X1=X1+1
|
||
bne .5
|
||
inc CB.Cache+S.CB.X1+1
|
||
bra .5
|
||
.4 lda D D > 0 : D=D+IE
|
||
clc
|
||
adc IE
|
||
sta D
|
||
lda D+1
|
||
adc IE+1
|
||
sta D+1
|
||
.5 lda CB.Cache+S.CB.Y1 Y1=Y1+IY
|
||
clc
|
||
adc IY
|
||
sta CB.Cache+S.CB.Y1
|
||
jsr GFXWrite.CB
|
||
bra .1
|
||
.8 rts
|
||
|
||
DrawLine.IncX lda DX
|
||
eor #$ff
|
||
sta Counter
|
||
lda DX+1
|
||
eor #$ff
|
||
sta Counter+1
|
||
lda DY IE=2*DY
|
||
asl
|
||
sta IE
|
||
pha
|
||
* lda DY+1
|
||
lda #0
|
||
rol
|
||
sta IE+1
|
||
tax
|
||
pla D=IE-DX
|
||
sec
|
||
sbc DX
|
||
sta D
|
||
txa
|
||
sbc DX+1
|
||
sta D+1
|
||
lda DY INE=2*(DY-DX)
|
||
sec
|
||
sbc DX
|
||
pha
|
||
* lda DY+1
|
||
lda #0
|
||
sbc DX+1
|
||
tax
|
||
pla
|
||
asl
|
||
sta INE
|
||
txa
|
||
rol
|
||
sta INE+1
|
||
.1 inc Counter
|
||
bne .2
|
||
inc Counter+1
|
||
beq .8
|
||
|
||
.2 lda D+1 ID D < 0 ....
|
||
bmi .4
|
||
lda D D > 0 : D=D+INE
|
||
clc
|
||
adc INE
|
||
sta D
|
||
lda D+1
|
||
adc INE+1
|
||
sta D+1
|
||
lda CB.Cache+S.CB.Y1 Y1=Y1+IY
|
||
clc
|
||
adc IY
|
||
sta CB.Cache+S.CB.Y1
|
||
bra .5
|
||
.4 lda D D < 0 : D=D+IE
|
||
clc
|
||
adc IE
|
||
sta D
|
||
lda D+1
|
||
adc IE+1
|
||
sta D+1
|
||
.5 inc CB.Cache+S.CB.X1 X1=X1+1
|
||
bne .6
|
||
inc CB.Cache+S.CB.X1+1
|
||
.6 jsr GFXWrite.CB
|
||
bra .1
|
||
.8 rts
|
||
*--------------------------------------
|
||
DrawText >LDYA L.CB.Cache
|
||
ldx #0
|
||
|
||
>SYSCALL2 OSD
|
||
bcs .9
|
||
jsr GFXWrite.CB
|
||
lda CB.Cache+S.CB.SrcPtr
|
||
>SYSCALL2 FreeStkObj
|
||
.9 rts
|
||
*--------------------------------------
|
||
|
||
MAN
|
||
SAVE USR/SRC/LIB/LIBGUI.S.DRAW
|
||
LOAD USR/SRC/LIB/LIBGUI.S
|
||
ASM
|