~rabbits/orca-toy

af233b87a2b849cf59a1c3dafce234fa8b8c1322 — neauoire 1 year, 7 months ago 1082862
Minor optimizations
1 files changed, 37 insertions(+), 39 deletions(-)

M src/main.tal
M src/main.tal => src/main.tal +37 -39
@@ 40,7 40,10 @@
%DEBUG  { ;print-hex JSR2 #0a .Console/write DEO }
%DEBUG2 { SWP ;print-hex JSR2 ;print-hex JSR2 #0a .Console/write DEO }

%8** { #30 SFT2 }    %8// { #03 SFT2 }
%10** { #40 SFT2 }   %10// { #04 SFT2 }
%8**  { #30 SFT2 }   %8// { #03 SFT2 }
%4**  { #20 SFT2 }   %4// { #02 SFT2 }
%2**  { #10 SFT2 }   %2// { #01 SFT2 }
%TOB  { SWP POP }    %TOS  { #00 SWP }
%MOD  { DUP2 / * - } %MOD2 { OVR2 OVR2 // ** -- } 



@@ 74,7 77,7 @@
%GET-CHAR  { #24 MOD #00 SWP ;b36clc ++ LDA } ( b36 -- char )
%GET-VALUE { #20 - #00 SWP ;values ++ LDA } ( char -- b36 )
%GET-NOTE  { DUP GET-VALUE SWP CIUC #24 * + TOS ;lc-notes ++ LDA } ( char -- midi )
%GET-CHAR-ADDR { #20 - TOS #0010 ** ;font ++ }
%GET-CHAR-ADDR { #20 - TOS 10** ;font ++ }

%GET-CELL  { GET-INDEX DATA-CELLS ++ LDA } ( x y -- char )
%SET-CELL  { ROT ROT GET-INDEX DATA-CELLS ++ STA } ( x y char -- )


@@ 170,12 173,12 @@
	( set grid size )
	.Screen/width DEI2 
		DUP2 8// TOB #03 - .grid/width STZ
		DUP2 #0002 // .grid/width LDZ #02 / #01 + TOS 8** -- #0004 ++ .grid/x1 STZ2
		#0002 // .grid/width LDZ #02 / TOS 8** ++ #0002 ++ .grid/x2 STZ2
		DUP2 2// .grid/width LDZ #02 / #01 + TOS 8** -- #0004 ++ .grid/x1 STZ2
		2// .grid/width LDZ #02 / TOS 8** ++ #0002 ++ .grid/x2 STZ2
	.Screen/height DEI2 
		DUP2 #0010 // TOB #03 - .grid/height STZ
		DUP2 #0002 // .grid/height LDZ #02 / #01 + TOS #0010 ** -- #0004 -- .grid/y1 STZ2
		#0002 // .grid/height LDZ #02 / TOS #0010 ** ++ #0008 -- .grid/y2 STZ2
		DUP2 10// TOB #03 - .grid/height STZ
		DUP2 2// .grid/height LDZ #02 / #01 + TOS 10** -- #0004 -- .grid/y1 STZ2
		2// .grid/height LDZ #02 / TOS 10** ++ #0008 -- .grid/y2 STZ2

	( adjust for small sizes )
	.Screen/width DEI2 #0100 >> ,&hor-skip JCN


@@ 433,7 436,7 @@ BRK
	#41 [ .Mouse/state DEI #00 ! #02 * ] + .Screen/sprite DEO 

	( route )
	.Mouse/y DEI2 .toolbar/y1 LDZ2 -- #0010 // #0000 == 
	.Mouse/y DEI2 .toolbar/y1 LDZ2 -- 10// #0000 == 
		;on-mouse-toolbar JCN2
	.Mouse/x DEI2 .Mouse/y DEI2 .grid ;within-rect JSR2
		;on-mouse-grid JCN2


@@ 449,14 452,14 @@ BRK
		DUP2 #0100 !! ,&no-down JCN
			.Mouse/x DEI2 .grid/x1 LDZ2 -- 8// TOB 
				DUP .selection/x1 STZ .selection/x2 STZ
			.Mouse/y DEI2 .grid/y1 LDZ2 -- #0010 // TOB 
			.Mouse/y DEI2 .grid/y1 LDZ2 -- 10// TOB 
				DUP .selection/y1 STZ .selection/y2 STZ
			;clamp-selection JSR2 ;redraw JSR2
			,&end JMP 
			&no-down
		( release )
		.Mouse/x DEI2 .grid/x1 LDZ2 -- 8// TOB .selection/x2 STZ
		.Mouse/y DEI2 .grid/y1 LDZ2 -- #0010 // TOB .selection/y2 STZ
		.Mouse/y DEI2 .grid/y1 LDZ2 -- 10// TOB .selection/y2 STZ
		;clamp-selection JSR2 ;redraw JSR2
	&end
	POP2


@@ 654,15 657,14 @@ RTN
	( get x ) DUP2 [ SWP #03 - SWP ] GET-PORT-LEFT STH
	( get y ) DUP2 [ SWP #02 - SWP ] GET-PORT-LEFT STH
	( get len ) DUP2 [ SWP #01 - SWP ] GET-PORT-LEFT 1MIN
	#00 SWP
	#00 
	&loop
		( x+i+1,y ) OVR STH OVR2 STHr ROT + #01 + SWP
		( x+i+1,y ) DUP STH OVR2 STHr ROT + #01 + SWP
		DUP2 GET-PORT-RIGHT-RAW STH
		( unstash x,y ) ROTr STHkr ROTr STHkr ROTr
		( x0+x1-1,y0+y1+1 ) ROT + STH + #01 - STHr #01 +
		STHr SET-PORT-OUTPUT
		SWP #01 + SWP
		LTHk ;&loop JCN2
		#01 + GTHk ;&loop JCN2
	POP2
	( clean ) POP2 POP2r



@@ 703,9 705,9 @@ RTN

	POP
	( get len ) DUP2 [ SWP #01 - SWP ] GET-PORT-LEFT 1MIN
	#00 SWP 
	#00 
	&loop
		( x+i+1,y ) OVR STH OVR2 STHr ROT + #01 + SWP
		( x+i+1,y ) DUP STH OVR2 STHr ROT + #01 + SWP
		( get variable ) DUP2 GET-PORT-RIGHT 
		DUP #00 = ,&skip JCN
			.variables + LDZ STH


@@ 714,8 716,7 @@ RTN
			STHr
			&skip
		POP POP2
		SWP #01 + SWP
		LTHk ;&loop JCN2
		#01 + GTHk ;&loop JCN2
	POP2
	POP2
	


@@ 776,13 777,12 @@ RTN
	( get key ) DUP2 [ SWP #02 - SWP ] GET-PORT-LEFT STH
	( get len ) DUP2 [ SWP #01 - SWP ] GET-PORT-LEFT 1MIN STH
	( get input ) DUP2 [ SWP #01 + SWP ] GET-PORT-RIGHT-RAW STH
	#00 OVRr STHr
	OVRr STHr #00
	&loop
		( x+i+1,y ) OVR STH OVR2 STHr ROT + SWP #01 +
		( x+i+1,y ) DUP STH OVR2 STHr ROT + SWP #01 +
		( lock ) DUP2 #01 SET-LOCK
		( type ) LOCKED-TYPE SET-TYPE
		SWP #01 + SWP
		LTHk ,&loop JCN
		#01 + GTHk ,&loop JCN
	POP2
	( write )
	( x-offset ) ROTr ROTr STH2r MOD


@@ 797,16 797,16 @@ RTN
	( get x ) DUP2 [ SWP #03 - SWP ] GET-PORT-LEFT STH
	( get y ) DUP2 [ SWP #02 - SWP ] GET-PORT-LEFT STH
	( get len ) DUP2 [ SWP #01 - SWP ] GET-PORT-LEFT 1MIN
	#00 SWP
	#00
	&loop
		( x+i+1,y ) OVR STH OVR2 STHr ROT + #01 + SWP
		( x+i+1,y ) DUP STH OVR2 STHr ROT + #01 + SWP
		( x+x0,y+y0 ) STHkr + SWP OVRr STHr + SWP
		GET-PORT-RIGHT-RAW STH
		( x-i-len ) DUP2 SWP - STH 
		( x-i-len ) DUP2  - STH 
		( x,y ) OVR2 SWP STHr - #01 + SWP #01 +
		STHr SET-PORT-OUTPUT
		SWP #01 + SWP
		LTHk ;&loop JCN2
		 #01 + 
		GTHk ;&loop JCN2
	POP2
	( clean ) POP2 POP2r
	


@@ 847,14 847,13 @@ RTN

	POP
	( get key ) DUP2 [ SWP #02 - SWP ] GET-PORT-LEFT STH
	( get len ) DUP2 [ SWP #01 - SWP ] GET-PORT-LEFT 1MIN STH
	#00 STHkr
	( get len ) DUP2 [ SWP #01 - SWP ] GET-PORT-LEFT 1MIN STHk
	#00
	&loop
		( x+i+1,y ) OVR STH OVR2 STHr ROT + #01 + SWP
		( x+i+1,y ) DUP STH OVR2 STHr ROT + #01 + SWP
		( lock ) DUP2 #01 SET-LOCK 
		( type ) LOCKED-TYPE SET-TYPE
		SWP #01 + SWP
		LTHk ,&loop JCN
		#01 + GTHk ,&loop JCN
	POP2
	( read )
	( x-offset ) DUP2 SWP #01 + SWP STH2r MOD ROT + SWP 


@@ 1127,7 1126,7 @@ RTN
	
	.grid/height LDZ #00
	&ver
		( pos-y ) DUP #00 SWP #0010 ** [ .grid/y1 LDZ2 ++ ] .Screen/y DEO2
		( pos-y ) DUP #00 SWP 10** [ .grid/y1 LDZ2 ++ ] .Screen/y DEO2
		.grid/width LDZ #00
		&hor
			( pos-x ) DUP #00 SWP 8** [ .grid/x1 LDZ2 ++ ] .Screen/x DEO2


@@ 1169,7 1168,7 @@ RTN
	.selection/y1 LDZ #01 ;draw-byte JSR2

	.grid/x1 LDZ2 #0020 ++ .Screen/x DEO2
	;selection-icns .selection/insert LDZ TOS #0008 ** ++ .Screen/addr DEO2
	;selection-icns .selection/insert LDZ TOS 8** ++ .Screen/addr DEO2
	#02 .selection/x1 LDZ .selection/y1 LDZ .selection/x2 LDZ .selection/y2 LDZ == + .Screen/sprite DEO

	( Frame )


@@ 1255,7 1254,7 @@ RTN
	.toolbar/x1 LDZ2 #0080 ++ .Screen/x DEO2
	;path/name
	&while
		DUP2 LDA GET-CHAR-ADDR STHkr ;draw-char JSR2
		LDAk GET-CHAR-ADDR STHkr ;draw-char JSR2
		.Screen/x DEI2 #0008 ++ .Screen/x DEO2
		#0001 ++ LDAk ,&while JCN
	POP2


@@ 1290,9 1289,9 @@ RTN
	DATA-FILE .File/load DEO2 
	( setup )
	( TODO: Stop at #00 instead of fixed length )
	#0000 #1000
	#1000 #0000
	&loop
		( get char ) OVR2 DATA-FILE ++ LDA
		( get char ) DUP2 DATA-FILE ++ LDA
		DUP CHAR-NULL = ,&end JCN
		DUP CHAR-LINE = ,&linebreak JCN
			( write  ) STH ,&x LDR ,&y LDR STHr SET-CELL


@@ 1303,8 1302,7 @@ RTN
			( incr y ) ,&y LDR #01 + ,&y STR
			POP
		&continue
		( incr ) SWP2 #0001 ++ SWP2
		LTH2k ,&loop JCN
		#0001 ++ GTH2k ,&loop JCN
	&end
	POP2 POP2 POP
	#00 ,&x STR