130 lines
4.4 KiB
Diff
130 lines
4.4 KiB
Diff
diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua
|
|
--- a/scripts/src/osd/modules.lua
|
|
+++ b/scripts/src/osd/modules.lua
|
|
@@ -69,6 +69,7 @@
|
|
MAME_DIR .. "src/osd/modules/debugger/debugkeyconfig.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/debuggdbstub.cpp",
|
|
MAME_DIR .. "src/osd/modules/debugger/debugimgui.cpp",
|
|
+ MAME_DIR .. "src/osd/modules/debugger/sdbg.cpp",
|
|
MAME_DIR .. "src/osd/modules/debugger/debugwin.cpp",
|
|
MAME_DIR .. "src/osd/modules/debugger/none.cpp",
|
|
MAME_DIR .. "src/osd/modules/debugger/xmlconfig.cpp",
|
|
diff --git a/scripts/src/osd/mac.lua b/scripts/src/osd/mac.lua
|
|
--- a/scripts/src/osd/mac.lua
|
|
+++ b/scripts/src/osd/mac.lua
|
|
@@ -78,6 +78,7 @@
|
|
|
|
files {
|
|
MAME_DIR .. "src/osd/modules/debugger/debugosx.mm",
|
|
+ MAME_DIR .. "src/osd/modules/debugger/sdbgmac.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/breakpointsview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/breakpointsview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/consoleview.mm",
|
|
diff --git a/src/osd/modules/debugger/sdbg.cpp b/src/osd/modules/debugger/sdbg.cpp
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/src/osd/modules/debugger/sdbg.cpp
|
|
@@ -0,0 +1,72 @@
|
|
+// license:BSD-3-Clause
|
|
+// copyright-holders:Sprinter C-Compiler contributors
|
|
+//============================================================
|
|
+//
|
|
+// sdbg.cpp - headless debugger wait loop for an external DAP bridge
|
|
+//
|
|
+//============================================================
|
|
+
|
|
+#include "emu.h"
|
|
+#include "debug_module.h"
|
|
+#include "modules/lib/osdobj_common.h"
|
|
+
|
|
+#if defined(OSD_MAC)
|
|
+void sdbg_poll_mac_events();
|
|
+#endif
|
|
+
|
|
+
|
|
+namespace osd {
|
|
+
|
|
+namespace {
|
|
+
|
|
+class debug_sdbg : public osd_module, public debug_module
|
|
+{
|
|
+public:
|
|
+ debug_sdbg() : osd_module(OSD_DEBUG_PROVIDER, "sdbg"), debug_module(),
|
|
+ m_osd(nullptr), m_next_host_poll(0)
|
|
+ { }
|
|
+
|
|
+ virtual int init(osd_interface &osd, const osd_options &options) override
|
|
+ {
|
|
+ m_osd = &dynamic_cast<osd_common_t &>(osd);
|
|
+ return 0;
|
|
+ }
|
|
+ virtual void exit() override { }
|
|
+
|
|
+ virtual void init_debugger(running_machine &machine) override { }
|
|
+ virtual void wait_for_debugger(device_t &device, bool firststop) override;
|
|
+ virtual void debugger_update() override { }
|
|
+
|
|
+private:
|
|
+ osd_common_t *m_osd;
|
|
+ osd_ticks_t m_next_host_poll;
|
|
+};
|
|
+
|
|
+void debug_sdbg::wait_for_debugger(device_t &device, bool firststop)
|
|
+{
|
|
+ // debugger_cpu::wait_for_debugger вызывает Lua periodic перед каждым
|
|
+ // обращением сюда. Короткий sleep исключает busy-loop, после возврата
|
|
+ // внешний bridge получает следующую возможность обработать RPC.
|
|
+ // Без обработки событий окон macOS считает MAME зависшим, пока CPU
|
|
+ // удерживается на точке VS Code. 100 Hz достаточно для Dock/Cmd-Tab.
|
|
+ osd_ticks_t const current = osd_ticks();
|
|
+ if (current >= m_next_host_poll)
|
|
+ {
|
|
+#if defined(OSD_MAC)
|
|
+ sdbg_poll_mac_events();
|
|
+#else
|
|
+ // Текущий mame.arm собран на SDL3: pump + poll необходимы,
|
|
+ // поскольку обычный frame_update не выполняется при остановке CPU.
|
|
+ m_osd->input_update(false);
|
|
+ m_osd->process_events();
|
|
+#endif
|
|
+ m_next_host_poll = current + osd_ticks_per_second() / 100;
|
|
+ }
|
|
+ osd_sleep(osd_ticks_per_second() / 1000);
|
|
+}
|
|
+
|
|
+} // anonymous namespace
|
|
+
|
|
+} // namespace osd
|
|
+
|
|
+MODULE_DEFINITION(DEBUG_SDBG, osd::debug_sdbg)
|
|
diff --git a/src/osd/modules/debugger/sdbgmac.mm b/src/osd/modules/debugger/sdbgmac.mm
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/src/osd/modules/debugger/sdbgmac.mm
|
|
@@ -0,0 +1,14 @@
|
|
+// license:BSD-3-Clause
|
|
+// copyright-holders:Sprinter C-Compiler contributors
|
|
+// Прокачка событий Cocoa в headless debugger без окна штатного debugger.
|
|
+
|
|
+#import <Cocoa/Cocoa.h>
|
|
+
|
|
+extern void MacPollInputs();
|
|
+
|
|
+void sdbg_poll_mac_events()
|
|
+{
|
|
+ NSAutoreleasePool *const pool = [[NSAutoreleasePool alloc] init];
|
|
+ MacPollInputs();
|
|
+ [pool release];
|
|
+}
|
|
diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp
|
|
--- a/src/osd/modules/lib/osdobj_common.cpp
|
|
+++ b/src/osd/modules/lib/osdobj_common.cpp
|
|
@@ -282,6 +282,7 @@
|
|
REGISTER_MODULE(m_mod_man, DEBUG_QT);
|
|
REGISTER_MODULE(m_mod_man, DEBUG_IMGUI);
|
|
REGISTER_MODULE(m_mod_man, DEBUG_GDBSTUB);
|
|
+ REGISTER_MODULE(m_mod_man, DEBUG_SDBG);
|
|
REGISTER_MODULE(m_mod_man, DEBUG_NONE);
|
|
#endif
|
|
|