# HG changeset patch # User Michael Pavone # Date 1485581257 28800 # Node ID 95f5253e75c75e702d963ffddaad700570fadcd9 # Parent 9d6f155732ed60f2fe8771744433789f861b3605 Implement soft reset in Genesis mode diff -r 9d6f155732ed -r 95f5253e75c7 default.cfg --- a/default.cfg Thu Jan 26 23:49:13 2017 -0800 +++ b/default.cfg Fri Jan 27 21:27:37 2017 -0800 @@ -31,6 +31,7 @@ = ui.next_speed - ui.prev_speed f11 ui.toggle_fullscreen + tab ui.soft_reset } pads { 0 { diff -r 9d6f155732ed -r 95f5253e75c7 genesis.c --- a/genesis.c Thu Jan 26 23:49:13 2017 -0800 +++ b/genesis.c Fri Jan 27 21:27:37 2017 -0800 @@ -790,6 +790,18 @@ gen->master_clock = gen->normal_clock; } +static void handle_reset_requests(genesis_context *gen) +{ + while (gen->reset_requested) + { + gen->reset_requested = 0; + z80_assert_reset(gen->z80, gen->m68k->current_cycle); + z80_clear_busreq(gen->z80, gen->m68k->current_cycle); + //Is there any sort of VDP reset? + m68k_reset(gen->m68k); + } +} + static void start_genesis(system_header *system, char *statefile) { genesis_context *gen = (genesis_context *)system; @@ -815,6 +827,7 @@ } m68k_reset(gen->m68k); } + handle_reset_requests(gen); } static void resume_genesis(system_header *system) @@ -823,6 +836,7 @@ map_all_bindings(&gen->io); render_set_video_standard((gen->version_reg & HZ50) ? VID_PAL : VID_NTSC); resume_68k(gen->m68k); + handle_reset_requests(gen); } static void inc_debug_mode(system_header *system) @@ -878,6 +892,13 @@ } } +static void soft_reset(system_header *system) +{ + genesis_context *gen = (genesis_context *)system; + gen->m68k->should_return = 1; + gen->reset_requested = 1; +} + static void free_genesis(system_header *system) { genesis_context *gen = (genesis_context *)system; @@ -912,6 +933,7 @@ gen->header.resume_context = resume_genesis; gen->header.load_save = load_save; gen->header.persist_save = persist_save; + gen->header.soft_reset = soft_reset; gen->header.free_context = free_genesis; gen->header.get_open_bus_value = get_open_bus_value; gen->header.request_exit = request_exit; diff -r 9d6f155732ed -r 95f5253e75c7 genesis.h --- a/genesis.h Thu Jan 26 23:49:13 2017 -0800 +++ b/genesis.h Fri Jan 27 21:27:37 2017 -0800 @@ -46,6 +46,7 @@ sega_io io; uint8_t version_reg; uint8_t bus_busy; + uint8_t reset_requested; eeprom_state eeprom; }; diff -r 9d6f155732ed -r 95f5253e75c7 io.c --- a/io.c Thu Jan 26 23:49:13 2017 -0800 +++ b/io.c Fri Jan 27 21:27:37 2017 -0800 @@ -71,6 +71,7 @@ UI_PREV_SPEED, UI_RELEASE_MOUSE, UI_TOGGLE_FULLSCREEN, + UI_SOFT_RESET, UI_EXIT } ui_action; @@ -467,6 +468,9 @@ case UI_TOGGLE_FULLSCREEN: render_toggle_fullscreen(); break; + case UI_SOFT_RESET: + current_system->soft_reset(current_system); + break; case UI_EXIT: current_system->request_exit(current_system); break; @@ -637,6 +641,8 @@ *ui_out = UI_RELEASE_MOUSE; } else if (!strcmp(target + 3, "toggle_fullscreen")) { *ui_out = UI_TOGGLE_FULLSCREEN; + } else if (!strcmp(target + 3, "soft_reset")) { + *ui_out = UI_SOFT_RESET; } else if(!strcmp(target + 3, "exit")) { *ui_out = UI_EXIT; } else { diff -r 9d6f155732ed -r 95f5253e75c7 system.h --- a/system.h Thu Jan 26 23:49:13 2017 -0800 +++ b/system.h Fri Jan 27 21:27:37 2017 -0800 @@ -33,6 +33,7 @@ system_fun load_save; system_fun persist_save; system_fun request_exit; + system_fun soft_reset; system_fun free_context; system_fun_r16 get_open_bus_value; speed_system_fun set_speed_percent; diff -r 9d6f155732ed -r 95f5253e75c7 todo.txt --- a/todo.txt Thu Jan 26 23:49:13 2017 -0800 +++ b/todo.txt Fri Jan 27 21:27:37 2017 -0800 @@ -12,7 +12,9 @@ - Overscan - Full screen toggle - Aspect ratio control + - Soft Reset Update Changelog +SMS Pause NMI 0.5.0 Nice to Haves -------------------