changeset 632:80e111b48d4b

Add -r option to indicate VOS program module contains a 68K reset vector
author Michael Pavone <pavone@retrodev.com>
date Sat, 11 Oct 2014 21:20:02 -0700
parents de6f00204fa2
children a759f4e38488
files dis.c
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/dis.c	Sat Oct 11 20:32:17 2014 -0700
+++ b/dis.c	Sat Oct 11 21:20:02 2014 -0700
@@ -108,7 +108,7 @@
 	unsigned short * cur;
 	deferred *def = NULL, *tmpd;
 
-	uint8_t labels = 0, addr = 0, only = 0, vos = 0;
+	uint8_t labels = 0, addr = 0, only = 0, vos = 0, reset = 0;
 
 	for(uint8_t opt = 2; opt < argc; ++opt) {
 		if (argv[opt][0] == '-') {
@@ -127,6 +127,9 @@
 			case 'v':
 				vos = 1;
 				break;
+			case 'r':
+				reset = 1;
+				break;
 			case 'f':
 				opt++;
 				if (opt >= argc) {
@@ -174,7 +177,10 @@
 		named_labels = add_label(named_labels, "main_entry_link", header.main_entry_link.code_address);
 		for (int i = 0; i < header.n_modules; i++)
 		{
-			def = defer(header.module_map_entries[i].code_address, def);
+			if (!reset || header.module_map_entries[i].code_address != header.user_boundary)
+			{
+				def = defer(header.module_map_entries[i].code_address, def);
+			}
 			named_labels = add_label(named_labels, header.module_map_entries[i].name.str, header.module_map_entries[i].code_address);
 		}
 		fseek(f, 0x1000, SEEK_SET);
@@ -188,6 +194,11 @@
 		{
 			*cur = (*cur >> 8) | (*cur << 8);
 		}
+		if (reset)
+		{
+			def = defer(filebuf[2] << 16 | filebuf[3], def);
+			named_labels = add_label(named_labels, "reset", filebuf[2] << 16 | filebuf[3]);
+		}
 	} else {
 		address_off = 0;
 		address_end = filesize;