~rabbits/orca-toy

21359fe7a5430a62bdb3c487559128dcc9b0dbc2 — neauoire 1 year, 1 month ago 9c88b3f
Optimized lerp, but gross implementation
3 files changed, 28 insertions(+), 22 deletions(-)

M README.md
M src/main.tal
M src/utils.tal
M README.md => README.md +1 -1
@@ 31,7 31,7 @@ To display the list of operators inside of Orca, use `CmdOrCtrl+G`.
- `E` **east**: Moves eastward, or bangs.
- `F` **if**(*a* b): Bangs if inputs are equal.
- `G` **generator**(*x* *y* *len*): Writes operands with offset.
- `H` **halt**: Halts southward operand.
- `H` **hold**: Holds southward operand.
- `I` **increment**(*step* mod): Increments southward operand.
- `J` **jumper**(*val*): Outputs northward operand.
- `K` **konkat**(*len*): Reads multiple variables.

M src/main.tal => src/main.tal +26 -21
@@ 34,9 34,6 @@
%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 -- )
%LOAD-CASE { GET-CELL IS-UC } ( x y -- uc )
%SAVE-CASE { DUP #60 > STHr 20* * - } ( char uc -- char )

( devices )



@@ 1039,25 1036,33 @@ RTN

@op-z ( x y char -- ) ( TODO )

	POP
	( get case ) DUP2 [ SWP INC SWP ] LOAD-CASE STH
	( get rate ) DUP2 [ SWP #01 - SWP ] GET-PORT-LEFT STH
	( get target ) DUP2 [ SWP INC SWP ] GET-PORT-RIGHT STH
	( incr y ) INC
	( get val ) DUP2 GET-CELL GET-VALUE STH
	EQUkr STHr ,&end JCN
	LTHkr STHr #00 ! ,&no-below JCN
		( val rate + ) STHr OVRr STH SWPr ADDr
		( clamp ) GTHkr STHr SWPr?
		,&end JMP
		&no-below
	GTHkr STHr #00 ! ,&no-above JCN
		( val rate - ) STHr OVRr STH SWPr SUBr
		( clamp ) LTHkr STHr SWPr?
		&no-above
	&end
	STHr GET-CHAR POP2r SAVE-CASE SET-PORT-OUTPUT
	POP POP2
	.head/addr LDZ2 STH2k
	( rate ) DEC2 ;get-port-left-value JSR2
	( target ) STH2kr INC2 ;get-port-right-raw JSR2
		( get case ) DUP IS-UC ,&case STR
		( to value ) GET-VALUE
	( val ) STH2kr BELOW [ DATA-CELLS ++ LDA GET-VALUE ]
	( res ) ;lerp JSR2
	( set case ) GET-CHAR DUP #60 > [ LIT &case $1 ] AND 20* -
	( output ) STH2r BELOW ;set-port-output JSR2

RTN

@lerp ( rate target val -- val )

	DUP2 DIF STH
	( if rate > target )
	ROT DUP STHr < ,&skip JCN
		POP2 RTN
		&skip
	( target val rate )
	STH 
	GTHk ,&no-below JCN
		NIP STHr SUB RTN
		&no-below
	NIP STHr ADD
	
RTN

@op-bang ( x y char -- )

M src/utils.tal => src/utils.tal +1 -0
@@ 18,6 18,7 @@
%8MOD  { #07 AND } %8MOD2  { #0007 AND2 }
%10MOD { #0f AND } %10MOD2 { #000f AND2 }

%DIF { GTHk JMP SWP SUB }
%MOD  { DIVk MUL SUB }
%MOD2 { DIV2k MUL2 SUB2 }
%MIN { LTHk JMP SWP POP }