~rabbits/nasu

fba62a0704dc79315c0020fd7550f797ad529e8d — neauoire 1 year, 7 months ago c9e0c80
Starting optimization pass
2 files changed, 189 insertions(+), 95 deletions(-)

M .gitignore
M src/main.tal
M .gitignore => .gitignore +2 -1
@@ 3,5 3,6 @@
*png
*bmp
/bin
*.chr
*snarf
*.chr
\ No newline at end of file
*theme
\ No newline at end of file

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