~rabbits/orca-toy

863c86a2f025e4fb8e0d9752d35d3e4e9b3706b4 — Devine Lu Linvega 22 days ago 9af817a
Accel for primitives
1 files changed, 49 insertions(+), 89 deletions(-)

M src/orca.tal
M src/orca.tal => src/orca.tal +49 -89
@@ 1074,130 1074,90 @@ JMP2r
@ci-key ( char -- bool ) #20 SUB #5b LTH JMP2r

(
@|primitives )

@set-case ( value case -- raw )

	SWP b36chr DUP #60 GTH ROT AND #50 SFT SUB

JMP2r

@get-addr ( x y -- addr* )

	#00 SWP #00 .grid/width LDZ MUL2 ROT #00 SWP ADD2

JMP2r

@get-port-right1-value ( addr* -- value )

	INC2

@get-port-right-value ( addr* -- value )
@|ports )

	get-port-right-raw
@get-port-right1-value ( addr* -- value ) INC2
@get-port-right-value ( addr* -- value ) get-port-right-raw !chrb36

!chrb36

@get-port-left1-value ( addr* -- value )

	#0001 SUB2

@get-port-left-value ( addr* -- value )

	get-port-left-raw

!chrb36

@get-port-left1-raw ( addr* -- value )

	#0001 SUB2
@get-port-left1-value ( addr* -- value ) #0001 SUB2
@get-port-left-value ( addr* -- value ) get-port-left-raw !chrb36

@get-port-left1-raw ( addr* -- value ) #0001 SUB2
@get-port-left-raw ( addr* -- value )
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	( type ) STH2k .types/pl STH2r write-type/force
	!read-cell/force
	&skip POP2 LIT ". JMP2r

	( type ) STH2k .types/pl STH2r write-type

!read-cell

@get-port-right1-raw ( addr* -- value )

	INC2

@get-port-right1-raw ( addr* -- value ) INC2
@get-port-right-raw ( addr* -- value )
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	( lock ) STH2k #02 STH2kr write-lock/force
	( type ) .types/pr STH2r write-type/force
	!read-cell/force
	&skip POP2 LIT ". JMP2r

	( lock ) STH2k #02 STH2kr write-lock
	( type ) .types/pr STH2r write-type

!read-cell

@set-port-output-below ( value addr* -- )

	#00 .grid/width LDZ ADD2

@set-port-output-below ( value addr* -- ) #00 .grid/width LDZ ADD2
@set-port-output ( value addr* -- )

	( lock ) STH2k #01 STH2kr write-lock
	( type ) .types/output STH2r write-type

!write-cell
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	( lock ) STH2k #01 STH2kr write-lock/force
	( type ) .types/output STH2r write-type/force
	!write-cell/force
	&skip POP2 POP JMP2r

@set-port-raw ( value addr* -- )
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	( lock ) STH2k #01 STH2kr write-lock/force
	( type ) #00 STH2r write-type/force
	!write-cell/force
	&skip POP2 POP JMP2r

	( lock ) STH2k #01 STH2kr write-lock
	( type ) #00 STH2r write-type

!write-cell
(
@|primitives )

@read-cell ( addr* -- cell )

	DUP2 .grid/length LDZ2 GTH2 ?&skip
	;data/cells ADD2 LDA

JMP2r
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	&force ;data/cells ADD2 LDA JMP2r
	&skip POP2 LIT ". JMP2r

@set-cell ( x y c -- )

	ROT ROT get-addr

@write-cell ( cell addr* -- )

	DUP2 .grid/length LDZ2 GTH2 ?&skip
	;data/cells ADD2 STA

JMP2r
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	&force ;data/cells ADD2 STA JMP2r
	&skip POP2 POP JMP2r

@read-type ( addr* -- cell )

	DUP2 .grid/length LDZ2 GTH2 ?&skip
	;data/types ADD2 LDA

JMP2r
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	&force ;data/types ADD2 LDA JMP2r
	&skip POP2 .types/default JMP2r

@write-type ( type addr* -- )
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	&force ;data/types ADD2 STA JMP2r
	&skip POP2 POP JMP2r

	DUP2 .grid/length LDZ2 GTH2 ?&skip
	;data/types ADD2 STA
@read-lock ( addr* -- lock )
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	&force ;data/locks ADD2 LDA JMP2r
	&skip POP2 #01 JMP2r

JMP2r
@write-lock ( lock addr* -- )
	( bounds ) DUP2 .grid/length LDZ2 GTH2 ?&skip
	&force ;data/locks ADD2 STA JMP2r
	&skip POP2 POP JMP2r

@read-lock ( addr* -- lock )
@set-case ( value case -- raw )

	DUP2 .grid/length LDZ2 GTH2 ?&skip
	;data/locks ADD2 LDA
	SWP b36chr DUP #60 GTH ROT AND #50 SFT SUB

JMP2r
	&skip POP2 #01 JMP2r

@write-lock ( lock addr* -- )
@get-addr ( x y -- addr* )

	DUP2 .grid/length LDZ2 GTH2 ?&skip
	;data/locks ADD2 STA
	#00 SWP #00 .grid/width LDZ MUL2 ROT #00 SWP ADD2

JMP2r
	&skip POP2 POP JMP2r

(
@|stdlib )