Browse code

Stripped zero bytes at end of assembled ROM

Andrew Alderwick authored on 20/04/2021 19:56:43
Showing 1 changed files
... ...
@@ -30,7 +30,7 @@ typedef struct {
30 30
 
31 31
 typedef struct {
32 32
 	Uint8 data[256 * 256], llen, mlen;
33
-	Uint16 ptr;
33
+	Uint16 ptr, length;
34 34
 	Label labels[256];
35 35
 	Macro macros[256];
36 36
 } Program;
... ...
@@ -64,6 +64,7 @@ pushbyte(Uint8 b, int lit)
64 64
 {
65 65
 	if(lit) pushbyte(0x01, 0);
66 66
 	p.data[p.ptr++] = b;
67
+	p.length = p.ptr;
67 68
 }
68 69
 
69 70
 void
... ...
@@ -338,7 +339,7 @@ void
338 339
 cleanup(char *filename)
339 340
 {
340 341
 	int i;
341
-	printf("Assembled %s(%d bytes), %d labels, %d macros.\n\n", filename, (p.ptr - TRIM), p.llen, p.mlen);
342
+	printf("Assembled %s(%d bytes), %d labels, %d macros.\n\n", filename, (p.length - TRIM), p.llen, p.mlen);
342 343
 	for(i = 0; i < p.llen; ++i)
343 344
 		if(!p.labels[i].refs)
344 345
 			printf("--- Unused label: %s\n", p.labels[i].name);
... ...
@@ -357,7 +358,7 @@ main(int argc, char *argv[])
357 358
 		return !error("Open", "Failed");
358 359
 	if(!pass1(f) || !pass2(f))
359 360
 		return !error("Assembly", "Failed");
360
-	fwrite(p.data + TRIM, p.ptr - TRIM, 1, fopen(argv[2], "wb"));
361
+	fwrite(p.data + TRIM, p.length - TRIM, 1, fopen(argv[2], "wb"));
361 362
 	fclose(f);
362 363
 	cleanup(argv[2]);
363 364
 	return 0;