summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/debugger/win/debugwininfo.cpp
diff options
context:
space:
mode:
author vadosnaprimer <feos-theos@yandex.ru>2017-12-12 20:41:38 +0300
committer vadosnaprimer <feos-theos@yandex.ru>2017-12-22 04:39:14 +0300
commit7e7f2fafd0cd75e1b4771d6b7bb03e88684f19d5 (patch)
treee0300d031bccad4683a61cc95dcdf3f5a0c7cd8d /src/osd/modules/debugger/win/debugwininfo.cpp
parentbb0de21e6755b8508b7f002bc15da56bfca68506 (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.cpp20
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"));