Browse code

(wireworld.tal) Updated

Devine Lu Linvega authored on 28/05/2022 17:00:31
Showing 1 changed files
... ...
@@ -1,6 +1,6 @@
1
-( 
1
+(
2 2
 	wireworld
3
-	
3
+
4 4
 	A - conductor
5 5
 	B - tail
6 6
 	Sel - head
... ...
@@ -9,66 +9,45 @@
9 9
 	mouse2 - erase
10 10
 
11 11
 	RULES:
12
-	- electron head(3), becomes electron tail(2)
13
-    - electron tail(2), becomes conductor(1)
14
-    - conductor(1), becomes electron head(3) 
15
-    	if there are exactly 1 or 2 electron heads around it. )
16
-
17
-%+  { ADD }  %-  { SUB }  %*  { MUL }  %/  { DIV }
18
-%<  { LTH }  %>  { GTH }  %=  { EQU }  %!  { NEQ }
19
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
20
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
21
-
22
-%!~ { NEQk NIP }
23
-
24
-%2*  { #10 SFT } %2/  { #01 SFT } %2**  { #10 SFT2 } %2//  { #01 SFT2 }
25
-%4*  { #20 SFT } %4/  { #02 SFT } %4**  { #20 SFT2 } %4//  { #02 SFT2 }
26
-%8*  { #30 SFT } %8/  { #03 SFT } %8**  { #30 SFT2 } %8//  { #03 SFT2 }
27
-%10* { #40 SFT } %10/ { #04 SFT } %10** { #40 SFT2 } %10// { #04 SFT2 }
28
-%20* { #50 SFT } %20/ { #05 SFT } %20** { #50 SFT2 } %20// { #05 SFT2 }
29
-
30
-%RTN   { JMP2r }
31
-%TOS { #00 SWP }
32
-
33
-%WIDTH  { #40 }
34
-%HEIGHT { #40 }
35
-%LENGTH { #1000 }
12
+	- electron head<3>, becomes electron tail<2>
13
+	- electron tail<2>, becomes conductor<1>
14
+	- conductor<1>, becomes electron head<3>
15
+		if there are exactly 1 or 2 electron heads around it. )
36 16
 
37 17
 ( devices )
38 18
 
39
-|00 @System     &vector $2 &wst      $1 &rst    $1 &pad    $4 &r      $2 &g      $2 &b      $2 &debug  $1 &halt $1
40
-|20 @Screen     &vector $2 &width    $2 &height $2 &pad    $2 &x      $2 &y      $2 &addr   $2 &pixel  $1 &sprite $1
41
-|80 @Controller &vector $2 &button   $1 &key    $1 &func   $1
42
-|90 @Mouse      &vector $2 &x        $2 &y      $2 &state  $1 &pad    $3 &modx   $2 &mody   $2
19
+|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
20
+|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
21
+|80 @Controller &vector $2 &button $1 &key $1 &func $1
22
+|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &modx $2 &mody $2
43 23
 
44 24
 |0000
45 25
 
46 26
 @color $1
47
-@pointer 
48
-	&x $2 &y $2
49
-@timer 
50
-	&frame $1 &play $1
27
+@pointer &x $2 &y $2
28
+@timer &frame $1 &play $1
51 29
 
52 30
 ( program )
53 31
 
54 32
 |0100 ( -> )
55 33
 
56
-	( theme ) 
57
-	#0f7f .System/r DEO2 
58
-	#0fe0 .System/g DEO2 
59
-	#0fc0 .System/b DEO2
34
+	( theme )
35
+	#07fe .System/r DEO2
36
+	#07b6 .System/g DEO2
37
+	#0fc6 .System/b DEO2
60 38
 	( size )
61
-	#00 WIDTH 4** .Screen/width DEO2
62
-	#00 HEIGHT 4** .Screen/height DEO2
63
-	( vectors ) 
39
+	#0100 .Screen/width DEO2
40
+	#0100 .Screen/height DEO2
41
+	( vectors )
64 42
 	;on-frame .Screen/vector DEO2
65 43
 	;on-mouse .Mouse/vector DEO2
66 44
 	;on-button .Controller/vector DEO2
67 45
 	( setup )
68 46
 	#01 .timer/play STZ
69 47
 	#01 .color STZ
48
+	( start )
70 49
 	;world ;get-addr/current STA2
71
-	LENGTH ;run/future STA2
50
+	#1000 ;run/future STA2
72 51
 	;redraw JSR2
73 52
 
74 53
 BRK
... ...
@@ -77,8 +56,8 @@ BRK
77 56
 
78 57
 	.timer/play LDZ JMP BRK
79 58
 	( every 4th )
80
-	.timer/frame LDZk 
81
-		#03 AND ,&no-run JCN 
59
+	.timer/frame LDZk
60
+		#03 AND ,&no-run JCN
82 61
 			;run JSR2
83 62
 			&no-run
84 63
 		LDZk INC SWP STZ
... ...
@@ -93,112 +72,162 @@ BRK
93 72
 	.pointer/y LDZ2 .Screen/y DEO2
94 73
 	#40 .Screen/sprite DEO
95 74
 	( draw new cursor )
96
-	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2 
75
+	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2
97 76
 	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2
98
-	#41 .Mouse/state DEI #00 ! + .timer/play LDZ + .Screen/sprite DEO
77
+	#40 .color LDZ ADD .Screen/sprite DEO
99 78
 	( paint )
100
-	.Mouse/state DEI #00 = ,&no-down JCN
101
-		( color ) .color LDZ .Mouse/state DEI #01 > #00 = *
102
-		( cell* ) .Mouse/x DEI2 4// NIP .Mouse/y DEI2 4// NIP
103
-			;get-addr JSR2 STA
104
-		;redraw JSR2
105
-		&no-down
79
+	.Mouse/state DEI ,on-mouse-down JCN
106 80
 
107 81
 BRK
108 82
 
83
+@on-mouse-down ( -> )
84
+
85
+	.Mouse/x DEI2 #03 SFT2 NIP
86
+	.Mouse/y DEI2 #03 SFT2 NIP
87
+	#0202 NEQ2k NIP2 ,&no-color1 JCN
88
+		#01 .color STZ
89
+		#00 .Mouse/state DEO
90
+		POP2 BRK
91
+		&no-color1
92
+	#0302 NEQ2k NIP2 ,&no-color2 JCN
93
+		#02 .color STZ
94
+		#00 .Mouse/state DEO
95
+		POP2 BRK
96
+		&no-color2
97
+	#0402 NEQ2k NIP2 ,&no-color3 JCN
98
+		#03 .color STZ
99
+		#00 .Mouse/state DEO
100
+		POP2 BRK
101
+		&no-color3
102
+	#0602 NEQ2k NIP2 ,&no-toggle JCN
103
+		.timer/play LDZk #00 EQU SWP STZ
104
+		#00 .Mouse/state DEO
105
+		;draw-ui JSR2
106
+		POP2 BRK
107
+		&no-toggle
108
+	POP2
109
+
110
+	( color ) .color LDZ .Mouse/state DEI #01 GTH #00 EQU MUL
111
+	( cell* ) .Mouse/x DEI2 #02 SFT2 NIP .Mouse/y DEI2 #02 SFT2 NIP
112
+		;get-addr JSR2 STA
113
+	;redraw JSR2
114
+
115
+BRK
116
+
117
+@print ( short* -- )
118
+
119
+	SWP ,&byte JSR
120
+	&byte ( byte -- ) DUP #04 SFT ,&char JSR
121
+	&char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO
122
+
123
+JMP2r
124
+
109 125
 @on-button ( -> )
110 126
 
111 127
 	.Controller/button DEI
112
-	[ #01 ] !~ ,&no-a JCN      #01 .color STZ &no-a
113
-	[ #02 ] !~ ,&no-b JCN      #02 .color STZ &no-b
114
-	[ #04 ] !~ ,&no-select JCN #03 .color STZ &no-select
115
-	[ #08 ] !~ ,&no-start JCN
116
-		;world LENGTH 2** ;mclr JSR2
117
-		,redraw JSR
118
-		&no-start
128
+	[ #01 ] NEQk NIP ,&no-a JCN #01 .color STZ &no-a
129
+	[ #02 ] NEQk NIP ,&no-b JCN #02 .color STZ &no-b
130
+	[ #04 ] NEQk NIP ,&no-select JCN #03 .color STZ &no-select
131
+	[ #08 ] NEQk NIP ,&no-start JCN ;world #2000 ;mclr JSR2 ;redraw JSR2 &no-start
119 132
 	POP
120 133
 	( space )
121
-	.Controller/key DEI #20 ! ,&no-space JCN
122
-		.timer/play LDZk #00 = SWP STZ &no-space
134
+	.Controller/key DEI #20 NEQ ,&no-space JCN .timer/play LDZk #00 EQU SWP STZ &no-space
123 135
 
124 136
 BRK
125 137
 
138
+@draw-ui ( -- )
139
+
140
+	( colors )
141
+	#01 .Screen/auto DEO
142
+	#0010 DUP2 .Screen/x DEO2 .Screen/y DEO2
143
+	;color-icn .Screen/addr DEO2
144
+	#01 .Screen/sprite DEO
145
+	#02 .Screen/sprite DEO
146
+	#03 .Screen/sprite DEO
147
+	( toggle )
148
+	#0030 .Screen/x DEO2
149
+	;toggle-icn #00 .timer/play LDZ #30 SFT2 ADD2 .Screen/addr DEO2
150
+	#01 .Screen/sprite DEO
151
+
152
+JMP2r
153
+
126 154
 @redraw ( -- )
127 155
 
128 156
 	;cell-icn .Screen/addr DEO2
129
-	HEIGHT #00
157
+	#4000
130 158
 	&ver
131
-		#00 OVR 4** .Screen/y DEO2
159
+		#00 OVR #20 SFT2 .Screen/y DEO2
132 160
 		STHk
133
-		WIDTH #00
161
+		#4000
134 162
 		&hor
135
-			#00 OVR 4** .Screen/x DEO2
163
+			#00 OVR #20 SFT2 .Screen/x DEO2
136 164
 			DUP STHkr ,get-addr JSR LDA .Screen/sprite DEO
137 165
 			INC GTHk ,&hor JCN
138 166
 		POP2
139 167
 		POPr
140 168
 		INC GTHk ,&ver JCN
141 169
 	POP2
170
+	;draw-ui JSR2
142 171
 
143
-RTN
172
+JMP2r
144 173
 
145 174
 @run ( -- )
146 175
 
147
-	HEIGHT #00
176
+	#40 #00
148 177
 	&ver
149 178
 		STHk
150
-		WIDTH #00
179
+		#40 #00
151 180
 		&hor
152
-			( x,y ) DUP STHkr 
181
+			( x,y ) DUP STHkr
153 182
 			( cell ) DUP2 ,get-addr JSR STH2k LDA
154
-			( transform ) ,transform JSR STH2r [ LIT2 &future $2 ] ++ STA
183
+			( transform ) ,transform JSR STH2r [ LIT2 &future $2 ] ADD2 STA
155 184
 			INC GTHk ,&hor JCN
156 185
 		POP2
157 186
 		POPr
158 187
 		INC GTHk ,&ver JCN
159 188
 	POP2
160 189
 	( Swap worlds )
161
-	;get-addr/current LDA2k ;run/future LDA2 STH2k ++ SWP2 STA2 
162
-	#0000 STH2r -- ;run/future STA2
190
+	;get-addr/current LDA2k ;run/future LDA2 STH2k ADD2 SWP2 STA2
191
+	#0000 STH2r SUB2 ;run/future STA2
163 192
 	,redraw JSR
164 193
 
165
-RTN
194
+JMP2r
166 195
 
167 196
 @get-addr ( x y -- addr* )
168 197
 
169
-	TOS [ #00 WIDTH ] ** ROT TOS ++ [ LIT2 &current $2 ] ++
198
+	#00 SWP #60 SFT2 ROT #00 SWP ADD2 [ LIT2 &current $2 ] ADD2
170 199
 
171
-RTN
200
+JMP2r
172 201
 
173 202
 @transform ( xy cell -- cell )
174 203
 
175
-	DUP #00 ! ,&no-null JCN NIP NIP RTN &no-null
176
-	DUP #03 ! ,&no-head JCN POP POP2 #02 RTN &no-head
177
-	DUP #02 ! ,&no-tail JCN POP POP2 #01 RTN &no-tail
178
-	DUP #01 ! ,&no-cond JCN POP 
204
+	DUP #00 NEQ ,&no-null JCN NIP NIP JMP2r &no-null
205
+	DUP #03 NEQ ,&no-head JCN POP POP2 #02 JMP2r &no-head
206
+	DUP #02 NEQ ,&no-tail JCN POP POP2 #01 JMP2r &no-tail
207
+	DUP #01 NEQ ,&no-cond JCN POP
179 208
 		LITr 00
180
-		DUP2 #01 - ,get-addr JSR 
181
-			( tl ) #0001 -- LDAk #03 ! JMP INCr
182
-			( tc ) INC2 LDAk #03 ! JMP INCr
183
-			( tr ) INC2 LDA #03 ! JMP INCr
209
+		DUP2 #01 SUB ,get-addr JSR
210
+			( tl ) #0001 SUB2 LDAk #03 NEQ JMP INCr
211
+			( tc ) INC2 LDAk #03 NEQ JMP INCr
212
+			( tr ) INC2 LDA #03 NEQ JMP INCr
184 213
 		DUP2 ,get-addr JSR
185
-			( ml ) #0001 -- LDAk #03 ! JMP INCr
186
-			( mr ) INC2 INC2 LDA #03 ! JMP INCr
214
+			( ml ) #0001 SUB2 LDAk #03 NEQ JMP INCr
215
+			( mr ) INC2 INC2 LDA #03 NEQ JMP INCr
187 216
 		INC ,get-addr JSR
188
-			( bl ) #0001 -- LDAk #03 ! JMP INCr
189
-			( bc ) INC2 LDAk #03 ! JMP INCr
190
-			( br ) INC2 LDA #03 ! JMP INCr
191
-		STHkr #02 = STHr #01 = #0000 >>
192
-		#02 * INC RTN 
217
+			( bl ) #0001 SUB2 LDAk #03 NEQ JMP INCr
218
+			( bc ) INC2 LDAk #03 NEQ JMP INCr
219
+			( br ) INC2 LDA #03 NEQ JMP INCr
220
+		STHkr #02 EQU STHr #01 EQU #0000 GTH2
221
+		#10 SFT INC JMP2r
193 222
 		&no-cond
194 223
 	( unknown )
195 224
 	NIP NIP
196 225
 
197
-RTN
226
+JMP2r
198 227
 
199 228
 @mclr ( addr* len* -- )
200 229
 
201
-	OVR2 ++ SWP2
230
+	OVR2 ADD2 SWP2
202 231
 	&loop
203 232
 		STH2k #00 STH2r STA
204 233
 		INC2 GTH2k ,&loop JCN
... ...
@@ -206,15 +235,21 @@ RTN
206 235
 
207 236
 JMP2r
208 237
 
209
-@pointer-icn 
238
+@pointer-icn
210 239
 	80c0 e0f0 f8e0 1000
211
-@cell-icn 
240
+@cell-icn
212 241
 	e0e0 e000 0000 0000
242
+@color-icn
243
+	7cfe fefe fefe 7c00
244
+@toggle-icn
245
+	( pause ) 6666 6666 6666 6600
246
+	( play ) 4666 767e 7666 4600
247
+
213 248
 
214
-( 
215
-	I live in the atom with the happy protons and neutrons. 
216
-	I'm also so negative all the freakin time. 
217
-	What do I do? 
249
+(
250
+	I live in the atom with the happy protons and neutrons.
251
+	I'm also so negative all the freakin time.
252
+	What do I do?
218 253
 	How do I find peace? )
219 254
 
220 255
 @world