diff --git a/pcsx2-qt/MainWindow.cpp b/pcsx2-qt/MainWindow.cpp
index b6b77405b8..7389ee0b15 100644
--- a/pcsx2-qt/MainWindow.cpp
+++ b/pcsx2-qt/MainWindow.cpp
@@ -219,6 +219,8 @@ void MainWindow::connectSignals()
SettingWidgetBinder::BindWidgetToBoolSetting(nullptr, m_ui.actionEnableFileLogging, "Logging", "EnableFileLogging", false);
connect(m_ui.actionEnableFileLogging, &QAction::triggered, this, &MainWindow::onLoggingOptionChanged);
SettingWidgetBinder::BindWidgetToBoolSetting(nullptr, m_ui.actionEnableCDVDVerboseReads, "EmuCore", "CdvdVerboseReads", false);
+ SettingWidgetBinder::BindWidgetToBoolSetting(nullptr, m_ui.actionSaveBlockDump, "EmuCore", "CdvdDumpBlocks", false);
+ connect(m_ui.actionSaveBlockDump, &QAction::toggled, this, &MainWindow::onBlockDumpActionToggled);
connect(m_ui.actionSaveGSDump, &QAction::triggered, this, &MainWindow::onSaveGSDumpActionTriggered);
@@ -541,6 +543,29 @@ void MainWindow::onSaveGSDumpActionTriggered()
g_emu_thread->queueSnapshot(1);
}
+void MainWindow::onBlockDumpActionToggled(bool checked)
+{
+ if (!checked)
+ return;
+
+ std::string old_directory(Host::GetBaseStringSettingValue("EmuCore", "BlockDumpSaveDirectory", ""));
+ if (old_directory.empty())
+ old_directory = FileSystem::GetWorkingDirectory();
+
+ // prompt for a location to save
+ const QString new_dir(
+ QFileDialog::getExistingDirectory(this, tr("Select location to save block dump:"),
+ QString::fromStdString(old_directory)));
+ if (new_dir.isEmpty())
+ {
+ // disable it again
+ m_ui.actionSaveBlockDump->setChecked(false);
+ return;
+ }
+
+ QtHost::SetBaseStringSettingValue("EmuCore", "BlockDumpSaveDirectory", new_dir.toUtf8().constData());
+}
+
void MainWindow::saveStateToConfig()
{
{
diff --git a/pcsx2-qt/MainWindow.h b/pcsx2-qt/MainWindow.h
index aba501f121..81d40e517d 100644
--- a/pcsx2-qt/MainWindow.h
+++ b/pcsx2-qt/MainWindow.h
@@ -136,6 +136,7 @@ private Q_SLOTS:
void onLoggingOptionChanged();
void onScreenshotActionTriggered();
void onSaveGSDumpActionTriggered();
+ void onBlockDumpActionToggled(bool checked);
// Input Recording
void onInputRecNewActionTriggered();
diff --git a/pcsx2-qt/MainWindow.ui b/pcsx2-qt/MainWindow.ui
index 9f5d9cb4cc..afcb423d1f 100644
--- a/pcsx2-qt/MainWindow.ui
+++ b/pcsx2-qt/MainWindow.ui
@@ -128,6 +128,8 @@
+
+
@@ -798,6 +800,14 @@
Enable CDVD Read Logging
+
+
+ true
+
+
+ Save CDVD Block Dump
+
+
diff --git a/pcsx2/Pcsx2Config.cpp b/pcsx2/Pcsx2Config.cpp
index 5d2f946f74..766915fc11 100644
--- a/pcsx2/Pcsx2Config.cpp
+++ b/pcsx2/Pcsx2Config.cpp
@@ -1080,12 +1080,12 @@ void Pcsx2Config::LoadSave(SettingsWrapper& wrap)
// For now, this in the derived config for backwards ini compatibility.
#ifdef PCSX2_CORE
+ SettingsWrapEntryEx(CurrentBlockdump, "BlockDumpSaveDirectory");
+
BaseFilenames.LoadSave(wrap);
Framerate.LoadSave(wrap);
LoadSaveMemcards(wrap);
- SettingsWrapEntry(GzipIsoIndexTemplate);
-
#ifdef __WXMSW__
SettingsWrapEntry(McdCompressNTFS);
#endif