~rabbits/nasu

aa21593539f20aaed2392bbfe4797899931a29f3 — neauoire 1 year, 6 months ago 8bfd940
Progress on removing MUL/DIV opcodes
1 files changed, 49 insertions(+), 41 deletions(-)

M src/main.tal
M src/main.tal => src/main.tal +49 -41
@@ 17,16 17,25 @@
	ctrl+v - paste
 )

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

%DEBUG  { ;print-hex JSR2 #0a .Console/write DEO }
%DEBUG2 { SWP ;print-hex JSR2 ;print-hex JSR2 #0a .Console/write DEO }

%2**  { #10 SFT2 } %2// { #01 SFT2 }
%8**  { #30 SFT2 } %8// { #03 SFT2 }
%2*  { #10 SFT } %2/  { #01 SFT }
%4*  { #20 SFT } %4/  { #02 SFT }
%8*  { #30 SFT } %8/  { #03 SFT }
%20* { #50 SFT } 

%2**  { #10 SFT2 } %2//  { #01 SFT2 }
%4//  { #02 SFT2 }
%8**  { #30 SFT2 } %8//  { #03 SFT2 }
%10** { #40 SFT2 } 
%200// { #09 SFT2 }

%TOS  { #00 SWP }  
%MOD  { DIVk MUL SUB } %MOD2 { DIV2k MUL2 SUB2 }



@@ 35,26 44,25 @@
%ROL { DUP #07 SFT SWP #10 SFT + }
%ROR { DUP #70 SFT SWP #01 SFT + }
%SFL { #40 SFT SFT }
%LTS2 { #8000 ++ SWP2 #8000 ++ >> }
%GTS2 { #8000 ++ SWP2 #8000 ++ << }
%STEP8 { #33 SFT2 }
%TOGGLE { LDZk #00 = SWP STZ }
%GET-ITER { OVR2 NIP OVR SWP }
%BRK? { #01 JCN BRK }

%HOR    { #20 }              %VER    { #10 }
%WIDTH  { HOR TOS 8** } 
%LENGTH { HOR TOS VER TOS ** #0010 ** }
%HOR    { #20 }    %VER    { #10 }
%WIDTH  { #0100 } 
%LENGTH { #2000 }
%DATA-CLIP { #f000 } ( copy/paste )

%BANK { #2000 }
%BANK-TEMP { #4000 }
%GET-COLOR     { .settings/color LDZ STHk #02 / + DEI #01 STHr #01 AND - #04 * SFT #0f AND }
%GET-POSITION  { .settings/focus LDZ2 BANK -- DUP2 2// WIDTH MOD2 SWP2 WIDTH 2** // 8** }
%GET-COLOR     { .settings/color LDZ STHk 2/ + DEI #01 STHr #01 AND - 4* SFT #0f AND }
%GET-POSITION  { .settings/focus LDZ2 BANK -- DUP2 2// WIDTH MOD2 SWP2 200// 8** }
%ADD-POSITIONS { ROT2 ++ ROT2 ROT2 ++ SWP2 }
%RELEASE-MOUSE { #00 .Mouse/state DEO }
%RESET-SELECTION { .selection/x1 LDZ2 .selection/x2 STZ2 }
%GET-ADDR { TOS HOR TOS ** ROT TOS ++ #0010 ** BANK ++ }
%GET-ADDR { TOS HOR TOS ** ROT TOS ++ 10** BANK ++ }

%SET-STATE { #01 .state/changed STZ ;draw-state JSR2 }
%RESET-STATE { #00 .state/changed STZ ;draw-state JSR2 }


@@ 180,7 188,7 @@ BRK

	#08 ! ,&no-toggle JCN
		.state/blink TOGGLE
		#01 .state/blink LDZ #08 * + ;draw-filepath JSR2
		#01 .state/blink LDZ 8* + ;draw-filepath JSR2
		#00 .state/timer STZ 
		&no-toggle
	


@@ 223,10 231,10 @@ BRK

	.Controller/button DEI #f0 AND
		DUP #04 SFT #01 AND #01 ! ,&no-up JCN
			( clamp ) .settings/focus LDZ2 BANK HOR TOS #0010 ** ++ << ,&no-up JCN
			( clamp ) .settings/focus LDZ2 BANK HOR TOS 10** ++ << ,&no-up JCN
			( up )    .settings/focus LDZ2 #0010 HOR TOS ** -- .settings/focus STZ2 &no-up
		DUP #05 SFT #01 AND #01 ! ,&no-down JCN
			( clamp ) .settings/focus LDZ2 BANK LENGTH HOR TOS #0010 ** -- ++ >> ,&no-down JCN
			( clamp ) .settings/focus LDZ2 BANK LENGTH HOR TOS 10** -- ++ >> ,&no-down JCN
			( down )  .settings/focus LDZ2 #0010 HOR TOS ** ++ .settings/focus STZ2 &no-down
		DUP #06 SFT #01 AND #01 ! ,&no-left JCN
			( clamp ) .settings/focus LDZ2 BANK #0001 ++ << ,&no-left JCN


@@ 509,8 517,8 @@ BRK
	&no-mod

	( paint )
	.Mouse/x DEI2 .zoomview/x1 LDZ2 -- #0004 //
	.Mouse/y DEI2 .zoomview/y1 LDZ2 -- #0004 // 
	.Mouse/x DEI2 .zoomview/x1 LDZ2 -- 4//
	.Mouse/y DEI2 .zoomview/y1 LDZ2 -- 4// 
	.settings/focus LDZ2 ++
	( detect erase )
	#00 .Mouse/state DEI #10 = ,&do-erase JCN 


@@ 533,7 541,7 @@ BRK
	( skip ) .Mouse/state DEI #00 ! BRK?

	.Mouse/x DEI2 .blendview/x1 LDZ2 -- 8// NIP
	.Mouse/y DEI2 .blendview/y1 LDZ2 -- 8// NIP #04 * +
	.Mouse/y DEI2 .blendview/y1 LDZ2 -- 8// NIP 4* +
	.settings/blending STZ

	;redraw JSR2


@@ 550,15 558,15 @@ BRK

	DUP #00 ! ,&no-r JCN
		.System/r STHk ,&set-color JSR 
		STHr [ .settings/color LDZ #02 / + ] DEO
		STHr [ .settings/color LDZ 2/ + ] DEO
		&no-r
	DUP #01 ! ,&no-g JCN
		.System/g STHk ,&set-color JSR 
		STHr [ .settings/color LDZ #02 / + ] DEO
		STHr [ .settings/color LDZ 2/ + ] DEO
		&no-g
	DUP #02 ! ,&no-b JCN
		.System/b STHk ,&set-color JSR 
		STHr [ .settings/color LDZ #02 / + ] DEO
		STHr [ .settings/color LDZ 2/ + ] DEO
		&no-b
	POP



@@ 567,12 575,12 @@ BRK
	BRK

	&set-color
		.settings/color LDZ STHk #02 / + DEI 
		.settings/color LDZ STHk 2/ + DEI 
		STHr #02 MOD STHk 
		#0f SWP [ #40 * SFT ] AND 
		STHr #00 = 
		.Mouse/x DEI2 .colorview/x1 LDZ2 -- 2// NIP 
		( clamp to #0f ) DUP #10 = #01 * - 
		( clamp to #0f ) DUP #10 = - 
		SWP [ #40 * SFT ] +
	RTN



@@ 785,10 793,10 @@ RTN
	;pixel-icn .Screen/addr DEO2
	VER #00
	&ver
		DUP #08 * TOS .tileview/y1 LDZ2 ++ .Screen/y DEO2
		DUP 8* TOS .tileview/y1 LDZ2 ++ .Screen/y DEO2
		HOR #00
		&hor
			DUP #08 * TOS .tileview/x1 LDZ2 ++ .Screen/x DEO2
			DUP 8* TOS .tileview/x1 LDZ2 ++ .Screen/x DEO2
			( get pixel offset ) GET-ITER SWP TOS ROT TOS
			( add focus ) STH2kr SWP2r STH2kr SWP2r ADD-POSITIONS
			;get-pixel JSR2 #00 + .Screen/sprite DEO


@@ 799,7 807,7 @@ RTN
	POP2r POP2r

	( guides )
	VER #08 / #01 - #00
	VER 8/ #01 - #00
	&guides-hor
		DUP STH
		.tileview/x1 LDZ2 


@@ 810,7 818,7 @@ RTN
		#01 + GTHk ,&guides-hor JCN
	POP2

	HOR #08 / #01 - #00
	HOR 8/ #01 - #00
	&guides-ver
		DUP STH
		.tileview/x1 LDZ2 STHr #01 + #40 * #01 - TOS ++ 


@@ 832,7 840,7 @@ RTN
	( channel 2 )
	[ STHr ] [ STH2r ] #0008 ++ LDA SWP 
	#07 SWP - SFT #01 AND
	#02 * 
	2* 
	+

RTN


@@ 879,7 887,7 @@ RTN

@get-tile-addr ( x* y* -- addr* )
	
	STEP8 WIDTH ** #0004 // SWP2
	STEP8 WIDTH ** 4// SWP2
	STEP8 2** ++
	BANK ++



@@ 949,7 957,7 @@ RTN
	#10 #00
	&loop
		DUP #04 MOD #00 SWP 8** .blendview/x1 LDZ2 ++ .Screen/x DEO2
		DUP #04 / #00 SWP 8** .blendview/y1 LDZ2 ++ .Screen/y DEO2
		DUP 4/ #00 SWP 8** .blendview/y1 LDZ2 ++ .Screen/y DEO2
		#00 .Screen/sprite DEO
		DUP #00 + .settings/depth LDZ #80 * + .Screen/sprite DEO
		#01 + GTHk ,&loop JCN


@@ 968,10 976,10 @@ RTN
	.settings/focus LDZ2 STH2k .Screen/addr DEO2
	#04 #00
	&ver
		DUP #08 * TOS .preview/y1 LDZ2 ++ .Screen/y DEO2
		DUP 8* TOS .preview/y1 LDZ2 ++ .Screen/y DEO2
		#04 #00
		&hor
			DUP #08 * TOS .preview/x1 LDZ2 ++ .Screen/x DEO2
			DUP 8* TOS .preview/x1 LDZ2 ++ .Screen/x DEO2
			( get x,y )
			GET-ITER
			( check if within ratio )


@@ 982,7 990,7 @@ RTN
				( get blending ) .settings/blending LDZ
				( get depth ) .settings/depth LDZ #80 *
				( draw ) + .Screen/sprite DEO
				( incr ) STH2r #0008 [ .settings/depth LDZ #08 * TOS ++ ] ++ STH2
				( incr ) STH2r #0008 [ .settings/depth LDZ 8* TOS ++ ] ++ STH2
				,&resume JMP
			&outside
			;halftone-icn .Screen/addr DEO2


@@ 1024,7 1032,7 @@ RTN
		.Screen/x DEO2
		#10 #00
		&loop
			DUP STHkr > #08 * TOS ;slider-icns ++ .Screen/addr DEO2
			DUP STHkr > 8* TOS ;slider-icns ++ .Screen/addr DEO2
			#02 .Screen/sprite DEO
			.Screen/x DEI2 #0002 ++ .Screen/x DEO2
			#01 + GTHk ,&loop JCN


@@ 1044,10 1052,10 @@ RTN
	#04 #00
	&loop
		.dataview/x1 LDZ2 .Screen/x DEO2
		DUP #08 * TOS .dataview/y1 LDZ2 ++ .Screen/y DEO2
		DUP #02 * TOS .settings/focus LDZ2 ++ LDA2 #03 ;draw-short JSR2
		DUP 8* TOS .dataview/y1 LDZ2 ++ .Screen/y DEO2
		DUP 2* TOS .settings/focus LDZ2 ++ LDA2 #03 ;draw-short JSR2
		.dataview/x1 LDZ2 #0020 ++ .Screen/x DEO2
		DUP #02 * TOS .settings/focus LDZ2 ++ #0008 ++ LDA2 #03 ;draw-short JSR2
		DUP 2* TOS .settings/focus LDZ2 ++ #0008 ++ LDA2 #03 ;draw-short JSR2
		#01 + GTHk ,&loop JCN
	POP2



@@ 1058,10 1066,10 @@ RTN
	;bigpixel-icn .Screen/addr DEO2
	#08 #00
	&ver
		DUP #04 * TOS .zoomview/y1 LDZ2 ++ .Screen/y DEO2
		DUP 4* TOS .zoomview/y1 LDZ2 ++ .Screen/y DEO2
		#08 #00
		&hor
			DUP #04 * TOS .zoomview/x1 LDZ2 ++ .Screen/x DEO2
			DUP 4* TOS .zoomview/x1 LDZ2 ++ .Screen/x DEO2
			( get pixel )
			GET-ITER
			( ch 1 )


@@ 1070,7 1078,7 @@ RTN
			( ch2 )
			[ STHr ] [ STH2r ] #0008 ++ LDA SWP 
			#07 SWP - SFT #01 AND
			#02 * +
			2* +
			.Screen/sprite DEO
			#01 + GTHk ,&hor JCN
		POP2


@@ 1107,7 1115,7 @@ RTN
	.Mouse/y DEI2 DUP2 .cursor/y STZ2 .Screen/y DEO2

	( draw new cursor )
	;tool-brush #00 .settings/tool LDZ #08 * ++ .Screen/addr DEO2
	;tool-brush #00 .settings/tool LDZ 8* ++ .Screen/addr DEO2
	#42 .Mouse/state DEI #00 ! + .Screen/sprite DEO

RTN


@@ 1119,7 1127,7 @@ RTN
	.toolview/y1 LDZ2 .Screen/y DEO2
	;path/name
	&loop
		LDAk DUP #00 ! #20 * - TOS 8** ;font ++ .Screen/addr DEO2 
		LDAk DUP #00 ! 20* - TOS 8** ;font ++ .Screen/addr DEO2 
		STHkr .Screen/sprite DEO
		.Screen/x DEI2 #0008 ++ .Screen/x DEO2
		#0001 ++