@@ 20,11 20,11 @@
%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
-%HOR { #20 } %VER { #10 }
-%WIDTH { HOR TOS #0008 ** }
-%LENGTH { HOR TOS VER TOS ** #0010 ** }
+%DEBUG { ;print-hex JSR2 #0a .Console/write DEO }
+%DEBUG2 { SWP ;print-hex JSR2 ;print-hex JSR2 #0a .Console/write DEO }
-%8** { #30 SFT2 }
+%8** { #30 SFT2 } %8// { #03 SFT2 }
+%TOB { SWP POP } %TOS { #00 SWP }
%RTN { JMP2r }
%MOD { DUP2 / * - }
%MOD2 { OVR2 OVR2 // ** -- }
@@ 32,7 32,6 @@
%ROL { DUP #07 SFT SWP #10 SFT + }
%ROR { DUP #70 SFT SWP #01 SFT + }
%SFL { #40 SFT SFT }
-%TOB { SWP POP } %TOS { #00 SWP }
%LTS2 { #8000 ++ SWP2 #8000 ++ >> }
%INCR { SWP #01 + SWP }
%INCR2 { SWP2 #0001 ++ SWP2 }
@@ 40,6 39,11 @@
%STEP8 { #33 SFT2 }
%TOGGLE { LDZk #00 = SWP STZ }
%GET-ITERATORS { SWP2k POP SWP POP }
+%GET-ITER { OVR2 SWP POP OVR SWP }
+
+%HOR { #20 } %VER { #10 }
+%WIDTH { HOR TOS #0008 ** }
+%LENGTH { HOR TOS VER TOS ** #0010 ** }
%BANK { #2000 }
%BANK-TEMP { #4000 }
@@ 88,6 92,9 @@
&tool $1
&focus $2
&zoom $1
+@selection
+ &x1 $1 &y1 $1
+ &x2 $1 &y2 $1
@path
&length $1
&name $20
@@ 95,9 102,9 @@
&x1 $2 &y1 $2
&x2 $2 &y2 $2
&width $2 &height $2
-@pointer
- &x $2 &y $2
- @color $1
+@cursor
+ &x $2 &y $2 &last $1
+@color $1
@rect [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
( interface )
@@ 106,8 113,11 @@
@blendview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
@dataview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
@preview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
-@tileview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
@zoomview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
+@tileview
+ &x1 $2 &y1 $2
+ &x2 $2 &y2 $2
+ &width $2 &height $2
( program )
@@ 134,6 144,9 @@
#01 .settings/tool STZ
BANK .settings/focus STZ2
+ HOR TOS #0008 ** .tileview/width STZ2
+ VER TOS #0008 ** .tileview/height STZ2
+
.Screen/width DEI2 #01 SFT2 .frame/width LDZ2 #01 SFT2 --
.Screen/height DEI2 #01 SFT2 .frame/height LDZ2 #01 SFT2 --
.frame/width LDZ2 .frame/height LDZ2
@@ 293,10 306,9 @@ BRK
;draw-cursor JSR2
- ( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
-
.Mouse/x DEI2 .Mouse/y DEI2 .tileview ;within-rect JSR2
;on-touch-tileview JCN2
+
.Mouse/x DEI2 .Mouse/y DEI2 .toolview ;within-rect JSR2
;on-touch-toolview JCN2
.Mouse/x DEI2 .Mouse/y DEI2 .blendview ;within-rect JSR2
@@ 308,10 320,16 @@ BRK
.Mouse/x DEI2 .Mouse/y DEI2 .zoomview ;within-rect JSR2
;on-touch-zoomview JCN2
+ ( release-record ) #0000 .Mouse/state DEO .cursor/last STZ
+
BRK
@on-touch-tileview ( -> )
+ .settings/tool LDZ #01 = ;&select JCN2
+
+ ( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
+
.Mouse/x DEI2 .tileview/x1 LDZ2 --
.Mouse/y DEI2 .tileview/y1 LDZ2 --
@@ 354,10 372,36 @@ BRK
POP2 POP2
+ BRK
+
+ &select ( -> )
+
+ .Mouse/state DEI DUP .cursor/last LDZ
+ DUP2 #0000 == ,&end JCN
+ DUP2 #0100 !! ,&no-down JCN
+ .Mouse/x DEI2 .tileview/x1 LDZ2 -- 8// TOB
+ DUP .selection/x1 STZ .selection/x2 STZ
+ .Mouse/y DEI2 .tileview/y1 LDZ2 -- 8// TOB
+ DUP .selection/y1 STZ .selection/y2 STZ
+ ;clamp-selection JSR2 ;redraw JSR2
+ ,&end JMP
+ &no-down
+ ( release )
+ .Mouse/x DEI2 .tileview/x1 LDZ2 -- 8// TOB .selection/x2 STZ
+ .Mouse/y DEI2 .tileview/y1 LDZ2 -- 8// TOB .selection/y2 STZ
+ ;clamp-selection JSR2 ;redraw JSR2
+ &end
+ POP2
+ .cursor/last STZ
+
+ BRK
+
BRK
@on-touch-toolview ( -> )
+ ( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
+
.Mouse/x DEI2 .toolview/x1 LDZ2 -- #0008 // TOB
DUP HOR SWP - #01 ! ,&no-save JCN
@@ 413,6 457,9 @@ BRK
BRK
@on-touch-zoomview ( -> )
+
+
+ ( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
.Mouse/y DEI2 .zoomview/y1 LDZ2 -- #0008 // TOB #04 ! ;&no-mod JCN2
.Mouse/x DEI2 .zoomview/x1 LDZ2 -- #0008 // TOB
@@ 463,6 510,8 @@ BRK
@on-touch-blendview ( -> )
+ ( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
+
.Mouse/x DEI2 .blendview/x1 LDZ2 -- #0008 // TOB
.Mouse/y DEI2 .blendview/y1 LDZ2 -- #0008 // TOB #04 * +
.settings/blending STZ
@@ 474,6 523,9 @@ BRK
BRK
@on-touch-colorview ( -> )
+
+
+ ( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
.Mouse/y DEI2 .colorview/y1 LDZ2 -- #0008 // TOB
@@ 509,6 561,9 @@ BRK
@on-touch-preview ( -> )
+
+ ( skip ) .Mouse/state DEI #00 ! #01 JCN [ BRK ]
+
( y ) .Mouse/y DEI2 .preview/y1 LDZ2 -- #0008 // TOB
( x ) .Mouse/x DEI2 .preview/x1 LDZ2 -- #0008 // TOB
@@ 638,6 693,18 @@ RTN
RTN
+@is-selected ( x y -- flag )
+
+ OVR .selection/x1 LDZ < ,&end JCN
+ OVR .selection/x2 LDZ > ,&end JCN
+ DUP .selection/y1 LDZ < ,&end JCN
+ DUP .selection/y2 LDZ > ,&end JCN
+ POP2 #01 RTN
+ &end
+ POP2 #00
+
+RTN
+
@draw-tileview ( -- )
.settings/zoom LDZ ;draw-tileview-zoom JCN2
@@ 650,8 717,8 @@ RTN
OVR DUP #08 * TOS .tileview/x1 LDZ2 ++ .Screen/x DEO2 STHkr
TOS ROT TOS SWP2
HOR TOS ** ++ #0010 **
- BANK ++ [ DUP2 ] .Screen/addr DEO2
- .settings/focus LDZ2 == #0d *
+ BANK ++ .Screen/addr DEO2
+ GET-ITERATORS ;is-selected JSR2 #0d *
.settings/blending LDZ +
.settings/depth LDZ #80 * +
#00 + .Screen/sprite DEO
@@ 799,7 866,7 @@ RTN
;zoom-icns [ .settings/zoom LDZ TOS #0008 ** ++ ] .Screen/addr DEO2
#01 .settings/zoom LDZ + .Screen/sprite DEO
( file i/o )
- ,draw-state JSR
+ ;draw-state JSR2
.toolview/x2 LDZ2 STH2k #0018 -- .Screen/x DEO2
;load-icn .Screen/addr DEO2
#01 .Screen/sprite DEO
@@ 811,15 878,6 @@ RTN
RTN
-@draw-state ( -- )
-
- .toolview/x2 LDZ2 #0008 -- .Screen/x DEO2
- .toolview/y1 LDZ2 .Screen/y DEO2
- ;save-icn .Screen/addr DEO2
- #05 .state/changed LDZ #0a * + .Screen/sprite DEO
-
-RTN
-
@draw-blendview ( -- )
( value )
@@ 841,25 899,6 @@ RTN
RTN
-@draw-filepath ( color -- )
-
- STH
- .toolview/x1 LDZ2 #0040 ++ .Screen/x DEO2
- .toolview/y1 LDZ2 .Screen/y DEO2
- ;path/name
- &loop
- DUP2 LDA DUP #00 ! #20 * - TOS #0008 ** ;font ++ .Screen/addr DEO2
- STHkr .Screen/sprite DEO
- .Screen/x DEI2 #0008 ++ .Screen/x DEO2
- #0001 ++
- LDAk #00 ! ,&loop JCN
- POP2
- POPr
- ( clear last )
- #00 .Screen/sprite DEO
-
-RTN
-
@draw-preview ( -- )
( value )
@@ 913,27 952,26 @@ RTN
.settings/color LDZ .Screen/sprite DEO
.colorview/x1 LDZ2 .colorview/y1 LDZ2
- [ .System/r GET-COLOR ] ,draw-slider JSR
+ [ .System/r GET-COLOR ] ,&slider JSR
.colorview/x1 LDZ2 .colorview/y1 LDZ2 #0008 ++
- [ .System/g GET-COLOR ] ,draw-slider JSR
+ [ .System/g GET-COLOR ] ,&slider JSR
.colorview/x1 LDZ2 .colorview/y1 LDZ2 #0010 ++
- [ .System/b GET-COLOR ] ,draw-slider JSR
+ [ .System/b GET-COLOR ] ,&slider JSR
-RTN
+ RTN
-@draw-slider ( x* y* value -- )
-
- STH
- .Screen/y DEO2
- .Screen/x DEO2
- #00 #10
- &loop
- OVR STHkr > #08 * TOS ;slider-icns ++ .Screen/addr DEO2
- #02 .Screen/sprite DEO
- .Screen/x DEI2 #0002 ++ .Screen/x DEO2
- INCR LTHk ,&loop JCN
- POP2
- POPr
+ &slider ( x* y* value -- )
+ STH
+ .Screen/y DEO2
+ .Screen/x DEO2
+ #10 #00
+ &loop
+ DUP STHkr > #08 * TOS ;slider-icns ++ .Screen/addr DEO2
+ #02 .Screen/sprite DEO
+ .Screen/x DEI2 #0002 ++ .Screen/x DEO2
+ #01 + GTHk ,&loop JCN
+ POP2
+ POPr
RTN
@@ 1002,13 1040,13 @@ RTN
@draw-cursor ( -- )
( clear last cursor )
- .pointer/x LDZ2 .Screen/x DEO2
- .pointer/y LDZ2 .Screen/y DEO2
+ .cursor/x LDZ2 .Screen/x DEO2
+ .cursor/y LDZ2 .Screen/y DEO2
#40 .Screen/sprite DEO
( record mouse positions )
- .Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2
- .Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2
+ .Mouse/x DEI2 DUP2 .cursor/x STZ2 .Screen/x DEO2
+ .Mouse/y DEI2 DUP2 .cursor/y STZ2 .Screen/y DEO2
( draw new cursor )
;tool-brush #00 .settings/tool LDZ #08 * ++ .Screen/addr DEO2
@@ 1016,6 1054,34 @@ RTN
RTN
+@draw-filepath ( color -- )
+
+ STH
+ .toolview/x1 LDZ2 #0040 ++ .Screen/x DEO2
+ .toolview/y1 LDZ2 .Screen/y DEO2
+ ;path/name
+ &loop
+ DUP2 LDA DUP #00 ! #20 * - TOS #0008 ** ;font ++ .Screen/addr DEO2
+ STHkr .Screen/sprite DEO
+ .Screen/x DEI2 #0008 ++ .Screen/x DEO2
+ #0001 ++
+ LDAk #00 ! ,&loop JCN
+ POP2
+ POPr
+ ( clear last )
+ #00 .Screen/sprite DEO
+
+RTN
+
+@draw-state ( -- )
+
+ .toolview/x2 LDZ2 #0008 -- .Screen/x DEO2
+ .toolview/y1 LDZ2 .Screen/y DEO2
+ ;save-icn .Screen/addr DEO2
+ #05 .state/changed LDZ #0a * + .Screen/sprite DEO
+
+RTN
+
@draw-short ( short* color -- )
STH SWP
@@ 1050,28 1116,27 @@ RTN
RTN
-@line-rect ( x1* y1* x2* y2* color -- )
+( etc )
- ( load ) .color STZ DUP2 STH2 .rect/y2 STZ2 .rect/x2 STZ2 DUP2 STH2 .rect/y1 STZ2 .rect/x1 STZ2
- STH2r STH2r
- &ver
- ( save ) OVR2 .Screen/y DEO2
- ( draw ) .rect/x1 LDZ2 .Screen/x DEO2 .color LDZ DUP .Screen/pixel DEO
- ( draw ) .rect/x2 LDZ2 .Screen/x DEO2 .Screen/pixel DEO
- ( incr ) INCR2
- OVR2 OVR2 LTS2 ,&ver JCN
- POP2 POP2
- .rect/x1 LDZ2 .rect/x2 LDZ2
- &hor
- ( save ) OVR2 .Screen/x DEO2
- ( draw ) .rect/y1 LDZ2 .Screen/y DEO2 .color LDZ DUP .Screen/pixel DEO
- ( draw ) .rect/y2 LDZ2 .Screen/y DEO2 .Screen/pixel DEO
- ( incr ) INCR2
- OVR2 OVR2 #0001 ++ LTS2 ,&hor JCN
- POP2 POP2
+@clamp-selection ( -- )
+
+ .selection/x1 LDZ HOR #01 - STHk < ,&ok-limitx1 JCN
+ STHkr .selection/x1 STZ &ok-limitx1 POPr
+ .selection/y1 LDZ VER #01 - STHk < ,&ok-limity1 JCN
+ STHkr .selection/y1 STZ &ok-limity1 POPr
+ .selection/x2 LDZ HOR #01 - STHk < ,&ok-limitx2 JCN
+ STHkr .selection/x2 STZ &ok-limitx2 POPr
+ .selection/y2 LDZ VER #01 - STHk < ,&ok-limity2 JCN
+ STHkr .selection/y2 STZ &ok-limity2 POPr
+ .selection/x2 LDZ .selection/x1 LDZ STHk > ,&ok-flipx JCN
+ STHkr .selection/x2 STZ &ok-flipx POPr
+ .selection/y2 LDZ .selection/y1 LDZ STHk > ,&ok-flipy JCN
+ STHkr .selection/y2 STZ &ok-flipy POPr
RTN
+( file )
+
@new-file ( default* -- )
BANK LENGTH ;op-clear JSR2
@@ 1130,14 1195,11 @@ RTN
( theme )
-@theme-txt ".theme $1
-
@load-theme ( -- )
- ;theme-txt .File/name DEO2
+ ;&path .File/name DEO2
#0006 .File/length DEO2
#fffa .File/load DEO2
-
.File/success DEI2 #0006 !! ,&ignore JCN
#fffa LDA2 .System/r DEO2
#fffc LDA2 .System/g DEO2
@@ 1146,13 1208,14 @@ RTN
;redraw JSR2
RTN
+ &path ".theme $1
@save-theme ( -- )
.System/r DEI2 #fffa STA2
.System/g DEI2 #fffc STA2
.System/b DEI2 #fffe STA2
- ;theme-txt .File/name DEO2
+ ;load-theme/path .File/name DEO2
#0006 .File/length DEO2
#fffa .File/save DEO2
@@ 1177,30 1240,60 @@ RTN
RTN
+@line-rect ( x1* y1* x2* y2* color -- )
+
+ ( load ) .color STZ DUP2 STH2 .rect/y2 STZ2 .rect/x2 STZ2 DUP2 STH2 .rect/y1 STZ2 .rect/x1 STZ2
+ STH2r STH2r
+ &ver
+ ( save ) OVR2 .Screen/y DEO2
+ ( draw ) .rect/x1 LDZ2 .Screen/x DEO2 .color LDZ DUP .Screen/pixel DEO
+ ( draw ) .rect/x2 LDZ2 .Screen/x DEO2 .Screen/pixel DEO
+ ( incr ) INCR2
+ OVR2 OVR2 LTS2 ,&ver JCN
+ POP2 POP2
+ .rect/x1 LDZ2 .rect/x2 LDZ2
+ &hor
+ ( save ) OVR2 .Screen/x DEO2
+ ( draw ) .rect/y1 LDZ2 .Screen/y DEO2 .color LDZ DUP .Screen/pixel DEO
+ ( draw ) .rect/y2 LDZ2 .Screen/y DEO2 .Screen/pixel DEO
+ ( incr ) INCR2
+ OVR2 OVR2 #0001 ++ LTS2 ,&hor JCN
+ POP2 POP2
+
+RTN
+
@line-hor ( x0* x1* y* color -- )
- STH .Screen/y DEO2
+ STH .Screen/y DEO2 SWP2
&loop
- ( save ) OVR2 .Screen/x DEO2
+ ( save ) DUP2 .Screen/x DEO2
( draw ) STHkr .Screen/pixel DEO
- ( incr ) SWP2 #0002 ++ SWP2
- LTH2k ,&loop JCN
+ #0002 ++ GTH2k ,&loop JCN
POP2 POP2 POPr
RTN
@line-ver ( x* y0* y1* color -- )
- STH ROT2 .Screen/x DEO2
+ STH ROT2 .Screen/x DEO2 SWP2
&loop
- ( save ) OVR2 .Screen/y DEO2
+ ( save ) DUP2 .Screen/y DEO2
( draw ) STHkr .Screen/pixel DEO
- ( incr ) SWP2 #0002 ++ SWP2
- LTH2k ,&loop JCN
+ #0002 ++ GTH2k ,&loop JCN
POP2 POP2 POPr
RTN
+@print-hex ( value -- )
+
+ STHk #04 SFT ,&parse JSR .Console/write DEO
+ STHr #0f AND ,&parse JSR .Console/write DEO
+ RTN
+ &parse ( value -- char )
+ DUP #09 GTH ,&above JCN #30 ADD RTN &above #09 SUB #60 ADD RTN
+
+RTN
+
@tool-brush e0d0 8844 2212 0c00
@tool-selector 80c0 e0f0 f8e0 1000