Browse code

Optimized life

neauoire authored on 17/08/2021 22:24:37
Showing 2 changed files
... ...
@@ -54,9 +54,9 @@ then
54 54
 fi
55 55
 
56 56
 echo "Assembling.."
57
-./bin/uxnasm projects/examples/demos/piano.tal bin/piano.rom
57
+./bin/uxnasm projects/examples/demos/life.tal bin/life.rom
58 58
 
59 59
 echo "Running.."
60
-./bin/uxnemu bin/piano.rom
60
+./bin/uxnemu bin/life.rom
61 61
 
62 62
 echo "Done."
... ...
@@ -4,22 +4,28 @@
4 4
 	Any live cell with more than three live neighbours dies, as if by overpopulation.
5 5
 	Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction. )
6 6
 
7
-%+  { ADD } %-   { SUB }  %*  { MUL } %/   { DIV }
7
+%+  { ADD } %-   { SUB } 
8 8
 %<  { LTH } %>   { GTH }  %=  { EQU } %!   { NEQ }
9
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
9
+%++ { ADD2 } %-- { SUB2 } 
10 10
 %<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
11 11
 
12
-%TOS  { #00 SWP } %TOB  { NIP }
13
-%RTN  { JMP2r }   %MOD  { DUP2 / * - }
14
-%MOD8 { #07 AND } %MOD2 { #01 AND }
15
-%SFL  { #40 SFT SFT }
12
+%2/  { #01 SFT }
13
+%8/  { #03 SFT }
16 14
 %2//  { #01 SFT2 } %8//  { #03 SFT2 }
17 15
 %2**  { #10 SFT2 } %8**  { #30 SFT2 }
16
+%40** { #60 SFT2 }
17
+%8MOD { #07 AND } %2MOD { #01 AND }
18
+
19
+%TOS  { #00 SWP } 
20
+%RTN  { JMP2r }   
21
+%SFL  { #40 SFT SFT }
18 22
 
19 23
 %WIDTH { #40 }   %HEIGHT { #40 }
24
+%WIDTH-MOD { #3f AND }   %HEIGHT-MOD { #3f AND }
25
+
20 26
 %BANK1 { #8000 } %BANK2 { #a000 }
21 27
 
22
-%GET-SIZE { WIDTH TOS 8// HEIGHT TOS ** }
28
+%GET-SIZE { WIDTH TOS 8// 40** }
23 29
 %GET-ITERATORS { SWP2k POP NIP }
24 30
 %GET-ITER { OVR2 NIP OVR SWP }
25 31
 
... ...
@@ -72,7 +78,7 @@ BRK
72 78
 	
73 79
 	.Mouse/state DEI #00 = #01 JCN [ BRK ]
74 80
 
75
-	( incr frame ) .world/frame LDZ #01 + [ DUP ] .world/frame STZ
81
+	( incr frame ) .world/frame LDZ INC [ DUP ] .world/frame STZ
76 82
 	( reset count ) #0000 .world/count STZ2
77 83
 
78 84
 	#03 AND #00 = #01 JCN [ BRK ] 
... ...
@@ -94,10 +100,10 @@ BRK
94 100
 			( neighbours ) DUP2 ;get-neighbours JSR2
95 101
 			( state ) ROT ROT ;get-cell JSR2
96 102
 			,run-cell JSR
97
-			SWP #01 + SWP
103
+			SWP INC SWP
98 104
 			LTHk ,&hor JCN
99 105
 		POP2
100
-		SWP #01 + SWP
106
+		SWP INC SWP
101 107
 		LTHk ,&ver JCN
102 108
 	POP2
103 109
 
... ...
@@ -131,13 +137,13 @@ RTN
131 137
 @save-cell ( x y -- )
132 138
 	
133 139
 	( get index )
134
-	HEIGHT MOD SWP WIDTH MOD SWP
135
-	WIDTH #08 / TOS ROT TOS ** ROT #08 / TOS ++ [ BANK2 ++ ]
140
+	HEIGHT-MOD SWP WIDTH-MOD SWP
141
+	TOS 8** ROT 8/ TOS ++ [ BANK2 ++ ]
136 142
 	( incr count )
137
-	.world/count LDZ2 #0001 ADD2 .world/count STZ2
143
+	.world/count LDZ2 INC2 .world/count STZ2
138 144
 	( save in buffer )
139 145
 	STH2
140
-	DUP2 POP MOD8 #01 SWP SFL 
146
+	DUP2 POP 8MOD #01 SWP SFL 
141 147
 	LDAkr STHr SWP ORA
142 148
 	STH2r STA
143 149
 
... ...
@@ -160,12 +166,12 @@ RTN
160 166
 
161 167
 	.Mouse/state DEI #00 ! #01 JCN [ BRK ]
162 168
 
163
-	.Mouse/x DEI2 DUP2 .anchor/x LDZ2 >> ROT ROT .anchor/x LDZ2 WIDTH DUP ADD TOS ++ #0001 ++ << #0101 ==
169
+	.Mouse/x DEI2 DUP2 .anchor/x LDZ2 >> ROT ROT .anchor/x LDZ2 WIDTH DUP ADD TOS ++ INC2 << #0101 ==
164 170
 	.Mouse/y DEI2 DUP2 .anchor/y LDZ2 >> ROT ROT .anchor/y LDZ2 HEIGHT DUP ADD TOS ++ << #0101 ==
165 171
 	#0101 == #01 JCN [ BRK ]
166 172
 
167
-	.Mouse/x DEI2 .anchor/x LDZ2 SUB2 #02 / TOB
168
-	.Mouse/y DEI2 .anchor/y LDZ2 SUB2 #02 / TOB
173
+	.Mouse/x DEI2 .anchor/x LDZ2 SUB2 2/ NIP
174
+	.Mouse/y DEI2 .anchor/y LDZ2 SUB2 2/ NIP
169 175
 	;set-cell JSR2
170 176
 	
171 177
 	;draw-grid JSR2
... ...
@@ -199,25 +205,25 @@ BRK
199 205
 		WIDTH #00
200 206
 		&hor
201 207
 			DUP TOS 2** .anchor/x LDZ2 ++ .Screen/x DEO2
202
-			GET-ITER ,get-cell JSR #01 + .Screen/pixel DEO
203
-			#01 + GTHk ,&hor JCN
208
+			GET-ITER ,get-cell JSR INC .Screen/pixel DEO
209
+			INC GTHk ,&hor JCN
204 210
 		POP2
205
-		#01 + GTHk ,&ver JCN
211
+		INC GTHk ,&ver JCN
206 212
 	POP2
207 213
 
208 214
 RTN
209 215
 
210 216
 @get-index ( x y -- index* )
211 217
 	
212
-	HEIGHT MOD SWP WIDTH MOD SWP
213
-	WIDTH #08 / TOS ROT TOS ** ROT #08 / TOS ++ [ BANK1 ++ ]
218
+	HEIGHT-MOD SWP WIDTH-MOD SWP
219
+	TOS 8** ROT 8/ TOS ++ [ BANK1 ++ ]
214 220
 
215 221
 RTN
216 222
 
217 223
 @set-cell ( x y -- )
218 224
 	
219 225
 	DUP2 ,get-index JSR STH2
220
-	POP MOD8 #01 SWP SFL 
226
+	POP 8MOD #01 SWP SFL 
221 227
 	LDAkr STHr SWP ORA
222 228
 	STH2r STA
223 229
 
... ...
@@ -227,8 +233,8 @@ RTN
227 233
 	
228 234
 	DUP2 ,get-index JSR LDA 
229 235
 	NIP SWP
230
-	MOD8
231
-	SFT MOD2
236
+	8MOD
237
+	SFT 2MOD
232 238
 
233 239
 RTN 
234 240
 
... ...
@@ -236,12 +242,12 @@ RTN
236 242
 	
237 243
 	( -1,-1 ) DUP2 #01 - [ SWP #01 - SWP ] ,get-cell JSR STH
238 244
 	(  0,-1 ) DUP2 #01 -      ,get-cell JSR STH ADDr
239
-	( +1,-1 ) DUP2 #01 - [ SWP #01 + SWP ] ,get-cell JSR STH ADDr
245
+	( +1,-1 ) DUP2 #01 - [ SWP INC SWP ] ,get-cell JSR STH ADDr
240 246
 	( -1, 0 ) DUP2       [ SWP #01 - SWP ] ,get-cell JSR STH ADDr
241
-	( +1, 0 ) DUP2       [ SWP #01 + SWP ] ,get-cell JSR STH ADDr
242
-	( -1,+1 ) DUP2 #01 + [ SWP #01 - SWP ] ,get-cell JSR STH ADDr
243
-	(  0,+1 ) DUP2 #01 +      ,get-cell JSR STH ADDr
244
-	( +1,+1 )      #01 + [ SWP #01 + SWP ] ,get-cell JSR STH ADDr
247
+	( +1, 0 ) DUP2       [ SWP INC SWP ] ,get-cell JSR STH ADDr
248
+	( -1,+1 ) DUP2 INC [ SWP #01 - SWP ] ,get-cell JSR STH ADDr
249
+	(  0,+1 ) DUP2 INC      ,get-cell JSR STH ADDr
250
+	( +1,+1 )      INC [ SWP INC SWP ] ,get-cell JSR STH ADDr
245 251
 	STHr
246 252
 
247 253
 RTN