From 0641cedd3da96ae70a59ffb0248a7174cdbee0ca Mon Sep 17 00:00:00 2001 From: SimoneN64 Date: Tue, 14 May 2024 23:11:17 +0200 Subject: [PATCH] Reduce memory leaks maybe? --- external/parallel-rdp/ParallelRDPWrapper.cpp | 4 +- external/parallel-rdp/ParallelRDPWrapper.hpp | 8 +- src/backend/core/mmio/PIF.cpp | 33 ++---- src/frontend/EmuThread.cpp | 18 +-- src/frontend/EmuThread.hpp | 22 ++-- src/frontend/KaizenQt.cpp | 111 +++++++++---------- src/frontend/KaizenQt.hpp | 6 +- src/utils/MemoryHelpers.hpp | 11 +- 8 files changed, 91 insertions(+), 122 deletions(-) diff --git a/external/parallel-rdp/ParallelRDPWrapper.cpp b/external/parallel-rdp/ParallelRDPWrapper.cpp index 359757ef..c0f94bf6 100644 --- a/external/parallel-rdp/ParallelRDPWrapper.cpp +++ b/external/parallel-rdp/ParallelRDPWrapper.cpp @@ -21,7 +21,7 @@ void ParallelRDP::SetFramerateUnlocked(bool unlocked) { Program* fullscreen_quad_program; void ParallelRDP::LoadWSIPlatform(Vulkan::InstanceFactory* instanceFactory, std::unique_ptr&& wsi_platform, std::unique_ptr&& newWindowInfo) { - wsi = new WSI(); + wsi = std::make_unique(); wsi->set_backbuffer_srgb(false); wsi->set_platform(wsi_platform.get()); wsi->set_present_mode(PresentMode::SyncToVBlank); @@ -72,7 +72,7 @@ void ParallelRDP::Init(Vulkan::InstanceFactory* factory, std::unique_ptrget_device(), reinterpret_cast(aligned_rdram), + command_processor = std::make_unique(wsi->get_device(), reinterpret_cast(aligned_rdram), offset, 8 * 1024 * 1024, 4 * 1024 * 1024, flags); if (!command_processor->device_is_supported()) { diff --git a/external/parallel-rdp/ParallelRDPWrapper.hpp b/external/parallel-rdp/ParallelRDPWrapper.hpp index 8b87b9bf..04fd1924 100644 --- a/external/parallel-rdp/ParallelRDPWrapper.hpp +++ b/external/parallel-rdp/ParallelRDPWrapper.hpp @@ -17,10 +17,6 @@ public: void Init(Vulkan::InstanceFactory*, std::unique_ptr&&, std::unique_ptr&&, const u8*); ParallelRDP() = default; - ~ParallelRDP() { - delete wsi; - delete command_processor; - } void UpdateScreen(n64::VI&, bool = false); void EnqueueCommand(int, u32*); @@ -32,7 +28,7 @@ private: void DrawFullscreenTexturedQuad(Util::IntrusivePtr, Util::IntrusivePtr); void UpdateScreen(Util::IntrusivePtr); - Vulkan::WSI* wsi = nullptr; - RDP::CommandProcessor* command_processor; + std::unique_ptr wsi; + std::unique_ptr command_processor; std::unique_ptr windowInfo; }; diff --git a/src/backend/core/mmio/PIF.cpp b/src/backend/core/mmio/PIF.cpp index 60de423d..0ba67a10 100644 --- a/src/backend/core/mmio/PIF.cpp +++ b/src/backend/core/mmio/PIF.cpp @@ -37,21 +37,14 @@ void PIF::MaybeLoadMempak() { if (error) { Util::panic("Could not sync {}", mempakPath); } mempak.unmap(); } - FILE *f = fopen(mempakPath.c_str(), "rb"); - if (!f) { - f = fopen(mempakPath.c_str(), "wb"); - u8 *dummy = (u8 *) calloc(MEMPAK_SIZE, 1); - fwrite(dummy, 1, MEMPAK_SIZE, f); - free(dummy); - } - fseek(f, 0, SEEK_END); - size_t actualSize = ftell(f); - fseek(f, 0, SEEK_SET); - if (actualSize != MEMPAK_SIZE) { + auto mempakVec = Util::ReadFileBinary(mempakPath); + if(mempak.empty()) + Util::WriteFileBinary(std::array{}, mempakPath); + + if (mempakVec.size() != MEMPAK_SIZE) { Util::panic("Corrupt mempak!"); } - fclose(f); mempak = mio::make_mmap_sink( mempakPath, 0, mio::map_entire_file, error); @@ -88,20 +81,14 @@ void PIF::LoadEeprom(SaveType saveType, const std::string& path) { } eepromSize = GetSaveSize(saveType); - FILE *f = fopen(eepromPath.c_str(), "rb"); - if (!f) { - f = fopen(eepromPath.c_str(), "wb"); - u8* dummy = (u8*)calloc(eepromSize, 1); - fwrite(dummy, 1, eepromSize, f); - } - fseek(f, 0, SEEK_END); - size_t actualSize = ftell(f); - fseek(f, 0, SEEK_SET); - if (actualSize != eepromSize) { + auto eepromVec = Util::ReadFileBinary(eepromPath); + if(eepromVec.empty()) + Util::WriteFileBinary(std::array{}, eepromPath); + + if (eepromVec.size() != eepromSize) { Util::panic("Corrupt eeprom!"); } - fclose(f); eeprom = mio::make_mmap_sink( eepromPath, 0, mio::map_entire_file, error); diff --git a/src/frontend/EmuThread.cpp b/src/frontend/EmuThread.cpp index e40331e3..20cfa115 100644 --- a/src/frontend/EmuThread.cpp +++ b/src/frontend/EmuThread.cpp @@ -3,21 +3,21 @@ #include #include "Audio.hpp" -EmuThread::EmuThread(std::unique_ptr&& instance_, std::unique_ptr&& wsiPlatform_, std::unique_ptr&& windowInfo_, QObject* parent_object) noexcept - : QThread(parent_object), instance(std::move(instance_)), wsiPlatform(std::move(wsiPlatform_)), windowInfo(std::move(windowInfo_)) {} +EmuThread::EmuThread(std::unique_ptr&& instance_, std::unique_ptr&& wsiPlatform_, std::unique_ptr&& windowInfo_, SettingsWindow& settings) noexcept + : instance(std::move(instance_)), wsiPlatform(std::move(wsiPlatform_)), windowInfo(std::move(windowInfo_)), core(parallel), settings(settings) {} [[noreturn]] void EmuThread::run() noexcept { - parallel.Init(instance.get(), std::move(wsiPlatform), std::move(windowInfo), core->cpu->GetMem().GetRDRAMPtr()); + parallel.Init(instance.get(), std::move(wsiPlatform), std::move(windowInfo), core.cpu->GetMem().GetRDRAMPtr()); while (true) { - if (!core->pause) { - core->Run(settings->getVolumeL(), settings->getVolumeR()); - if(core->render) { - parallel.UpdateScreen(core->cpu->GetMem().mmio.vi); + if (!core.pause) { + core.Run(settings.getVolumeL(), settings.getVolumeR()); + if(core.render) { + parallel.UpdateScreen(core.cpu->GetMem().mmio.vi); } } else { - if(core->render) { - parallel.UpdateScreen(core->cpu->GetMem().mmio.vi, true); + if(core.render) { + parallel.UpdateScreen(core.cpu->GetMem().mmio.vi, true); } } } diff --git a/src/frontend/EmuThread.hpp b/src/frontend/EmuThread.hpp index b43550d2..1f3cff57 100644 --- a/src/frontend/EmuThread.hpp +++ b/src/frontend/EmuThread.hpp @@ -15,23 +15,15 @@ class EmuThread : public QThread std::unique_ptr wsiPlatform; std::unique_ptr windowInfo; public: - explicit EmuThread(std::unique_ptr&& instance, std::unique_ptr&& wsiPlatform, std::unique_ptr&& windowInfo, QObject* parent_object) noexcept; - ~EmuThread() { - delete core; - delete settings; - } + explicit EmuThread(std::unique_ptr&& instance, std::unique_ptr&& wsiPlatform, std::unique_ptr&& windowInfo, SettingsWindow&) noexcept; [[noreturn]] void run() noexcept override; ParallelRDP parallel; - n64::Core* core; - SettingsWindow* settings; + n64::Core core; + SettingsWindow& settings; bool running = false; - bool LoadTAS(const fs::path& path) { - return core->LoadTAS(path); - } - void TogglePause() { running = !running; @@ -40,15 +32,15 @@ public: void Reset() { running = false; - core->Stop(); - core->LoadROM(core->rom); + core.Stop(); + core.LoadROM(core.rom); running = true; } void Stop() { - core->rom = {}; + core.rom = {}; running = false; - core->Stop(); + core.Stop(); } }; \ No newline at end of file diff --git a/src/frontend/KaizenQt.cpp b/src/frontend/KaizenQt.cpp index d1b72b63..6d2ff2da 100644 --- a/src/frontend/KaizenQt.cpp +++ b/src/frontend/KaizenQt.cpp @@ -8,13 +8,12 @@ namespace fs = std::filesystem; KaizenQt::KaizenQt() noexcept : QWidget(nullptr) { - mainWindow = new MainWindowController(); - emuThread = new EmuThread( + mainWindow = std::make_unique(); + emuThread = std::make_unique( std::move(mainWindow->view.vulkanWidget->instance), std::move(mainWindow->view.vulkanWidget->wsiPlatform), std::move(mainWindow->view.vulkanWidget->windowInfo), - mainWindow); - emuThread->core = new n64::Core(emuThread->parallel); + *settingsWindow); ConnectMainWindowSignalsToSlots(); @@ -23,25 +22,23 @@ KaizenQt::KaizenQt() noexcept : QWidget(nullptr) { setFocus(); grabKeyboard(); mainWindow->show(); - settingsWindow = new SettingsWindow; + settingsWindow = std::make_unique(); settingsWindow->hide(); - connect(settingsWindow, &SettingsWindow::regrabKeyboard, this, [&]() { + connect(settingsWindow.get(), &SettingsWindow::regrabKeyboard, this, [&]() { grabKeyboard(); - }), - emuThread->settings = settingsWindow; + }); } - void KaizenQt::ConnectMainWindowSignalsToSlots() noexcept { - connect(mainWindow, &MainWindowController::OpenSettings, this, [this]() { + connect(mainWindow.get(), &MainWindowController::OpenSettings, this, [this]() { settingsWindow->show(); }); - connect(mainWindow, &MainWindowController::OpenROM, this, &KaizenQt::LoadROM); - connect(mainWindow, &MainWindowController::Exit, this, []() { + connect(mainWindow.get(), &MainWindowController::OpenROM, this, &KaizenQt::LoadROM); + connect(mainWindow.get(), &MainWindowController::Exit, this, []() { QApplication::quit(); }); - connect(mainWindow, &MainWindowController::Reset, emuThread, &EmuThread::Reset); - connect(mainWindow, &MainWindowController::Stop, emuThread, &EmuThread::Stop); - connect(mainWindow, &MainWindowController::Pause, emuThread, &EmuThread::TogglePause); + connect(mainWindow.get(), &MainWindowController::Reset, emuThread.get(), &EmuThread::Reset); + connect(mainWindow.get(), &MainWindowController::Stop, emuThread.get(), &EmuThread::Stop); + connect(mainWindow.get(), &MainWindowController::Pause, emuThread.get(), &EmuThread::TogglePause); } void KaizenQt::dragEnterEvent(QDragEnterEvent* event) { @@ -57,59 +54,59 @@ void KaizenQt::dropEvent(QDropEvent* event) { void KaizenQt::LoadROM(const QString& fileName) noexcept { emuThread->start(); - emuThread->core->LoadROM(fileName.toStdString()); + emuThread->core.LoadROM(fileName.toStdString()); } void KaizenQt::LoadTAS(const QString& fileName) noexcept { - emuThread->core->LoadTAS(fileName.toStdString()); + emuThread->core.LoadTAS(fileName.toStdString()); } void KaizenQt::keyPressEvent(QKeyEvent *e) { - emuThread->core->pause = true; + emuThread->core.pause = true; auto k = static_cast(e->key()); - if(k == settingsWindow->keyMap[0]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::A, true); - if(k == settingsWindow->keyMap[1]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::B, true); - if(k == settingsWindow->keyMap[2]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Z, true); - if(k == settingsWindow->keyMap[3]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Start, true); - if(k == settingsWindow->keyMap[4]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::LT, true); - if(k == settingsWindow->keyMap[5]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::RT, true); - if(k == settingsWindow->keyMap[6]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DUp, true); - if(k == settingsWindow->keyMap[7]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DDown, true); - if(k == settingsWindow->keyMap[8]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DLeft, true); - if(k == settingsWindow->keyMap[9]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DRight, true); - if(k == settingsWindow->keyMap[10]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CUp, true); - if(k == settingsWindow->keyMap[11]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CDown, true); - if(k == settingsWindow->keyMap[12]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CLeft, true); - if(k == settingsWindow->keyMap[13]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CRight, true); - if(k == settingsWindow->keyMap[14]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 86); - if(k == settingsWindow->keyMap[15]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, -86); - if(k == settingsWindow->keyMap[16]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, -86); - if(k == settingsWindow->keyMap[17]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 86); - emuThread->core->pause = false; + if(k == settingsWindow->keyMap[0]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::A, true); + if(k == settingsWindow->keyMap[1]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::B, true); + if(k == settingsWindow->keyMap[2]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Z, true); + if(k == settingsWindow->keyMap[3]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Start, true); + if(k == settingsWindow->keyMap[4]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::LT, true); + if(k == settingsWindow->keyMap[5]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::RT, true); + if(k == settingsWindow->keyMap[6]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DUp, true); + if(k == settingsWindow->keyMap[7]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DDown, true); + if(k == settingsWindow->keyMap[8]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DLeft, true); + if(k == settingsWindow->keyMap[9]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DRight, true); + if(k == settingsWindow->keyMap[10]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CUp, true); + if(k == settingsWindow->keyMap[11]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CDown, true); + if(k == settingsWindow->keyMap[12]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CLeft, true); + if(k == settingsWindow->keyMap[13]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CRight, true); + if(k == settingsWindow->keyMap[14]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 86); + if(k == settingsWindow->keyMap[15]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, -86); + if(k == settingsWindow->keyMap[16]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, -86); + if(k == settingsWindow->keyMap[17]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 86); + emuThread->core.pause = false; QWidget::keyPressEvent(e); } void KaizenQt::keyReleaseEvent(QKeyEvent *e) { - emuThread->core->pause = true; + emuThread->core.pause = true; auto k = static_cast(e->key()); - if (k == settingsWindow->keyMap[0]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::A, false); - if (k == settingsWindow->keyMap[1]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::B, false); - if (k == settingsWindow->keyMap[2]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Z, false); - if (k == settingsWindow->keyMap[3]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Start, false); - if (k == settingsWindow->keyMap[4]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::LT, false); - if (k == settingsWindow->keyMap[5]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::RT, false); - if (k == settingsWindow->keyMap[6]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DUp, false); - if (k == settingsWindow->keyMap[7]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DDown, false); - if (k == settingsWindow->keyMap[8]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DLeft, false); - if (k == settingsWindow->keyMap[9]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DRight, false); - if (k == settingsWindow->keyMap[10]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CUp, false); - if (k == settingsWindow->keyMap[11]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CDown, false); - if (k == settingsWindow->keyMap[12]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CLeft, false); - if (k == settingsWindow->keyMap[13]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CRight, false); - if (k == settingsWindow->keyMap[14]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 0); - if (k == settingsWindow->keyMap[15]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 0); - if (k == settingsWindow->keyMap[16]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 0); - if (k == settingsWindow->keyMap[17]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 0); - emuThread->core->pause = false; + if (k == settingsWindow->keyMap[0]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::A, false); + if (k == settingsWindow->keyMap[1]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::B, false); + if (k == settingsWindow->keyMap[2]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Z, false); + if (k == settingsWindow->keyMap[3]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Start, false); + if (k == settingsWindow->keyMap[4]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::LT, false); + if (k == settingsWindow->keyMap[5]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::RT, false); + if (k == settingsWindow->keyMap[6]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DUp, false); + if (k == settingsWindow->keyMap[7]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DDown, false); + if (k == settingsWindow->keyMap[8]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DLeft, false); + if (k == settingsWindow->keyMap[9]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DRight, false); + if (k == settingsWindow->keyMap[10]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CUp, false); + if (k == settingsWindow->keyMap[11]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CDown, false); + if (k == settingsWindow->keyMap[12]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CLeft, false); + if (k == settingsWindow->keyMap[13]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CRight, false); + if (k == settingsWindow->keyMap[14]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 0); + if (k == settingsWindow->keyMap[15]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 0); + if (k == settingsWindow->keyMap[16]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 0); + if (k == settingsWindow->keyMap[17]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 0); + emuThread->core.pause = false; QWidget::keyPressEvent(e); } \ No newline at end of file diff --git a/src/frontend/KaizenQt.hpp b/src/frontend/KaizenQt.hpp index dfb213cc..5646b021 100644 --- a/src/frontend/KaizenQt.hpp +++ b/src/frontend/KaizenQt.hpp @@ -35,7 +35,7 @@ public: void keyReleaseEvent(QKeyEvent*) override; private: void ConnectMainWindowSignalsToSlots() noexcept; - MainWindowController* mainWindow; - SettingsWindow* settingsWindow; - EmuThread* emuThread; + std::unique_ptr mainWindow; + std::unique_ptr settingsWindow; + std::unique_ptr emuThread; }; \ No newline at end of file diff --git a/src/utils/MemoryHelpers.hpp b/src/utils/MemoryHelpers.hpp index 75a589ca..e8ea391a 100644 --- a/src/utils/MemoryHelpers.hpp +++ b/src/utils/MemoryHelpers.hpp @@ -115,13 +115,11 @@ FORCE_INLINE u32 crc32(u32 crc, const u8 *buf, size_t len) { static int have_table = 0; u32 rem; u8 octet; - int i, j; - const u8 *p, *q; if (have_table == 0) { - for (i = 0; i < 256; i++) { + for (int i = 0; i < 256; i++) { rem = i; - for (j = 0; j < 8; j++) { + for (int j = 0; j < 8; j++) { if (rem & 1) { rem >>= 1; rem ^= 0xedb88320; @@ -134,9 +132,8 @@ FORCE_INLINE u32 crc32(u32 crc, const u8 *buf, size_t len) { } crc = ~crc; - q = buf + len; - for (p = buf; p < q; p++) { - octet = *p; /* Cast to unsigned octet. */ + for (int i = 0; i < len; i++) { + octet = buf[i]; /* Cast to unsigned octet. */ crc = (crc >> 8) ^ table[(crc & 0xff) ^ octet]; } return ~crc;