Browse code

Remove memory copying from wireworld

- Store two world buffers and swap between them each update

DeltaF1 authored on 22/01/2022 23:49:32 • neauoire committed on 23/01/2022 00:29:08
Showing 1 changed files
... ...
@@ -64,6 +64,10 @@
64 64
 	( setup )
65 65
 	#01 .timer/play STZ
66 66
 	#01 .color STZ
67
+
68
+	;world-a ;get-addr/current STA2
69
+	LENGTH ;run/future-offset STA2
70
+
67 71
 	;redraw JSR2
68 72
 
69 73
 BRK
... ...
@@ -74,8 +78,13 @@ BRK
74 78
 	( every 4th )
75 79
 	.timer/frame LDZk 
76 80
 		#03 AND ,&no-run JCN 
77
-			;run JSR2 
78
-			;past-world LENGTH ++ ;past-world LENGTH ;mcpy JSR2
81
+			;run JSR2
82
+
83
+			( Swap worlds )
84
+			;get-addr/current LDA2k ;run/future-offset LDA2 STH2k ( ;current current* offest* )
85
+			++ SWP2 STA2 ( Set new current page )
86
+			#0000 STH2r -- ;run/future-offset STA2 ( Invert offest )
87
+
79 88
 			;redraw JSR2
80 89
 			&no-run
81 90
 		LDZk INC SWP STZ
... ...
@@ -148,8 +157,8 @@ RTN
148 157
 		WIDTH #00
149 158
 		&hor
150 159
 			( x,y ) DUP STHkr 
151
-			( cell ) DUP2 ,get-addr JSR STH2k LDA 
152
-			( transform ) ,transform JSR STH2r ( future ) LENGTH ++ STA
160
+			( cell ) DUP2 ,get-addr JSR STH2k LDA
161
+			( transform ) ,transform JSR STH2r ( future ) LIT2 &future-offset 0000 ++ STA
153 162
 			INC GTHk ,&hor JCN
154 163
 		POP2
155 164
 		POPr
... ...
@@ -160,7 +169,7 @@ RTN
160 169
 
161 170
 @get-addr ( x y -- addr* )
162 171
 
163
-	TOS [ #00 WIDTH ] ** ROT TOS ++ ;past-world ++
172
+	TOS [ #00 WIDTH ] ** ROT TOS ++ LIT2 &current 0000 ++
164 173
 
165 174
 RTN
166 175
 
... ...
@@ -190,18 +199,6 @@ RTN
190 199
 
191 200
 RTN
192 201
 
193
-@mcpy ( src* dst* len* -- )
194
-
195
-	SWP2 STH2
196
-	OVR2 ++ SWP2
197
-	&loop
198
-		LDAk STH2kr STA INC2r
199
-		INC2 GTH2k ,&loop JCN
200
-	POP2 POP2
201
-	POP2r
202
-
203
-JMP2r
204
-
205 202
 @mclr ( addr* len* -- )
206 203
 
207 204
 	OVR2 ++ SWP2
... ...
@@ -223,4 +220,4 @@ JMP2r
223 220
 	What do I do? 
224 221
 	How do I find peace? )
225 222
 
226
-@past-world 
223
+@world-a