summaryrefslogtreecommitdiff
path: root/genesis.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2018-07-06 17:39:59 -0700
committerMichael Pavone <pavone@retrodev.com>2018-07-06 17:39:59 -0700
commit480b9bb35341fb64afbd0ab6e18b978b2cd6d4f8 (patch)
tree061bc36100397b99945c51a2010a506482fcccbd /genesis.c
parentaad75c86365b71d625a730a0d42c6537a9016feb (diff)
Update controller config when changed in UI without restart
Diffstat (limited to 'genesis.c')
-rw-r--r--genesis.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/genesis.c b/genesis.c
index 942ee38..b9b1668 100644
--- a/genesis.c
+++ b/genesis.c
@@ -1190,7 +1190,6 @@ static void free_genesis(system_header *system)
vdp_free(gen->vdp);
memmap_chunk *map = (memmap_chunk *)gen->m68k->options->gen.memmap;
m68k_options_free(gen->m68k->options);
- free(map);//needs to happen after m68k_options_free as that function uses the memory map
free(gen->cart);
free(gen->m68k);
free(gen->work_ram);
@@ -1199,8 +1198,8 @@ static void free_genesis(system_header *system)
free(gen->zram);
ym_free(gen->ym);
psg_free(gen->psg);
- free(gen->save_storage);
free(gen->header.save_dir);
+ free_rom_info(&gen->header.info);
free(gen->lock_on);
free(gen);
}
@@ -1253,6 +1252,12 @@ static void keyboard_up(system_header *system, uint8_t scancode)
io_keyboard_up(&gen->io, scancode);
}
+static void config_updated(system_header *system)
+{
+ genesis_context *gen = (genesis_context *)system;
+ setup_io_devices(config, &system->info, &gen->io);
+}
+
genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on, uint32_t system_opts, uint8_t force_region)
{
static memmap_chunk z80_map[] = {
@@ -1283,7 +1288,9 @@ genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on
gen->header.mouse_motion_relative = mouse_motion_relative;
gen->header.keyboard_down = keyboard_down;
gen->header.keyboard_up = keyboard_up;
+ gen->header.config_updated = config_updated;
gen->header.type = SYSTEM_GENESIS;
+ gen->header.info = *rom;
set_region(gen, rom, force_region);
gen->vdp = malloc(sizeof(vdp_context));
@@ -1406,7 +1413,7 @@ genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on
return gen;
}
-genesis_context *alloc_config_genesis(void *rom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, uint32_t ym_opts, uint8_t force_region, rom_info *info_out)
+genesis_context *alloc_config_genesis(void *rom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, uint32_t ym_opts, uint8_t force_region)
{
static memmap_chunk base_map[] = {
{0xE00000, 0x1000000, 0xFFFF, 0, 0, MMAP_READ | MMAP_WRITE | MMAP_CODE, NULL,
@@ -1422,9 +1429,9 @@ genesis_context *alloc_config_genesis(void *rom, uint32_t rom_size, void *lock_o
if (!rom_db) {
rom_db = load_rom_db();
}
- *info_out = configure_rom(rom_db, rom, rom_size, lock_on, lock_on_size, base_map, sizeof(base_map)/sizeof(base_map[0]));
- rom = info_out->rom;
- rom_size = info_out->rom_size;
+ rom_info info = configure_rom(rom_db, rom, rom_size, lock_on, lock_on_size, base_map, sizeof(base_map)/sizeof(base_map[0]));
+ rom = info.rom;
+ rom_size = info.rom_size;
#ifndef BLASTEM_BIG_ENDIAN
byteswap_rom(rom_size, rom);
if (lock_on) {
@@ -1439,5 +1446,5 @@ genesis_context *alloc_config_genesis(void *rom, uint32_t rom_size, void *lock_o
if (!MCLKS_PER_68K) {
MCLKS_PER_68K = 7;
}
- return alloc_init_genesis(info_out, rom, lock_on, ym_opts, force_region);
+ return alloc_init_genesis(&info, rom, lock_on, ym_opts, force_region);
}