diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8c358a31..546e9950 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -103,13 +103,13 @@ set(ENABLE_LINK_DEFAULT OFF)
# msys2 does not have static sfml libs atm
# while on mxe we use static libs
if(WIN32 AND ((NOT (MINGW AND MSYS)) OR CMAKE_TOOLCHAIN_FILE MATCHES mxe) AND NOT CMAKE_TOOLCHAIN_FILE MATCHES vcpkg)
- set(SFML_STATIC_LIBRARIES TRUE)
+ set(SFML_STATIC_LIBRARIES TRUE)
endif()
find_package(SFML 2 COMPONENTS network system)
if(SFML_FOUND)
- set(ENABLE_LINK_DEFAULT ON)
+ set(ENABLE_LINK_DEFAULT ON)
endif()
option(ENABLE_LINK "Enable GBA linking functionality" ${ENABLE_LINK_DEFAULT})
@@ -697,7 +697,6 @@ set(
SRC_GBA
src/gba/agbprint.cpp
src/gba/bios.cpp
- src/gba/BreakpointStructures.cpp
src/gba/Cheats.cpp
src/gba/CheatSearch.cpp
src/gba/debugger-expr-lex.cpp
@@ -724,6 +723,12 @@ set(
src/gba/Sram.cpp
)
+if(ENABLE_DEBUGGER)
+ list(APPEND SRC_GBA
+ src/gba/BreakpointStructures.cpp
+ )
+endif()
+
set(
HDR_GBA
src/gba/agbprint.h
@@ -873,17 +878,28 @@ else()
add_definitions(-DNO_ASM)
endif()
+
+set(
+ SRC_DEBUGGER
+ src/gba/armdis.cpp
+ src/gba/elf.cpp
+)
+
+set(
+ HDR_DEBUGGER
+ src/gba/armdis.h
+ src/gba/elf.h
+)
+
if(ENABLE_DEBUGGER)
set(
SRC_DEBUGGER
- src/gba/armdis.cpp
- src/gba/elf.cpp
+ ${SRC_DEBUGGER}
src/gba/remote.cpp
)
set(
HDR_DEBUGGER
- src/gba/armdis.h
- src/gba/elf.h
+ ${HDR_DEBUGGER}
src/gba/remote.h
)
endif()
diff --git a/src/common/ConfigManager.cpp b/src/common/ConfigManager.cpp
index f40a2b3a..6be93583 100644
--- a/src/common/ConfigManager.cpp
+++ b/src/common/ConfigManager.cpp
@@ -267,9 +267,11 @@ IFBFilterFunc ifbFunction = 0;
int patchNum = 0;
char *patchNames[PATCH_MAX_NUM] = { NULL }; // and so on
+#ifndef NO_DEBUGGER
void(*dbgMain)() = remoteStubMain;
void(*dbgSignal)(int, int) = remoteStubSignal;
void(*dbgOutput)(const char *, uint32_t) = debuggerOutput;
+#endif
char* homeDir = NULL;
char* arg0 = NULL;
@@ -918,6 +920,7 @@ int ReadOpts(int argc, char ** argv)
patchNum++;
}
break;
+#ifndef NO_DEBUGGER
case 'G':
dbgMain = remoteStubMain;
dbgSignal = remoteStubSignal;
@@ -946,6 +949,7 @@ int ReadOpts(int argc, char ** argv)
remoteSetProtocol(0);
}
break;
+#endif
case 'N':
parseDebug = false;
break;
diff --git a/src/gba/agbprint.cpp b/src/gba/agbprint.cpp
index cb206e99..56244851 100644
--- a/src/gba/agbprint.cpp
+++ b/src/gba/agbprint.cpp
@@ -56,7 +56,9 @@ void agbPrintFlush()
uint32_t address = (debuggerReadHalfWord(0x9fe20fa) << 16);
if (address != 0xfd0000 && address != 0x1fd0000) {
+#ifdef BKPT_SUPPORT
dbgOutput("Did you forget to call AGBPrintInit?\n", 0);
+#endif
// get rid of the text otherwise we will continue to be called
debuggerWriteHalfWord(0x9fe20fc, put);
return;
@@ -71,7 +73,11 @@ void agbPrintFlush()
s[1] = 0;
if (systemVerbose & VERBOSE_AGBPRINT)
+ {
+#ifdef BKPT_SUPPORT
dbgOutput(s, 0);
+#endif
+ }
if (c == '\n')
break;
}
diff --git a/src/wx/cmdevents.cpp b/src/wx/cmdevents.cpp
index 0b3a1000..5538bf79 100644
--- a/src/wx/cmdevents.cpp
+++ b/src/wx/cmdevents.cpp
@@ -204,80 +204,100 @@ EVT_HANDLER(wxID_FILE1, "Load recent ROM 1")
{
panel->LoadGame(gopts.recent->GetHistoryFile(0));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
EVT_HANDLER(wxID_FILE2, "Load recent ROM 2")
{
panel->LoadGame(gopts.recent->GetHistoryFile(1));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
EVT_HANDLER(wxID_FILE3, "Load recent ROM 3")
{
panel->LoadGame(gopts.recent->GetHistoryFile(2));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
EVT_HANDLER(wxID_FILE4, "Load recent ROM 4")
{
panel->LoadGame(gopts.recent->GetHistoryFile(3));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
EVT_HANDLER(wxID_FILE5, "Load recent ROM 5")
{
panel->LoadGame(gopts.recent->GetHistoryFile(4));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
EVT_HANDLER(wxID_FILE6, "Load recent ROM 6")
{
panel->LoadGame(gopts.recent->GetHistoryFile(5));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
EVT_HANDLER(wxID_FILE7, "Load recent ROM 7")
{
panel->LoadGame(gopts.recent->GetHistoryFile(6));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
EVT_HANDLER(wxID_FILE8, "Load recent ROM 8")
{
panel->LoadGame(gopts.recent->GetHistoryFile(7));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
EVT_HANDLER(wxID_FILE9, "Load recent ROM 9")
{
panel->LoadGame(gopts.recent->GetHistoryFile(8));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
EVT_HANDLER(wxID_FILE10, "Load recent ROM 10")
{
panel->LoadGame(gopts.recent->GetHistoryFile(9));
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
GDBBreak();
+#endif
}
static const struct rom_maker {
@@ -2032,6 +2052,7 @@ EVT_HANDLER_MASK(TileViewer, "Tile Viewer...", CMDEN_GB | CMDEN_GBA)
TileViewer();
}
+#ifndef NO_DEBUGGER
extern int remotePort;
int GetGDBPort(MainFrame* mf)
@@ -2052,23 +2073,29 @@ int GetGDBPort(MainFrame* mf)
#endif
65535, mf);
}
+#endif
EVT_HANDLER(DebugGDBPort, "Configure port...")
{
+#ifndef NO_DEBUGGER
int port_selected = GetGDBPort(this);
if (port_selected != -1) {
gdbPort = port_selected;
update_opts();
}
+#endif
}
EVT_HANDLER(DebugGDBBreakOnLoad, "Break on load")
{
+#ifndef NO_DEBUGGER
GetMenuOptionInt("DebugGDBBreakOnLoad", gdbBreakOnLoad, 1);
update_opts();
+#endif
}
+#ifndef NO_DEBUGGER
void MainFrame::GDBBreak()
{
ModalPause mp;
@@ -2147,14 +2174,18 @@ void MainFrame::GDBBreak()
}
}
}
+#endif
EVT_HANDLER_MASK(DebugGDBBreak, "Break into GDB", CMDEN_NGDB_GBA | CMDEN_GDB)
{
+#ifndef NO_DEBUGGER
GDBBreak();
+#endif
}
EVT_HANDLER_MASK(DebugGDBDisconnect, "Disconnect GDB", CMDEN_GDB)
{
+#ifndef NO_DEBUGGER
debugger = false;
dbgMain = NULL;
dbgSignal = NULL;
@@ -2164,6 +2195,7 @@ EVT_HANDLER_MASK(DebugGDBDisconnect, "Disconnect GDB", CMDEN_GDB)
cmd_enable &= ~CMDEN_GDB;
cmd_enable |= CMDEN_NGDB_GBA | CMDEN_NGDB_ANY;
enable_menus();
+#endif
}
// Options menu
diff --git a/src/wx/guiinit.cpp b/src/wx/guiinit.cpp
index 13e0860c..00f06074 100644
--- a/src/wx/guiinit.cpp
+++ b/src/wx/guiinit.cpp
@@ -2815,6 +2815,20 @@ bool MainFrame::BindControls()
continue;
}
+#endif
+#ifdef NO_DEBUGGER
+
+ if (cmdtab[i].cmd_id == XRCID("DebugGDBBreak") || cmdtab[i].cmd_id == XRCID("DebugGDBDisconnect") || cmdtab[i].cmd_id == XRCID("DebugGDBBreakOnLoad") || cmdtab[i].cmd_id == XRCID("DebugGDBPort"))
+ {
+ if (mi)
+ {
+ mi->GetMenu()->Enable(mi->GetId(), false);
+ //mi->GetMenu()->Remove(mi);
+ }
+ cmdtab[i].cmd_id = XRCID("NOOP");
+ cmdtab[i].mi = NULL;
+ continue;
+ }
#endif
if (mi) {
@@ -2890,6 +2904,12 @@ bool MainFrame::BindControls()
}
}
+#ifdef NO_DEBUGGER
+ // remove this item from the menu completely
+ wxMenuItem* gdbmi = XRCITEM("GDBMenu");
+ gdbmi->GetMenu()->Remove(gdbmi);
+#endif
+
// if a recent menu is present, save its location
wxMenuItem* recentmi = XRCITEM("RecentMenu");
diff --git a/src/wx/panel.cpp b/src/wx/panel.cpp
index 88e33107..5e5b6791 100644
--- a/src/wx/panel.cpp
+++ b/src/wx/panel.cpp
@@ -503,9 +503,12 @@ void GameArea::UnloadGame(bool destruct)
#endif
systemStopGameRecording();
systemStopGamePlayback();
+
+#ifndef NO_DEBUGGER
debugger = false;
remoteCleanUp();
mf->cmd_enable |= CMDEN_NGDB_ANY;
+#endif
if (loaded == IMAGE_GB) {
gbCleanUp();
@@ -955,6 +958,7 @@ void GameArea::OnIdle(wxIdleEvent& event)
LoadGame(pl);
MainFrame* mf = wxGetApp().frame;
+#ifndef NO_DEBUGGER
if (gdbBreakOnLoad)
mf->GDBBreak();
@@ -962,6 +966,7 @@ void GameArea::OnIdle(wxIdleEvent& event)
wxLogError(_("Not a valid GBA cartridge"));
UnloadGame();
}
+#endif
}
// stupid wx doesn't resize to screen size
@@ -1064,6 +1069,7 @@ void GameArea::OnIdle(wxIdleEvent& event)
HidePointer();
event.RequestMore();
+#ifndef NO_DEBUGGER
if (debugger) {
was_paused = true;
dbgMain();
@@ -1075,6 +1081,7 @@ void GameArea::OnIdle(wxIdleEvent& event)
return;
}
+#endif
emusys->emuMain(emusys->emuCount);
#ifndef NO_LINK
diff --git a/src/wx/sys.cpp b/src/wx/sys.cpp
index 19bbdf02..bc4eeb08 100644
--- a/src/wx/sys.cpp
+++ b/src/wx/sys.cpp
@@ -1134,6 +1134,8 @@ void systemOnSoundShutdown()
{
}
+#ifndef NO_DEBUGGER
+
extern int (*remoteSendFnc)(char*, int);
extern int (*remoteRecvFnc)(char*, int);
extern void (*remoteCleanUpFnc)();
@@ -1298,6 +1300,8 @@ bool debugWaitSocket()
return debug_remote != NULL;
}
+#endif
+
void log(const char* defaultMsg, ...)
{
va_list valist;
diff --git a/src/wx/wxvbam.h b/src/wx/wxvbam.h
index 31747ab3..75927090 100644
--- a/src/wx/wxvbam.h
+++ b/src/wx/wxvbam.h
@@ -752,6 +752,7 @@ extern bool GetFADevices(wxArrayString& names, wxArrayString& ids);
#endif
#endif
+#ifndef NO_DEBUGGER
extern bool debugger;
extern void (*dbgMain)();
extern void (*dbgSignal)(int, int);
@@ -766,6 +767,7 @@ extern const wxString& debugGetSlavePty();
extern bool debugWaitPty();
extern bool debugStartListen(int port);
extern bool debugWaitSocket();
+#endif
// perhaps these functions should not be called systemXXX
// perhaps they should move to panel.cpp/GameArea
diff --git a/src/wx/xrc/MainMenu.xrc b/src/wx/xrc/MainMenu.xrc
index fe953910..438257d2 100644
--- a/src/wx/xrc/MainMenu.xrc
+++ b/src/wx/xrc/MainMenu.xrc
@@ -536,7 +536,7 @@
-