@@ 21,6 21,7 @@
%< { LTH } %> { GTH } %= { EQU } %! { NEQ }
%++ { ADD2 } %-- { SUB2 }
%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
+%!~ { NEQk NIP }
%DEBUG { ;print-hex JSR2 #0a .Console/write DEO }
%DEBUG2 { SWP ;print-hex JSR2 ;print-hex JSR2 #0a .Console/write DEO }
@@ 43,6 44,8 @@
%2MOD { #01 AND }
%4MOD { #03 AND }
%8MOD { #07 AND }
+%10MOD { #0f AND }
+%20MOD { #1f AND }
%8MOD2 { #0007 AND2 }
%100MOD2 { #00ff AND2 }
@@ 67,12 70,13 @@
%BANK { #2000 }
%BANK-TEMP { #4000 }
+%GET-HEX-ADDR { TOS 8** ;font-hex ++ .Screen/addr DEO2 }
%GET-COLOR { .settings/color LDZ STHk 2/ + DEI #01 STHr #01 AND - 4* SFT #0f AND }
%GET-POSITION { .settings/focus LDZ2 BANK -- DUP2 2// 100MOD2 SWP2 WIDTH 2** DIV2 8** }
%ADD-POSITIONS { ROT2 ++ ROT2 ROT2 ++ SWP2 }
%RELEASE-MOUSE { #00 .Mouse/state DEO }
%RESET-SELECTION { .selection/x1 LDZ2 .selection/x2 STZ2 }
-%GET-ADDR { TOS 20** ROT TOS ++ 10** BANK ++ }
+%GET-ADDR { TOS 20** ROT TOS ++ 10** BANK ++ } ( x y -- addr* )
%SET-STATE { #01 .state/changed STZ ;draw-state JSR2 }
%RESET-STATE { #00 .state/changed STZ ;draw-state JSR2 }
@@ 239,19 243,15 @@ BRK
( release ) #00 .Controller/key DEO
- .Controller/button DEI #f0 AND
- DUP #04 SFT #01 AND #01 ! ,&no-up JCN
- ( clamp ) .settings/focus LDZ2 BANK #0020 10** ++ << ,&no-up JCN
- ( up ) .settings/focus LDZ2 #0010 20** -- .settings/focus STZ2 &no-up
- DUP #05 SFT #01 AND #01 ! ,&no-down JCN
- ( clamp ) .settings/focus LDZ2 BANK LENGTH #0020 10** -- ++ >> ,&no-down JCN
- ( down ) .settings/focus LDZ2 #0010 20** ++ .settings/focus STZ2 &no-down
- DUP #06 SFT #01 AND #01 ! ,&no-left JCN
- ( clamp ) .settings/focus LDZ2 BANK INC2 << ,&no-left JCN
- ( left ) .settings/focus LDZ2 #0010 -- .settings/focus STZ2 &no-left
- DUP #07 SFT #01 AND #01 ! ,&no-right JCN
- ( clamp ) .settings/focus LDZ2 BANK LENGTH #0020 -- ++ >> ,&no-right JCN
- ( right ) .settings/focus LDZ2 #0010 ++ .settings/focus STZ2 &no-right
+ .Controller/button DEI #04 SFT
+ [ #01 ] !~ ,&no-up JCN
+ #00 #ff ;mod-selection JSR2 POP BRK &no-up
+ [ #02 ] !~ ,&no-down JCN
+ #00 #01 ;mod-selection JSR2 POP BRK &no-down
+ [ #04 ] !~ ,&no-left JCN
+ #ff #00 ;mod-selection JSR2 POP BRK &no-left
+ [ #08 ] !~ ,&no-right JCN
+ #01 #00 ;mod-selection JSR2 POP BRK &no-right
POP
;redraw JSR2
@@ 614,6 614,27 @@ BRK
( operations )
+@mod-selection ( x y -- )
+
+ DUP
+ .selection/y2 LDZ + 10MOD .selection/y2 STZ
+ .selection/y1 LDZ + 10MOD .selection/y1 STZ
+ DUP
+ .selection/x2 LDZ + 20MOD .selection/x2 STZ
+ .selection/x1 LDZ + 20MOD .selection/x1 STZ
+ ( clamp )
+ .selection/x2 LDZ .selection/x1 LDZ GTH ,&no-x JCN
+ .selection/x1 LDZ .selection/x2 STZ
+ &no-x
+ .selection/y2 LDZ .selection/y1 LDZ GTH ,&no-y JCN
+ .selection/y1 LDZ .selection/y2 STZ
+ &no-y
+ ( focus )
+ .selection LDZ2 GET-ADDR .settings/focus STZ2
+ ;redraw JSR2
+
+RTN
+
@run-selection ( op* -- )
STH2
@@ 819,7 840,7 @@ RTN
( guides )
VER 8/ #01 - #00
&guides-hor
- DUP STH
+ STHk
.tileview/x1 LDZ2
.tileview/x2 LDZ2
.tileview/y1 LDZ2 STHr INC 40* #01 - TOS ++
@@ 830,7 851,7 @@ RTN
HOR 8/ #01 - #00
&guides-ver
- DUP STH
+ STHk
.tileview/x1 LDZ2 STHr INC 40* #01 - TOS ++
.tileview/y1 LDZ2
.tileview/y2 LDZ2
@@ 882,7 903,7 @@ RTN
@toggle-pixel ( x* addr* color* -- )
STH2
- DUP2 LDA
+ LDAk
STH SWP2 NIP
STHr SWP
STH2r SFT #01 AND ,&do-set JCN
@@ 966,8 987,8 @@ RTN
.settings/focus LDZ2 .Screen/addr DEO2
#10 #00
&loop
- DUP 4MOD #00 SWP 8** .blendview/x1 LDZ2 ++ .Screen/x DEO2
- DUP 4/ #00 SWP 8** .blendview/y1 LDZ2 ++ .Screen/y DEO2
+ DUP 4MOD TOS 8** .blendview/x1 LDZ2 ++ .Screen/x DEO2
+ DUP 4/ TOS 8** .blendview/y1 LDZ2 ++ .Screen/y DEO2
#00 .Screen/sprite DEO
DUP #00 + .settings/depth LDZ 80* + .Screen/sprite DEO
INC GTHk ,&loop JCN
@@ 1018,13 1039,13 @@ RTN
.colorview/y2 LDZ2 INC2 .Screen/y DEO2
.colorview/x1 LDZ2 .Screen/x DEO2
- .System/r GET-COLOR ;draw-short/parse JSR2 .Screen/addr DEO2
+ .System/r GET-COLOR GET-HEX-ADDR
#02 .Screen/sprite DEO
.Screen/x DEI2 #0008 ++ .Screen/x DEO2
- .System/g GET-COLOR ;draw-short/parse JSR2 .Screen/addr DEO2
+ .System/g GET-COLOR GET-HEX-ADDR
#02 .Screen/sprite DEO
.Screen/x DEI2 #0008 ++ .Screen/x DEO2
- .System/b GET-COLOR ;draw-short/parse JSR2 .Screen/addr DEO2
+ .System/b GET-COLOR GET-HEX-ADDR
#02 .Screen/sprite DEO
.colorview/x1 LDZ2 .colorview/y1 LDZ2
@@ 1159,35 1180,21 @@ RTN
RTN
@draw-short ( short* color -- )
-
- STH SWP
- DUP #04 SFT ,&parse JSR .Screen/addr DEO2
- ( draw ) STHkr .Screen/sprite DEO
- .Screen/x DEI2 #0008 ++ .Screen/x DEO2
- #0f AND ,&parse JSR .Screen/addr DEO2
- ( draw ) STHkr .Screen/sprite DEO
- .Screen/x DEI2 #0008 ++ .Screen/x DEO2
- DUP #04 SFT ,&parse JSR .Screen/addr DEO2
- ( draw ) STHkr .Screen/sprite DEO
+
+ ROT OVR ,draw-byte JSR
.Screen/x DEI2 #0008 ++ .Screen/x DEO2
- #0f AND ,&parse JSR .Screen/addr DEO2
- ( draw ) STHr .Screen/sprite DEO
- RTN
- &parse ( value -- addr* )
- DUP #09 GTH ,&above JCN
- #30 ADD #20 - TOS 8** ;font ++ RTN
- &above
- #09 SUB #40 ADD #20 - TOS 8** ;font ++ RTN
+ ,draw-byte JSR
RTN
@draw-byte ( byte color -- )
- STH
- DUP #04 SFT ,draw-short/parse JSR .Screen/addr DEO2
+ STH
+ DUP
+ #04 SFT GET-HEX-ADDR
( draw ) STHkr .Screen/sprite DEO
.Screen/x DEI2 #0008 ++ .Screen/x DEO2
- #0f AND ,draw-short/parse JSR .Screen/addr DEO2
+ #0f AND GET-HEX-ADDR
( draw ) STHr .Screen/sprite DEO
RTN
@@ 1415,6 1422,16 @@ RTN
@untitled-txt "untitled.chr $1
+@font-hex ( 0-F )
+ 007c 8282 8282 827c 0030 1010 1010 1010
+ 007c 8202 7c80 80fe 007c 8202 1c02 827c
+ 000c 1424 4484 fe04 00fe 8080 7c02 827c
+ 007c 8280 fc82 827c 007c 8202 1e02 0202
+ 007c 8282 7c82 827c 007c 8282 7e02 827c
+ 007c 8202 7e82 827e 00fc 8282 fc82 82fc
+ 007c 8280 8080 827c 00fc 8282 8282 82fc
+ 007c 8280 f080 827c 007c 8280 f080 8080
+
@slider-icns
f0f0 f0f0 f0f0 f000 ( full )
50a0 50a0 50a0 5000 ( empty )