changeset 951:fec4a59ae5d7

Merge
author Michael Pavone <pavone@retrodev.com>
date Mon, 11 Apr 2016 20:56:54 -0700
parents 938c72a2f7a9 (current diff) f87522554d7b (diff)
children 7f4a7f07f325
files blastem.c
diffstat 3 files changed, 41 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/blastem.c	Mon Apr 11 20:56:48 2016 -0700
+++ b/blastem.c	Mon Apr 11 20:56:54 2016 -0700
@@ -27,8 +27,8 @@
 #define MCLKS_NTSC 53693175
 #define MCLKS_PAL  53203395
 
-#define MCLKS_PER_68K 7
-#define MCLKS_PER_YM  MCLKS_PER_68K
+uint32_t MCLKS_PER_68K;
+#define MCLKS_PER_YM  7
 #define MCLKS_PER_Z80 15
 #define MCLKS_PER_PSG (MCLKS_PER_Z80*16)
 #define DEFAULT_SYNC_INTERVAL MCLKS_LINE
@@ -1086,7 +1086,7 @@
 	uint8_t menu = !loaded;
 	if (!loaded) {
 		//load menu
-		romfname = tern_find_path(config, "ui\rom\0").ptrval;
+		romfname = tern_find_path(config, "ui\0rom\0").ptrval;
 		if (!romfname) {
 			romfname = "menu.bin";
 		}
@@ -1109,6 +1109,14 @@
 
 		loaded = 1;
 	}
+	char *m68k_divider = tern_find_path(config, "clocks\0m68k_divider\0").ptrval;
+	if (!m68k_divider) {
+		m68k_divider = "7";
+	}
+	MCLKS_PER_68K = atoi(m68k_divider);
+	if (!MCLKS_PER_68K) {
+		MCLKS_PER_68K = 7;
+	}
 	ram = malloc(RAM_WORDS * sizeof(uint16_t));
 	memmap_chunk base_map[] = {
 		{0xE00000, 0x1000000, 0xFFFF,   0, MMAP_READ | MMAP_WRITE | MMAP_CODE, ram,
--- a/default.cfg	Mon Apr 11 20:56:48 2016 -0700
+++ b/default.cfg	Mon Apr 11 20:56:54 2016 -0700
@@ -116,6 +116,7 @@
 }
 
 clocks {
+	m68k_divider 7
 	max_cycles 3420
 	speeds {
 		1 150
--- a/dis.c	Mon Apr 11 20:56:48 2016 -0700
+++ b/dis.c	Mon Apr 11 20:56:54 2016 -0700
@@ -8,8 +8,10 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#include <ctype.h>
 #include "vos_program_module.h"
 #include "tern.h"
+#include "util.h"
 
 uint8_t visited[(16*1024*1024)/16];
 uint16_t label[(16*1024*1024)/8];
@@ -123,6 +125,22 @@
 	}
 }
 
+char * strip_ws(char * text)
+{
+	while (*text && (!isprint(*text) || isblank(*text)))
+	{
+		text++;
+	}
+	char * ret = text;
+	text = ret + strlen(ret) - 1;
+	while (text > ret && (!isprint(*text) || isblank(*text)))
+	{
+		*text = 0;
+		text--;
+	}
+	return ret;
+}
+
 int main(int argc, char ** argv)
 {
 	long filesize;
@@ -133,6 +151,7 @@
 	deferred *def = NULL, *tmpd;
 
 	uint8_t labels = 0, addr = 0, only = 0, vos = 0, reset = 0;
+	tern_node * named_labels = NULL;
 
 	for(uint8_t opt = 2; opt < argc; ++opt) {
 		if (argv[opt][0] == '-') {
@@ -167,18 +186,26 @@
 				}
 				while (fgets(disbuf, sizeof(disbuf), address_log)) {
 				 	if (disbuf[0]) {
-						uint32_t address = strtol(disbuf, NULL, 16);
+						char *end;
+						uint32_t address = strtol(disbuf, &end, 16);
 						if (address) {
 							def = defer(address, def);
 							reference(address);
+							if (*end == '=') {
+								named_labels = add_label(named_labels, strip_ws(end+1), address);
+							}
 						}
 					}
 				}
 			}
 		} else {
-			uint32_t address = strtol(argv[opt], NULL, 16);
+			char *end;
+			uint32_t address = strtol(argv[opt], &end, 16);
 			def = defer(address, def);
 			reference(address);
+			if (*end == '=') {
+				named_labels = add_label(named_labels, end+1, address);
+			}
 		}
 	}
 
@@ -187,7 +214,6 @@
 	filesize = ftell(f);
 	fseek(f, 0, SEEK_SET);
 
-	tern_node * named_labels = NULL;
 	char int_key[MAX_INT_KEY_SIZE];
 	uint32_t address_off, address_end;
 	if (vos)