Browse code

Minor cleanup in assembler

neauoire authored on 19/04/2021 16:29:39
Showing 1 changed files
... ...
@@ -301,8 +301,7 @@ parsetoken(char *w)
301 301
 			return 0;
302 302
 		}
303 303
 		pushbyte((Sint8)(l->addr - p.ptr - 3), 1);
304
-		l->refs++;
305
-		return 1;
304
+		return ++l->refs;
306 305
 	} else if(w[0] == '=' && (l = findlabel(w + 1))) {
307 306
 		if(!findlabellen(w + 1) || findlabellen(w + 1) > 2)
308 307
 			return error("Invalid store helper", w);
... ...
@@ -313,8 +312,7 @@ parsetoken(char *w)
313 312
 			pushshort(findlabeladdr(w + 1), 1);
314 313
 			pushbyte(findopcode(findlabellen(w + 1) == 2 ? "STR2" : "POK2"), 0);
315 314
 		}
316
-		l->refs++;
317
-		return 1;
315
+		return ++l->refs;
318 316
 	} else if(w[0] == '~' && (l = findlabel(w + 1))) {
319 317
 		if(!findlabellen(w + 1) || findlabellen(w + 1) > 2)
320 318
 			return error("Invalid load helper", w);
... ...
@@ -325,18 +323,15 @@ parsetoken(char *w)
325 323
 			pushshort(findlabeladdr(w + 1), 1);
326 324
 			pushbyte(findopcode(findlabellen(w + 1) == 2 ? "LDR2" : "PEK2"), 0);
327 325
 		}
328
-		l->refs++;
329
-		return 1;
330
-	} else if((op = findopcode(w)) || scmp(w, "BRK", 4)) {
331
-		pushbyte(op, 0);
332
-		return 1;
326
+		return ++l->refs;
333 327
 	} else if(w[0] == '.' && (l = findlabel(w + 1))) {
334 328
 		pushshort(findlabeladdr(w + 1), 0);
335
-		l->refs++;
336
-		return 1;
329
+		return ++l->refs;
337 330
 	} else if(w[0] == ',' && (l = findlabel(w + 1))) {
338 331
 		pushshort(findlabeladdr(w + 1), 1);
339
-		l->refs++;
332
+		return ++l->refs;
333
+	} else if((op = findopcode(w)) || scmp(w, "BRK", 4)) {
334
+		pushbyte(op, 0);
340 335
 		return 1;
341 336
 	} else if(w[0] == '#') {
342 337
 		if(slen(w + 1) == 1)
... ...
@@ -425,9 +420,8 @@ pass2(FILE *f)
425 420
 			scpy(w + 1, scope, 64);
426 421
 			continue;
427 422
 		}
428
-		if(w[1] == '$') {
423
+		if(w[1] == '$')
429 424
 			scpy(sublabel(subw, scope, w + 2), w + 1, 64);
430
-		}
431 425
 		if(skipblock(w, &cbits, '[', ']')) {
432 426
 			if(w[0] == '[' || w[0] == ']') { continue; }
433 427
 			if(slen(w) == 4 && sihx(w))
... ...
@@ -436,9 +430,8 @@ pass2(FILE *f)
436 430
 				pushbyte(shex(w), 0);
437 431
 			else
438 432
 				pushtext(w, 0);
439
-		} else if(!parsetoken(w)) {
433
+		} else if(!parsetoken(w))
440 434
 			return error("Unknown label in second pass", w);
441
-		}
442 435
 	}
443 436
 	return 1;
444 437
 }
... ...
@@ -460,18 +453,12 @@ int
460 453
 main(int argc, char *argv[])
461 454
 {
462 455
 	FILE *f;
463
-	if(argc < 3) {
464
-		error("Input", "Missing");
465
-		return 1;
466
-	}
467
-	if(!(f = fopen(argv[1], "r"))) {
468
-		error("Open", "Failed");
469
-		return 1;
470
-	}
471
-	if(!pass1(f) || !pass2(f)) {
472
-		error("Assembly", "Failed");
473
-		return 1;
474
-	}
456
+	if(argc < 3)
457
+		return !error("Input", "Missing");
458
+	if(!(f = fopen(argv[1], "r")))
459
+		return !error("Open", "Failed");
460
+	if(!pass1(f) || !pass2(f))
461
+		return !error("Assembly", "Failed");
475 462
 	fwrite(p.data + OFFSET, p.ptr - OFFSET, 1, fopen(argv[2], "wb"));
476 463
 	fclose(f);
477 464
 	cleanup(argv[2]);