Browse code

Added logic/arithmetic symbols to uxnasm

neauoire authored on 11/04/2022 23:07:15
Showing 2 changed files
... ...
@@ -1,10 +1,5 @@
1 1
 ( launcher )
2 2
 
3
-%+  { ADD } %-   { SUB }  %*  { MUL }  %/  { DIV }
4
-%<  { LTH } %>   { GTH }  %=  { EQU }  %!  { NEQ }
5
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
6
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
7
-
8 3
 %2*  { #10 SFT } %2/  { #01 SFT } %2**  { #10 SFT2 } %2//  { #01 SFT2 }
9 4
 %4*  { #20 SFT } %4/  { #02 SFT } %4**  { #20 SFT2 } %4//  { #02 SFT2 }
10 5
 %8*  { #30 SFT } %8/  { #03 SFT } %8**  { #30 SFT2 } %8//  { #03 SFT2 }
... ...
@@ -26,7 +21,7 @@
26 21
 %DEBUG  { ;print-hex/byte JSR2 #0a EMIT }
27 22
 %DEBUG2 { ;print-hex JSR2 #0a EMIT }
28 23
 
29
-%LINES-COUNT { .browser/y2 LDZ2 .browser/y LDZ2 -- 10// NIP }
24
+%LINES-COUNT { .browser/y2 LDZ2 .browser/y LDZ2 SUB2 10// NIP }
30 25
 
31 26
 ( devices )
32 27
 
... ...
@@ -82,7 +77,7 @@
82 77
 	( place )
83 78
 	#0088 .browser/x STZ2
84 79
 	#0010 .browser/y STZ2
85
-	.Screen/height DEI2 #33 SFT2 #0011 -- .browser/y2 STZ2
80
+	.Screen/height DEI2 #33 SFT2 #0011 SUB2 .browser/y2 STZ2
86 81
 
87 82
 	( draw mascot )
88 83
 	#0010 #0010 #0060 #0060 ;mascot-icn #01 ;draw-icn JSR2
... ...
@@ -115,28 +110,28 @@ BRK
115 110
 	( draw new cursor )
116 111
 	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2
117 112
 	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2
118
-	#41 .Mouse/state DEI #01 = + .Screen/sprite DEO
113
+	#41 .Mouse/state DEI #01 EQU ADD .Screen/sprite DEO
119 114
 
120 115
 	( wheel )
121 116
 	.Mouse/scrolly INC DEI
122
-	DUP #ff ! ,&no-up JCN
123
-		.browser/scroll LDZ #00 = ,&no-up JCN
124
-		DUP .browser/scroll LDZ + ;scroll-to JSR2
117
+	DUP #ff NEQ ,&no-up JCN
118
+		.browser/scroll LDZ #00 EQU ,&no-up JCN
119
+		DUP .browser/scroll LDZ ADD ;scroll-to JSR2
125 120
 		&no-up
126
-	DUP #01 ! ,&no-down JCN
127
-		.browser/scroll LDZ .browser/lines LDZ = ,&no-down JCN
128
-		DUP .browser/scroll LDZ + ;scroll-to JSR2
121
+	DUP #01 NEQ ,&no-down JCN
122
+		.browser/scroll LDZ .browser/lines LDZ EQU ,&no-down JCN
123
+		DUP .browser/scroll LDZ ADD ;scroll-to JSR2
129 124
 		&no-down
130 125
 	POP
131 126
 
132 127
 	( within browser )
133
-	.Mouse/y DEI2 .browser/y LDZ2 << ,&outside JCN
134
-	.Mouse/y DEI2 .browser/y2 LDZ2 #0010 -- >> ,&outside JCN
128
+	.Mouse/y DEI2 .browser/y LDZ2 LTH2 ,&outside JCN
129
+	.Mouse/y DEI2 .browser/y2 LDZ2 #0010 SUB2 GTH2 ,&outside JCN
135 130
 	( select choice )
136
-	.Mouse/y DEI2 .browser/y LDZ2 --
137
-		10// NIP .browser/scroll LDZ + ;select-file JSR2
131
+	.Mouse/y DEI2 .browser/y LDZ2 SUB2
132
+		10// NIP .browser/scroll LDZ ADD ;select-file JSR2
138 133
 	( run choice )
139
-	.Mouse/state DEI #00 = ,&no-click JCN
134
+	.Mouse/state DEI #00 EQU ,&no-click JCN
140 135
 		.browser/sel LDZ ;run-file JSR2
141 136
 		&no-click
142 137
 	&outside
... ...
@@ -147,26 +142,26 @@ BRK
147 142
 
148 143
 	( controller )
149 144
 	.Controller/button DEI
150
-	DUP #10 ! ,&no-up JCN
151
-		.browser/sel LDZ #00 = ,&no-up JCN
152
-		.browser/sel LDZ #01 - ;select-file JSR2
145
+	DUP #10 NEQ ,&no-up JCN
146
+		.browser/sel LDZ #00 EQU ,&no-up JCN
147
+		.browser/sel LDZ #01 SUB ;select-file JSR2
153 148
 		;follow-selection JSR2
154 149
 		POP BRK
155 150
 		&no-up
156
-	DUP #20 ! ,&no-down JCN
157
-		.browser/sel LDZ INC .browser/lines LDZ = ,&no-down JCN
151
+	DUP #20 NEQ ,&no-down JCN
152
+		.browser/sel LDZ INC .browser/lines LDZ EQU ,&no-down JCN
158 153
 		.browser/sel LDZ INC ;select-file JSR2
159 154
 		;follow-selection JSR2
160 155
 		POP BRK
161 156
 		&no-down
162
-	DUP #01 ! ,&no-a JCN
157
+	DUP #01 NEQ ,&no-a JCN
163 158
 		.browser/sel LDZ ;run-file JSR2
164 159
 		POP BRK
165 160
 		&no-a
166 161
 	POP
167 162
 	( keyboard )
168 163
 	.Controller/key DEI
169
-	DUP #0d ! ,&no-enter JCN
164
+	DUP #0d NEQ ,&no-enter JCN
170 165
 		.browser/sel LDZ ;run-file JSR2
171 166
 		POP BRK
172 167
 		&no-enter
... ...
@@ -185,7 +180,7 @@ BRK
185 180
 	( split with null-char )
186 181
 	;dir/data
187 182
 	&while
188
-		LDAk #1f > ,&no-lb JCN
183
+		LDAk #1f GTH ,&no-lb JCN
189 184
 			( split ) STH2k #00 STH2r STA
190 185
 			( count lines ) .browser/lines LDZk INC SWP STZ
191 186
 			&no-lb
... ...
@@ -197,23 +192,23 @@ RTN
197 192
 @select-file ( id -- )
198 193
 
199 194
 	( has changed )
200
-	DUP .browser/last LDZ ! ,&has-changed JCN
195
+	DUP .browser/last LDZ NEQ ,&has-changed JCN
201 196
 		POP RTN
202 197
 		&has-changed
203 198
 	( beyond )
204
-	DUP .browser/lines LDZ < ,&valid JCN
199
+	DUP .browser/lines LDZ LTH ,&valid JCN
205 200
 		POP RTN
206 201
 		&valid
207 202
 
208 203
 	#00 ;draw-browser JSR2
209 204
 	DUP .browser/sel STZ
210 205
 	DUP .browser/last STZ
211
-		#30 + .Audio0/pitch DEO
206
+		#30 ADD .Audio0/pitch DEO
212 207
 	#01 ;draw-browser JSR2
213 208
 
214 209
 	( draw mascot )
215 210
 	#0010 #0010 #0060 #0060
216
-	;mascot-icn [ .browser/sel LDZ #03 AND TOS #0480 ** ++ ] #01
211
+	;mascot-icn [ .browser/sel LDZ #03 AND TOS #0480 MUL2 ADD2 ] #01
217 212
 		;draw-icn JSR2
218 213
 
219 214
 	( draw position )
... ...
@@ -222,18 +217,18 @@ RTN
222 217
 	#0080 .Screen/y DEO2
223 218
 	.browser/sel LDZ #02 ;draw-byte JSR2
224 219
 	LIT '/ #02 ;draw-char JSR2
225
-	.browser/lines LDZ #01 - #02 ;draw-byte JSR2
220
+	.browser/lines LDZ #01 SUB #02 ;draw-byte JSR2
226 221
 	AUTO-NONE
227 222
 
228 223
 RTN
229 224
 
230 225
 @follow-selection ( -- )
231 226
 
232
-	LINES-COUNT .browser/sel LDZ .browser/scroll LDZ -
233
-	DUP2 > ,&no-down JCN
227
+	LINES-COUNT .browser/sel LDZ .browser/scroll LDZ SUB
228
+	DUP2 GTH ,&no-down JCN
234 229
 		.browser/scroll LDZ INC ,scroll-to JSR
235 230
 		&no-down
236
-	DUP2 SWP < ,&no-up JCN
231
+	DUP2 SWP LTH ,&no-up JCN
237 232
 		.browser/sel LDZ ,scroll-to JSR
238 233
 		&no-up
239 234
 	POP2
... ...
@@ -245,11 +240,11 @@ RTN
245 240
 	STH
246 241
 	( more lines than visible )
247 242
 	.browser/lines LDZ LINES-COUNT
248
-	DUP2 > ,&can-scroll JCN
243
+	DUP2 GTH ,&can-scroll JCN
249 244
 		POPr POP2 RTN
250 245
 		&can-scroll
251 246
 	( less than max scroll )
252
-	- INC STHkr > ,&valid-scroll JCN
247
+	SUB INC STHkr GTH ,&valid-scroll JCN
253 248
 		POPr RTN
254 249
 		&valid-scroll
255 250
 	#00 ;draw-browser JSR2
... ...
@@ -264,11 +259,11 @@ RTN
264 259
 	#0000 .Controller/button DEO2
265 260
 	#00 .Mouse/state DEO
266 261
 
267
-	;get-entry JSR2 #0005 ++
262
+	;get-entry JSR2 #0005 ADD2
268 263
 	
269 264
 	DUP2 ;check-rom JSR2 ,&valid JCN
270 265
 		( check if tal file )
271
-		DUP2 ;scap JSR2 #0004 -- ;&tal-ext ;scmp JSR2 #01 ! ,&no-tal JCN
266
+		DUP2 ;scap JSR2 #0004 SUB2 ;&tal-ext ;scmp JSR2 #01 NEQ ,&no-tal JCN
272 267
 			( assemble tal file )
273 268
 			DUP2 ;&output-path ;scpy JSR2
274 269
 			;&rom-ext ;&output-path ;scat JSR2
... ...
@@ -297,26 +292,26 @@ RTN
297 292
 @draw-browser ( mask -- )
298 293
 
299 294
 	( when empty )
300
-	.browser/lines LDZ #01 = ;draw-browser-empty JCN2
295
+	.browser/lines LDZ #01 EQU ;draw-browser-empty JCN2
301 296
 
302 297
 	STH
303 298
 
304 299
 	( draw hand )
305
-	.browser/x LDZ2 #0018 -- .browser/y LDZ2
306
-	.browser/sel LDZ .browser/scroll LDZ - TOS 10** ++
300
+	.browser/x LDZ2 #0018 SUB2 .browser/y LDZ2
301
+	.browser/sel LDZ .browser/scroll LDZ SUB TOS 10** ADD2
307 302
 	#0010 #0010
308
-		;hand-icn STHkr #02 * ;draw-icn JSR2
303
+		;hand-icn STHkr #02 MUL ;draw-icn JSR2
309 304
 	( draw files )
310 305
 	LINES-COUNT #00
311 306
 	&loop
312 307
 		( reached end )
313
-		DUP INC .browser/lines LDZ > ,&end JCN
308
+		DUP INC .browser/lines LDZ GTH ,&end JCN
314 309
 		( has file )
315 310
 		.browser/x LDZ2 .Screen/x DEO2
316
-		#00 OVR 10** .browser/y LDZ2 ++ .Screen/y DEO2
317
-		DUP .browser/scroll LDZ + ;get-entry JSR2
311
+		#00 OVR 10** .browser/y LDZ2 ADD2 .Screen/y DEO2
312
+		DUP .browser/scroll LDZ ADD ;get-entry JSR2
318 313
 			DUP2 ;get-type JSR2 ;draw-type JSR2
319
-			#01 STHkr * ;draw-str JSR2
314
+			#01 STHkr MUL ;draw-str JSR2
320 315
 		INC GTHk ,&loop JCN
321 316
 		&end
322 317
 	POP2
... ...
@@ -337,7 +332,7 @@ RTN
337 332
 
338 333
 @get-type ( line* -- type )
339 334
 
340
-	;scap JSR2 #0004 -- ;&rom-ext ;scmp JSR2
335
+	;scap JSR2 #0004 SUB2 ;&rom-ext ;scmp JSR2
341 336
 
342 337
 RTN
343 338
 	&rom-ext ".rom $1
... ...
@@ -348,10 +343,10 @@ RTN
348 343
 	( counter ) LITr 00
349 344
 	;dir/length LDA2 #0000
350 345
 	&loop
351
-		EQUkr STHr #00 = ,&no-reached JCN
352
-			POP2r NIP2 ;dir/data ++ RTN
346
+		EQUkr STHr #00 EQU ,&no-reached JCN
347
+			POP2r NIP2 ;dir/data ADD2 RTN
353 348
 			&no-reached
354
-		DUP2 ;dir/data ++ LDA #00 ! ,&no-lb JCN
349
+		DUP2 ;dir/data ADD2 LDA #00 NEQ ,&no-lb JCN
355 350
 			INCr
356 351
 			&no-lb
357 352
 		INC2 GTH2k ,&loop JCN
... ...
@@ -363,17 +358,17 @@ RTN
363 358
 
364 359
 @draw-type ( type -- )
365 360
 
366
-	STHk TOS 20** ;file-icns ++ .Screen/addr DEO2
361
+	STHk TOS 20** ;file-icns ADD2 .Screen/addr DEO2
367 362
 	AUTO-XADDR
368
-	#02 STHkr - .Screen/sprite DEOk DEO
363
+	#02 STHkr SUB .Screen/sprite DEOk DEO
369 364
 
370
-	.Screen/x DEI2k #0010 -- ROT DEO2
371
-	.Screen/y DEI2k #0008 ++ ROT DEO2
365
+	.Screen/x DEI2k #0010 SUB2 ROT DEO2
366
+	.Screen/y DEI2k #0008 ADD2 ROT DEO2
372 367
 	
373
-	#02 STHr - .Screen/sprite DEOk DEO
368
+	#02 STHr SUB .Screen/sprite DEOk DEO
374 369
 
375
-	.Screen/x DEI2k #0008 ++ ROT DEO2
376
-	.Screen/y DEI2k #0008 -- ROT DEO2
370
+	.Screen/x DEI2k #0008 ADD2 ROT DEO2
371
+	.Screen/y DEI2k #0008 SUB2 ROT DEO2
377 372
 	AUTO-NONE
378 373
 
379 374
 RTN
... ...
@@ -431,10 +426,10 @@ RTN
431 426
 @draw-char ( char color -- )
432 427
 
433 428
 	SWP
434
-	[ #20 - #00 SWP #40 SFT2 ;font ++ ] .Screen/addr DEO2
429
+	[ #20 SUB #00 SWP #40 SFT2 ;font ADD2 ] .Screen/addr DEO2
435 430
 	.Screen/sprite DEOk DEO
436
-	.Screen/x DEI2k #0008 ++ ROT DEO2
437
-	.Screen/y DEI2k #0010 -- ROT DEO2
431
+	.Screen/x DEI2k #0008 ADD2 ROT DEO2
432
+	.Screen/y DEI2k #0010 SUB2 ROT DEO2
438 433
 
439 434
 JMP2r
440 435
 
... ...
@@ -448,7 +443,7 @@ JMP2r
448 443
 	#0006 .File/length DEO2
449 444
 	#fffa .File/read DEO2
450 445
 
451
-	.File/success DEI2 #0006 !! ,&ignore JCN
446
+	.File/success DEI2 #0006 NEQ2 ,&ignore JCN
452 447
 		#fffa LDA2 .System/r DEO2
453 448
 		#fffc LDA2 .System/g DEO2
454 449
 		#fffe LDA2 .System/b DEO2
... ...
@@ -484,10 +479,10 @@ JMP2r
484 479
 
485 480
 	STH2
486 481
 	&loop
487
-		LDAk LDAkr STHr = ,&not-diff JCN
482
+		LDAk LDAkr STHr EQU ,&not-diff JCN
488 483
 			POP2 POP2r #00 RTN
489 484
 			&not-diff
490
-		LDAk LDAkr STHr #0000 !! ,&not-end JCN
485
+		LDAk LDAkr STHr #0000 NEQ2 ,&not-end JCN
491 486
 			POP2 POP2r #01 RTN
492 487
 			&not-end
493 488
 		INC2 INC2r
... ...
@@ -54,8 +54,8 @@ static char ops[][4] = {
54 54
 	"LDZ", "STZ", "LDR", "STR", "LDA", "STA", "DEI", "DEO",
55 55
 	"ADD", "SUB", "MUL", "DIV", "AND", "ORA", "EOR", "SFT"
56 56
 };
57
-static char sym_glyph[] = {'?', '!', '>', '<', '+', '-', '*', '/'};
58
-static Uint8 sym_value[] = {0x08, 0x09, 0x0a, 0x1b, 0x18, 0x19, 0x1a, 0x1b};
57
+static char symchr[] = {'?', '!', '>', '<', '+', '-', '*', '/'};
58
+static Uint8 symval[] = {0x08, 0x09, 0x0a, 0x1b, 0x18, 0x19, 0x1a, 0x1b};
59 59
 
60 60
 static int   scmp(char *a, char *b, int len) { int i = 0; while(a[i] == b[i]) if(!a[i] || ++i >= len) return 1; return 0; } /* string compare */
61 61
 static int   sihx(char *s) { int i = 0; char c; while((c = s[i++])) if(!(c >= '0' && c <= '9') && !(c >= 'a' && c <= 'f')) return 0; return i > 1; } /* string is hexadecimal */
... ...
@@ -101,27 +101,34 @@ findlabel(char *name)
101 101
 	return NULL;
102 102
 }
103 103
 
104
+static Uint8
105
+findmode(char *s)
106
+{
107
+	int i = 0;
108
+	while(s[0]) {
109
+		switch(s[0]) {
110
+		case '2': i |= (1 << 5); break; /* mode: short */
111
+		case 'r': i |= (1 << 6); break; /* mode: return */
112
+		case 'k': i |= (1 << 7); break; /* mode: keep */
113
+		}
114
+		s++;
115
+	}
116
+	return i;
117
+}
118
+
104 119
 static Uint8
105 120
 findopcode(char *s)
106 121
 {
107 122
 	int i;
108 123
 	for(i = 0; i < 0x20; i++) {
109
-		int m = 0;
110 124
 		if(!scmp(ops[i], s, 3))
111 125
 			continue;
112 126
 		if(!i) i |= (1 << 7); /* force keep for LIT */
113
-		while(s[3 + m]) {
114
-			if(s[3 + m] == '2')
115
-				i |= (1 << 5); /* mode: short */
116
-			else if(s[3 + m] == 'r')
117
-				i |= (1 << 6); /* mode: return */
118
-			else if(s[3 + m] == 'k')
119
-				i |= (1 << 7); /* mode: keep */
120
-			else
121
-				return 0; /* failed to match */
122
-			m++;
123
-		}
124
-		return i;
127
+		return i |= findmode(s + 3);
128
+	}
129
+	for(i = 0; i < 0x08; ++i) {
130
+		if(s[0] == symchr[i])
131
+			return symval[i] |= findmode(s + 1);
125 132
 	}
126 133
 	return 0;
127 134
 }