~rabbits/orca-toy

89576146cfd9dda86defc582944bd8f7525a6aa0 — neauoire 1 year, 8 months ago 0265078
Mouse/Button traps
1 files changed, 99 insertions(+), 62 deletions(-)

M orca.tal
M orca.tal => orca.tal +99 -62
@@ 2,13 2,16 @@
	
	TODO
		- Catch ports that overflow out of grid
		- Display character on cursor head
		- Scale selection
		- Get case from right-side port
		- Display short timer
		- Rename file
		- Save file
		- Copy/Paste
		- Copy Selection
		- Paste Selection
		- Drag Selection
		- sharp notes
		- Draw VU
		- Change BPM
)

%+  { ADD } %-   { SUB }  %*  { MUL }  %/  { DIV }


@@ 19,11 22,12 @@
%8** { #30 SFT2 }       %8// { #03 SFT2 }
%TOB  { SWP POP }       %TOS  { #00 SWP }
%INCR { SWP #01 + SWP } %DECR { SWP #01 - SWP }
%INCR2 { SWP2 #0001 ++ SWP2 }

%DEBUG  { .Console/byte DEO #0a .Console/char DEO }
%DEBUG2 { .Console/short DEO2 #0a .Console/char DEO }

%RELEASE-MOUSE { #00 .Mouse/state DEO }

%RTN  { JMP2r }
%MOD  { DUP2 / * - } 
%MOD8 { #07 AND }


@@ 33,10 37,8 @@
%TOGGLE { DUP LDZ #00 = SWP STZ }
%GET-ITERATORS { SWP2k POP SWP POP }

%LOCKED-TYPE   { #01 }
%PORTEL-TYPE   { #02 }
%OPERATOR-TYPE { #03 }
%PORTER-TYPE   { #04 }
%LOCKED-TYPE   { #01 } %PORTEL-TYPE   { #02 }
%OPERATOR-TYPE { #03 } %PORTER-TYPE   { #04 }
%OUTPUT-TYPE   { #05 }

%DATA-CELLS { #b000 }


@@ 45,38 47,27 @@
%DATA-FILE { #e000 } ( file transfer )
%DATA-CLIP { #f000 } ( copy/paste )

%CHAR-NULL  { #00 }
%CHAR-LINE  { #0a }
%CHAR-HASH  { #23 }
%CHAR-BANG  { #2a }
%CHAR-DOT   { #2e }
%CHAR-EQUAL { #3d }
%CHAR-NULL  { #00 } %CHAR-LINE  { #0a }
%CHAR-HASH  { #23 } %CHAR-BANG  { #2a }
%CHAR-DOT   { #2e } %CHAR-EQUAL { #3d }

%IS-CHAR-KEY { STHk #20 > STHr #7b < #0101 == }

%GET-INDEX { #00 SWP #00 .grid/width LDZ ** ROT #00 SWP ++ } ( x y -- index )
%GET-CHAR  { #24 MOD #00 SWP ;b36clc ++ LDA } ( b36 -- char )
%GET-VALUE { #20 - #00 SWP ;values ++ LDA } ( char -- b36 )

%GET-NOTE { GET-VALUE TOS ;uc-notes ++ LDA } ( char -- midi )
%GET-CELL  { GET-INDEX DATA-CELLS ++ LDA } ( x y -- char )
%SET-CELL  { ROT ROT GET-INDEX DATA-CELLS ++ STA } ( x y char -- )

%GET-TYPE  { GET-INDEX DATA-TYPES ++ LDA } ( x y -- type )
%SET-TYPE  { ROT ROT GET-INDEX DATA-TYPES ++ STA } ( x y type -- )

%GET-LOCK  { GET-INDEX DATA-LOCKS ++ LDA } ( x y -- type )
%SET-LOCK  { ROT ROT GET-INDEX DATA-LOCKS ++ STA } ( x y type -- )

%GET-PORT-LEFT { DUP2 PORTEL-TYPE SET-TYPE GET-CELL GET-VALUE } ( x y -- char )
%GET-PORT-RIGHT  { DUP2 PORTER-TYPE SET-TYPE DUP2 #01 SET-LOCK GET-CELL GET-VALUE } ( x y -- char )
%GET-PORT-RIGHT-RAW  { DUP2 PORTER-TYPE SET-TYPE DUP2 #01 SET-LOCK GET-CELL } ( x y -- char )

%SET-PORT-OUTPUT { STH DUP2 OUTPUT-TYPE SET-TYPE DUP2 #01 SET-LOCK STHr SET-CELL } ( x y char -- )

%GET-NOTE { GET-VALUE TOS ;uc-notes ++ LDA }

%RELEASE-MOUSE { #00 .Mouse/state DEO }

( devices )

|00 @System     [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]


@@ 95,6 86,11 @@

|0000

@state
	&timer $1
	&trap $1
	&blink $1
	&changed $1
@timer
	&beat $1 
	&alive $1 


@@ 126,18 122,11 @@
	#0f95 .System/b DEO2

	( synths )
	#dd   .Audio0/volume DEO 
	#0118 .Audio0/adsr DEO2
	#0100 .Audio0/length DEO2
	#ce   .Audio1/volume DEO 
	#0334 .Audio1/adsr DEO2
	#0100 .Audio1/length DEO2
	#ec   .Audio2/volume DEO 
	#0414 .Audio2/adsr DEO2
	#0100 .Audio2/length DEO2
	#ee   .Audio3/volume DEO 
	#022c .Audio3/adsr DEO2
	#0100 .Audio3/length DEO2
	#dd .Audio0/volume DEO  #0118 .Audio0/adsr DEO2 #0100 .Audio0/length DEO2
	#ce .Audio1/volume DEO  #0334 .Audio1/adsr DEO2 #0100 .Audio1/length DEO2
	#ec .Audio2/volume DEO  #0414 .Audio2/adsr DEO2 #0100 .Audio2/length DEO2
	#ee .Audio3/volume DEO  #022c .Audio3/adsr DEO2 #0100 .Audio3/length DEO2

	;piano-pcm .Audio0/addr DEO2
	;piano-pcm .Audio1/addr DEO2
	;tri-pcm .Audio2/addr DEO2


@@ 185,12 174,14 @@
BRK

@on-frame ( -> )
	
	.state/trap LDZ ;on-frame-trap JCN2

	( paused ) .timer/alive LDZ #01 JCN [ BRK ]

	.timer/beat LDZ #01 + DUP .timer/beat STZ

	( skip ) #08 = ,&tick JCN BRK &tick
	( skip ) #08 = #01 JCN [ BRK ]

	.timer/frame LDZ2 #0001 ++ .timer/frame STZ2



@@ 200,8 191,24 @@ BRK

BRK

@on-frame-trap ( -> )
	
	.state/trap LDZ #00 ! #01 JCN [ RTN ]

	( incr ) .state/timer LDZ #01 + DUP .state/timer STZ 

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

BRK

@on-button ( -> )
	
	.Controller/key DEI #00 ! .state/trap LDZ #0101 == ;on-button-trap JCN2

	( ignore release when key/button is blank )
	.Controller/button DEI2 #0000 !! #01 JCN [ BRK ]



@@ 242,6 249,31 @@ BRK

BRK

@on-button-trap ( -> )

	( enter )
	.Controller/key DEI #0d ! ,&no-edit-enter JCN
		#00 .state/trap STZ
		#23 ;draw-filepath JSR2
		BRK
		&no-edit-enter
	( backspace )
	.Controller/key DEI #08 ! ,&no-edit-backspace JCN
		.path/length LDZ #00 = ,&edit-end JCN
		.path/length LDZ #01 - .path/length STZ
		#00 .path/name .path/length LDZ + STZ
		#23 ;draw-filepath JSR2
		BRK
		&no-edit-backspace
	( default )
	.path/length LDZ #1f = ,&edit-end JCN
		.Controller/key DEI .path/name .path/length LDZ + STZ
		.path/length LDZ #01 + .path/length STZ
	&edit-end
	#00 .path/name .path/length LDZ + STZ

BRK

@on-mouse (-> )
	
	( clear last cursor )


@@ 266,6 298,7 @@ BRK
		;on-touch-grid JCN2
	.Mouse/y DEI2 .grid/y2 LDZ2 #0008 ++ -- 8// TOB #00 = 
		;on-touch-toolbar JCN2
	RELEASE-MOUSE
	
BRK



@@ 287,7 320,11 @@ BRK
	
	( left-side )
	.Mouse/x DEI2 .grid/x1 LDZ2 -- 8// TOB 
		( TODO: touch controls )
	DUP #09 > OVR .grid/width LDZ SWP - #05 > #0101 !! ,&no-rename JCN
		.state/trap TOGGLE
		#00 .state/blink STZ 
		#23 ;draw-filepath JSR2
		&no-rename
	POP

	( right-side )


@@ 315,8 352,8 @@ BRK

	DUP2 #01 + GET-CELL CHAR-BANG = ,&bang JCN
	DUP2 #01 - GET-CELL CHAR-BANG = ,&bang JCN
	DUP2 INCR GET-CELL CHAR-BANG = ,&bang JCN
	DUP2 DECR GET-CELL CHAR-BANG = ,&bang JCN
	DUP2 INCR  GET-CELL CHAR-BANG = ,&bang JCN
	DUP2 DECR  GET-CELL CHAR-BANG = ,&bang JCN
	POP2 #00 RTN
	&bang
		POP2 #01 


@@ 883,7 920,7 @@ RTN
			( incr y ) ,&y LDR #01 + ,&y STR
			POP
		&continue
		INCR2
		( incr ) SWP2 #0001 ++ SWP2
		LTH2k ,&loop JCN
	&end
	POP2 POP2 POP


@@ 903,6 940,27 @@ RTN

RTN

@redraw ( -- )
	
	#00 .grid/height LDZ
	&ver
		( pos-y ) OVR #00 SWP 8** [ .grid/y1 LDZ2 ++ ] .Screen/y DEO2
		#00 .grid/width LDZ
		&hor
			( pos-x ) OVR #00 SWP 8** [ .grid/x1 LDZ2 ++ ] .Screen/x DEO2
			GET-ITERATORS
			( sprite ) DUP2 ;get-cell-sprite JSR2 .Screen/addr DEO2
			( draw ) ;get-cell-type JSR2 TOS ;cell-styles ++ LDA .Screen/color DEO
			INCR
			LTHk ,&hor JCN
		POP2
		INCR
		LTHk ,&ver JCN
	POP2
	,draw-toolbar JSR

RTN

@draw-toolbar ( -- )
	
	.grid/y2 LDZ2 #0008 ++ .Screen/y DEO2


@@ 966,31 1024,10 @@ RTN

RTN

@redraw ( -- )
	
	#00 .grid/height LDZ
	&ver
		( pos-y ) OVR #00 SWP 8** [ .grid/y1 LDZ2 ++ ] .Screen/y DEO2
		#00 .grid/width LDZ
		&hor
			( pos-x ) OVR #00 SWP 8** [ .grid/x1 LDZ2 ++ ] .Screen/x DEO2
			GET-ITERATORS
			( sprite ) DUP2 ;get-cell-sprite JSR2 .Screen/addr DEO2
			( draw ) ;get-cell-type JSR2 TOS ;cell-styles ++ LDA .Screen/color DEO
			INCR
			LTHk ,&hor JCN
		POP2
		INCR
		LTHk ,&ver JCN
	POP2

	;draw-toolbar JSR2

RTN

@draw-filepath ( color -- )
	
	STH
	.grid/y2 LDZ2 #0008 ++ .Screen/y DEO2
	#0068 .Screen/x DEO2
	;path/name
	&loop