Kernel 0.9.1 : LibGui, Clipping....BugFix

This commit is contained in:
Rémy GIBERT 2017-12-05 17:33:06 +01:00
parent a7992673bd
commit 045e1fe069
10 changed files with 139 additions and 111 deletions

Binary file not shown.

Binary file not shown.

View File

@ -8,11 +8,11 @@ AUTO 6
* BitBlt
* S.CB.X1 : SrcX1 in bitmap/mask
* S.CB.Y1 : SrcY1
* S.CB.X2 : SrcX2
* S.CB.Y2 : SrcY2
* S.CB.SrcW : width
* S.CB.SrcH : height
* S.CB.DestX : Destination X (screen)
* S.CB.DestY : Destination Y (screen)
* S.CB.DstX : Destination X (screen)
* S.CB.DstY : Destination Y (screen)
* S.CB.SrcPtr : pointer to S.BM
* S.CB.DstPtr : pointer to Save Buffer
@ -88,7 +88,8 @@ BITBLT >LDYA CB.CACHE+S.CB.SrcPtr
bcc .3
inc BLT.BMDataPtr+1
clc
.3 pla
adc BLT.BMMaskPtr
sta BLT.BMMaskPtr
@ -96,15 +97,15 @@ BITBLT >LDYA CB.CACHE+S.CB.SrcPtr
inc BLT.BMMaskPtr+1
.4 >LDYA CB.Cache+S.CB.DestX
.4 >LDYA CB.Cache+S.CB.DstX
jsr LBUF.SetBounds1YA
stx BLT.SCRBitOfs
lda CB.Cache+S.CB.DestX
lda CB.Cache+S.CB.DstX
clc
adc CB.Cache+S.CB.SrcW
tay
lda CB.Cache+S.CB.DestX+1
lda CB.Cache+S.CB.DstX+1
adc CB.Cache+S.CB.SrcW+1
pha
tya
@ -173,9 +174,9 @@ BITBLT.LOOP0 lda CB.Cache+S.CB.OP
cpx LBUF.C2
bne .3
ldy CB.Cache+S.CB.DestY
ldy CB.Cache+S.CB.DstY
jsr LBUF.DrawAtY
inc CB.Cache+S.CB.DestY
inc CB.Cache+S.CB.DstY
dec CB.Cache+S.CB.SrcH
beq .8
@ -282,9 +283,9 @@ BITBLT.LOOPx.7 and #$ff SELF MODIFIED : #%01110000 get only col2 bites
cpx LBUF.C2
bne BITBLT.LOOPx.5
ldy CB.Cache+S.CB.DestY
ldy CB.Cache+S.CB.DstY
jsr LBUF.DrawAtY
inc CB.Cache+S.CB.DestY
inc CB.Cache+S.CB.DstY
dec CB.Cache+S.CB.SrcH
beq .8

View File

@ -15,6 +15,7 @@ LIBGUI.HideCursor .EQ 14
LIBGUI.ShowCursor .EQ 16
LIBGUI.UpdateCursor .EQ 18
LIBGUI.ReadMouse .EQ 20
LIBGUI.GetScreenGC .EQ 22
*--------------------------------------
S.GC.hDev .EQ 0
S.GC.hMem .EQ 1
@ -60,8 +61,8 @@ S.CB.X2 .EQ 8 VLINE,FILLRECT,DRAWLINE
S.CB.Y2 .EQ 10 HLINE,FILLRECT,DRAWLINE
S.CB.SrcW .EQ 8 BITBLT,GETRECTBUFSIZE
S.CB.SrcH .EQ 10 BITBLT,GETRECTBUFSIZE
S.CB.DestX .EQ 12 BITBLT,DRAWTEXT
S.CB.DestY .EQ 14 BITBLT,DRAWTEXT
S.CB.DstX .EQ 12 BITBLT,DRAWTEXT
S.CB.DstY .EQ 14 BITBLT,DRAWTEXT
S.CB.SrcPtr .EQ 16 BITBLT,DRAWTEXT
S.CB.DstPtr .EQ 18 BITBLT
*

View File

@ -120,32 +120,32 @@ CUR.ResizeY.MASK
CUR.ResizeXY1 .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 11 W
.DA 10 H
.DA 11 H
.DA CUR.ResizeXY1.MASK-CUR.ResizeXY1
.DA %000.00000000
.DA %011.11000000
.DA %011.10000000
.DA %011.10000000
.DA %010.01100000
.DA %000.00110010
.DA %000.00011110
.DA %010.01000000
.DA %000.00100000
.DA %000.00010010
.DA %000.00001110
.DA %000.00001110
.DA %000.00011110
.DA %000.00000000
CUR.ResizeXY1.MASK
.DA %000.00000111
.DA %000.00001111
.DA %000.00011111
.DA %000.00111110
.DA %000.00011100
.DA %001.11000000
.DA %011.11100000
.DA %000.00111111
.DA %000.00111111
.DA %000.00011110
.DA %001.10001100
.DA %011.11000000
.DA %111.11100000
.DA %111.11100000
.DA %111.11000000
.DA %111.10000000
.DA %111.00000000
*--------------------------------------
CUR.ResizeXY2
*--------------------------------------

View File

@ -15,7 +15,7 @@ AUTO 6
*--------------------------------------
CLIP.YA jsr CB.Get
ldx CB.Cache+S.CB.CMD
jmp (J.CLIP,x)
CLIP.X jmp (J.CLIP,x)
*--------------------------------------
CLIP.Point
CLIP.HLine
@ -30,8 +30,8 @@ CLIP.BitBlt.9 pla
CLIP.BitBlt.99 sec
rts
CLIP.BitBlt lda CB.Cache+S.CB.DestX
ldx CB.Cache+S.CB.DestX+1
CLIP.BitBlt lda CB.Cache+S.CB.DstX
ldx CB.Cache+S.CB.DstX+1
pha
>SCMPAX GC.Cache+S.GC.X2
@ -41,28 +41,32 @@ CLIP.BitBlt lda CB.Cache+S.CB.DestX
>SCMPAX GC.Cache+S.GC.X1
bpl .1 DestX Inside X1-X2, go check if X1+W fit in
* S.CB.DestX before S.GC.X1: D=S.GC.X1-S.CB.DestX, S.CB.SrcW-=D, S.CB.DestX=0, S.CB.X1+=D
* S.CB.DstX before S.GC.X1: D=S.GC.X1-S.CB.DstX, S.CB.SrcW-=D, S.CB.DstX=0, S.CB.X1+=D
lda GC.Cache+S.GC.X1 Compute D....
sec
sbc CB.Cache+S.CB.DestX
sbc CB.Cache+S.CB.DstX
sta D
lda GC.Cache+S.GC.X1+1
sbc CB.Cache+S.CB.DestX+1
sbc CB.Cache+S.CB.DstX+1
sta D+1 ....always positive
lda CB.Cache+S.CB.SrcW S.CB.SrcW-=D
sec
sbc D
sta CB.Cache+S.CB.SrcW
iny
lda CB.Cache+S.CB.SrcW+1
sbc D
sbc D+1
sta CB.Cache+S.CB.SrcW+1
bcc CLIP.BitBlt.99 Negative!!!! nothing to do,exit...
stz CB.Cache+S.CB.DestX Dext.X=0
stz CB.Cache+S.CB.DestX+1
lda CB.Cache+S.CB.DstX Dst.Y+=D
clc
adc D
sta CB.Cache+S.CB.DstX
lda CB.Cache+S.CB.DstX+1
adc D+1
sta CB.Cache+S.CB.DstX+1
lda CB.Cache+S.CB.X1 S.CB.X1+=D
clc
@ -70,34 +74,31 @@ CLIP.BitBlt lda CB.Cache+S.CB.DestX
sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X1+1
adc D+1
sta CB.Cache+S.CB.X1+1 S.CB.DestX=0, new between S.GC.X1 & S.GC.X2....
sta CB.Cache+S.CB.X1+1 S.CB.DstX=0, new between S.GC.X1 & S.GC.X2....
* S.CB.DestX between S.GC.X1 & S.GC.X2: D=S.GC.X2-S.CB.DestX
* S.CB.DstX between S.GC.X1 & S.GC.X2: D=S.GC.X2-S.CB.DstX
.1 lda GC.Cache+S.GC.X2
sec
sbc CB.Cache+S.CB.DestX
sbc CB.Cache+S.CB.DstX
sta D
lda GC.Cache+S.GC.X2+1
sbc CB.Cache+S.CB.DestX+1
sbc CB.Cache+S.CB.DstX+1
sta D+1 Always positive...
lda D
cmp CB.Cache+S.CB.SrcW
lda D+1
ldx D
cpx CB.Cache+S.CB.SrcW
lda D+1
sbc CB.Cache+S.CB.SrcW+1
bcs CLIP.BitBlt.Y D >= SrcW....nothing to clip
lda D SrcW < D, make SrcW=D
sta CB.Cache+S.CB.SrcW
stx CB.Cache+S.CB.SrcW SrcW < D, make SrcW=D
lda D+1
sta CB.Cache+S.CB.SrcW+1
CLIP.BitBlt.Y lda CB.Cache+S.CB.DestY
ldx CB.Cache+S.CB.DestY+1
CLIP.BitBlt.Y lda CB.Cache+S.CB.DstY
ldx CB.Cache+S.CB.DstY+1
pha
>SCMPAX GC.Cache+S.GC.Y2 DestY after Y2....exit
bmi .10
sec
@ -107,28 +108,32 @@ CLIP.BitBlt.Y lda CB.Cache+S.CB.DestY
>SCMPAX GC.Cache+S.GC.Y1
bpl .1 DestY Inside Y1-Y2, go check if Y1+H fit in
* S.CB.DestY above S.GC.Y1: D=S.GC.Y1-S.CB.DestY, S.CB.SrcH-=D, S.CB.DestY=0, S.CB.Y1+=D
* S.CB.DstY above S.GC.Y1: D=S.GC.Y1-S.CB.DstY, S.CB.SrcH-=D, S.CB.DstY=0, S.CB.Y1+=D
lda GC.Cache+S.GC.Y1 Compute D....
sec
sbc CB.Cache+S.CB.DestY
sbc CB.Cache+S.CB.DstY
sta D
lda GC.Cache+S.GC.Y1+1
sbc CB.Cache+S.CB.DestY+1
sbc CB.Cache+S.CB.DstY+1
sta D+1 ....always positive
lda CB.Cache+S.CB.SrcH S.CB.SrcH-=D
sec
sbc D
sta CB.Cache+S.CB.SrcH
iny
lda CB.Cache+S.CB.SrcH+1
sbc D
sbc D+1
sta CB.Cache+S.CB.SrcH+1
bcc .99 Negative!!!! nothing to do,exit...
stz CB.Cache+S.CB.DestY Dext.X=0
stz CB.Cache+S.CB.DestY+1
lda CB.Cache+S.CB.DstY Dst.Y+=D
clc
adc D
sta CB.Cache+S.CB.DstY
lda CB.Cache+S.CB.DstY+1
adc D+1
sta CB.Cache+S.CB.DstY+1
lda CB.Cache+S.CB.Y1 S.CB.Y1+=D
clc
@ -136,27 +141,25 @@ CLIP.BitBlt.Y lda CB.Cache+S.CB.DestY
sta CB.Cache+S.CB.Y1
lda CB.Cache+S.CB.Y1+1
adc D+1
sta CB.Cache+S.CB.Y1+1 S.CB.DestY=0, new between S.GC.Y1 & S.GC.Y2....
sta CB.Cache+S.CB.Y1+1 S.CB.DstY=0, new between S.GC.Y1 & S.GC.Y2....
* S.CB.DestY between S.GC.Y1 & S.GC.Y2: D=S.GC.Y2-S.CB.DestY
* S.CB.DstY between S.GC.Y1 & S.GC.Y2: D=S.GC.Y2-S.CB.DstY
.1 lda GC.Cache+S.GC.Y2
sec
sbc CB.Cache+S.CB.DestY
sbc CB.Cache+S.CB.DstY
sta D
lda GC.Cache+S.GC.Y2+1
sbc CB.Cache+S.CB.DestY+1
sbc CB.Cache+S.CB.DstY+1
sta D+1 Always positive...
lda D
cmp CB.Cache+S.CB.SrcH
ldx D
cpx CB.Cache+S.CB.SrcH
lda D+1
sbc CB.Cache+S.CB.SrcH+1
bcs .8 D >= SrcH....nothing to clip
lda D SrcH < D, make SrcH=D
sta CB.Cache+S.CB.SrcH
stx CB.Cache+S.CB.SrcH SrcH < D, make SrcH=D
lda D+1
sta CB.Cache+S.CB.SrcH+1

View File

@ -109,22 +109,22 @@ ShowCursor.I lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE
lda CUR.Pos+S.POINT.X
sec
sbc CUR.HotPoints,x
sta CUR.CB+S.CB.DestX
sta CUR.CB+S.CB.DstX
lda CUR.Pos+S.POINT.X+1
sbc #0
sta CUR.CB+S.CB.DestX+1
sta CUR.CB+S.CB.DstX+1
lda CUR.Pos+S.POINT.Y
sec
sbc CUR.HotPoints+1,x
sta CUR.CB+S.CB.DestY
sta CUR.CB+S.CB.DstY
lda CUR.Pos+S.POINT.Y+1
sbc #0
sta CUR.CB+S.CB.DestY+1
sta CUR.CB+S.CB.DstY+1
DrawCursor.I >LDYA L.GC.Screen
DrawCursor.I >LDYA L.GC.Screen
jsr GC.Get
>LDYA L.CUR.CB
@ -132,8 +132,6 @@ DrawCursor.I >LDYA L.GC.Screen
bcs .9
>LDYA L.CB.Cache
* >LDYA L.CUR.CB
jmp GoDevGfx.YA
.9 rts

View File

@ -4,25 +4,27 @@ NEW
INC 1
AUTO 6
*--------------------------------------
Draw >PULLW ZPCBPtr
lda (ZPCBPtr) Get Cmd
.1 tax
Draw >PULLW ZPCBPtr Get CB
>PULLYA Get GC
jsr GC.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 .3 Native DRV Cmd
ldy CB.CmdLen,x
.2 lda (ZPCBPtr),y Y=Byte count-1 to cache
sta CB.Cache,y
dey
bpl .2
bcc .2 Native DRV Cmd
jsr Draw.Jmp
bra .7
.3 >LDYA ZPCBPtr
.2 >LDYA L.CB.Cache
jsr GoDevGfx.YA
@ -32,14 +34,12 @@ Draw >PULLW ZPCBPtr
sec
adc ZPCBPtr
sta ZPCBPtr
bcc .8
bcc .1
inc ZPCBPtr+1
bra .1
.8 lda (ZPCBPtr) Get Cmd
bne .1
clc
rts
.8 clc
.9 rts
Draw.Jmp jmp (J.Cmds-S.CB.CMD.DRAWLINE,x)
*--------------------------------------

View File

@ -71,6 +71,7 @@ CS.START cld
.DA ShowCursor
.DA UpdateCursor
.DA ReadMouse
.DA GetScreenGC
J.Cmds .DA DrawLine
.DA DrawText
L.DEVNAME.GFX .DA DEVNAME.GFX
@ -289,6 +290,9 @@ ReadMouse >PULLYA
.9 sec
rts
*--------------------------------------
GetScreenGC >LDYA L.GC.Screen
rts
*--------------------------------------
GoDevGfx >LDYA L.CB.Cache
GoDevGfx.YA ldx #DEVMGR.WRITE
GoDevGfx.Jmp jmp $ffff
@ -331,7 +335,7 @@ MouseClamp .BS 8
*--------------------------------------
GC.Screen .BS S.GC
GC.Desktop .BS S.GC
GC.Bar .BS S.GC
GC.TaskBar .BS S.GC
*--------------------------------------
GC.Cache .BS S.GC
CB.Cache .BS S.CB

View File

@ -41,6 +41,7 @@ L.MouseData .DA MouseData
L.CB.Rect .DA CB.Rect
L.CB.BitBlt .DA CB.BitBlt
L.CB.DrawLine .DA CB.DrawLine
L.GC.Clip .DA GC.Clip
.DA 0
*--------------------------------------
CS.INIT >LDYA L.MSG.INIT
@ -110,26 +111,26 @@ CS.RUN lda A2osX.ASCREEN GUI screen active ?
.1 bit #S.MOUSE.S.CLK
beq .4
>LDA.G CUR.T
inc
inc
cmp #CUR.T.WAIT+2
bne .2
lda #CUR.T.ARROW
.2 >STA.G CUR.T
>LIBCALL hLIBGUI,LIBGUI.SetCursor.A
* >LDA.G CUR.T
* inc
* inc
* cmp #CUR.T.WAIT+2
* bne .2
*
* lda #CUR.T.ARROW
*
*.2 >STA.G CUR.T
* >LIBCALL hLIBGUI,LIBGUI.SetCursor.A
lda MouseData+S.MOUSE.X1
sta CB.BitBlt+S.CB.DestX
sta CB.BitBlt+S.CB.DstX
lda MouseData+S.MOUSE.X1+1
sta CB.BitBlt+S.CB.DestX+1
sta CB.BitBlt+S.CB.DstX+1
lda MouseData+S.MOUSE.Y1
sta CB.BitBlt+S.CB.DestY
sta CB.BitBlt+S.CB.DstY
lda MouseData+S.MOUSE.Y1+1
sta CB.BitBlt+S.CB.DestY+1
sta CB.BitBlt+S.CB.DstY+1
jsr Destop.Paint
@ -153,9 +154,17 @@ CS.QUIT clc
*--------------------------------------
Destop.Paint >LIBCALL hLIBGUI,LIBGUI.HideCursor
>LIBCALL hLIBGUI,LIBGUI.GetScreenGC
>PUSHYA
>PUSHW L.CB.Rect
>LIBCALL hLIBGUI,LIBGUI.Draw
* >LIBCALL hLIBGUI,LIBGUI.GetScreenGC
* >PUSHYA
>PUSHW L.GC.Clip
>PUSHW L.CB.BitBlt
>LIBCALL hLIBGUI,LIBGUI.Draw
@ -208,6 +217,18 @@ CB.DrawLine .DA #0
.BS 2 Y2
.DA #0
*--------------------------------------
GC.Clip .DA #0
.DA #0
.DA #0
.DA #0
.DA 50
.DA 50
.DA 449
.DA 149
.DA 400
.DA 100
*--------------------------------------
.DUMMY
.OR 0