diff --git a/src/backend/core/mmio/PIF.cpp b/src/backend/core/mmio/PIF.cpp index 18f45d1f..29a4ffef 100644 --- a/src/backend/core/mmio/PIF.cpp +++ b/src/backend/core/mmio/PIF.cpp @@ -208,6 +208,7 @@ void PIF::ProcessCommands(Mem &mem) { channel++; break; case 1: + UpdateController(); if(!ReadButtons(res)) { cmd[1] |= 0x80; } diff --git a/src/backend/core/mmio/PIF.hpp b/src/backend/core/mmio/PIF.hpp index 79ba6e49..8c47166e 100644 --- a/src/backend/core/mmio/PIF.hpp +++ b/src/backend/core/mmio/PIF.hpp @@ -115,7 +115,7 @@ enum Axis { }; struct PIF { - PIF() = default; + PIF() : inputMap(inputManager) {} ~PIF() = default; void Reset(); void MaybeLoadMempak(); @@ -136,7 +136,7 @@ struct PIF { bool gamepadConnected = false, mempakOpen = false; gainput::InputManager inputManager; - gainput::InputMap inputMap{ inputManager }; + gainput::InputMap inputMap; gainput::DeviceId keyboardId, padId; JoybusDevice joybusDevices[6]{}; u8 bootrom[PIF_BOOTROM_SIZE]{}, ram[PIF_RAM_SIZE]{}; diff --git a/src/frontend/EmuThread.cpp b/src/frontend/EmuThread.cpp index bd2ddd67..a876eac5 100644 --- a/src/frontend/EmuThread.cpp +++ b/src/frontend/EmuThread.cpp @@ -7,17 +7,16 @@ EmuThread::EmuThread(std::unique_ptr&& instance, std::unique_ [[noreturn]] void EmuThread::run() noexcept { LoadWSIPlatform(instance.get(), std::move(wsiPlatform), std::move(windowInfo)); - LoadParallelRDP(core.cpu->mem.GetRDRAM()); + LoadParallelRDP(core->cpu->mem.GetRDRAM()); while (true) { - if (!core.pause) { - core.cpu->mem.mmio.si.pif.UpdateController(); - core.Run(0.5, 0.5); - if(core.render) { - UpdateScreenParallelRdp(core, core.cpu->mem.mmio.vi); + if (!core->pause) { + core->Run(0.5, 0.5); + if(core->render) { + UpdateScreenParallelRdp(*core, core->cpu->mem.mmio.vi); } } else { - if(core.render) { - UpdateScreenParallelRdpNoGame(core); + if(core->render) { + UpdateScreenParallelRdpNoGame(*core); } } } diff --git a/src/frontend/EmuThread.hpp b/src/frontend/EmuThread.hpp index 1bbbe168..f225abb9 100644 --- a/src/frontend/EmuThread.hpp +++ b/src/frontend/EmuThread.hpp @@ -19,7 +19,7 @@ public: [[noreturn]] void run() noexcept override; - n64::Core core; + n64::Core* core; bool running = false; void TogglePause() @@ -30,15 +30,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 ab24c7c3..5484b57b 100644 --- a/src/frontend/KaizenQt.cpp +++ b/src/frontend/KaizenQt.cpp @@ -18,6 +18,7 @@ KaizenQt::KaizenQt() noexcept : QWidget(nullptr) { setAcceptDrops(true); mainWindow->show(); + emuThread->core = new n64::Core(); } void KaizenQt::ConnectMainWindowSignalsToSlots() noexcept { @@ -43,5 +44,5 @@ void KaizenQt::dropEvent(QDropEvent* event) { void KaizenQt::LoadROM(const QString& file_name) noexcept { emuThread->start(); - emuThread->core.LoadROM(file_name.toStdString()); + emuThread->core->LoadROM(file_name.toStdString()); } \ No newline at end of file