diff --git a/projects/examples/demos/snake.tal b/projects/examples/demos/snake.tal index 5504ac1..9fbf2a2 100644 --- 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 - #02 .snake/dead LDZ ADD + [ LIT2 02 -snake/dead ] LDZ ADD #83 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 .snake/length LDZ INC .snake/length STZ } .snake/length LDZ #01 - &loop-body ( -- ) - ( pop ) DUPk ADD .snake/tail ADD LDZ2 .snake/x LDZ2 NEQ2 ?{ - #01 .snake/dead STZ - #03 } - INC GTHk ?&loop-body + &>loop-body ( -- ) + DUPk ADD .snake/tail ADD LDZ2 .snake/x LDZ2 NEQ2 ?{ + [ LIT2 01 -snake/dead ] STZ + #03 } + INC GTHk ?&>loop-body POP2 JMP2r @ ( -- ) @@ -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 @ ( 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 - ( 0x ) ! + ( >> ) @ ( 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