diff dis.c @ 151:6b593ea0ed90

Implement MULU/MULS and DIVU/DIVS
author Mike Pavone <pavone@retrodev.com>
date Thu, 03 Jan 2013 22:07:40 -0800
parents 4a400aec81bb
children afbfb0ac0256
line wrap: on
line diff
--- a/dis.c	Tue Jan 01 09:40:17 2013 -0800
+++ b/dis.c	Thu Jan 03 22:07:40 2013 -0800
@@ -63,6 +63,7 @@
 
 uint8_t labels = 0;
 uint8_t addr = 0;
+uint8_t only = 0;
 
 int main(int argc, char ** argv)
 {
@@ -78,6 +79,7 @@
 	filebuf = malloc(filesize);
 	fread(filebuf, 2, filesize/2, f);
 	fclose(f);
+	deferred *def = NULL, *tmpd;
 	for(uint8_t opt = 2; opt < argc; ++opt) {
 		if (argv[opt][0] == '-') {
 			switch (argv[opt][1])
@@ -88,7 +90,14 @@
 			case 'a':
 				addr = 1;
 				break;
+			case 'o':
+				only = 1;
+				break;
 			}
+		} else {
+			uint32_t address = strtol(argv[opt], NULL, 16);
+			def = defer(address, def);
+			reference(address);
 		}
 	}
 	for(cur = filebuf; cur - filebuf < (filesize/2); ++cur)
@@ -101,11 +110,12 @@
 	uint32_t int_6 = filebuf[0x78/2] << 16 | filebuf[0x7A/2];
 	uint16_t *encoded, *next;
 	uint32_t size;
-	deferred *def = NULL, *tmpd;
-	def = defer(start, def);
-	def = defer(int_2, def);
-	def = defer(int_4, def);
-	def = defer(int_6, def);
+	if (!def || !only) {
+		def = defer(start, def);
+		def = defer(int_2, def);
+		def = defer(int_4, def);
+		def = defer(int_6, def);
+	}
 	uint32_t address;
 	while(def) {
 		do {