Mercurial > repos > simple16
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;