Mercurial > repos > blastem
comparison blastem.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 | b7ecd0d6a77b 9b8fe6729877 |
comparison
equal
deleted
inserted
replaced
1594:137dbd05ceab | 1595:360d5bab199f |
---|---|
246 warning("Failed to create save directory %s\n", save_dir); | 246 warning("Failed to create save directory %s\n", save_dir); |
247 } | 247 } |
248 return save_dir; | 248 return save_dir; |
249 } | 249 } |
250 | 250 |
251 void setup_saves(system_media *media, rom_info *info, system_header *context) | 251 void setup_saves(system_media *media, system_header *context) |
252 { | 252 { |
253 static uint8_t persist_save_registered; | 253 static uint8_t persist_save_registered; |
254 rom_info *info = &context->info; | |
254 char *save_dir = get_save_dir(info->is_save_lock_on ? media->chain : media); | 255 char *save_dir = get_save_dir(info->is_save_lock_on ? media->chain : media); |
255 char const *parts[] = {save_dir, PATH_SEP, info->save_type == SAVE_I2C ? "save.eeprom" : info->save_type == SAVE_NOR ? "save.nor" : "save.sram"}; | 256 char const *parts[] = {save_dir, PATH_SEP, info->save_type == SAVE_I2C ? "save.eeprom" : info->save_type == SAVE_NOR ? "save.nor" : "save.sram"}; |
256 free(save_filename); | 257 free(save_filename); |
257 save_filename = alloc_concat_m(3, parts); | 258 save_filename = alloc_concat_m(3, parts); |
258 if (info->is_save_lock_on) { | 259 if (info->is_save_lock_on) { |
279 } | 280 } |
280 | 281 |
281 void apply_updated_config(void) | 282 void apply_updated_config(void) |
282 { | 283 { |
283 render_config_updated(); | 284 render_config_updated(); |
285 if (current_system && current_system->config_updated) { | |
286 current_system->config_updated(current_system); | |
287 } | |
284 } | 288 } |
285 | 289 |
286 static void on_drag_drop(const char *filename) | 290 static void on_drag_drop(const char *filename) |
287 { | 291 { |
288 if (current_system) { | 292 if (current_system) { |
375 stype = detect_system_type(&cart); | 379 stype = detect_system_type(&cart); |
376 } | 380 } |
377 if (stype == SYSTEM_UNKNOWN) { | 381 if (stype == SYSTEM_UNKNOWN) { |
378 fatal_error("Failed to detect system type for %s\n", path); | 382 fatal_error("Failed to detect system type for %s\n", path); |
379 } | 383 } |
380 rom_info info; | |
381 //allocate new system context | 384 //allocate new system context |
382 game_system = alloc_config_system(stype, &cart, opts, force_region, &info); | 385 game_system = alloc_config_system(stype, &cart, opts, force_region); |
383 if (!game_system) { | 386 if (!game_system) { |
384 fatal_error("Failed to configure emulated machine for %s\n", path); | 387 fatal_error("Failed to configure emulated machine for %s\n", path); |
385 } | 388 } |
386 if (menu_system) { | 389 if (menu_system) { |
387 menu_system->next_context = game_system; | 390 menu_system->next_context = game_system; |
388 } | 391 } |
389 game_system->next_context = menu_system; | 392 game_system->next_context = menu_system; |
390 setup_saves(&cart, &info, game_system); | 393 setup_saves(&cart, game_system); |
391 update_title(info.name); | 394 update_title(game_system->info.name); |
392 free(info.name); | |
393 } | 395 } |
394 | 396 |
395 int main(int argc, char ** argv) | 397 int main(int argc, char ** argv) |
396 { | 398 { |
397 set_exe_str(argv[0]); | 399 set_exe_str(argv[0]); |
611 stype = detect_system_type(&cart); | 613 stype = detect_system_type(&cart); |
612 } | 614 } |
613 if (stype == SYSTEM_UNKNOWN) { | 615 if (stype == SYSTEM_UNKNOWN) { |
614 fatal_error("Failed to detect system type for %s\n", romfname); | 616 fatal_error("Failed to detect system type for %s\n", romfname); |
615 } | 617 } |
616 rom_info info; | 618 current_system = alloc_config_system(stype, &cart, menu ? 0 : opts, force_region); |
617 current_system = alloc_config_system(stype, &cart, menu ? 0 : opts, force_region, &info); | |
618 if (!current_system) { | 619 if (!current_system) { |
619 fatal_error("Failed to configure emulated machine for %s\n", romfname); | 620 fatal_error("Failed to configure emulated machine for %s\n", romfname); |
620 } | 621 } |
621 | 622 |
622 setup_saves(&cart, &info, current_system); | 623 setup_saves(&cart, current_system); |
623 update_title(info.name); | 624 update_title(current_system->info.name); |
624 free(info.name); | |
625 if (menu) { | 625 if (menu) { |
626 menu_system = current_system; | 626 menu_system = current_system; |
627 } else { | 627 } else { |
628 game_system = current_system; | 628 game_system = current_system; |
629 } | 629 } |