diff dis.c @ 197:7c227a8ec53d

Add instruction address logging to translator and support for reading an address log to the disassembler
author Mike Pavone <pavone@retrodev.com>
date Thu, 17 Jan 2013 20:00:07 -0800
parents afbfb0ac0256
children 140af5509ce7
line wrap: on
line diff
--- a/dis.c	Thu Jan 17 08:19:29 2013 -0800
+++ b/dis.c	Thu Jan 17 20:00:07 2013 -0800
@@ -82,6 +82,7 @@
 	deferred *def = NULL, *tmpd;
 	for(uint8_t opt = 2; opt < argc; ++opt) {
 		if (argv[opt][0] == '-') {
+			FILE * address_log;
 			switch (argv[opt][1])
 			{
 			case 'l':
@@ -93,6 +94,26 @@
 			case 'o':
 				only = 1;
 				break;
+			case 'f':
+				opt++;
+				if (opt >= argc) {
+					fputs("-f must be followed by a filename\n", stderr);
+					exit(1);
+				}
+				address_log = fopen(argv[opt], "r");
+				if (!address_log) {
+					fprintf(stderr, "Failed to open %s for reading\n", argv[opt]);
+					exit(1);
+				}
+				while (fgets(disbuf, sizeof(disbuf), address_log)) {
+				 	if (disbuf[0]) {
+						uint32_t address = strtol(disbuf, NULL, 16);
+						if (address) {
+							def = defer(address, def);
+							reference(address);
+						}
+					}
+				}
 			}
 		} else {
 			uint32_t address = strtol(argv[opt], NULL, 16);