# HG changeset patch # User Michael Pavone # Date 1460433414 25200 # Node ID fec4a59ae5d738cb6d4edbb5f1a89a72a96647cf # Parent 938c72a2f7a94c560f7c2c462a7373bba392c0da# Parent f87522554d7b562fdb4a78ecef93a67a543f05ea Merge diff -r 938c72a2f7a9 -r fec4a59ae5d7 blastem.c --- 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, diff -r 938c72a2f7a9 -r fec4a59ae5d7 default.cfg --- 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 diff -r 938c72a2f7a9 -r fec4a59ae5d7 dis.c --- 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 #include #include +#include #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)