diff options
Diffstat (limited to 'src/osd/modules/debugger')
-rw-r--r-- | src/osd/modules/debugger/debugosx.mm | 98 | ||||
-rw-r--r-- | src/osd/modules/debugger/debugqt.cpp | 2 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/debugview.mm | 2 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/debugwindowhandler.h | 1 | ||||
-rw-r--r-- | src/osd/modules/debugger/osx/debugwindowhandler.mm | 15 |
5 files changed, 115 insertions, 3 deletions
diff --git a/src/osd/modules/debugger/debugosx.mm b/src/osd/modules/debugger/debugosx.mm index 6c52459f719..598a85dd569 100644 --- a/src/osd/modules/debugger/debugosx.mm +++ b/src/osd/modules/debugger/debugosx.mm @@ -29,6 +29,8 @@ #import "osx/debugconsole.h" #import "osx/debugwindowhandler.h" +#include <atomic> + //============================================================ // MODULE SUPPORT @@ -60,10 +62,14 @@ public: private: running_machine *m_machine; MAMEDebugConsole *m_console; + + static std::atomic_bool s_added_menus; }; MODULE_DEFINITION(DEBUG_OSX, debugger_osx) +std::atomic_bool debugger_osx::s_added_menus(false); + //============================================================ // debugger_osx::init //============================================================ @@ -113,7 +119,99 @@ void debugger_osx::wait_for_debugger(device_t &device, bool firststop) // create a console window if (m_console == nil) + { + if (!s_added_menus.exchange(true, std::memory_order_relaxed)) + { + NSMenuItem *item; + + NSMenu *const debugMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@"Debug"]; + item = [[NSApp mainMenu] insertItemWithTitle:@"Debug" action:NULL keyEquivalent:@"" atIndex:1]; + [item setSubmenu:debugMenu]; + [debugMenu release]; + + [debugMenu addItemWithTitle:@"New Memory Window" + action:@selector(debugNewMemoryWindow:) + keyEquivalent:@"d"]; + [debugMenu addItemWithTitle:@"New Disassembly Window" + action:@selector(debugNewDisassemblyWindow:) + keyEquivalent:@"a"]; + [debugMenu addItemWithTitle:@"New Error Log Window" + action:@selector(debugNewErrorLogWindow:) + keyEquivalent:@"l"]; + [debugMenu addItemWithTitle:@"New (Break|Watch)points Window" + action:@selector(debugNewPointsWindow:) + keyEquivalent:@"b"]; + [debugMenu addItemWithTitle:@"New Devices Window" + action:@selector(debugNewDevicesWindow:) + keyEquivalent:@"D"]; + + [debugMenu addItem:[NSMenuItem separatorItem]]; + + [[debugMenu addItemWithTitle:@"Soft Reset" + action:@selector(debugSoftReset:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF3FunctionKey]] + setKeyEquivalentModifierMask:0]; + [[debugMenu addItemWithTitle:@"Hard Reset" + action:@selector(debugHardReset:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF3FunctionKey]] + setKeyEquivalentModifierMask:NSShiftKeyMask]; + + NSMenu *const runMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@"Run"]; + item = [[NSApp mainMenu] insertItemWithTitle:@"Run" + action:NULL + keyEquivalent:@"" + atIndex:([[NSApp mainMenu] indexOfItemWithSubmenu:debugMenu] + 1)]; + [item setSubmenu:runMenu]; + [runMenu release]; + + [runMenu addItemWithTitle:@"Break" + action:@selector(debugBreak:) + keyEquivalent:@""]; + + [runMenu addItem:[NSMenuItem separatorItem]]; + + [[runMenu addItemWithTitle:@"Run" + action:@selector(debugRun:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF5FunctionKey]] + setKeyEquivalentModifierMask:0]; + [[runMenu addItemWithTitle:@"Run and Hide Debugger" + action:@selector(debugRunAndHide:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF12FunctionKey]] + setKeyEquivalentModifierMask:0]; + [[runMenu addItemWithTitle:@"Run to Next CPU" + action:@selector(debugRunToNextCPU:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF6FunctionKey]] + setKeyEquivalentModifierMask:0]; + [[runMenu addItemWithTitle:@"Run until Next Interrupt on Current CPU" + action:@selector(debugRunToNextInterrupt:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF7FunctionKey]] + setKeyEquivalentModifierMask:0]; + [[runMenu addItemWithTitle:@"Run until Next VBLANK" + action:@selector(debugRunToNextVBLANK:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF8FunctionKey]] + setKeyEquivalentModifierMask:0]; + [[runMenu addItemWithTitle:@"Run to Cursor" + action:@selector(debugRunToCursor:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF4FunctionKey]] + setKeyEquivalentModifierMask:0]; + + [runMenu addItem:[NSMenuItem separatorItem]]; + + [[runMenu addItemWithTitle:@"Step Into" + action:@selector(debugStepInto:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF11FunctionKey]] + setKeyEquivalentModifierMask:0]; + [[runMenu addItemWithTitle:@"Step Over" + action:@selector(debugStepOver:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF10FunctionKey]] + setKeyEquivalentModifierMask:0]; + [[runMenu addItemWithTitle:@"Step Out" + action:@selector(debugStepOut:) + keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF10FunctionKey]] + setKeyEquivalentModifierMask:NSShiftKeyMask]; + } m_console = [[MAMEDebugConsole alloc] initWithMachine:*m_machine]; + } // make sure the debug windows are visible if (firststop) diff --git a/src/osd/modules/debugger/debugqt.cpp b/src/osd/modules/debugger/debugqt.cpp index e553585f729..ac6c6a9d95c 100644 --- a/src/osd/modules/debugger/debugqt.cpp +++ b/src/osd/modules/debugger/debugqt.cpp @@ -317,7 +317,7 @@ void debug_qt::wait_for_debugger(device_t &device, bool firststop) mainQtWindow->setProcessor(&device); // Run our own QT event loop - osd_sleep(50000); + osd_sleep(osd_ticks_per_second() / 1000 * 50); qApp->processEvents(QEventLoop::AllEvents, 1); // Refresh everyone if requested diff --git a/src/osd/modules/debugger/osx/debugview.mm b/src/osd/modules/debugger/osx/debugview.mm index e793c649d9e..05d2e2dfc17 100644 --- a/src/osd/modules/debugger/osx/debugview.mm +++ b/src/osd/modules/debugger/osx/debugview.mm @@ -63,7 +63,7 @@ static void debugwin_view_update(debug_view &view, void *osdprivate) InactiveSelectedBackground = [[NSColor colorWithCalibratedWhite:0.875 alpha:1.0] retain]; InactiveSelectedCurrentBackground = [[NSColor colorWithCalibratedRed:0.875 green:0.5 blue:0.625 alpha:1.0] retain]; - NonWhiteCharacters = [[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet]; + NonWhiteCharacters = [[[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet] retain]; } diff --git a/src/osd/modules/debugger/osx/debugwindowhandler.h b/src/osd/modules/debugger/osx/debugwindowhandler.h index e8d2d6eb08d..0fc40d9eb64 100644 --- a/src/osd/modules/debugger/osx/debugwindowhandler.h +++ b/src/osd/modules/debugger/osx/debugwindowhandler.h @@ -38,6 +38,7 @@ extern NSString *const MAMEAuxiliaryDebugWindowWillCloseNotification; - (void)activate; +- (IBAction)debugBreak:(id)sender; - (IBAction)debugRun:(id)sender; - (IBAction)debugRunAndHide:(id)sender; - (IBAction)debugRunToNextCPU:(id)sender; diff --git a/src/osd/modules/debugger/osx/debugwindowhandler.mm b/src/osd/modules/debugger/osx/debugwindowhandler.mm index d99a9ec9961..fd11fa89152 100644 --- a/src/osd/modules/debugger/osx/debugwindowhandler.mm +++ b/src/osd/modules/debugger/osx/debugwindowhandler.mm @@ -29,6 +29,10 @@ NSString *const MAMEAuxiliaryDebugWindowWillCloseNotification = @"MAMEAuxiliaryD @implementation MAMEDebugWindowHandler + (void)addCommonActionItems:(NSMenu *)menu { + [menu addItemWithTitle:@"Break" + action:@selector(debugBreak:) + keyEquivalent:@""]; + NSMenuItem *runParentItem = [menu addItemWithTitle:@"Run" action:@selector(debugRun:) keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF5FunctionKey]]; @@ -181,13 +185,22 @@ NSString *const MAMEAuxiliaryDebugWindowWillCloseNotification = @"MAMEAuxiliaryD } +- (IBAction)debugBreak:(id)sender { + if (machine->debug_flags & DEBUG_FLAG_ENABLED) + debug_cpu_get_visible_cpu(*machine)->debug()->halt_on_next_instruction("User-initiated break\n"); +} + + - (IBAction)debugRun:(id)sender { debug_cpu_get_visible_cpu(*machine)->debug()->go(); } - (IBAction)debugRunAndHide:(id)sender { - [[NSNotificationCenter defaultCenter] postNotificationName:MAMEHideDebuggerNotification object:self]; + [[NSNotificationCenter defaultCenter] postNotificationName:MAMEHideDebuggerNotification + object:self + userInfo:[NSDictionary dictionaryWithObject:[NSValue valueWithPointer:machine] + forKey:@"MAMEDebugMachine"]]; debug_cpu_get_visible_cpu(*machine)->debug()->go(); } |