trunk/src/osd/modules/debugger/win/disasmbasewininfo.c
r243673 | r243674 | |
34 | 34 | // create the options menu |
35 | 35 | HMENU const optionsmenu = CreatePopupMenu(); |
36 | 36 | AppendMenu(optionsmenu, MF_ENABLED, ID_TOGGLE_BREAKPOINT, TEXT("Toggle breakpoint at cursor\tF9")); |
| 37 | AppendMenu(optionsmenu, MF_ENABLED, ID_DISABLE_BREAKPOINT, TEXT("Disable breakpoint at cursor\tShift+F9")); |
37 | 38 | AppendMenu(optionsmenu, MF_ENABLED, ID_RUN_TO_CURSOR, TEXT("Run to cursor\tF4")); |
38 | 39 | AppendMenu(optionsmenu, MF_DISABLED | MF_SEPARATOR, 0, TEXT("")); |
39 | 40 | AppendMenu(optionsmenu, MF_ENABLED, ID_SHOW_RAW, TEXT("Raw opcodes\tCtrl+R")); |
r243673 | r243674 | |
74 | 75 | |
75 | 76 | switch (wparam) |
76 | 77 | { |
77 | | /* ajg - steals the F4 from the global key handler - but ALT+F4 didn't work anyways ;) */ |
| 78 | // ajg - steals the F4 from the global key handler - but ALT+F4 didn't work anyways ;) |
78 | 79 | case VK_F4: |
79 | 80 | SendMessage(window(), WM_COMMAND, ID_RUN_TO_CURSOR, 0); |
80 | 81 | return true; |
81 | 82 | |
82 | 83 | case VK_F9: |
83 | | SendMessage(window(), WM_COMMAND, ID_TOGGLE_BREAKPOINT, 0); |
| 84 | if (GetAsyncKeyState(VK_SHIFT) & 0x8000) |
| 85 | SendMessage(window(), WM_COMMAND, ID_DISABLE_BREAKPOINT, 0); |
| 86 | else |
| 87 | SendMessage(window(), WM_COMMAND, ID_TOGGLE_BREAKPOINT, 0); |
84 | 88 | return true; |
85 | 89 | |
86 | 90 | case VK_RETURN: |
87 | | if (m_views[0]->cursor_visible()) |
| 91 | if (m_views[0]->cursor_visible() && m_views[0]->source_is_visible_cpu()) |
88 | 92 | { |
89 | 93 | SendMessage(window(), WM_COMMAND, ID_STEP, 0); |
90 | 94 | return true; |
r243673 | r243674 | |
108 | 112 | { |
109 | 113 | offs_t const address = dasmview->selected_address(); |
110 | 114 | device_debug *const debug = dasmview->source_device()->debug(); |
111 | | INT32 bpindex = -1; |
112 | 115 | |
113 | 116 | // first find an existing breakpoint at this address |
114 | | for (device_debug::breakpoint *bp = debug->breakpoint_first(); bp != NULL; bp = bp->next()) |
| 117 | device_debug::breakpoint *bp = debug->breakpoint_first(); |
| 118 | while ((bp != NULL) && (bp->address() != address)) |
| 119 | bp = bp->next(); |
| 120 | |
| 121 | if (bp == NULL) |
115 | 122 | { |
116 | | if (address == bp->address()) |
117 | | { |
118 | | bpindex = bp->index(); |
119 | | break; |
120 | | } |
| 123 | ModifyMenu(menu, ID_TOGGLE_BREAKPOINT, MF_BYCOMMAND, ID_TOGGLE_BREAKPOINT, TEXT("Set breakpoint at cursor\tF9")); |
| 124 | ModifyMenu(menu, ID_DISABLE_BREAKPOINT, MF_BYCOMMAND, ID_DISABLE_BREAKPOINT, TEXT("Disable breakpoint at cursor\tShift+F9")); |
121 | 125 | } |
122 | | |
123 | | if (bpindex == -1) |
124 | | ModifyMenu(menu, ID_TOGGLE_BREAKPOINT, MF_BYCOMMAND, ID_TOGGLE_BREAKPOINT, TEXT("Set breakpoint at cursor\tF9")); |
125 | 126 | else |
| 127 | { |
126 | 128 | ModifyMenu(menu, ID_TOGGLE_BREAKPOINT, MF_BYCOMMAND, ID_TOGGLE_BREAKPOINT, TEXT("Clear breakpoint at cursor\tF9")); |
| 129 | if (bp->enabled()) |
| 130 | ModifyMenu(menu, ID_DISABLE_BREAKPOINT, MF_BYCOMMAND, ID_DISABLE_BREAKPOINT, TEXT("Disable breakpoint at cursor\tShift+F9")); |
| 131 | else |
| 132 | ModifyMenu(menu, ID_DISABLE_BREAKPOINT, MF_BYCOMMAND, ID_DISABLE_BREAKPOINT, TEXT("Enable breakpoint at cursor\tShift+F9")); |
| 133 | } |
| 134 | EnableMenuItem(menu, ID_DISABLE_BREAKPOINT, MF_BYCOMMAND | (bp != NULL ? MF_ENABLED : MF_GRAYED)); |
127 | 135 | } |
128 | 136 | else |
129 | 137 | { |
130 | 138 | ModifyMenu(menu, ID_TOGGLE_BREAKPOINT, MF_BYCOMMAND, ID_TOGGLE_BREAKPOINT, TEXT("Toggle breakpoint at cursor\tF9")); |
| 139 | ModifyMenu(menu, ID_DISABLE_BREAKPOINT, MF_BYCOMMAND, ID_DISABLE_BREAKPOINT, TEXT("Disable breakpoint at cursor\tShift+F9")); |
| 140 | EnableMenuItem(menu, ID_DISABLE_BREAKPOINT, MF_BYCOMMAND | MF_GRAYED); |
131 | 141 | } |
132 | 142 | EnableMenuItem(menu, ID_TOGGLE_BREAKPOINT, MF_BYCOMMAND | (disasm_cursor_visible ? MF_ENABLED : MF_GRAYED)); |
133 | 143 | EnableMenuItem(menu, ID_RUN_TO_CURSOR, MF_BYCOMMAND | (disasm_cursor_visible ? MF_ENABLED : MF_GRAYED)); |
r243673 | r243674 | |
194 | 204 | } |
195 | 205 | return true; |
196 | 206 | |
| 207 | case ID_DISABLE_BREAKPOINT: |
| 208 | if (dasmview->cursor_visible()) |
| 209 | { |
| 210 | offs_t const address = dasmview->selected_address(); |
| 211 | device_debug *const debug = dasmview->source_device()->debug(); |
| 212 | |
| 213 | // first find an existing breakpoint at this address |
| 214 | device_debug::breakpoint *bp = debug->breakpoint_first(); |
| 215 | while ((bp != NULL) && (bp->address() != address)) |
| 216 | bp = bp->next(); |
| 217 | |
| 218 | // if it doesn't exist, add a new one |
| 219 | if (bp != NULL) |
| 220 | { |
| 221 | if (dasmview->source_is_visible_cpu()) |
| 222 | { |
| 223 | astring command; |
| 224 | command.printf(bp->enabled() ? "bpdisable 0x%X" : "bpenable 0x%X", (UINT32)bp->index()); |
| 225 | debug_console_execute_command(machine(), command, 1); |
| 226 | } |
| 227 | else |
| 228 | { |
| 229 | debug->breakpoint_enable(bp->index(), !bp->enabled()); |
| 230 | debug_console_printf(machine(), "Breakpoint %X %s\n", (UINT32)bp->index(), bp->enabled() ? "enabled" : "disabled"); |
| 231 | machine().debug_view().update_all(); |
| 232 | debugger_refresh_display(machine()); |
| 233 | } |
| 234 | } |
| 235 | } |
| 236 | return true; |
| 237 | |
197 | 238 | case ID_RUN_TO_CURSOR: |
198 | 239 | if (dasmview->cursor_visible()) |
199 | 240 | { |