changeset 1078:c4bfbf55d418

Added some hacky support for specifying a start offset in 68K disassembler
author Michael Pavone <pavone@retrodev.com>
date Tue, 04 Oct 2016 18:28:35 -0700
parents 1a66d5165ea7
children 329ff62ea391
files dis.c
diffstat 1 files changed, 10 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/dis.c	Mon Aug 22 09:46:18 2016 -0700
+++ b/dis.c	Tue Oct 04 18:28:35 2016 -0700
@@ -153,6 +153,7 @@
 	uint8_t labels = 0, addr = 0, only = 0, vos = 0, reset = 0;
 	tern_node * named_labels = NULL;
 
+	uint32_t address_off = 0, address_end;
 	for(uint8_t opt = 2; opt < argc; ++opt) {
 		if (argv[opt][0] == '-') {
 			FILE * address_log;
@@ -173,6 +174,14 @@
 			case 'r':
 				reset = 1;
 				break;
+			case 's':
+				opt++;
+				if (opt >= argc) {
+					fputs("-s must be followed by an offset\n", stderr);
+					exit(1);
+				}
+				address_off = strtol(argv[opt], NULL, 0);
+				break;
 			case 'f':
 				opt++;
 				if (opt >= argc) {
@@ -208,14 +217,12 @@
 			}
 		}
 	}
-
 	FILE * f = fopen(argv[1], "rb");
 	fseek(f, 0, SEEK_END);
 	filesize = ftell(f);
 	fseek(f, 0, SEEK_SET);
 
 	char int_key[MAX_INT_KEY_SIZE];
-	uint32_t address_off, address_end;
 	if (vos)
 	{
 		vos_program_module header;
@@ -250,8 +257,7 @@
 			named_labels = add_label(named_labels, "reset", filebuf[2] << 16 | filebuf[3]);
 		}
 	} else {
-		address_off = 0;
-		address_end = filesize;
+		address_end = address_off + filesize;
 		filebuf = malloc(filesize);
 		if (fread(filebuf, 2, filesize/2, f) != filesize/2)
 		{