~rabbits/orca-toy

d774dd940ad8272e93546a17be9e1042ee568215 — neauoire 1 year, 5 months ago 12c3aac
Optimized cardinals
1 files changed, 45 insertions(+), 33 deletions(-)

M src/main.tal
M src/main.tal => src/main.tal +45 -33
@@ 638,6 638,14 @@ RTN

RTN

@set-port-raw ( value addr* -- )

	( set lock ) DUP2 #01 ROT ROT DATA-LOCKS ++ STA
	( set type ) DUP2 #00 ROT ROT DATA-TYPES ++ STA 
	( set data ) DATA-CELLS ++ STA

RTN

( operators )

@op-a ( x y char -- )


@@ 699,16 707,17 @@ RTN

@op-e ( x y char -- )

	STH
	( hit edge ) OVR .grid/width LDZ #01 - = ;&collide JCN2
	( hit cell ) DUP2 [ SWP INC SWP ] GET-CELL CHAR-DOT ! ,&collide JCN
	DUP2 #00 SET-TYPE
	DUP2 CHAR-DOT SET-CELL
	[ SWP INC SWP ] DUP2 STHr SET-CELL
	#01 SET-LOCK
	STH 
	OVR STH GET-INDEX STHr
	( hit edge ) .grid/width LDZ #01 - = ,&collide JCN
	( hit cell ) INC2k DATA-CELLS ++ LDA CHAR-DOT ! ,&collide JCN
	( write new ) STH2k ROTr STHr STH2r INC2 ;set-port-raw JSR2
	( erase old ) STH2 CHAR-DOT STH2r ;set-port-raw JSR2
	RTN
	&collide CHAR-BANG SET-CELL POPr
	
	&collide
		POPr
		STH2 CHAR-BANG STH2r ;set-port-output JSR2

RTN

@op-f ( x y char -- )


@@ 825,15 834,16 @@ RTN

@op-n ( x y char -- )
	
	STH
	( hit edge ) DUP #00 = ;&collide JCN2
	( hit cell ) DUP2 #01 - GET-CELL CHAR-DOT ! ,&collide JCN
	DUP2 #00 SET-TYPE
	DUP2 CHAR-DOT SET-CELL
	#01 - DUP2 STHr SET-CELL
	#01 SET-LOCK
	STH 
	STHk GET-INDEX STHr
	( hit edge ) #00 = ,&collide JCN
	( hit cell ) DUP2 #00 .grid/width LDZ -- DATA-CELLS ++ LDA CHAR-DOT ! ,&collide JCN
	( write new ) STH2k ROTr STHr STH2r #00 .grid/width LDZ -- ;set-port-raw JSR2
	( erase old ) STH2 CHAR-DOT STH2r ;set-port-raw JSR2
	RTN
	&collide CHAR-BANG SET-CELL POPr
	&collide
		POPr
		STH2 CHAR-BANG STH2r ;set-port-output JSR2
	
RTN



@@ 908,15 918,16 @@ RTN

@op-s ( x y char -- )
	
	STH
	( hit edge ) DUP .grid/height LDZ #01 - = ;&collide JCN2
	( hit cell ) DUP2 INC GET-CELL CHAR-DOT ! ,&collide JCN
	DUP2 #00 SET-TYPE
	DUP2 CHAR-DOT SET-CELL
	INC DUP2 STHr SET-CELL
	#01 SET-LOCK
	STH 
	STHk GET-INDEX STHr
	( hit edge ) .grid/height LDZ #01 - = ,&collide JCN
	( hit cell ) DUP2 #00 .grid/width LDZ ++ DATA-CELLS ++ LDA CHAR-DOT ! ,&collide JCN
	( write new ) STH2k ROTr STHr STH2r #00 .grid/width LDZ ++ ;set-port-raw JSR2
	( erase old ) STH2 CHAR-DOT STH2r ;set-port-raw JSR2
	RTN
	&collide CHAR-BANG SET-CELL POPr
	&collide
		POPr
		STH2 CHAR-BANG STH2r ;set-port-output JSR2
	
RTN



@@ 972,15 983,16 @@ RTN

@op-w ( x y char -- )

	STH
	( hit edge ) OVR #00 = ;&collide JCN2
	( hit cell ) DUP2 [ SWP #01 - SWP ] GET-CELL CHAR-DOT ! ,&collide JCN
	DUP2 #00 SET-TYPE
	DUP2 CHAR-DOT SET-CELL
	SWP #01 - SWP DUP2 STHr SET-CELL
	#01 SET-LOCK
	STH 
	OVR STH GET-INDEX STHr
	( hit edge ) #00 = ,&collide JCN
	( hit cell ) DUP2 #0001 -- DATA-CELLS ++ LDA CHAR-DOT ! ,&collide JCN
	( write new ) STH2k ROTr STHr STH2r #0001 -- ;set-port-raw JSR2
	( erase old ) STH2 CHAR-DOT STH2r ;set-port-raw JSR2
	RTN
	&collide CHAR-BANG SET-CELL POPr
	&collide
		POPr
		STH2 CHAR-BANG STH2r ;set-port-output JSR2
	
RTN