commit c73f1e066ac9a94751477e344e1a15dc5924a717
parent 220983d69488c433198a65e87880d6cfa6467f5b
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date: Sun, 24 Mar 2024 10:46:24 -0700
(snake) Optimizations
Diffstat:
1 file changed, 30 insertions(+), 29 deletions(-)
diff --git a/projects/examples/demos/snake.tal b/projects/examples/demos/snake.tal
@@ -24,9 +24,9 @@
#00c8 .Screen/width DEO2
#0100 .Screen/height DEO2
( | set arena )
- .Screen/width DEI2 #03 SFT2 NIP .arena/w STZ
- .Screen/height DEI2 #03 SFT2 NIP .arena/h STZ
- [ LIT2 01 -Screen/auto ] DEO
+ .Screen/width DEI2 #03 SFT2 .arena/w STZ
+ POP .Screen/height DEI2 #03 SFT2 .arena/h STZ
+ POP [ LIT2 01 -Screen/auto ] DEO
reset BRK
@on-frame ( -> )
@@ -35,7 +35,7 @@
[ LIT2 00 _&f ] STR
#00 <draw-snake>
<move>
- #02 .snake/dead LDZ ADD <draw-snake>
+ [ LIT2 02 -snake/dead ] LDZ ADD <draw-snake>
#83 <draw-apple>
<draw-score>
BRK
@@ -71,30 +71,29 @@
SWP2r
( push ) DUPk ADD .snake/tail ADD STH2r ROT STZ2
INC GTHk ?&>loop
- POP2 POP2r .snake/dead LDZ #00 EQU JMP
- JMP2r
- .snake/direction LDZ DUP #01 NEQ ?&no-up
- .snake/y LDZ #01 SUB .arena/h LDZ LTHk JMP
- SWP POP .snake/y STZ
- &no-up DUP #02 NEQ ?&no-down
- .snake/y LDZ INC .arena/h LDZ DIVk MUL SUB .snake/y STZ
- &no-down DUP #04 NEQ ?&no-left
- .snake/x LDZ #01 SUB .arena/w LDZ LTHk JMP
- SWP POP .snake/x STZ
- &no-left DUP #08 NEQ ?&no-right
- .snake/x LDZ INC .arena/w LDZ DIVk MUL SUB .snake/x STZ
- &no-right POP
- ( detect collision with apple ) .snake/x LDZ2 .apple/x LDZ2 NEQ2 ?{
+ POP2 POP2r
+ ( ) .snake/dead LDZ #00 [ EQU JMP JMP2r ]
+ ( ) .snake/direction LDZ DUP #01 NEQ ?{
+ .snake/y LDZ #01 SUB .arena/h LDZ [ LTHk JMP SWP POP ] .snake/y STZ }
+ DUP #02 NEQ ?{
+ .snake/y LDZ INC .arena/h LDZ DIVk MUL SUB .snake/y STZ }
+ DUP #04 NEQ ?{
+ .snake/x LDZ #01 SUB .arena/w LDZ [ LTHk JMP SWP POP ] .snake/x STZ }
+ DUP #08 NEQ ?{
+ .snake/x LDZ INC .arena/w LDZ DIVk MUL SUB .snake/x STZ }
+ POP
+ ( | detect collision with apple )
+ .snake/x LDZ2 .apple/x LDZ2 NEQ2 ?{
#00 <draw-apple>
.snake/length LDZ INC .snake/length STZ
<add-apple>
<move> }
.snake/length LDZ #01
- &loop-body ( -- )
- ( pop ) DUPk ADD .snake/tail ADD LDZ2 .snake/x LDZ2 NEQ2 ?{
- #01 .snake/dead STZ
- #03 <draw-snake> }
- INC GTHk ?&loop-body
+ &>loop-body ( -- )
+ DUPk ADD .snake/tail ADD LDZ2 .snake/x LDZ2 NEQ2 ?{
+ [ LIT2 01 -snake/dead ] STZ
+ #03 <draw-snake> }
+ INC GTHk ?&>loop-body
POP2 JMP2r
@<add-apple> ( -- )
@@ -110,24 +109,24 @@
STH
( | draw tail )
;snake-icns .Screen/addr DEO2
- .snake/tail .snake/length LDZ DUP ADD OVR ADD SWP
+ [ LIT2 -snake/tail -snake/length ] LDZ DUP ADD OVR ADD SWP
&>loop ( -- )
LDZk #0005 SFT2 .Screen/x DEO2
INCk LDZ #0005 SFT2 .Screen/y DEO2
- STHkr .Screen/sprite DEO
+ DUPr [ LITr -Screen/sprite ] DEOr
INC INC GTHk ?&>loop
POP2
( | draw head )
.snake/x LDZ #0005 SFT2 .Screen/x DEO2
.snake/y LDZ #0005 SFT2 .Screen/y DEO2
;snake-icns/face .Screen/addr DEO2
- STHr .Screen/sprite DEO
+ [ LITr -Screen/sprite ] DEOr
JMP2r
@<draw-apple> ( color -- )
.apple/x LDZ #0005 SFT2 .Screen/x DEO2
.apple/y LDZ #0005 SFT2 .Screen/y DEO2
- ;apple-chr .Screen/addr DEO2
+ STHk ;apple-chr ;fill-icn [ STHr ?{ SWP2 } POP2 ] .Screen/addr DEO2
.Screen/sprite DEO
JMP2r
@@ -136,10 +135,10 @@
.Screen/y DEO2
.snake/length LDZ
( x0 ) DUP #04 SFT <draw-num>
- ( 0x ) !<draw-num>
+ ( >> )
@<draw-num> ( num -- )
- #00 SWP #0f AND #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
+ #000f ROT AND #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
[ LIT2 41 -Screen/sprite ] DEO
JMP2r
@@ -152,6 +151,8 @@
@apple-chr [
0000 76ff ffff 7e3c 1008 0000 0000 0000 ]
+@fill-icn [ ffff ffff ffff ffff ]
+
@font-hex [
007c 8282 8282 827c 0030 1010 1010 1010
007c 8202 7c80 80fe 007c 8202 1c02 827c