Mercurial > repos > blastem
comparison genesis.c @ 1595:360d5bab199f
Update controller config when changed in UI without restart
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 06 Jul 2018 17:39:59 -0700 |
parents | 24508cb54f87 |
children | c206a422d466 |
comparison
equal
deleted
inserted
replaced
1594:137dbd05ceab | 1595:360d5bab199f |
---|---|
1188 { | 1188 { |
1189 genesis_context *gen = (genesis_context *)system; | 1189 genesis_context *gen = (genesis_context *)system; |
1190 vdp_free(gen->vdp); | 1190 vdp_free(gen->vdp); |
1191 memmap_chunk *map = (memmap_chunk *)gen->m68k->options->gen.memmap; | 1191 memmap_chunk *map = (memmap_chunk *)gen->m68k->options->gen.memmap; |
1192 m68k_options_free(gen->m68k->options); | 1192 m68k_options_free(gen->m68k->options); |
1193 free(map);//needs to happen after m68k_options_free as that function uses the memory map | |
1194 free(gen->cart); | 1193 free(gen->cart); |
1195 free(gen->m68k); | 1194 free(gen->m68k); |
1196 free(gen->work_ram); | 1195 free(gen->work_ram); |
1197 z80_options_free(gen->z80->options); | 1196 z80_options_free(gen->z80->options); |
1198 free(gen->z80); | 1197 free(gen->z80); |
1199 free(gen->zram); | 1198 free(gen->zram); |
1200 ym_free(gen->ym); | 1199 ym_free(gen->ym); |
1201 psg_free(gen->psg); | 1200 psg_free(gen->psg); |
1202 free(gen->save_storage); | |
1203 free(gen->header.save_dir); | 1201 free(gen->header.save_dir); |
1202 free_rom_info(&gen->header.info); | |
1204 free(gen->lock_on); | 1203 free(gen->lock_on); |
1205 free(gen); | 1204 free(gen); |
1206 } | 1205 } |
1207 | 1206 |
1208 static void gamepad_down(system_header *system, uint8_t gamepad_num, uint8_t button) | 1207 static void gamepad_down(system_header *system, uint8_t gamepad_num, uint8_t button) |
1249 | 1248 |
1250 static void keyboard_up(system_header *system, uint8_t scancode) | 1249 static void keyboard_up(system_header *system, uint8_t scancode) |
1251 { | 1250 { |
1252 genesis_context *gen = (genesis_context *)system; | 1251 genesis_context *gen = (genesis_context *)system; |
1253 io_keyboard_up(&gen->io, scancode); | 1252 io_keyboard_up(&gen->io, scancode); |
1253 } | |
1254 | |
1255 static void config_updated(system_header *system) | |
1256 { | |
1257 genesis_context *gen = (genesis_context *)system; | |
1258 setup_io_devices(config, &system->info, &gen->io); | |
1254 } | 1259 } |
1255 | 1260 |
1256 genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on, uint32_t system_opts, uint8_t force_region) | 1261 genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on, uint32_t system_opts, uint8_t force_region) |
1257 { | 1262 { |
1258 static memmap_chunk z80_map[] = { | 1263 static memmap_chunk z80_map[] = { |
1281 gen->header.mouse_up = mouse_up; | 1286 gen->header.mouse_up = mouse_up; |
1282 gen->header.mouse_motion_absolute = mouse_motion_absolute; | 1287 gen->header.mouse_motion_absolute = mouse_motion_absolute; |
1283 gen->header.mouse_motion_relative = mouse_motion_relative; | 1288 gen->header.mouse_motion_relative = mouse_motion_relative; |
1284 gen->header.keyboard_down = keyboard_down; | 1289 gen->header.keyboard_down = keyboard_down; |
1285 gen->header.keyboard_up = keyboard_up; | 1290 gen->header.keyboard_up = keyboard_up; |
1291 gen->header.config_updated = config_updated; | |
1286 gen->header.type = SYSTEM_GENESIS; | 1292 gen->header.type = SYSTEM_GENESIS; |
1293 gen->header.info = *rom; | |
1287 set_region(gen, rom, force_region); | 1294 set_region(gen, rom, force_region); |
1288 | 1295 |
1289 gen->vdp = malloc(sizeof(vdp_context)); | 1296 gen->vdp = malloc(sizeof(vdp_context)); |
1290 init_vdp_context(gen->vdp, gen->version_reg & 0x40); | 1297 init_vdp_context(gen->vdp, gen->version_reg & 0x40); |
1291 gen->vdp->system = &gen->header; | 1298 gen->vdp->system = &gen->header; |
1404 } | 1411 } |
1405 | 1412 |
1406 return gen; | 1413 return gen; |
1407 } | 1414 } |
1408 | 1415 |
1409 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) | 1416 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) |
1410 { | 1417 { |
1411 static memmap_chunk base_map[] = { | 1418 static memmap_chunk base_map[] = { |
1412 {0xE00000, 0x1000000, 0xFFFF, 0, 0, MMAP_READ | MMAP_WRITE | MMAP_CODE, NULL, | 1419 {0xE00000, 0x1000000, 0xFFFF, 0, 0, MMAP_READ | MMAP_WRITE | MMAP_CODE, NULL, |
1413 NULL, NULL, NULL, NULL}, | 1420 NULL, NULL, NULL, NULL}, |
1414 {0xC00000, 0xE00000, 0x1FFFFF, 0, 0, 0, NULL, | 1421 {0xC00000, 0xE00000, 0x1FFFFF, 0, 0, 0, NULL, |
1420 }; | 1427 }; |
1421 static tern_node *rom_db; | 1428 static tern_node *rom_db; |
1422 if (!rom_db) { | 1429 if (!rom_db) { |
1423 rom_db = load_rom_db(); | 1430 rom_db = load_rom_db(); |
1424 } | 1431 } |
1425 *info_out = configure_rom(rom_db, rom, rom_size, lock_on, lock_on_size, base_map, sizeof(base_map)/sizeof(base_map[0])); | 1432 rom_info info = configure_rom(rom_db, rom, rom_size, lock_on, lock_on_size, base_map, sizeof(base_map)/sizeof(base_map[0])); |
1426 rom = info_out->rom; | 1433 rom = info.rom; |
1427 rom_size = info_out->rom_size; | 1434 rom_size = info.rom_size; |
1428 #ifndef BLASTEM_BIG_ENDIAN | 1435 #ifndef BLASTEM_BIG_ENDIAN |
1429 byteswap_rom(rom_size, rom); | 1436 byteswap_rom(rom_size, rom); |
1430 if (lock_on) { | 1437 if (lock_on) { |
1431 byteswap_rom(lock_on_size, lock_on); | 1438 byteswap_rom(lock_on_size, lock_on); |
1432 } | 1439 } |
1437 } | 1444 } |
1438 MCLKS_PER_68K = atoi(m68k_divider); | 1445 MCLKS_PER_68K = atoi(m68k_divider); |
1439 if (!MCLKS_PER_68K) { | 1446 if (!MCLKS_PER_68K) { |
1440 MCLKS_PER_68K = 7; | 1447 MCLKS_PER_68K = 7; |
1441 } | 1448 } |
1442 return alloc_init_genesis(info_out, rom, lock_on, ym_opts, force_region); | 1449 return alloc_init_genesis(&info, rom, lock_on, ym_opts, force_region); |
1443 } | 1450 } |