diff options
author | 2017-12-12 20:41:38 +0300 | |
---|---|---|
committer | 2017-12-22 04:39:14 +0300 | |
commit | 7e7f2fafd0cd75e1b4771d6b7bb03e88684f19d5 (patch) | |
tree | e0300d031bccad4683a61cc95dcdf3f5a0c7cd8d /src/osd/modules/debugger/win/debugwininfo.cpp | |
parent | bb0de21e6755b8508b7f002bc15da56bfca68506 (diff) |
rewind implementation fixes and improvements
- reset scheduler savestate to what it was for years before rewind
-- changing saved variables should be done after thorough testing. right now, adding some vars breaks some machines, adding other vars breaks others
- switch to megabyte-wise capacity
-- savestate size greatly differs between machines, relying on state count is unstable
- switch to internal indexing
-- no longer depends on inaccurate machine time
- rewind accelerator key in debugger (Ctrl+F11)
- report capacity hit (once), with some useful info
- make error reports saner
- mention rewind and rewind_capacity in the docs
Diffstat (limited to 'src/osd/modules/debugger/win/debugwininfo.cpp')
-rw-r--r-- | src/osd/modules/debugger/win/debugwininfo.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/osd/modules/debugger/win/debugwininfo.cpp b/src/osd/modules/debugger/win/debugwininfo.cpp index 2f2b43a429a..ac60b980439 100644 --- a/src/osd/modules/debugger/win/debugwininfo.cpp +++ b/src/osd/modules/debugger/win/debugwininfo.cpp @@ -201,8 +201,10 @@ bool debugwin_info::handle_key(WPARAM wparam, LPARAM lparam) return true; case VK_F11: - if (GetAsyncKeyState(VK_SHIFT) & 0x8000) + if ((GetAsyncKeyState(VK_SHIFT) & 0x8000) && ((GetAsyncKeyState(VK_CONTROL) & 0x8000) == 0)) SendMessage(m_wnd, WM_COMMAND, ID_STEP_OUT, 0); + else if (GetAsyncKeyState(VK_CONTROL) & 0x8000) + SendMessage(m_wnd, WM_COMMAND, ID_REWIND_STEP, 0); else SendMessage(m_wnd, WM_COMMAND, ID_STEP, 0); return true; @@ -325,6 +327,21 @@ bool debugwin_info::handle_command(WPARAM wparam, LPARAM lparam) machine().debugger().cpu().get_visible_cpu()->debug()->single_step_out(); return true; + case ID_REWIND_STEP: + machine().rewind_step(); + + // clear all PC & memory tracks + for (device_t &device : device_iterator(machine().root_device())) + { + device.debug()->track_pc_data_clear(); + device.debug()->track_mem_data_clear(); + } + + // update debugger and emulator window + machine().debug_view().update_all(); + machine().debugger().refresh_display(); + return true; + case ID_HARD_RESET: machine().schedule_hard_reset(); return true; @@ -533,6 +550,7 @@ HMENU debugwin_info::create_standard_menubar() AppendMenu(debugmenu, MF_ENABLED, ID_STEP, TEXT("Step Into\tF11")); AppendMenu(debugmenu, MF_ENABLED, ID_STEP_OVER, TEXT("Step Over\tF10")); AppendMenu(debugmenu, MF_ENABLED, ID_STEP_OUT, TEXT("Step Out\tShift+F11")); + AppendMenu(debugmenu, MF_ENABLED, ID_REWIND_STEP, TEXT("Rewind Step\tCtrl+F11")); AppendMenu(debugmenu, MF_DISABLED | MF_SEPARATOR, 0, TEXT("")); AppendMenu(debugmenu, MF_ENABLED, ID_SOFT_RESET, TEXT("Soft Reset\tF3")); AppendMenu(debugmenu, MF_ENABLED, ID_HARD_RESET, TEXT("Hard Reset\tShift+F3")); |