diff dis.c @ 2053:3414a4423de1 segacd

Merge from default
author Michael Pavone <pavone@retrodev.com>
date Sat, 15 Jan 2022 13:15:21 -0800
parents 460e14497120
children 1ff67ce37085
line wrap: on
line diff
--- a/dis.c	Sat Jan 05 00:58:08 2019 -0800
+++ b/dis.c	Sat Jan 15 13:15:21 2022 -0800
@@ -269,19 +269,21 @@
 		{
 			*cur = (*cur >> 8) | (*cur << 8);
 		}
-		uint32_t start = filebuf[2] << 16 | filebuf[3];
-		uint32_t int_2 = filebuf[0x68/2] << 16 | filebuf[0x6A/2];
-		uint32_t int_4 = filebuf[0x70/2] << 16 | filebuf[0x72/2];
-		uint32_t int_6 = filebuf[0x78/2] << 16 | filebuf[0x7A/2];
-		named_labels = add_label(named_labels, "start", start);
-		named_labels = add_label(named_labels, "int_2", int_2);
-		named_labels = add_label(named_labels, "int_4", int_4);
-		named_labels = add_label(named_labels, "int_6", int_6);
-		if (!def || !only) {
-			def = defer(start, def);
-			def = defer(int_2, def);
-			def = defer(int_4, def);
-			def = defer(int_6, def);
+		if (!address_off) {
+			uint32_t start = filebuf[2] << 16 | filebuf[3];
+			uint32_t int_2 = filebuf[0x68/2] << 16 | filebuf[0x6A/2];
+			uint32_t int_4 = filebuf[0x70/2] << 16 | filebuf[0x72/2];
+			uint32_t int_6 = filebuf[0x78/2] << 16 | filebuf[0x7A/2];
+			named_labels = add_label(named_labels, "start", start);
+			named_labels = add_label(named_labels, "int_2", int_2);
+			named_labels = add_label(named_labels, "int_4", int_4);
+			named_labels = add_label(named_labels, "int_6", int_6);
+			if (!def || !only) {
+				def = defer(start, def);
+				def = defer(int_2, def);
+				def = defer(int_4, def);
+				def = defer(int_6, def);
+			}
 		}
 	}
 	uint16_t *encoded, *next;
@@ -292,7 +294,7 @@
 			encoded = NULL;
 			address = def->address;
 			if (!is_visited(address)) {
-				encoded = filebuf + (address - address_off)/2;
+				encoded = filebuf + ((address & 0xFFFFFF) - address_off)/2;
 			}
 			tmpd = def;
 			def = def->next;
@@ -302,7 +304,7 @@
 			break;
 		}
 		for(;;) {
-			if (address > address_end || address < address_off) {
+			if ((address & 0xFFFFFF) > address_end || address < address_off) {
 				break;
 			}
 			visit(address);