mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-12 20:29:41 +00:00
Kernel 0.94
This commit is contained in:
parent
2b0f02c7a3
commit
987ae82bcd
Binary file not shown.
|
@ -180,12 +180,12 @@ CS.RUN.LOGO.SHOW
|
||||||
bit xDir
|
bit xDir
|
||||||
bmi .4
|
bmi .4
|
||||||
|
|
||||||
lda CB.LOGO+S.CB.DstX
|
lda CB.LOGO+S.CB.X1
|
||||||
clc
|
clc
|
||||||
adc #4
|
adc #4
|
||||||
tay
|
tay
|
||||||
|
|
||||||
lda CB.LOGO+S.CB.DstX+1
|
lda CB.LOGO+S.CB.X1+1
|
||||||
adc #0
|
adc #0
|
||||||
pha
|
pha
|
||||||
cpy #244
|
cpy #244
|
||||||
|
@ -198,19 +198,19 @@ CS.RUN.LOGO.SHOW
|
||||||
sta xDir
|
sta xDir
|
||||||
bra .6
|
bra .6
|
||||||
|
|
||||||
.4 lda CB.LOGO+S.CB.DstX
|
.4 lda CB.LOGO+S.CB.X1
|
||||||
sec
|
sec
|
||||||
sbc #4
|
sbc #4
|
||||||
tay
|
tay
|
||||||
lda CB.LOGO+S.CB.DstX+1
|
lda CB.LOGO+S.CB.X1+1
|
||||||
sbc #0
|
sbc #0
|
||||||
bcc .3
|
bcc .3
|
||||||
|
|
||||||
.5 sty CB.LOGO+S.CB.DstX
|
.5 sty CB.LOGO+S.CB.X1
|
||||||
sta CB.LOGO+S.CB.DstX+1
|
sta CB.LOGO+S.CB.X1+1
|
||||||
|
|
||||||
|
|
||||||
.6 lda CB.LOGO+S.CB.DstY
|
.6 lda CB.LOGO+S.CB.Y1
|
||||||
bit yDir
|
bit yDir
|
||||||
bmi .8
|
bmi .8
|
||||||
|
|
||||||
|
@ -223,14 +223,14 @@ CS.RUN.LOGO.SHOW
|
||||||
sta yDir
|
sta yDir
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.7 sta CB.LOGO+S.CB.DstY
|
.7 sta CB.LOGO+S.CB.Y1
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.8 sec
|
.8 sec
|
||||||
sbc #1
|
sbc #1
|
||||||
bcc .60
|
bcc .60
|
||||||
|
|
||||||
sta CB.LOGO+S.CB.DstY
|
sta CB.LOGO+S.CB.Y1
|
||||||
jmp .1
|
jmp .1
|
||||||
|
|
||||||
.80 >SYSCALL GetChar
|
.80 >SYSCALL GetChar
|
||||||
|
@ -375,12 +375,14 @@ CB.Apple .DA #S.CB.CMD.BITBLT
|
||||||
.DA #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.COLOR
|
.DA #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.COLOR
|
||||||
.DA #S.CB.M.C16
|
.DA #S.CB.M.C16
|
||||||
.DA #0
|
.DA #0
|
||||||
.DA 0 X1
|
.DA 20 X1
|
||||||
.DA 0 Y1
|
.DA 172 Y1
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0 SrcX
|
||||||
|
.DA 0 SrcY
|
||||||
.DA 16 SrcW
|
.DA 16 SrcW
|
||||||
.DA 7 SrcH
|
.DA 7 SrcH
|
||||||
.DA 20 DstX
|
|
||||||
.DA 172 DstY
|
|
||||||
.BS 2 SrcPtr
|
.BS 2 SrcPtr
|
||||||
.DA 0 DstPtr
|
.DA 0 DstPtr
|
||||||
|
|
||||||
|
@ -388,12 +390,14 @@ CB.PIX .DA #S.CB.CMD.BITBLT
|
||||||
.DA #S.CB.OP.SET+S.CB.OP.COLOR
|
.DA #S.CB.OP.SET+S.CB.OP.COLOR
|
||||||
.DA #S.CB.M.MONO
|
.DA #S.CB.M.MONO
|
||||||
.DA #0
|
.DA #0
|
||||||
.DA 10 X1
|
.DA 56 X1
|
||||||
.DA 20 Y1
|
.DA 30 Y1
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0 SrcX
|
||||||
|
.DA 0 SrcY
|
||||||
.DA 120 SrcW
|
.DA 120 SrcW
|
||||||
.DA 100 SrcH
|
.DA 100 SrcH
|
||||||
.DA 56 DstX
|
|
||||||
.DA 30 DstY
|
|
||||||
.BS 2 SrcPtr
|
.BS 2 SrcPtr
|
||||||
.DA 0 DstPtr
|
.DA 0 DstPtr
|
||||||
|
|
||||||
|
@ -401,12 +405,14 @@ CB.PALETTE .DA #S.CB.CMD.BITBLT
|
||||||
.DA #S.CB.OP.SET+S.CB.OP.COLOR
|
.DA #S.CB.OP.SET+S.CB.OP.COLOR
|
||||||
.DA #S.CB.M.C16
|
.DA #S.CB.M.C16
|
||||||
.DA #0
|
.DA #0
|
||||||
.DA 0 X1
|
.DA 200 X1
|
||||||
.DA 0 Y1
|
.DA 100 Y1
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0 SrcX
|
||||||
|
.DA 0 SrcY
|
||||||
.DA 320 SrcW
|
.DA 320 SrcW
|
||||||
.DA 40 SrcH
|
.DA 40 SrcH
|
||||||
.DA 200 DstX
|
|
||||||
.DA 100 DstY
|
|
||||||
.BS 2 SrcPtr
|
.BS 2 SrcPtr
|
||||||
.DA 0 DstPtr
|
.DA 0 DstPtr
|
||||||
|
|
||||||
|
@ -414,27 +420,33 @@ CB.TEXTB .DA #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
|
||||||
.DA #S.CB.OP.SET+S.CB.OP.INVERSE
|
.DA #S.CB.OP.SET+S.CB.OP.INVERSE
|
||||||
.DA #S.CB.M.MONO
|
.DA #S.CB.M.MONO
|
||||||
.BS 1 hFONT
|
.BS 1 hFONT
|
||||||
.DA 0 X1
|
.DA 7 X1
|
||||||
.DA 0 Y1
|
.DA 1 Y1
|
||||||
.DA 0 X2
|
.DA 0
|
||||||
.DA 0 Y2
|
.DA 0
|
||||||
.DA 7 DstX
|
.DA 0 SrcX
|
||||||
.DA 1 DstY
|
.DA 0 SrcY
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.BS 2 DstPtr
|
||||||
.BS 2 TXTPTR
|
.BS 2 TXTPTR
|
||||||
.DA 0 DstPtr
|
|
||||||
|
|
||||||
CB.TEXT .DA #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
|
CB.TEXT .DA #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
|
||||||
.DA #S.CB.OP.SET
|
.DA #S.CB.OP.SET
|
||||||
.DA #S.CB.M.MONO
|
.DA #S.CB.M.MONO
|
||||||
.BS 1 hFONT
|
.BS 1 hFONT
|
||||||
.DA 0 X1
|
.DA 50 X1
|
||||||
.DA 0 Y1
|
.DA 184 Y1
|
||||||
.DA 0 X2
|
.DA 0
|
||||||
.DA 0 Y2
|
.DA 0
|
||||||
.DA 50 DstX
|
.DA 0 SrcX
|
||||||
.DA 184 DstY
|
.DA 0 SrcY
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.BS 2 DstPtr
|
||||||
.BS 2 TXTPTR
|
.BS 2 TXTPTR
|
||||||
.DA 0 DstPtr
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BM.Apple .DA #S.BM.F.BBP4
|
BM.Apple .DA #S.BM.F.BBP4
|
||||||
.DA #2 RowBytes
|
.DA #2 RowBytes
|
||||||
|
@ -460,20 +472,21 @@ CB.LOGO .DA #S.CB.CMD.BITBLT
|
||||||
.DA #S.CB.OP.SET+S.CB.OP.COLOR+S.CB.OP.SAVE
|
.DA #S.CB.OP.SET+S.CB.OP.COLOR+S.CB.OP.SAVE
|
||||||
.DA #S.CB.M.C16
|
.DA #S.CB.M.C16
|
||||||
.DA #0
|
.DA #0
|
||||||
.DA 0 X1
|
.DA 200 X1
|
||||||
.DA 0 Y1
|
.DA 50 Y1
|
||||||
|
.DA 200+320 X2 For GETRECTBUFSIZE
|
||||||
|
.DA 50+40 XZ For GETRECTBUFSIZE
|
||||||
|
.DA 0 SrcX
|
||||||
|
.DA 0 SrcY
|
||||||
.DA 320 SrcW
|
.DA 320 SrcW
|
||||||
.DA 40 SrcH
|
.DA 40 SrcH
|
||||||
.DA 200 DstX
|
|
||||||
.DA 50 DstY
|
|
||||||
.BS 2 SrcPtr
|
.BS 2 SrcPtr
|
||||||
.DA 0 DstPtr
|
.DA 0 DstPtr
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
.OR 0
|
.OR 0
|
||||||
DS.START
|
DS.START
|
||||||
DS.END
|
DS.END .ED
|
||||||
.ED
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE usr/src/bin/gtest.s
|
SAVE usr/src/bin/gtest.s
|
||||||
|
|
|
@ -2,14 +2,12 @@ NEW
|
||||||
AUTO 3,1
|
AUTO 3,1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* BitBlt
|
* BitBlt
|
||||||
* S.CB.X1 : SrcX1 in bitmap/mask
|
* S.CB.X1 : Destination X (screen)
|
||||||
* S.CB.Y1 : SrcY1
|
* S.CB.Y1 : Destination Y (screen)
|
||||||
* S.CB.SrcW : width
|
* S.CB.DstX : X1 in bitmap/mask
|
||||||
* S.CB.SrcH : height
|
* S.CB.DstY : Y1 in bitmap/mask
|
||||||
|
* S.CB.SrcW : width in bitmap/mask
|
||||||
* S.CB.DstX : Destination X (screen)
|
* S.CB.SrcH : height in bitmap/mask
|
||||||
* S.CB.DstY : Destination Y (screen)
|
|
||||||
|
|
||||||
* S.CB.SrcPtr : pointer to S.BM
|
* S.CB.SrcPtr : pointer to S.BM
|
||||||
* S.CB.SrcPtr+1 = 0, hMem in S.CB.SrcPtr
|
* S.CB.SrcPtr+1 = 0, hMem in S.CB.SrcPtr
|
||||||
* S.CB.DstPtr : pointer to Save Buffer
|
* S.CB.DstPtr : pointer to Save Buffer
|
||||||
|
@ -74,7 +72,7 @@ BITBLT.1 ldy #S.BM-1
|
||||||
bcc .2
|
bcc .2
|
||||||
inc ZPBMDataPtr+1
|
inc ZPBMDataPtr+1
|
||||||
|
|
||||||
.2 >LDYA CB.Cache+S.CB.Y1
|
.2 >LDYA CB.Cache+S.CB.SrcY
|
||||||
ldx BM.Cache+S.BM.RowBytes
|
ldx BM.Cache+S.BM.RowBytes
|
||||||
jsr YAMultX
|
jsr YAMultX
|
||||||
pha
|
pha
|
||||||
|
@ -92,16 +90,16 @@ BITBLT.1 ldy #S.BM-1
|
||||||
pla
|
pla
|
||||||
adc ZPBMMaskPtr+1
|
adc ZPBMMaskPtr+1
|
||||||
sta BLT.BMMaskPtr+1
|
sta BLT.BMMaskPtr+1
|
||||||
lda CB.Cache+S.CB.X1
|
lda CB.Cache+S.CB.SrcX
|
||||||
pha
|
pha
|
||||||
and #7
|
and #7
|
||||||
sta BLT.BMBitOfs
|
sta BLT.BMBitOfs
|
||||||
pla
|
pla
|
||||||
lsr CB.Cache+S.CB.X1+1
|
lsr CB.Cache+S.CB.SrcX+1
|
||||||
ror
|
ror
|
||||||
lsr CB.Cache+S.CB.X1+1
|
lsr CB.Cache+S.CB.SrcX+1
|
||||||
ror
|
ror
|
||||||
lsr CB.Cache+S.CB.X1+1
|
lsr CB.Cache+S.CB.SrcX+1
|
||||||
ror
|
ror
|
||||||
pha
|
pha
|
||||||
clc
|
clc
|
||||||
|
@ -119,14 +117,14 @@ BITBLT.1 ldy #S.BM-1
|
||||||
|
|
||||||
inc BLT.BMMaskPtr+1
|
inc BLT.BMMaskPtr+1
|
||||||
|
|
||||||
.4 >LDYA CB.Cache+S.CB.DstX
|
.4 >LDYA CB.Cache+S.CB.X1
|
||||||
jsr LBUF.SetBounds1YA
|
jsr LBUF.SetBounds1YA
|
||||||
stx BLT.ScrBitOfs
|
stx BLT.ScrBitOfs
|
||||||
lda CB.Cache+S.CB.DstX
|
lda CB.Cache+S.CB.X1
|
||||||
clc
|
clc
|
||||||
adc CB.Cache+S.CB.SrcW
|
adc CB.Cache+S.CB.SrcW
|
||||||
tay
|
tay
|
||||||
lda CB.Cache+S.CB.DstX+1
|
lda CB.Cache+S.CB.X1+1
|
||||||
adc CB.Cache+S.CB.SrcW+1
|
adc CB.Cache+S.CB.SrcW+1
|
||||||
pha
|
pha
|
||||||
tya
|
tya
|
||||||
|
@ -188,9 +186,9 @@ BITBLT.LOOP0 lda CB.Cache+S.CB.OP
|
||||||
cpx LBUF.C2
|
cpx LBUF.C2
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
ldy CB.Cache+S.CB.DstY
|
ldy CB.Cache+S.CB.Y1
|
||||||
jsr LBUF.DrawAtY
|
jsr LBUF.DrawAtY
|
||||||
inc CB.Cache+S.CB.DstY
|
inc CB.Cache+S.CB.Y1
|
||||||
dec CB.Cache+S.CB.SrcH
|
dec CB.Cache+S.CB.SrcH
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
|
@ -278,9 +276,9 @@ BITBLT.LOOPx.7 and #$ff SELF MODIFIED : #%01110000 get only col2 bites
|
||||||
cpx LBUF.C2
|
cpx LBUF.C2
|
||||||
bne BITBLT.LOOPx.5
|
bne BITBLT.LOOPx.5
|
||||||
|
|
||||||
ldy CB.Cache+S.CB.DstY
|
ldy CB.Cache+S.CB.Y1
|
||||||
jsr LBUF.DrawAtY
|
jsr LBUF.DrawAtY
|
||||||
inc CB.Cache+S.CB.DstY
|
inc CB.Cache+S.CB.Y1
|
||||||
dec CB.Cache+S.CB.SrcH
|
dec CB.Cache+S.CB.SrcH
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
|
|
|
@ -596,7 +596,7 @@ CBX.CmdLen .DA #S.CB.Y1+1 SETPIXEL
|
||||||
.DA #S.CB.DstPtr+1 BITBLT
|
.DA #S.CB.DstPtr+1 BITBLT
|
||||||
.DA #S.CB.DstPtr+1 GETRECTBUFSIZE
|
.DA #S.CB.DstPtr+1 GETRECTBUFSIZE
|
||||||
.DA #S.CB.TxtPtr+1 DRAWTEXT
|
.DA #S.CB.TxtPtr+1 DRAWTEXT
|
||||||
.DA #S.CB.SrcH+1 GETTEXTSIZE
|
.DA #S.CB.TxtPtr+1 GETTEXTSIZE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CBX.Cache .BS S.CB
|
CBX.Cache .BS S.CB
|
||||||
FON.Cache .BS S.FON
|
FON.Cache .BS S.FON
|
||||||
|
|
|
@ -608,7 +608,7 @@ CB.CmdLen .DA #S.CB.Y1+1 SETPIXEL
|
||||||
.DA #S.CB.DstPtr+1 BITBLT
|
.DA #S.CB.DstPtr+1 BITBLT
|
||||||
.DA #S.CB.DstPtr+1 GETRECTBUFSIZE
|
.DA #S.CB.DstPtr+1 GETRECTBUFSIZE
|
||||||
.DA #S.CB.TxtPtr+1 DRAWTEXT
|
.DA #S.CB.TxtPtr+1 DRAWTEXT
|
||||||
.DA #S.CB.SrcH+1 GETTEXTSIZE
|
.DA #S.CB.TxtPtr+1 GETTEXTSIZE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CB.Cache .BS S.CB
|
CB.Cache .BS S.CB
|
||||||
BM.Cache .BS S.BM
|
BM.Cache .BS S.BM
|
||||||
|
|
|
@ -73,26 +73,23 @@ S.CB.M.MONO .EQ %00000001 b/w (1 bit/pixel)
|
||||||
S.CB.M.C16 .EQ %00001000 16 colors (4 bits/pixel)
|
S.CB.M.C16 .EQ %00001000 16 colors (4 bits/pixel)
|
||||||
*S.CB.M.C256 .EQ %00010000 256 colors (8 bits/pixel)
|
*S.CB.M.C256 .EQ %00010000 256 colors (8 bits/pixel)
|
||||||
S.CB.COLOR .EQ 3 xPIXEL,xLINE,FILLRECT
|
S.CB.COLOR .EQ 3 xPIXEL,xLINE,FILLRECT
|
||||||
S.CB.hFont .EQ 3 DRAWTEXT
|
S.CB.hFont .EQ 3 DRAWTEXT,GETTEXTSIZE
|
||||||
|
|
||||||
S.CB.X1 .EQ 4 xPIXEL,xLINE,FILLRECT,BITBLT,GETRECTBUFSIZE,DRAWLINE
|
S.CB.X1 .EQ 4 xPIXEL,xLINE,FILLRECT,BITBLT,GETRECTBUFSIZE,DRAWLINE
|
||||||
S.CB.Y1 .EQ 6 xPIXEL,xLINE,FILLRECT,BITBLT,GETRECTBUFSIZE,DRAWLINE
|
S.CB.Y1 .EQ 6 xPIXEL,xLINE,FILLRECT,BITBLT,GETRECTBUFSIZE,DRAWLINE
|
||||||
|
S.CB.X2 .EQ 8 VLINE,FILLRECT,GETRECTBUFSIZE,DRAWLINE
|
||||||
|
S.CB.Y2 .EQ 10 HLINE,FILLRECT,GETRECTBUFSIZE,DRAWLINE
|
||||||
|
|
||||||
S.CB.X2 .EQ 8 VLINE,FILLRECT,DRAWLINE
|
S.CB.SrcX .EQ 12 BITBLT,DRAWTEXT,GETTEXTSIZE
|
||||||
S.CB.SrcW .EQ 8 BITBLT,GETRECTBUFSIZE
|
S.CB.SrcY .EQ 14 BITBLT,DRAWTEXT,GETTEXTSIZE
|
||||||
|
S.CB.SrcW .EQ 16 BITBLT
|
||||||
|
S.CB.SrcH .EQ 18 BITBLT
|
||||||
|
|
||||||
S.CB.Y2 .EQ 10 HLINE,FILLRECT,DRAWLINE
|
S.CB.SrcPtr .EQ 20 BITBLT
|
||||||
S.CB.SrcH .EQ 10 BITBLT,GETRECTBUFSIZE
|
S.CB.DstPtr .EQ 22 BITBLT,GETRECTBUFSIZE
|
||||||
|
S.CB.TxtPtr .EQ 24 DRAWTEXT,GETTEXTSIZE
|
||||||
S.CB.DstX .EQ 12 BITBLT,DRAWTEXT
|
|
||||||
S.CB.DstY .EQ 14 BITBLT,DRAWTEXT
|
|
||||||
|
|
||||||
S.CB.SrcPtr .EQ 16 BITBLT
|
|
||||||
S.CB.TxtPtr .EQ 16 DRAWTEXT
|
|
||||||
|
|
||||||
S.CB.DstPtr .EQ 18 BITBLT
|
|
||||||
*
|
*
|
||||||
S.CB .EQ 20
|
S.CB .EQ 26
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE inc/gfx.i
|
SAVE inc/gfx.i
|
||||||
|
|
|
@ -9,7 +9,7 @@ NEW
|
||||||
* CC : CB.Cache clipped & visible
|
* CC : CB.Cache clipped & visible
|
||||||
* CS : CB.Cache invisible
|
* CS : CB.Cache invisible
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLIP.YA jsr CB.Get
|
CLIP.YA jsr CB.Get Put CB in cache
|
||||||
|
|
||||||
CLIP.CB.Cache ldx CB.Cache+S.CB.CMD
|
CLIP.CB.Cache ldx CB.Cache+S.CB.CMD
|
||||||
bpl CLIP.X
|
bpl CLIP.X
|
||||||
|
@ -21,161 +21,122 @@ CLIP.CB.Cache ldx CB.Cache+S.CB.CMD
|
||||||
CLIP.X jmp (J.CLIP-2,x)
|
CLIP.X jmp (J.CLIP-2,x)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLIP.Point
|
CLIP.Point
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
CLIP.HLine
|
CLIP.HLine
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
CLIP.VLine
|
CLIP.VLine
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* OBJ.Cache = Target Context
|
||||||
|
* CB.Cache = Src Control Block
|
||||||
|
*--------------------------------------
|
||||||
|
CLIP.Rect jsr CB.Cache.Overlap
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA OBJ.Cache+S.OBJ.X1
|
||||||
|
>STYAIFGTR CB.Cache+S.CB.X1
|
||||||
|
|
||||||
|
>LDYA OBJ.Cache+S.OBJ.X2
|
||||||
|
>STYAIFLWR CB.Cache+S.CB.X2
|
||||||
|
|
||||||
|
>LDYA OBJ.Cache+S.OBJ.Y1
|
||||||
|
>STYAIFGTR CB.Cache+S.CB.Y1
|
||||||
|
|
||||||
|
>LDYA OBJ.Cache+S.OBJ.Y2
|
||||||
|
>STYAIFLWR CB.Cache+S.CB.Y2
|
||||||
|
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLIP.Rect
|
|
||||||
CLIP.Text
|
CLIP.Text
|
||||||
|
|
||||||
* >DEBUG
|
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
CLIP.Text.RTS rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLIP.BitBlt.9 pla
|
* BitBlt :
|
||||||
CLIP.BitBlt.99 sec
|
*--------------------------------------
|
||||||
rts
|
CLIP.BitBlt jsr CB.Cache.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1
|
||||||
|
|
||||||
CLIP.BitBlt lda CB.Cache+S.CB.DstX
|
jsr CB.Cache.Overlap
|
||||||
ldx CB.Cache+S.CB.DstX+1
|
bcs CLIP.Text.RTS
|
||||||
pha
|
|
||||||
|
|
||||||
>SCMPAX OBJ.Cache+S.OBJ.X2
|
lda OBJ.Cache+S.OBJ.X1
|
||||||
bpl CLIP.BitBlt.9 DestX after X2....exit
|
|
||||||
pla
|
|
||||||
>SCMPAX OBJ.Cache+S.OBJ.X1
|
|
||||||
bpl .1 DestX Inside X1-X2, go check if X1+W fit in
|
|
||||||
* S.CB.DstX before S.OBJ.X1: D=S.OBJ.X1-S.CB.DstX, S.CB.SrcW-=D, S.CB.DstX=+=D, S.CB.X1+=D
|
|
||||||
|
|
||||||
lda OBJ.Cache+S.OBJ.X1 Compute D....
|
|
||||||
sec
|
sec
|
||||||
sbc CB.Cache+S.CB.DstX
|
sbc CB.Cache+S.CB.X1
|
||||||
sta D
|
sta DX
|
||||||
|
|
||||||
lda OBJ.Cache+S.OBJ.X1+1
|
lda OBJ.Cache+S.OBJ.X1+1
|
||||||
sbc CB.Cache+S.CB.DstX+1
|
sbc CB.Cache+S.CB.X1+1
|
||||||
sta D+1 ....always positive
|
sta DX+1
|
||||||
|
bvc .1
|
||||||
lda CB.Cache+S.CB.SrcW S.CB.SrcW-=D
|
eor #$80
|
||||||
sec
|
.1 bmi .2
|
||||||
sbc D
|
>DEBUG
|
||||||
sta CB.Cache+S.CB.SrcW
|
lda S.CB.X1
|
||||||
lda CB.Cache+S.CB.SrcW+1
|
|
||||||
sbc D+1
|
|
||||||
sta CB.Cache+S.CB.SrcW+1
|
|
||||||
bcc CLIP.BitBlt.99 Negative!!!! nothing to do,exit...
|
|
||||||
|
|
||||||
lda CB.Cache+S.CB.DstX S.CB.DstX+=D
|
|
||||||
clc
|
clc
|
||||||
adc D
|
adc DX
|
||||||
sta CB.Cache+S.CB.DstX
|
sta S.CB.X1
|
||||||
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
|
|
||||||
adc D
|
|
||||||
sta CB.Cache+S.CB.X1
|
|
||||||
lda CB.Cache+S.CB.X1+1
|
lda CB.Cache+S.CB.X1+1
|
||||||
adc D+1
|
adc DX+1
|
||||||
sta CB.Cache+S.CB.X1+1 S.CB.DstX=0, new between S.OBJ.X1 & S.OBJ.X2....
|
sta CB.Cache+S.CB.X1+1
|
||||||
|
|
||||||
* S.CB.DstX between S.OBJ.X1 & S.OBJ.X2: D=(S.OBJ.X2+1)-S.CB.DstX
|
lda CB.Cache+S.CB.SrcX
|
||||||
|
|
||||||
.1 lda OBJ.Cache+S.OBJ.X2 Compute D in X,Y
|
|
||||||
sec
|
|
||||||
sbc CB.Cache+S.CB.DstX
|
|
||||||
tax
|
|
||||||
lda OBJ.Cache+S.OBJ.X2+1
|
|
||||||
sbc CB.Cache+S.CB.DstX+1
|
|
||||||
inx
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc
|
|
||||||
|
|
||||||
.2 tay
|
|
||||||
cpx CB.Cache+S.CB.SrcW
|
|
||||||
sbc CB.Cache+S.CB.SrcW+1
|
|
||||||
bcs CLIP.BitBlt.Y D >= SrcW....nothing to clip
|
|
||||||
|
|
||||||
stx CB.Cache+S.CB.SrcW SrcW < D, make SrcW=D
|
|
||||||
sty CB.Cache+S.CB.SrcW+1
|
|
||||||
|
|
||||||
CLIP.BitBlt.Y lda CB.Cache+S.CB.DstY
|
|
||||||
ldx CB.Cache+S.CB.DstY+1
|
|
||||||
pha
|
|
||||||
>SCMPAX OBJ.Cache+S.OBJ.Y2 DestY after Y2....exit
|
|
||||||
bmi .10
|
|
||||||
|
|
||||||
pla
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.10 pla
|
|
||||||
>SCMPAX OBJ.Cache+S.OBJ.Y1
|
|
||||||
bpl .1 DestY Inside Y1-Y2, go check if Y1+H fit in
|
|
||||||
|
|
||||||
* S.CB.DstY above S.OBJ.Y1: D=S.OBJ.Y1-S.CB.DstY, S.CB.SrcH-=D, S.CB.DstY=0, S.CB.Y1+=D
|
|
||||||
lda OBJ.Cache+S.OBJ.Y1 Compute D....
|
|
||||||
sec
|
|
||||||
sbc CB.Cache+S.CB.DstY
|
|
||||||
sta D
|
|
||||||
lda OBJ.Cache+S.OBJ.Y1+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
|
|
||||||
lda CB.Cache+S.CB.SrcH+1
|
|
||||||
sbc D+1
|
|
||||||
sta CB.Cache+S.CB.SrcH+1
|
|
||||||
bcc .99 Negative!!!! nothing to do,exit...
|
|
||||||
|
|
||||||
lda CB.Cache+S.CB.DstY Dst.Y+=D
|
|
||||||
clc
|
clc
|
||||||
adc D
|
adc DX
|
||||||
sta CB.Cache+S.CB.DstY
|
sta CB.Cache+S.CB.SrcX
|
||||||
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
|
|
||||||
adc D
|
|
||||||
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.DstY=0, new between S.OBJ.Y1 & S.OBJ.Y2....
|
|
||||||
|
|
||||||
* S.CB.DstY between S.OBJ.Y1 & S.OBJ.Y2: D=(S.OBJ.Y2+1)-S.CB.DstY
|
lda CB.Cache+S.CB.SrcX+1
|
||||||
|
adc DX+1
|
||||||
.1 lda OBJ.Cache+S.OBJ.Y2 Compute D in X,Y
|
sta CB.Cache+S.CB.SrcX+1
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.SrcW
|
||||||
sec
|
sec
|
||||||
sbc CB.Cache+S.CB.DstY
|
sbc DX
|
||||||
tax
|
sta CB.Cache+S.CB.SrcW
|
||||||
lda OBJ.Cache+S.OBJ.Y2+1
|
|
||||||
sbc CB.Cache+S.CB.DstY+1
|
|
||||||
|
|
||||||
inx
|
lda CB.Cache+S.CB.SrcW+1
|
||||||
bne .2
|
sbc DX+1
|
||||||
|
sta CB.Cache+S.CB.SrcW+1
|
||||||
|
bcc .9
|
||||||
|
|
||||||
inc
|
.2 lda CB.Cache+S.CB.X2
|
||||||
|
sec
|
||||||
|
sbc OBJ.Cache+S.OBJ.X2
|
||||||
|
sta DX
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.X2+1
|
||||||
|
sbc OBJ.Cache+S.OBJ.X2+1
|
||||||
|
sta DX+1
|
||||||
|
bvc .3
|
||||||
|
eor #$80
|
||||||
|
.3 bmi .4
|
||||||
|
>DEBUG
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.SrcW
|
||||||
|
sec
|
||||||
|
sbc DX
|
||||||
|
sta CB.Cache+S.CB.SrcW
|
||||||
|
|
||||||
.2 tay
|
lda CB.Cache+S.CB.SrcW+1
|
||||||
cpx CB.Cache+S.CB.SrcH
|
sbc DX+1
|
||||||
sbc CB.Cache+S.CB.SrcH+1
|
sta CB.Cache+S.CB.SrcW+1
|
||||||
bcs .8 D >= SrcH....nothing to clip
|
bcc .9
|
||||||
|
|
||||||
stx CB.Cache+S.CB.SrcH SrcH < D, make SrcH=D
|
|
||||||
sty CB.Cache+S.CB.SrcH+1
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 pla
|
|
||||||
.99 sec
|
.4 clc
|
||||||
|
.99 rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLIP.Line.LEFT .EQ 1
|
CLIP.Line.LEFT .EQ 1
|
||||||
|
@ -297,6 +258,66 @@ CLIP.Line.EncodeY.AX
|
||||||
ora #CLIP.Line.BOTTOM
|
ora #CLIP.Line.BOTTOM
|
||||||
.8 rts
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CB.Cache.SetX2Y2
|
||||||
|
lda CB.Cache+S.CB.SrcW
|
||||||
|
clc
|
||||||
|
adc CB.Cache+S.CB.X1
|
||||||
|
pha
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.SrcW+1
|
||||||
|
adc CB.Cache+S.CB.X1+1
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
dex
|
||||||
|
|
||||||
|
.2 dec
|
||||||
|
sta CB.Cache+S.CB.X2
|
||||||
|
stx CB.Cache+S.CB.X2+1
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.SrcH
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc CB.Cache+S.CB.Y1
|
||||||
|
pha
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.SrcH+1
|
||||||
|
adc CB.Cache+S.CB.Y1+1
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
dex
|
||||||
|
|
||||||
|
.3 dec
|
||||||
|
sta CB.Cache+S.CB.Y2
|
||||||
|
stx CB.Cache+S.CB.Y2+1
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CB.Cache.Overlap
|
||||||
|
>LDYA CB.Cache+S.CB.X1
|
||||||
|
>SCMPYA OBJ.Cache+S.OBJ.X2
|
||||||
|
bpl .9
|
||||||
|
|
||||||
|
>LDYA CB.Cache+S.CB.X2
|
||||||
|
>SCMPYA OBJ.Cache+S.OBJ.X1
|
||||||
|
bmi .9
|
||||||
|
|
||||||
|
>LDYA CB.Cache+S.CB.Y1
|
||||||
|
>SCMPYA OBJ.Cache+S.OBJ.Y2
|
||||||
|
bpl .9
|
||||||
|
|
||||||
|
>LDYA CB.Cache+S.CB.Y2
|
||||||
|
>SCMPYA OBJ.Cache+S.OBJ.Y1
|
||||||
|
bmi .9
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE usr/src/lib/libgui.s.clip
|
SAVE usr/src/lib/libgui.s.clip
|
||||||
LOAD usr/src/lib/libgui.s
|
LOAD usr/src/lib/libgui.s
|
||||||
|
|
|
@ -26,18 +26,51 @@ SetCursor sta CUR.T
|
||||||
lda L.Cursors+1,x
|
lda L.Cursors+1,x
|
||||||
sta CUR.CB+S.CB.SrcPtr+1
|
sta CUR.CB+S.CB.SrcPtr+1
|
||||||
sta ZPPtr1+1
|
sta ZPPtr1+1
|
||||||
|
|
||||||
ldy #S.BM.W
|
ldy #S.BM.W
|
||||||
lda (ZPPtr1),y
|
lda (ZPPtr1),y
|
||||||
sta CUR.CB+S.CB.SrcW
|
sta CUR.CB+S.CB.SrcW
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc CUR.CB+S.CB.X1
|
||||||
|
pha
|
||||||
|
|
||||||
iny
|
iny
|
||||||
lda (ZPPtr1),y
|
lda (ZPPtr1),y
|
||||||
sta CUR.CB+S.CB.SrcW+1
|
sta CUR.CB+S.CB.SrcW+1
|
||||||
|
adc CUR.CB+S.CB.X1+1
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
dex
|
||||||
|
|
||||||
|
.2 dec
|
||||||
|
sta CUR.CB+S.CB.X2
|
||||||
|
stx CUR.CB+S.CB.X2+1
|
||||||
|
|
||||||
iny S.BM.H
|
iny S.BM.H
|
||||||
lda (ZPPtr1),y
|
lda (ZPPtr1),y
|
||||||
sta CUR.CB+S.CB.SrcH
|
sta CUR.CB+S.CB.SrcH
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc CUR.CB+S.CB.Y1
|
||||||
|
pha
|
||||||
|
|
||||||
iny
|
iny
|
||||||
lda (ZPPtr1),y
|
lda (ZPPtr1),y
|
||||||
sta CUR.CB+S.CB.SrcH+1
|
sta CUR.CB+S.CB.SrcH+1
|
||||||
|
adc CUR.CB+S.CB.Y1+1
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
dex
|
||||||
|
|
||||||
|
.3 dec
|
||||||
|
sta CUR.CB+S.CB.Y2
|
||||||
|
stx CUR.CB+S.CB.Y2+1
|
||||||
|
|
||||||
lda CUR.bVisible
|
lda CUR.bVisible
|
||||||
bmi ShowCursor.I
|
bmi ShowCursor.I
|
||||||
|
|
||||||
|
@ -77,36 +110,37 @@ ShowCursor lda CUR.bVisible
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
HideCursor.I lda #S.CB.OP.RESTORE
|
HideCursor.I lda #S.CB.OP.RESTORE
|
||||||
sta CUR.CB+S.CB.OP
|
|
||||||
bra DrawCursor.I
|
bra DrawCursor.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ShowCursor.I lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE
|
ShowCursor.I sta CUR.CB+S.CB.OP
|
||||||
sta CUR.CB+S.CB.OP
|
|
||||||
ldx CUR.T
|
ldx CUR.T
|
||||||
lda CUR.Pos+S.POINT.X
|
lda CUR.Pos+S.POINT.X
|
||||||
sec
|
sec
|
||||||
sbc CUR.HotPoints,x
|
sbc CUR.HotPoints,x
|
||||||
sta CUR.CB+S.CB.DstX
|
sta CUR.CB+S.CB.X1
|
||||||
lda CUR.Pos+S.POINT.X+1
|
lda CUR.Pos+S.POINT.X+1
|
||||||
sbc #0
|
sbc #0
|
||||||
sta CUR.CB+S.CB.DstX+1
|
sta CUR.CB+S.CB.X1+1
|
||||||
lda CUR.Pos+S.POINT.Y
|
lda CUR.Pos+S.POINT.Y
|
||||||
sec
|
sec
|
||||||
sbc CUR.HotPoints+1,x
|
sbc CUR.HotPoints+1,x
|
||||||
sta CUR.CB+S.CB.DstY
|
sta CUR.CB+S.CB.Y1
|
||||||
lda CUR.Pos+S.POINT.Y+1
|
lda CUR.Pos+S.POINT.Y+1
|
||||||
sbc #0
|
sbc #0
|
||||||
sta CUR.CB+S.CB.DstY+1
|
sta CUR.CB+S.CB.Y1+1
|
||||||
|
|
||||||
DrawCursor.I >LDYA L.SCR
|
lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE
|
||||||
|
|
||||||
|
DrawCursor.I sta CUR.CB+S.CB.OP
|
||||||
|
|
||||||
|
>LDYA L.SCR
|
||||||
jsr OBJ.Get
|
jsr OBJ.Get
|
||||||
|
|
||||||
>LDYA L.CUR.CB
|
>LDYA L.CUR.CB
|
||||||
jsr CLIP.YA
|
jsr CLIP.YA
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>LDYA L.CUR.CB
|
jmp GFXWrite.CB
|
||||||
jmp GFXWrite.YA
|
|
||||||
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
NEW
|
NEW
|
||||||
AUTO 3,1
|
AUTO 3,1
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF lib/libgui
|
.TF lib/libgui
|
||||||
|
@ -23,6 +23,7 @@ WND.MAX .EQ 64
|
||||||
stx ]1+1
|
stx ]1+1
|
||||||
sta ]2+1
|
sta ]2+1
|
||||||
.EM
|
.EM
|
||||||
|
|
||||||
.MA NOT16
|
.MA NOT16
|
||||||
sec
|
sec
|
||||||
lda #0
|
lda #0
|
||||||
|
@ -32,6 +33,7 @@ WND.MAX .EQ 64
|
||||||
sbc ]1+1
|
sbc ]1+1
|
||||||
sta ]1+1
|
sta ]1+1
|
||||||
.EM
|
.EM
|
||||||
|
|
||||||
.MA SCMPAX
|
.MA SCMPAX
|
||||||
sec
|
sec
|
||||||
sbc ]1
|
sbc ]1
|
||||||
|
@ -39,6 +41,34 @@ WND.MAX .EQ 64
|
||||||
sbc ]1+1
|
sbc ]1+1
|
||||||
bvc :1
|
bvc :1
|
||||||
eor #$80
|
eor #$80
|
||||||
|
:1 .EQ *
|
||||||
|
.EM
|
||||||
|
|
||||||
|
.MA SCMPYA
|
||||||
|
cpy ]1
|
||||||
|
sbc ]1+1
|
||||||
|
bvc :1
|
||||||
|
eor #$80
|
||||||
|
:1 .EQ *
|
||||||
|
.EM
|
||||||
|
|
||||||
|
.MA STYAIFGTR
|
||||||
|
tax
|
||||||
|
>SCMPYA ]1
|
||||||
|
bmi :1
|
||||||
|
|
||||||
|
sty ]1
|
||||||
|
stx ]1+1
|
||||||
|
:1 .EQ *
|
||||||
|
.EM
|
||||||
|
|
||||||
|
.MA STYAIFLWR
|
||||||
|
tax
|
||||||
|
>SCMPYA ]1
|
||||||
|
bpl :1
|
||||||
|
|
||||||
|
sty ]1
|
||||||
|
stx ]1+1
|
||||||
:1 .EQ *
|
:1 .EQ *
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -114,7 +144,7 @@ J.Clip .DA CLIP.Point SETPIXEL
|
||||||
.DA CLIP.BitBlt
|
.DA CLIP.BitBlt
|
||||||
.DA CLIP.Rect GETRECTBUFSIZE
|
.DA CLIP.Rect GETRECTBUFSIZE
|
||||||
.DA CLIP.Line
|
.DA CLIP.Line
|
||||||
.DA CLIP.Text
|
.DA CLIP.Text
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
LIB.LOAD lda LibCount
|
LIB.LOAD lda LibCount
|
||||||
|
@ -221,7 +251,7 @@ CB.Get >STYA .1+1
|
||||||
sta CB.Cache,x
|
sta CB.Cache,x
|
||||||
dex
|
dex
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GFXWrite.CB >LDYA L.CB.Cache
|
GFXWrite.CB >LDYA L.CB.Cache
|
||||||
|
|
|
@ -54,9 +54,13 @@ CS.INIT >LDYA L.LIBGUI
|
||||||
* clc
|
* clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN >PUSHW L.MouseData
|
CS.RUN jsr Destop.Paint
|
||||||
|
|
||||||
|
CS.RUN.LOOP >SLEEP
|
||||||
|
|
||||||
|
>PUSHW L.MouseData
|
||||||
>LIBCALL hLIBGUI,LIBGUI.ReadMouse
|
>LIBCALL hLIBGUI,LIBGUI.ReadMouse
|
||||||
bcs .4
|
bcs .8
|
||||||
|
|
||||||
lda MouseData+S.MOUSE.S
|
lda MouseData+S.MOUSE.S
|
||||||
bit #S.MOUSE.S.MOVE
|
bit #S.MOUSE.S.MOVE
|
||||||
|
@ -64,10 +68,34 @@ CS.RUN >PUSHW L.MouseData
|
||||||
|
|
||||||
>PUSHW L.MouseData
|
>PUSHW L.MouseData
|
||||||
>LIBCALL hLIBGUI,LIBGUI.SetCursorPos
|
>LIBCALL hLIBGUI,LIBGUI.SetCursorPos
|
||||||
|
|
||||||
|
lda MouseData+S.MOUSE.X1
|
||||||
|
sta CB.Paint+S.CB.X1
|
||||||
|
clc
|
||||||
|
adc #39
|
||||||
|
sta CB.Paint+S.CB.X2
|
||||||
|
|
||||||
|
lda MouseData+S.MOUSE.X1+1
|
||||||
|
sta CB.Paint+S.CB.X1+1
|
||||||
|
adc #0
|
||||||
|
sta CB.Paint+S.CB.X2+1
|
||||||
|
|
||||||
|
lda MouseData+S.MOUSE.Y1
|
||||||
|
sta CB.Paint+S.CB.Y1
|
||||||
|
clc
|
||||||
|
adc #29
|
||||||
|
sta CB.Paint+S.CB.Y2
|
||||||
|
|
||||||
|
lda MouseData+S.MOUSE.Y1+1
|
||||||
|
sta CB.Paint+S.CB.Y1+1
|
||||||
|
adc #0
|
||||||
|
sta CB.Paint+S.CB.Y2+1
|
||||||
|
|
||||||
lda MouseData+S.MOUSE.S
|
lda MouseData+S.MOUSE.S
|
||||||
|
|
||||||
.1 bit #S.MOUSE.S.CLK
|
.1 bit #S.MOUSE.S.CLK
|
||||||
beq .4
|
beq .4
|
||||||
|
|
||||||
>LDA.G CUR.T
|
>LDA.G CUR.T
|
||||||
inc
|
inc
|
||||||
inc
|
inc
|
||||||
|
@ -75,13 +103,17 @@ CS.RUN >PUSHW L.MouseData
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
lda #CUR.T.ARROW
|
lda #CUR.T.ARROW
|
||||||
|
|
||||||
.2 >STA.G CUR.T
|
.2 >STA.G CUR.T
|
||||||
>LIBCALL hLIBGUI,LIBGUI.SetCursor
|
>LIBCALL hLIBGUI,LIBGUI.SetCursor
|
||||||
|
|
||||||
* jsr Destop.Paint
|
jsr Destop.Paint
|
||||||
.4
|
|
||||||
|
.4
|
||||||
|
|
||||||
.8 clc
|
.8 jmp CS.RUN.LOOP
|
||||||
|
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.DOEVENT lda (pEvent)
|
CS.DOEVENT lda (pEvent)
|
||||||
|
@ -101,14 +133,7 @@ Destop.Paint >LIBCALL hLIBGUI,LIBGUI.HideCursor
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>PUSHW L.CB.Paint
|
>PUSHW L.CB.Paint
|
||||||
>LIBCALL hLIBGUI,LIBGUI.Draw
|
>LIBCALL hLIBGUI,LIBGUI.Draw
|
||||||
|
|
||||||
* >LIBCALL hLIBGUI,LIBGUI.GetScreenGC
|
|
||||||
* >PUSHYA
|
|
||||||
|
|
||||||
* >PUSHW L.GC.Clip
|
|
||||||
* >PUSHW L.CB.Marylin
|
|
||||||
* >LIBCALL hLIBGUI,LIBGUI.Draw
|
|
||||||
|
|
||||||
>LIBCALL hLIBGUI,LIBGUI.ShowCursor
|
>LIBCALL hLIBGUI,LIBGUI.ShowCursor
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -122,18 +147,17 @@ CB.Paint .DA #S.CB.CMD.FILLRECT
|
||||||
.DA #S.CB.OP.SET
|
.DA #S.CB.OP.SET
|
||||||
.DA #S.CB.M.C16
|
.DA #S.CB.M.C16
|
||||||
.DA #11 Color
|
.DA #11 Color
|
||||||
.DA 540
|
.DA 540 X1
|
||||||
.DA 10
|
.DA 160 Y1
|
||||||
.DA 550
|
.DA 579 X2
|
||||||
.DA 30
|
.DA 199 Y2
|
||||||
.DA #0
|
.DA #0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
.OR 0
|
.OR 0
|
||||||
DS.START
|
DS.START
|
||||||
CUR.T .BS 1
|
CUR.T .BS 1
|
||||||
DS.END
|
DS.END .ED
|
||||||
.ED
|
|
||||||
MAN
|
MAN
|
||||||
SAVE usr/src/sbin/gui.s
|
SAVE usr/src/sbin/gui.s
|
||||||
ASM
|
ASM
|
||||||
|
|
|
@ -439,6 +439,98 @@ CORE.FSID .BS 1
|
||||||
CORE.EvtIndex .BS 1
|
CORE.EvtIndex .BS 1
|
||||||
CORE.EvtCount .BS 1
|
CORE.EvtCount .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* Called by :
|
||||||
|
* - Kernel K.IrqHAuxLC
|
||||||
|
* - ProDOS IRQ Manager (GP)
|
||||||
|
*--------------------------------------
|
||||||
|
K.IrqH.IIGS lda IO.IIGS.INTFLAG
|
||||||
|
and #$08
|
||||||
|
beq K.IrqH.DEV
|
||||||
|
|
||||||
|
stz IO.IIGS.CLRVBLINT
|
||||||
|
|
||||||
|
bra K.IrqH.Switch
|
||||||
|
*--------------------------------------
|
||||||
|
K.IrqH.TCLOCK ldy IRQ.VBL.n0
|
||||||
|
|
||||||
|
lda $c080,y
|
||||||
|
and #$20
|
||||||
|
beq K.IrqH.DEV
|
||||||
|
|
||||||
|
lda $c088,y
|
||||||
|
lda $c080,y
|
||||||
|
|
||||||
|
bra K.IrqH.Switch
|
||||||
|
*--------------------------------------
|
||||||
|
K.IrqH.VBL
|
||||||
|
K.IrqH.VBL.MSM jsr $FFFF SELF MODIFIED,SERVEMOUSE
|
||||||
|
bcs K.IrqH.DEV Not From Mouse
|
||||||
|
ldx IRQ.VBL.0n
|
||||||
|
lda MOUSESTSx,x
|
||||||
|
and #MOUSESTSx.INTVBL IRQ was caused by VBL ?
|
||||||
|
beq K.IrqH.DEV
|
||||||
|
ldx K.IrqH.VBL.MRM+2 $Cn
|
||||||
|
ldy IRQ.VBL.n0
|
||||||
|
K.IrqH.VBL.MRM jsr $FFFF SELF MODIFIED,READMOUSE
|
||||||
|
*--------------------------------------
|
||||||
|
K.IrqH.Switch inc IRQ.Tick
|
||||||
|
|
||||||
|
dec CORE.CPUStatCnt
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
lda #100
|
||||||
|
sta CORE.CPUStatCnt
|
||||||
|
ldx #K.PS.MAX-1
|
||||||
|
|
||||||
|
.1 lda PS.Table.Hits,x
|
||||||
|
stz PS.Table.Hits,x
|
||||||
|
sta PS.Table.Stats,x
|
||||||
|
dex
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
.2 lda IRQ.InKernel
|
||||||
|
bpl .3
|
||||||
|
|
||||||
|
inc PS.Table.Hits
|
||||||
|
|
||||||
|
.9 clv
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.3 ldx CORE.PSIndex
|
||||||
|
inc PS.Table.Hits,x
|
||||||
|
|
||||||
|
bit A2osX.F A2osX.F.PMODE .EQ %01000000
|
||||||
|
bvc .8
|
||||||
|
|
||||||
|
ldy #S.PS.S
|
||||||
|
lda (pPS),y
|
||||||
|
eor #S.PS.S.RUN
|
||||||
|
bne .9
|
||||||
|
lda IRQ.InLib
|
||||||
|
bmi .9 we are in LIB, no switching
|
||||||
|
|
||||||
|
.8 clc exit with V flag set
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
K.IrqH.DEV ldx #0
|
||||||
|
.1 lda IRQ.Vectors+1,x
|
||||||
|
beq .9
|
||||||
|
sta .10+2
|
||||||
|
lda IRQ.Vectors,x
|
||||||
|
sta .10+1
|
||||||
|
phx
|
||||||
|
.10 jsr $ffff SELF MODIFIED
|
||||||
|
plx
|
||||||
|
bcc .8 CC, IRQ cleared by device
|
||||||
|
.2 inx
|
||||||
|
inx
|
||||||
|
.3 cpx #K.IRQDEV.MAX*2
|
||||||
|
bne .1
|
||||||
|
.9 sec
|
||||||
|
.8 clv clear V (no task switching)
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
IRQ.InKernel .BS 1
|
IRQ.InKernel .BS 1
|
||||||
IRQ.InLib .BS 1
|
IRQ.InLib .BS 1
|
||||||
IRQ.SkipA2osX .BS 1
|
IRQ.SkipA2osX .BS 1
|
||||||
|
@ -449,6 +541,8 @@ IRQ.VBL.0n .BS 1
|
||||||
IRQ.Mode .BS 1
|
IRQ.Mode .BS 1
|
||||||
IRQ.Tick .BS 1
|
IRQ.Tick .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
IRQ.Vectors .BS K.IRQDEV.MAX*2
|
||||||
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE USR/SRC/SYS/KERNEL.S.CORE
|
SAVE USR/SRC/SYS/KERNEL.S.CORE
|
||||||
LOAD USR/SRC/SYS/KERNEL.S
|
LOAD USR/SRC/SYS/KERNEL.S
|
||||||
|
|
|
@ -25,9 +25,12 @@ K.IrqHAuxLC cld
|
||||||
|
|
||||||
stx K.IrqHAuxLC.5+1
|
stx K.IrqHAuxLC.5+1
|
||||||
sty K.IrqHAuxLC.4+1
|
sty K.IrqHAuxLC.4+1
|
||||||
|
|
||||||
lda RDPAGE2
|
lda RDPAGE2
|
||||||
pha
|
pha
|
||||||
sta CLRPAGE2
|
sta CLRPAGE2
|
||||||
|
lda RD80STORE
|
||||||
|
pha
|
||||||
lda RDREADAUX
|
lda RDREADAUX
|
||||||
pha
|
pha
|
||||||
sta CLRREADAUX Make sure we can access FD.Table
|
sta CLRREADAUX Make sure we can access FD.Table
|
||||||
|
@ -78,9 +81,14 @@ K.IrqHAuxLC.3 pla Must keep Carry
|
||||||
.2 pla
|
.2 pla
|
||||||
bpl .3
|
bpl .3
|
||||||
|
|
||||||
|
sta SET80STORE
|
||||||
|
|
||||||
|
.3 pla
|
||||||
|
bpl .30
|
||||||
|
|
||||||
sta SETPAGE2
|
sta SETPAGE2
|
||||||
|
|
||||||
.3 bvc K.IrqHAuxLC.4 if not V, skip task switching
|
.30 bvc K.IrqHAuxLC.4 if not V, skip task switching
|
||||||
|
|
||||||
tsx Check Stack if before "dec IRQ.InKernel"
|
tsx Check Stack if before "dec IRQ.InKernel"
|
||||||
cpx #$fc $1ff-PChi-PClo-P = $1fc
|
cpx #$fc $1ff-PChi-PClo-P = $1fc
|
||||||
|
@ -125,100 +133,6 @@ K.IrqHAuxLC.JMP jmp $FFFF SELF MODIFIED Not handled, pass to ProDOS
|
||||||
|
|
||||||
K.IrqHAuxLC.8 rti
|
K.IrqHAuxLC.8 rti
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Called by :
|
|
||||||
* - Kernel K.IrqHAuxLC
|
|
||||||
* - ProDOS IRQ Manager (GP)
|
|
||||||
*--------------------------------------
|
|
||||||
K.IrqH.IIGS lda IO.IIGS.INTFLAG
|
|
||||||
and #$08
|
|
||||||
beq K.IrqH.DEV
|
|
||||||
|
|
||||||
stz IO.IIGS.CLRVBLINT
|
|
||||||
|
|
||||||
bra K.IrqH.Switch
|
|
||||||
*--------------------------------------
|
|
||||||
K.IrqH.TCLOCK ldy IRQ.VBL.n0
|
|
||||||
|
|
||||||
lda $c080,y
|
|
||||||
and #$20
|
|
||||||
beq K.IrqH.DEV
|
|
||||||
|
|
||||||
lda $c088,y
|
|
||||||
lda $c080,y
|
|
||||||
|
|
||||||
bra K.IrqH.Switch
|
|
||||||
*--------------------------------------
|
|
||||||
K.IrqH.VBL
|
|
||||||
K.IrqH.VBL.MSM jsr $FFFF SELF MODIFIED,SERVEMOUSE
|
|
||||||
bcs K.IrqH.DEV Not From Mouse
|
|
||||||
ldx IRQ.VBL.0n
|
|
||||||
lda MOUSESTSx,x
|
|
||||||
and #MOUSESTSx.INTVBL IRQ was caused by VBL ?
|
|
||||||
beq K.IrqH.DEV
|
|
||||||
ldx K.IrqH.VBL.MRM+2 $Cn
|
|
||||||
ldy IRQ.VBL.n0
|
|
||||||
K.IrqH.VBL.MRM jsr $FFFF SELF MODIFIED,READMOUSE
|
|
||||||
*--------------------------------------
|
|
||||||
K.IrqH.Switch inc IRQ.Tick
|
|
||||||
|
|
||||||
dec CORE.CPUStatCnt
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
lda #100
|
|
||||||
sta CORE.CPUStatCnt
|
|
||||||
ldx #K.PS.MAX-1
|
|
||||||
|
|
||||||
.1 lda PS.Table.Hits,x
|
|
||||||
stz PS.Table.Hits,x
|
|
||||||
sta PS.Table.Stats,x
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
.2 lda IRQ.InKernel
|
|
||||||
bpl .3
|
|
||||||
|
|
||||||
inc PS.Table.Hits
|
|
||||||
|
|
||||||
.9 clv
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 ldx CORE.PSIndex
|
|
||||||
inc PS.Table.Hits,x
|
|
||||||
|
|
||||||
bit A2osX.F A2osX.F.PMODE .EQ %01000000
|
|
||||||
bvc .8
|
|
||||||
|
|
||||||
ldy #S.PS.S
|
|
||||||
lda (pPS),y
|
|
||||||
eor #S.PS.S.RUN
|
|
||||||
bne .9
|
|
||||||
lda IRQ.InLib
|
|
||||||
bmi .9 we are in LIB, no switching
|
|
||||||
|
|
||||||
.8 clc exit with V flag set
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
K.IrqH.DEV ldx #0
|
|
||||||
.1 lda IRQ.Vectors+1,x
|
|
||||||
beq .9
|
|
||||||
sta .10+2
|
|
||||||
lda IRQ.Vectors,x
|
|
||||||
sta .10+1
|
|
||||||
phx
|
|
||||||
.10 jsr $ffff SELF MODIFIED
|
|
||||||
plx
|
|
||||||
bcc .8 CC, IRQ cleared by device
|
|
||||||
.2 inx
|
|
||||||
inx
|
|
||||||
.3 cpx #K.IRQDEV.MAX*2
|
|
||||||
bne .1
|
|
||||||
.9 sec
|
|
||||||
.8 clv clear V (no task switching)
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
IRQ.Vectors .BS K.IRQDEV.MAX*2
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
MAN
|
||||||
SAVE USR/SRC/SYS/KERNEL.S.IRQ
|
SAVE USR/SRC/SYS/KERNEL.S.IRQ
|
||||||
LOAD USR/SRC/SYS/KERNEL.S
|
LOAD USR/SRC/SYS/KERNEL.S
|
||||||
|
|
Loading…
Reference in New Issue
Block a user