mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-29 17:50:18 +00:00
9a7d20a7e1
FORMAT: new switches & checks SH:BREAK in FOR and WHILE ASM / S-C MASM: new directives, CString support and .HX LC / UC:bugfix DHGR.DRV:bugfix LIBGUI:wip CC:wip
473 lines
8.0 KiB
Plaintext
473 lines
8.0 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
CLIP.GetRect >STYA .1+1
|
||
|
||
ldy #S.OBJ.Y2+1
|
||
ldx #7
|
||
|
||
.1 lda $ffff,y
|
||
sta CLIP.Rect,x
|
||
dey
|
||
dex
|
||
bpl .1
|
||
|
||
rts
|
||
*--------------------------------------
|
||
* CLIPPING Functions:
|
||
* In:
|
||
* Target Clipping Region in CLIP.Rect
|
||
* YA = Control Block
|
||
* Out:
|
||
* CC : CLIP.Cache clipped & visible
|
||
* CS : CLIP.Cache invisible
|
||
*--------------------------------------
|
||
CLIP.CB.Cache ldx #S.CB
|
||
|
||
.1 lda CB.Cache-1,x
|
||
sta CLIP.Cache-1,x
|
||
dex
|
||
bne .1
|
||
|
||
* lda CB.Cache+S.CB.CMD
|
||
|
||
and #$7F remove S.CB.CMD.OSD
|
||
tax
|
||
jmp (J.CLIP-2,x)
|
||
*--------------------------------------
|
||
CLIP.Point
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
CLIP.HLine >LDYA CLIP.Cache+S.CB.Y1
|
||
>SCMPYA CLIP.Rect+S.RECT.Y2
|
||
bpl .9
|
||
|
||
>LDYA CLIP.Cache+S.CB.Y1
|
||
>SCMPYA CLIP.Rect+S.RECT.Y1
|
||
bmi .9
|
||
|
||
>LDYA CLIP.Rect+S.RECT.X1
|
||
>STYAIFGTR CLIP.Cache+S.CB.X1
|
||
|
||
>LDYA CLIP.Rect+S.RECT.X2
|
||
>STYAIFLWR CLIP.Cache+S.CB.X2
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
CLIP.VLine >LDYA CLIP.Cache+S.CB.X1
|
||
>SCMPYA CLIP.Rect+S.RECT.X2
|
||
bpl .9
|
||
|
||
>LDYA CLIP.Cache+S.CB.X1
|
||
>SCMPYA CLIP.Rect+S.RECT.X1
|
||
|
||
bpl CLIP.Y1Y2
|
||
|
||
* bmi .9
|
||
|
||
* >LDYA CLIP.Rect+S.RECT.Y1
|
||
* >STYAIFGTR CLIP.Cache+S.CB.Y1
|
||
|
||
* >LDYA CLIP.Rect+S.RECT.Y2
|
||
* >STYAIFLWR CLIP.Cache+S.CB.Y2
|
||
|
||
* clc
|
||
* rts
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
CLIP.Rectangle jsr CLIP.Rect.Overlap
|
||
bcs CLIP.Text.RTS
|
||
|
||
>LDYA CLIP.Rect+S.RECT.X1
|
||
>STYAIFGTR CLIP.Cache+S.CB.X1
|
||
|
||
>LDYA CLIP.Rect+S.RECT.X2
|
||
>STYAIFLWR CLIP.Cache+S.CB.X2
|
||
|
||
CLIP.Y1Y2 >LDYA CLIP.Rect+S.RECT.Y1
|
||
>STYAIFGTR CLIP.Cache+S.CB.Y1
|
||
|
||
>LDYA CLIP.Rect+S.RECT.Y2
|
||
>STYAIFLWR CLIP.Cache+S.CB.Y2
|
||
|
||
* clc
|
||
* rts
|
||
*--------------------------------------
|
||
CLIP.Text clc
|
||
rts
|
||
|
||
CLIP.Text.9 sec
|
||
CLIP.Text.RTS rts
|
||
*--------------------------------------
|
||
* BitBlt :
|
||
*--------------------------------------
|
||
CLIP.BitBlt jsr CLIP.SetX2Y2
|
||
jsr CLIP.Rect.Overlap
|
||
bcs CLIP.Text.RTS
|
||
|
||
ldx #S.RECT select CLIP.Rect
|
||
|
||
CLIP.BitBltX lda CLIP.Screen+S.RECT.X1,x
|
||
sec
|
||
sbc CLIP.Cache+S.CB.X1
|
||
sta TmpW
|
||
|
||
lda CLIP.Screen+S.RECT.X1+1,x
|
||
sbc CLIP.Cache+S.CB.X1+1
|
||
sta TmpW+1
|
||
bvc .1
|
||
|
||
eor #$80
|
||
|
||
.1 bmi .2
|
||
|
||
lda CLIP.Cache+S.CB.X1
|
||
clc
|
||
adc TmpW
|
||
sta CLIP.Cache+S.CB.X1
|
||
|
||
lda CLIP.Cache+S.CB.X1+1
|
||
adc TmpW+1
|
||
sta CLIP.Cache+S.CB.X1+1
|
||
|
||
lda CLIP.Cache+S.CB.SrcX
|
||
clc
|
||
adc TmpW
|
||
sta CLIP.Cache+S.CB.SrcX
|
||
|
||
lda CLIP.Cache+S.CB.SrcX+1
|
||
adc TmpW+1
|
||
sta CLIP.Cache+S.CB.SrcX+1
|
||
|
||
lda CLIP.Cache+S.CB.SrcW
|
||
sec
|
||
sbc TmpW
|
||
sta CLIP.Cache+S.CB.SrcW
|
||
|
||
lda CLIP.Cache+S.CB.SrcW+1
|
||
sbc TmpW+1
|
||
sta CLIP.Cache+S.CB.SrcW+1
|
||
bcc CLIP.Text.9
|
||
*--------------------------------------
|
||
.2 lda CLIP.Cache+S.CB.X2
|
||
sec
|
||
sbc CLIP.Screen+S.RECT.X2,x
|
||
sta TmpW
|
||
|
||
lda CLIP.Cache+S.CB.X2+1
|
||
sbc CLIP.Screen+S.RECT.X2+1,x
|
||
sta TmpW+1
|
||
bvc .3
|
||
|
||
eor #$80
|
||
|
||
.3 bmi .4
|
||
|
||
lda CLIP.Cache+S.CB.SrcW
|
||
sec
|
||
sbc TmpW
|
||
sta CLIP.Cache+S.CB.SrcW
|
||
|
||
lda CLIP.Cache+S.CB.SrcW+1
|
||
sbc TmpW+1
|
||
sta CLIP.Cache+S.CB.SrcW+1
|
||
bcc .9
|
||
*--------------------------------------
|
||
.4 lda CLIP.Screen+S.RECT.Y1,x
|
||
sec
|
||
sbc CLIP.Cache+S.CB.Y1
|
||
sta TmpW
|
||
|
||
lda CLIP.Screen+S.RECT.Y1+1,x
|
||
sbc CLIP.Cache+S.CB.Y1+1
|
||
sta TmpW+1
|
||
bvc .5
|
||
|
||
eor #$80
|
||
|
||
.5 bmi .6
|
||
|
||
lda CLIP.Cache+S.CB.Y1
|
||
clc
|
||
adc TmpW
|
||
sta CLIP.Cache+S.CB.Y1
|
||
|
||
lda CLIP.Cache+S.CB.Y1+1
|
||
adc TmpW+1
|
||
sta CLIP.Cache+S.CB.Y1+1
|
||
|
||
lda CLIP.Cache+S.CB.SrcY
|
||
clc
|
||
adc TmpW
|
||
sta CLIP.Cache+S.CB.SrcY
|
||
|
||
lda CLIP.Cache+S.CB.SrcY+1
|
||
adc TmpW+1
|
||
sta CLIP.Cache+S.CB.SrcY+1
|
||
|
||
lda CLIP.Cache+S.CB.SrcH
|
||
sec
|
||
sbc TmpW
|
||
sta CLIP.Cache+S.CB.SrcH
|
||
|
||
lda CLIP.Cache+S.CB.SrcH+1
|
||
sbc TmpW+1
|
||
sta CLIP.Cache+S.CB.SrcH+1
|
||
bcc .9
|
||
*--------------------------------------
|
||
.6 lda CLIP.Cache+S.CB.Y2
|
||
sec
|
||
sbc CLIP.Screen+S.RECT.Y2,x
|
||
sta TmpW
|
||
|
||
lda CLIP.Cache+S.CB.Y2+1
|
||
sbc CLIP.Screen+S.RECT.Y2+1,x
|
||
sta TmpW+1
|
||
bvc .7
|
||
|
||
eor #$80
|
||
|
||
.7 bmi .8
|
||
|
||
lda CLIP.Cache+S.CB.SrcH
|
||
sec
|
||
sbc TmpW
|
||
sta CLIP.Cache+S.CB.SrcH
|
||
|
||
lda CLIP.Cache+S.CB.SrcH+1
|
||
sbc TmpW+1
|
||
sta CLIP.Cache+S.CB.SrcH+1
|
||
bcc .9
|
||
|
||
.8 clc
|
||
rts
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
CLIP.Line.LEFT .EQ 1
|
||
CLIP.Line.RIGHT .EQ 2
|
||
CLIP.Line.BOTTOM .EQ 4
|
||
CLIP.Line.TOP .EQ 8
|
||
*--------------------------------------
|
||
CLIP.Line jsr CLIP.Line.EncodeP1
|
||
jsr CLIP.Line.EncodeP2
|
||
|
||
.1 lda CLIP.Line.P1
|
||
ora CLIP.Line.P2
|
||
beq .88
|
||
|
||
lda CLIP.Line.P1
|
||
and CLIP.Line.P2
|
||
bne .99
|
||
|
||
lda CLIP.Line.P1
|
||
beq .5
|
||
|
||
bit #CLIP.Line.TOP
|
||
beq .2
|
||
|
||
* Y1 is above S.CB.Y1....
|
||
* DY=Y2-Y1;
|
||
jsr CLIP.Line.EncodeP1
|
||
bra .1
|
||
|
||
.2 bit #CLIP.Line.BOTTOM
|
||
beq .3
|
||
|
||
* Y1 is below S.CB.Y2....
|
||
|
||
jsr CLIP.Line.EncodeP1
|
||
bra .1
|
||
|
||
.3 bit #CLIP.Line.RIGHT
|
||
beq .4
|
||
|
||
* X1 is after S.CB.X2....
|
||
|
||
jsr CLIP.Line.EncodeP1
|
||
bra .1
|
||
|
||
* X1 is before S.CB.X1....
|
||
|
||
.4 jsr CLIP.Line.EncodeP1
|
||
bra .1
|
||
|
||
* P2
|
||
|
||
.5 lda CLIP.Line.P2
|
||
bit #CLIP.Line.TOP
|
||
beq .6
|
||
|
||
* Y2 is above S.CB.Y1....
|
||
|
||
jsr CLIP.Line.EncodeP2
|
||
bra .1
|
||
|
||
.6 bit #CLIP.Line.BOTTOM
|
||
beq .7
|
||
|
||
* Y2 is below S.CB.Y2....
|
||
|
||
jsr CLIP.Line.EncodeP2
|
||
bra .1
|
||
|
||
.7 bit #CLIP.Line.RIGHT
|
||
beq .8
|
||
|
||
* X2 is after S.CB.X2....
|
||
|
||
jsr CLIP.Line.EncodeP2
|
||
bra .1
|
||
|
||
* X2 is before S.CB.X1....
|
||
|
||
.8 jsr CLIP.Line.EncodeP2
|
||
bra .1
|
||
|
||
.88 clc
|
||
rts
|
||
|
||
.99 sec
|
||
rts
|
||
*--------------------------------------
|
||
CLIP.Line.EncodeP1
|
||
ldy #0
|
||
|
||
lda CLIP.Cache+S.CB.X1
|
||
ldx CLIP.Cache+S.CB.X1+1
|
||
jsr CLIP.Line.EncodeX.AX
|
||
|
||
lda CLIP.Cache+S.CB.Y1
|
||
ldx CLIP.Cache+S.CB.Y1+1
|
||
jsr CLIP.Line.EncodeY.AX
|
||
|
||
sty CLIP.Line.P1
|
||
rts
|
||
*--------------------------------------
|
||
CLIP.Line.EncodeP2
|
||
ldy #0
|
||
|
||
lda CLIP.Cache+S.CB.X2
|
||
ldx CLIP.Cache+S.CB.X2+1
|
||
jsr CLIP.Line.EncodeX.AX
|
||
|
||
lda CLIP.Cache+S.CB.Y2
|
||
ldx CLIP.Cache+S.CB.Y2+1
|
||
jsr CLIP.Line.EncodeY.AX
|
||
|
||
sty CLIP.Line.P2
|
||
rts
|
||
*--------------------------------------
|
||
CLIP.Line.EncodeX.AX
|
||
pha
|
||
>SCMPAX CLIP.Rect+S.RECT.X1
|
||
bpl .1
|
||
|
||
pla
|
||
|
||
tya
|
||
ora #CLIP.Line.LEFT
|
||
tay
|
||
|
||
rts
|
||
|
||
.1 pla
|
||
>SCMPAX CLIP.Rect+S.RECT.X2
|
||
bmi .8
|
||
|
||
tya
|
||
ora #CLIP.Line.RIGHT
|
||
tay
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
CLIP.Line.EncodeY.AX
|
||
pha
|
||
>SCMPAX CLIP.Rect+S.RECT.Y1
|
||
bpl .1
|
||
|
||
pla
|
||
|
||
tya
|
||
ora #CLIP.Line.TOP
|
||
tya
|
||
rts
|
||
|
||
.1 pla
|
||
>SCMPAX CLIP.Rect+S.RECT.Y2
|
||
bmi .8
|
||
|
||
tya
|
||
ora #CLIP.Line.BOTTOM
|
||
tay
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
CLIP.SetX2Y2 ldx CLIP.Cache+S.CB.SrcW+1
|
||
lda CLIP.Cache+S.CB.SrcW
|
||
bne .3
|
||
|
||
dex
|
||
|
||
.3 dec
|
||
clc
|
||
adc CLIP.Cache+S.CB.X1
|
||
sta CLIP.Cache+S.CB.X2
|
||
|
||
txa
|
||
adc CLIP.Cache+S.CB.X1+1
|
||
sta CLIP.Cache+S.CB.X2+1
|
||
|
||
ldx CLIP.Cache+S.CB.SrcH+1
|
||
lda CLIP.Cache+S.CB.SrcH
|
||
bne .4
|
||
|
||
dex
|
||
|
||
.4 dec
|
||
clc
|
||
adc CLIP.Cache+S.CB.Y1
|
||
sta CLIP.Cache+S.CB.Y2
|
||
|
||
txa
|
||
adc CLIP.Cache+S.CB.Y1+1
|
||
sta CLIP.Cache+S.CB.Y2+1
|
||
|
||
rts
|
||
*--------------------------------------
|
||
CLIP.Rect.Overlap
|
||
>LDYA CLIP.Cache+S.CB.X1
|
||
>SCMPYA CLIP.Rect+S.RECT.X2
|
||
bpl .9
|
||
|
||
>LDYA CLIP.Cache+S.CB.X2
|
||
>SCMPYA CLIP.Rect+S.RECT.X1
|
||
bmi .9
|
||
|
||
>LDYA CLIP.Cache+S.CB.Y1
|
||
>SCMPYA CLIP.Rect+S.RECT.Y2
|
||
bpl .9
|
||
|
||
>LDYA CLIP.Cache+S.CB.Y2
|
||
>SCMPYA CLIP.Rect+S.RECT.Y1
|
||
bmi .9
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/lib/libgui.s.clip
|
||
LOAD usr/src/lib/libgui.s
|
||
ASM
|