~rabbits/nasu

165ef2a8aa18637345ec4d90001adbc3b1537ca6 — neauoire 1 year, 2 months ago ee8dc67
Fixed issue with long filepaths
7 files changed, 202 insertions(+), 162 deletions(-)

D .clang-format
M .gitignore
M README.md
A ako10x10.chr
M build.sh
M src/main.tal
A src/utils.tal
D .clang-format => .clang-format +0 -21
@@ 1,21 0,0 @@
AlignAfterOpenBracket: DontAlign
AlignEscapedNewlines: DontAlign
AlignOperands: DontAlign
AllowShortBlocksOnASingleLine: Always
AllowShortCaseLabelsOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: TopLevel
BinPackArguments: false
BinPackParameters: false
BreakBeforeBraces: WebKit
IndentCaseLabels: false
TabWidth: 4
IndentWidth: 4
ContinuationIndentWidth: 4
UseTab: ForContinuationAndIndentation
ColumnLimit: 0
ReflowComments: false
SortIncludes: false
SpaceBeforeParens: false
\ No newline at end of file

M .gitignore => .gitignore +0 -1
@@ 3,7 3,6 @@
*png
*bmp
/bin
*.chr
*snarf
*theme
*nametable
\ No newline at end of file

M README.md => README.md +0 -1
@@ 19,7 19,6 @@ uxnasm src/main.tal bin/nasu.rom && uxnemu bin/nasu.rom
- `right-click`, remove pixel
- `1 2 3`, select color
- `q w e`, select tool
- `ctrl+p`, export [theme file](https://wiki.xxiivv.com/theme)
- `ctrl+n`, clear
- `ctrl+r`, rename
- `ctrl+o`, load

A ako10x10.chr => ako10x10.chr +0 -0
M build.sh => build.sh +1 -1
@@ 21,4 21,4 @@ then
fi

echo "Running.."
uxnemu bin/nasu.rom
uxnemu bin/nasu.rom ako10x10.chr

M src/main.tal => src/main.tal +148 -138
@@ 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

A src/utils.tal => src/utils.tal +53 -0
@@ 0,0 1,53 @@

( generics )

%+  { ADD }  %-  { SUB }  %*  { MUL }  %/  { DIV }
%<  { LTH }  %>  { GTH }  %=  { EQU }  %!  { NEQ }
%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }

%=~ { EQUk NIP } %!~ { NEQk NIP }
%<~ { LTHk NIP } %>~ { GTHk NIP }

%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 } %40/ { #06 SFT } %40** { #60 SFT2 } %60// { #05 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 }

%EMIT   { #18 DEO }
%PRINT  { ;print-str JSR2 #0a EMIT }
%DEBUG  { ;print-hex/byte JSR2 #0a EMIT }
%DEBUG2 { ;print-hex JSR2 #0a EMIT }

%IS-VALID { DUP #1f > SWP #7f < AND }
%IS-UC { DUP #40 > SWP #5b < AND }
%IS-LC { DUP #60 > SWP #7b < AND }
%IS-NUM { DUP #2f > SWP #3a < AND }
%IS-PUNC { DUP #2b > SWP #30 < AND }
%IS-SPACER   { #21 < } ( char -- flag )
%IS-LABEL    { STHk #40 = STHr #26 = ORA } ( char -- flag )
%NOT-LINEBREAK { STHk #0d ! STHr #0a ! AND } ( char -- flag )

%TOGGLE { LDZk #00 = SWP STZ }
%TOS { #00 SWP }
%RTN { JMP2r }

%MIN2 { GTH2k JMP SWP2 POP2 }
%MAX2 { LTH2k JMP SWP2 POP2 }
%ROL { DUP #07 SFT SWP #10 SFT + }
%ROR { DUP #70 SFT SWP #01 SFT + }

%RELEASE-MOUSE { #0096 DEO }

%AUTO-NONE { #00 .Screen/auto DEO }
%AUTO-X { #01 .Screen/auto DEO }
%AUTO-Y { #02 .Screen/auto DEO }
%AUTO-ADDR { #04 .Screen/auto DEO }
%AUTO-Y-ADDR { #06 .Screen/auto DEO }