Remove memory copying from wireworld

- Store two world buffers and swap between them each update
This commit is contained in:
DeltaF1 2022-01-22 18:49:32 -05:00 committed by neauoire
parent 0932e4165b
commit 774dd27a53
1 changed files with 15 additions and 18 deletions

View File

@ -64,6 +64,10 @@
( setup ) ( setup )
#01 .timer/play STZ #01 .timer/play STZ
#01 .color STZ #01 .color STZ
;world-a ;get-addr/current STA2
LENGTH ;run/future-offset STA2
;redraw JSR2 ;redraw JSR2
BRK BRK
@ -75,7 +79,12 @@ BRK
.timer/frame LDZk .timer/frame LDZk
#03 AND ,&no-run JCN #03 AND ,&no-run JCN
;run JSR2 ;run JSR2
;past-world LENGTH ++ ;past-world LENGTH ;mcpy JSR2
( Swap worlds )
;get-addr/current LDA2k ;run/future-offset LDA2 STH2k ( ;current current* offest* )
++ SWP2 STA2 ( Set new current page )
#0000 STH2r -- ;run/future-offset STA2 ( Invert offest )
;redraw JSR2 ;redraw JSR2
&no-run &no-run
LDZk INC SWP STZ LDZk INC SWP STZ
@ -149,7 +158,7 @@ RTN
&hor &hor
( x,y ) DUP STHkr ( x,y ) DUP STHkr
( cell ) DUP2 ,get-addr JSR STH2k LDA ( cell ) DUP2 ,get-addr JSR STH2k LDA
( transform ) ,transform JSR STH2r ( future ) LENGTH ++ STA ( transform ) ,transform JSR STH2r ( future ) LIT2 &future-offset 0000 ++ STA
INC GTHk ,&hor JCN INC GTHk ,&hor JCN
POP2 POP2
POPr POPr
@ -160,7 +169,7 @@ RTN
@get-addr ( x y -- addr* ) @get-addr ( x y -- addr* )
TOS [ #00 WIDTH ] ** ROT TOS ++ ;past-world ++ TOS [ #00 WIDTH ] ** ROT TOS ++ LIT2 &current 0000 ++
RTN RTN
@ -190,18 +199,6 @@ RTN
RTN RTN
@mcpy ( src* dst* len* -- )
SWP2 STH2
OVR2 ++ SWP2
&loop
LDAk STH2kr STA INC2r
INC2 GTH2k ,&loop JCN
POP2 POP2
POP2r
JMP2r
@mclr ( addr* len* -- ) @mclr ( addr* len* -- )
OVR2 ++ SWP2 OVR2 ++ SWP2
@ -223,4 +220,4 @@ JMP2r
What do I do? What do I do?
How do I find peace? ) How do I find peace? )
@past-world @world-a