summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2020-02-16 10:46:35 -0800
committerMichael Pavone <pavone@retrodev.com>2020-02-16 10:46:35 -0800
commit66fbb0badf0f4bd2fe29daff7e572cdc60ab72f4 (patch)
tree4d3c4983017960c512157e65d566a76272fb8c0f
parentc8680028c6fc9570f6b8324285fed925d19f053c (diff)
Set version reg and TAS behavior based on model config
-rw-r--r--config.c3
-rw-r--r--genesis.c11
2 files changed, 11 insertions, 3 deletions
diff --git a/config.c b/config.c
index 9874166..36a36db 100644
--- a/config.c
+++ b/config.c
@@ -6,6 +6,7 @@
#include "tern.h"
#include "util.h"
#include "paths.h"
+#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -334,6 +335,6 @@ tern_node *get_systems_config(void)
tern_node *get_model(tern_node *config, system_type stype)
{
- char *model = tern_find_path_default(config, "system\0model\0", (tern_val){.ptrval = "md1va3"}, TVAL_PTR);
+ char *model = tern_find_path_default(config, "system\0model\0", (tern_val){.ptrval = "md1va3"}, TVAL_PTR).ptrval;
return tern_find_node(get_systems_config(), model);
}
diff --git a/genesis.c b/genesis.c
index 114ab80..ad21944 100644
--- a/genesis.c
+++ b/genesis.c
@@ -18,6 +18,7 @@
#include "saves.h"
#include "bindings.h"
#include "jcart.h"
+#include "config.h"
#define MCLKS_NTSC 53693175
#define MCLKS_PAL 53203395
@@ -1405,6 +1406,11 @@ genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on
gen->header.type = SYSTEM_GENESIS;
gen->header.info = *rom;
set_region(gen, rom, force_region);
+ tern_node *model = get_model(config, SYSTEM_GENESIS);
+ uint8_t tmss = !strcmp(tern_find_ptr_default(model, "tmss", "off"), "on");
+ if (tmss) {
+ gen->version_reg |= 1;
+ }
gen->vdp = init_vdp_context(gen->version_reg & 0x40);
gen->vdp->system = &gen->header;
@@ -1504,8 +1510,9 @@ genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on
m68k_options *opts = malloc(sizeof(m68k_options));
init_m68k_opts(opts, rom->map, rom->map_chunks, MCLKS_PER_68K);
- //TODO: make this configurable
- opts->gen.flags |= M68K_OPT_BROKEN_READ_MODIFY;
+ if (!strcmp(tern_find_ptr_default(model, "tas", "broken"), "broken")) {
+ opts->gen.flags |= M68K_OPT_BROKEN_READ_MODIFY;
+ }
gen->m68k = init_68k_context(opts, NULL);
gen->m68k->system = gen;
opts->address_log = (system_opts & OPT_ADDRESS_LOG) ? fopen("address.log", "w") : NULL;