changeset 59:b15187a99d6f default tip

Add a command line option for printing out label addresses on the command line. Useful for debugging purposes.
author Michael Pavone <pavone@retrodev.com>
date Wed, 07 Sep 2016 23:15:27 -0700
parents bed2d84eeabe
children
files src/asm.c
diffstat 1 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/asm.c	Tue Sep 06 09:42:31 2016 -0700
+++ b/src/asm.c	Wed Sep 07 23:15:27 2016 -0700
@@ -445,7 +445,7 @@
 	return 1;
 }
 
-uint8_t assemble_file(FILE *input, FILE *output)
+uint8_t assemble_file(FILE *input, FILE *output, uint8_t print_labels)
 {
 	//fixed size buffers are lame, but so are lines longer than 4K characters
 	//this is good enough for the really simple first version
@@ -656,14 +656,20 @@
 			}
 		}
 	}
+	if (print_labels) {
+		for (int i = 0; i < labels.num_labels; i++)
+		{
+			printf("%s: %X\n", labels.labels[i].name, labels.labels[i].address);
+		}
+	}
 	if (pc == fwrite(outbuf, 1, pc, output)) {
 		free_labels(&labels);
-		return 1;
+		return 0;
 	}
 	fputs("Error writing to output file\n", stderr);
 error:
 	free_labels(&labels);
-	return 0;
+	return 1;
 }
 
 
@@ -683,7 +689,8 @@
 		fprintf(stderr, "Failed to open %s for writing\n", argv[2]);
 		return 1;
 	}
-	int ret = assemble_file(infile, outfile);
+	uint8_t print_labels = argc > 3 && !strcmp("-l", argv[3]);
+	int ret = assemble_file(infile, outfile, print_labels);
 	fclose(infile);
 	fclose(outfile);
 	return ret;