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 | { |