@@ 1,4 1,4 @@
-(
+(
app/nasu : spritesheet editor
arrows - move selection
@@ 17,77 17,30 @@
ctrl+v - paste
)
-%+ { ADD } %- { SUB } %* { MUL } %/ { DIV }
-%< { LTH } %> { GTH } %= { EQU } %! { NEQ }
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
-
-%2* { #10 SFT } %2/ { #01 SFT } %2** { #10 SFT2 } %2// { #01 SFT2 }
-%4* { #20 SFT } %4/ { #02 SFT } %4** { #20 SFT2 } %4// { #02 SFT2 }
-%8* { #30 SFT } %8/ { #03 SFT } %8** { #30 SFT2 } %8// { #03 SFT2 }
-%10* { #40 SFT } %10/ { #04 SFT } %10** { #40 SFT2 } %10// { #04 SFT2 }
-%20* { #50 SFT } %20/ { #05 SFT } %20** { #50 SFT2 } %20// { #05 SFT2 }
-
-%40* { #60 SFT }
-%80* { #70 SFT }
-
-%80** { #70 SFT2 }
-%100** { #80 SFT2 }
-%200** { #90 SFT2 }
-
-%2MOD { #01 AND } %2MOD2 { #0001 AND2 }
-%4MOD { #03 AND } %4MOD2 { #0003 AND2 }
-%8MOD { #07 AND } %8MOD2 { #0007 AND2 }
-%10MOD { #0f AND } %10MOD2 { #000f AND2 }
-
-%20MOD { #1f AND }
-%100MOD2 { #00ff AND2 }
-%TOS { #00 SWP }
-
-%STEP8 { #33 SFT2 }
-
-%!~ { NEQk NIP }
-
-%DEBUG { ;print-hex/byte JSR2 #0a #18 DEO }
-%DEBUG2 { ;print-hex JSR2 #0a #18 DEO }
-
-%RTN { JMP2r }
-%SFL { #40 SFT SFT }
-%GTS2 { #8000 ++ SWP2 #8000 ++ << }
-%TOGGLE { LDZk #00 = SWP STZ }
-%GET-ITER { OVR2 NIP OVR SWP }
-%BRK? { #01 JCN BRK }
-%SWP? { #01 JCN SWP }
-
-%ROL { DUP #07 SFT SWP #10 SFT + }
-%ROR { DUP #70 SFT SWP #01 SFT + }
-
-%AUTO-X { #01 .Screen/auto DEO }
-%AUTO-NONE { #00 .Screen/auto DEO }
+~src/utils.tal
( defines )
%HOR { #10 } %VER { #10 }
%LENGTH { #1000 }
-(
- 8000-9000 : spritesheet
- 9000-9100 : tile
- 9100-9200 : color )
-
+%DATA-CLIP { #6000 }
%BANK-SPRITESHEET { #8000 }
%BANK-NAMETABLE { #9000 }
%BANK-COLOR { #9100 }
-( todo )
+%STEP8 { #33 SFT2 }
+%80** { #70 SFT2 }
+%100** { #80 SFT2 }
+%200** { #90 SFT2 }
-%DATA-CLIP { #6000 }
+%100MOD2 { #00ff AND2 }
+%GET-ITER { OVR2 NIP OVR SWP }
%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-SPRITESHEET -- DUP2 2// 100MOD2 SWP2 #0080 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 10** ROT TOS ++ 10** BANK-SPRITESHEET ++ } ( x y -- addr* )
@@ 132,7 85,7 @@
&x2 $1 &y2 $1
&a $1
@path
- &length $1 &name $20
+ &name $20 ( ext ) $4
@frame
&x1 $2 &y1 $2
&x2 $2 &y2 $2
@@ 211,31 164,32 @@
.zoomview/x2 LDZ2 INC2 .zoomview-frame/x2 STZ2
.zoomview/y2 LDZ2 #0007 -- .zoomview-frame/y2 STZ2
- ;untitled-txt ;new-file JSR2
+ ;new-file JSR2
;load-theme JSR2
BRK
-@on-console ( -- )
+@on-console ( -> )
- #00 ;draw-filepath JSR2
- .Console/read DEI DUP
- #0a = ,&counter LDR #20 = #0000 == ,&no-end JCN
- ( set length ) ,&counter LDR .path/length STZ
- ( null char ) #00 .path ,&counter LDR INC + STZ
- ( reset counter ) #00 ,&counter STR
- ( load ) ;load-file JSR2
- POP BRK
- &no-end
- ,&counter LDR
- ( length ) DUP .path/length STZ
- INC
- ( inc counter ) DUP ,&counter STR
- ( write ) .path + STZ
+ ( starting )
+ ;&trap LDA ,&started JCN
+ #00 ;draw-filepath JSR2
+ ;path/name #0020 ;mclr JSR2
+ #01 ,&trap STR
+ &started
+ ( append )
+ .Console/read DEI #20 < ,&validate JCN
+ ;path/name ;slen JSR2 #0020 == ,&validate JCN
+ ;path/name .Console/read DEI ;sput JSR2
+ BRK
+ &validate
+ ( validate )
+ ;load-file JSR2
#01 ;draw-filepath JSR2
+ #00 ,&trap STR
BRK
- &counter $1
+ &trap $1
@on-frame ( -> )
( inactive )
@@ 261,7 215,7 @@ BRK
@on-button ( -> )
- .Controller/key DEI .Controller/button DEI ADD BRK?
+ .Controller/button DEI2 #0000 !! [ JMP BRK ]
.Controller/button DEI #01 AND ;on-control JCN2
@@ 344,17 298,14 @@ BRK
&no-name
DUP [ LIT 'R ] ! ,&no-rename JCN
#00 ;draw-filepath JSR2
- #00 .Controller/key DEO
- #00 .path/length STZ
- #0000 .path/name STZ2
+ ;path/name #0020 ;mclr JSR2
;on-frame-trap .Screen/vector DEO2
;on-button-trap .Controller/vector DEO2
POP BRK
&no-rename
DUP [ LIT 'n ] ! ,&no-new JCN
- #25 ;draw-filepath JSR2
- ;untitled-txt ;new-file JSR2
- ;redraw JSR2 POP BRK &no-new
+ ;new-file JSR2
+ POP BRK &no-new
DUP [ LIT 'o ] ! ,&no-open JCN
;load-file JSR2
POP BRK &no-open
@@ 372,23 323,22 @@ BRK
DUP ,&continue JCN
POP BRK
&continue
- DUP ( backspace ) #08 ! ,&no-edit-backspace JCN
- ( clamp ) .path/length LDZ #00 = ,&edit-end JCN
+ ( backspace ) #08 !~ ,&no-edit-backspace JCN
+ ( clamp ) ;path/name ;slen JSR2 NIP #00 = ,&edit-end JCN
#00 ;draw-filepath JSR2
- .path/length LDZ #01 - STHk .path/length STZ
- #00 .path/name STHr + STZ
- #01 ;draw-filepath JSR2 POP BRK
+ ;path/name ;spop JSR2
+ #01 ;draw-filepath JSR2
+ POP BRK
&no-edit-backspace
- DUP ( special ) #20 > ,&no-edit-enter JCN
+ ( special ) #20 >~ ,&no-edit-enter JCN
;on-frame .Screen/vector DEO2
;on-button .Controller/vector DEO2
#00 .state/blink STZ
- #01 ;draw-filepath JSR2 POP BRK
+ #01 ;draw-filepath JSR2
+ POP BRK
&no-edit-enter
- ( clamp ) .path/length LDZ #1f = ,&edit-end JCN
- DUP .path/name .path/length LDZ STHk + STZ
- STHr INC STHk .path/length STZ
- #00 .path/name STHr + STZ
+ ( append ) ;path/name ;slen JSR2 NIP #1f = ,&edit-end JCN
+ DUP ;path/name ROT ;sput JSR2
#01 ;draw-filepath JSR2
&edit-end
POP
@@ 423,7 373,7 @@ BRK
.settings/zoom LDZ #01 = ;&zoomed JCN2
.settings/tool LDZ #01 = ;&select JCN2
- ( skip ) .Mouse/state DEI #00 ! BRK?
+ ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ]
.Mouse/x DEI2 .tileview/x1 LDZ2 --
.Mouse/y DEI2 .tileview/y1 LDZ2 --
@@ 484,7 434,7 @@ BRK
&zoomed ( -> )
- ( skip ) .Mouse/state DEI #00 ! BRK?
+ ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ]
.Mouse/x DEI2 .tileview/x1 LDZ2 --
.Mouse/y DEI2 .tileview/y1 LDZ2 --
@@ 501,7 451,7 @@ BRK
@on-touch-nametable ( -> )
- ( skip ) .Mouse/state DEI #00 ! BRK?
+ ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ]
( get touch tile )
.Mouse/y DEI2 .nametable/y LDZ2 -- 8// 10**
@@ 532,7 482,7 @@ BRK
@on-touch-toolview ( -> )
- ( skip ) .Mouse/state DEI #00 ! BRK?
+ ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ]
.Mouse/x DEI2 .toolview/x1 LDZ2 -- 8// NIP
DUP #1f ! ,&no-save JCN
@@ 545,9 495,7 @@ BRK
POP RELEASE-MOUSE BRK
&no-load
DUP #1c ! ,&no-name JCN
- #00 ;draw-filepath JSR2
- ;untitled-txt ;new-file JSR2
- ;redraw JSR2
+ ;new-file JSR2
POP RELEASE-MOUSE BRK
&no-name
DUP #04 ! ,&no-brush JCN
@@ 590,7 538,7 @@ BRK
@on-touch-zoomview ( -> )
- ( skip ) .Mouse/state DEI #00 ! BRK?
+ ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ]
.Mouse/y DEI2 .zoomview/y1 LDZ2 -- 8// NIP #04 ! ;&no-mod JCN2
.Mouse/x DEI2 .zoomview/x1 LDZ2 -- 8// NIP
@@ 633,7 581,7 @@ BRK
@on-touch-blendview ( -> )
- ( skip ) .Mouse/state DEI #00 ! BRK?
+ ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ]
.Mouse/x DEI2 .blendview/x1 LDZ2 -- 8// NIP
.Mouse/y DEI2 .blendview/y1 LDZ2 -- 8// NIP 4* +
@@ 655,7 603,7 @@ BRK
@on-touch-colorview ( -> )
- ( skip ) .Mouse/state DEI #00 ! BRK?
+ ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ]
.Mouse/y DEI2 .colorview/y1 LDZ2 -- 8// NIP
@@ 691,7 639,7 @@ BRK
@on-touch-preview ( -> )
- ( skip ) .Mouse/state DEI #00 ! BRK?
+ ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ]
( y ) .Mouse/y DEI2 .preview/y1 LDZ2 -- 8// NIP
( x ) .Mouse/x DEI2 .preview/x1 LDZ2 -- 8// NIP
@@ 875,16 823,6 @@ RTN
RTN
-@clear ( addr* length* -- )
-
- OVR2 ++ SWP2
- &loop
- DUP2 #00 ROT ROT STA
- INC2 NEQ2k ,&loop JCN
- POP2 POP2
-
-RTN
-
@redraw ( -- )
;draw-toolview JSR2
@@ 1026,11 964,11 @@ RTN
STH SWP2 NIP
STHr SWP
STH2r SFT #01 AND ,&do-set JCN
- ( mask ) #01 #07 ROT 8MOD - SFL #ff EOR AND
+ ( mask ) #01 #07 ROT 8MOD - #40 SFT SFT #ff EOR AND
( save ) ROT ROT STA
RTN
&do-set
- ( mask ) #01 #07 ROT 8MOD - SFL ORA
+ ( mask ) #01 #07 ROT 8MOD - #40 SFT SFT ORA
( save ) ROT ROT STA
RTN
@@ 1282,14 1220,21 @@ RTN
STH
.toolview/x1 LDZ2 #0040 ++ .Screen/x DEO2
.toolview/y1 LDZ2 .Screen/y DEO2
- ;path/name
+ AUTO-X
+ ;path/name
+
+
+ DUP2 ;slen JSR2 #0013 >> TOS
+ ;path/name ;slen JSR2 #0013 -- ** ++
+
+
+
&loop
- LDAk DUP #00 ! 20* - TOS 8** ;font ++ .Screen/addr DEO2
+ LDAk #20 - TOS 8** ;font ++ .Screen/addr DEO2
STHkr .Screen/sprite DEO
- .Screen/x DEI2 #0008 ++ .Screen/x DEO2
- INC2
- LDAk #00 ! ,&loop JCN
+ INC2 LDAk ,&loop JCN
POP2
+ AUTO-NONE
POPr
( clear last )
#00 .Screen/sprite DEO
@@ 1301,7 1246,7 @@ RTN
.toolview/x2 LDZ2 #0008 -- .Screen/x DEO2
.toolview/y1 LDZ2 .Screen/y DEO2
;save-icn .Screen/addr DEO2
- #0f05 .state/changed LDZ SWP? POP .Screen/sprite DEO
+ #0f05 .state/changed LDZ #01 JCN SWP POP .Screen/sprite DEO
RTN
@@ 1327,28 1272,26 @@ RTN
( file )
-@new-file ( default* -- )
+@new-file ( -- )
+
+ #00 ;draw-filepath JSR2
- BANK-SPRITESHEET LENGTH ;clear JSR2
- BANK-NAMETABLE #0200 ;clear JSR2
+ BANK-SPRITESHEET LENGTH ;mclr JSR2
+ BANK-NAMETABLE #0200 ;mclr JSR2
+
+ ( rename to untitled.txt )
+ ;path/name #0020 ;mclr JSR2
+ ;untitled-txt ;path/name #000c ;mcpy JSR2
- STH2
- #0c #00
- &loop
- DUPk TOS STH2kr ++ LDA
- SWP .path/name + STZ
- INC GTHk ,&loop JCN
- ( end ) #00 SWP .path/name + STZ
- .path/length STZ
- POP2r
RESET-STATE
+ ;redraw JSR2
RTN
@load-file ( -- )
- BANK-SPRITESHEET LENGTH ;clear JSR2
- BANK-NAMETABLE #0200 ;clear JSR2
+ BANK-SPRITESHEET LENGTH ;mclr JSR2
+ BANK-NAMETABLE #0200 ;mclr JSR2
( spritesheet )
;path/name .File/name DEO2
@@ 1356,9 1299,11 @@ RTN
BANK-SPRITESHEET .File/load DEO2
( nametable )
- ;nametable-txt .File/name DEO2
+ ( append ) ;nametable-ext ;path/name ;scap JSR2 #0004 ;mcpy JSR2
+ ;path/name .File/name DEO2
#0200 .File/length DEO2
BANK-NAMETABLE .File/load DEO2
+ ( remove ) ;path/name ;scap JSR2 #0004 -- #0004 ;mclr JSR2
RESET-STATE
;redraw JSR2
@@ 1373,9 1318,11 @@ RTN
BANK-SPRITESHEET .File/save DEO2
( nametable )
- ;nametable-txt .File/name DEO2
+ ( append ) ;nametable-ext ;path/name ;scap JSR2 #0004 ;mcpy JSR2
+ ;path/name .File/name DEO2
#0200 .File/length DEO2
BANK-NAMETABLE .File/save DEO2
+ ( remove ) ;path/name ;scap JSR2 #0004 -- #0004 ;mclr JSR2
RESET-STATE
@@ 1532,6 1479,69 @@ RTN
RTN
+( memory generics )
+
+@mclr ( addr* len* -- )
+
+ OVR2 ++ SWP2
+ &loop
+ STH2k #00 STH2r STA
+ INC2 GTH2k ,&loop JCN
+ POP2 POP2
+
+RTN
+
+@mcpy ( src* dst* len* -- )
+
+ SWP2 STH2 SWP2 STH2
+ #0000
+ &loop
+ ( src ) STH2kr LDA
+ ( dst ) OVR2r STH2r STA
+ ( inc ) INC2r SWP2r INC2r SWP2r
+ INC2 GTH2k ,&loop JCN
+ POP2 POP2
+ POP2r POP2r
+
+RTN
+
+( string generics )
+
+@slen ( str* -- len* )
+
+ DUP2 ,scap JSR SWP2 --
+
+RTN
+
+@scap ( str* -- str-end* )
+
+ ( clamp ) LDAk #00 ! JMP RTN
+ &while INC2 LDAk ,&while JCN
+
+RTN
+
+@sput ( str* char -- )
+
+ ROT ROT ,scap JSR STA
+
+RTN
+
+@spop ( str* -- )
+
+ ( clamp ) LDAk #00 ! JMP RTN
+ #00 ROT ROT ,scap JSR #0001 -- STA
+
+RTN
+
+@print-str ( string* -- )
+
+ #0001 SUB2
+ &while
+ INC2 LDAk DUP #18 DEO ,&while JCN
+ POP2
+
+RTN
+
@print-hex ( value* -- )
SWP ,&byte JSR
@@ 1544,8 1554,8 @@ RTN
RTN
-@nametable-txt "nametable $1
@untitled-txt "untitled.chr $1
+@nametable-ext ".tbl $1
@tool-brush e0d0 8844 2212 0c00
@tool-selector 80c0 e0f0 f8e0 1000