diff options
author | 2016-03-12 12:31:13 +0100 | |
---|---|---|
committer | 2016-03-12 12:31:13 +0100 | |
commit | a026a582f1a0ea8c1ede3acaddacef506ef3f3b0 (patch) | |
tree | e31573822f2359677de519f9f3b600d98e8764cd /src/osd/modules/debugger/debugosx.mm | |
parent | 477d2abd43984f076b7e45f5527591fa8fd0d241 (diff) | |
parent | dcab55bf53b94713a6f72e9633f5101c8dd6c08c (diff) |
Merge pull request #15 from mamedev/master
Sync to base master
Diffstat (limited to 'src/osd/modules/debugger/debugosx.mm')
-rw-r--r-- | src/osd/modules/debugger/debugosx.mm | 98 |
1 files changed, 98 insertions, 0 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) |