Sprinter: добавить отладку C-исходников и интеграцию VS Code
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user