Sprinter: добавить отладку C-исходников и интеграцию VS Code

This commit is contained in:
2026-09-15 17:58:41 +03:00
parent 50c6e56b7b
commit e4695b8281
62 changed files with 7147 additions and 27 deletions
@@ -0,0 +1,129 @@
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