summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2024-01-06 04:56:36 +0100
committerAdmiral H. Curtiss <pikachu025@gmail.com>2024-01-08 10:23:28 +0100
commit9be9cbda2f8876695ea18f44257dd032e63ef02f (patch)
tree9e27e744ad724f53fe5c83b06f100772ba3b8805 /Source/Core
parent00fb709c74c59224e1827174e5eda94aee024d69 (diff)
Core/DSPHLE: Store reference to System in DSPHLE instances.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/DSPEmulator.cpp4
-rw-r--r--Source/Core/Core/DSPEmulator.h6
-rw-r--r--Source/Core/Core/HW/DSP.cpp2
-rw-r--r--Source/Core/Core/HW/DSPHLE/DSPHLE.cpp14
-rw-r--r--Source/Core/Core/HW/DSPHLE/DSPHLE.h14
5 files changed, 28 insertions, 12 deletions
diff --git a/Source/Core/Core/DSPEmulator.cpp b/Source/Core/Core/DSPEmulator.cpp
index 61562317b9..0b5dd461e1 100644
--- a/Source/Core/Core/DSPEmulator.cpp
+++ b/Source/Core/Core/DSPEmulator.cpp
@@ -10,10 +10,10 @@
DSPEmulator::~DSPEmulator() = default;
-std::unique_ptr<DSPEmulator> CreateDSPEmulator(bool hle)
+std::unique_ptr<DSPEmulator> CreateDSPEmulator(Core::System& system, bool hle)
{
if (hle)
- return std::make_unique<DSP::HLE::DSPHLE>();
+ return std::make_unique<DSP::HLE::DSPHLE>(system);
return std::make_unique<DSP::LLE::DSPLLE>();
}
diff --git a/Source/Core/Core/DSPEmulator.h b/Source/Core/Core/DSPEmulator.h
index b3b733817b..edd64cabad 100644
--- a/Source/Core/Core/DSPEmulator.h
+++ b/Source/Core/Core/DSPEmulator.h
@@ -6,6 +6,10 @@
#include <memory>
#include "Common/CommonTypes.h"
+namespace Core
+{
+class System;
+}
class PointerWrap;
class DSPEmulator
@@ -34,4 +38,4 @@ protected:
bool m_wii = false;
};
-std::unique_ptr<DSPEmulator> CreateDSPEmulator(bool hle);
+std::unique_ptr<DSPEmulator> CreateDSPEmulator(Core::System& system, bool hle);
diff --git a/Source/Core/Core/HW/DSP.cpp b/Source/Core/Core/HW/DSP.cpp
index c00da2a520..6099cec8be 100644
--- a/Source/Core/Core/HW/DSP.cpp
+++ b/Source/Core/Core/HW/DSP.cpp
@@ -119,7 +119,7 @@ void DSPManager::Init(bool hle)
void DSPManager::Reinit(bool hle)
{
- m_dsp_emulator = CreateDSPEmulator(hle);
+ m_dsp_emulator = CreateDSPEmulator(m_system, hle);
m_is_lle = m_dsp_emulator->IsLLE();
if (SConfig::GetInstance().bWii)
diff --git a/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp b/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp
index 2429ce9577..22f6f70e86 100644
--- a/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp
+++ b/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp
@@ -14,7 +14,9 @@
namespace DSP::HLE
{
-DSPHLE::DSPHLE() = default;
+DSPHLE::DSPHLE(Core::System& system) : m_system(system)
+{
+}
DSPHLE::~DSPHLE() = default;
@@ -55,7 +57,7 @@ u32 DSPHLE::DSP_UpdateRate()
{
// AX HLE uses 3ms (Wii) or 5ms (GC) timing period
// But to be sure, just update the HLE every ms.
- return Core::System::GetInstance().GetSystemTimers().GetTicksPerSecond() / 1000;
+ return m_system.GetSystemTimers().GetTicksPerSecond() / 1000;
}
void DSPHLE::SendMailToDSP(u32 mail)
@@ -221,8 +223,7 @@ u16 DSPHLE::DSP_WriteControlRegister(u16 value)
SetUCode(UCODE_INIT_AUDIO_SYSTEM);
temp.DSPInitCode = 1;
// Number obtained from real hardware on a Wii, but it's not perfectly consistent
- m_control_reg_init_code_clear_time =
- Core::System::GetInstance().GetSystemTimers().GetFakeTimeBase() + 130;
+ m_control_reg_init_code_clear_time = m_system.GetSystemTimers().GetFakeTimeBase() + 130;
}
m_dsp_control.Hex = temp.Hex;
@@ -233,11 +234,10 @@ u16 DSPHLE::DSP_ReadControlRegister()
{
if (m_dsp_control.DSPInitCode != 0)
{
- auto& system = Core::System::GetInstance();
- if (system.GetSystemTimers().GetFakeTimeBase() >= m_control_reg_init_code_clear_time)
+ if (m_system.GetSystemTimers().GetFakeTimeBase() >= m_control_reg_init_code_clear_time)
m_dsp_control.DSPInitCode = 0;
else
- system.GetCoreTiming().ForceExceptionCheck(50); // Keep checking
+ m_system.GetCoreTiming().ForceExceptionCheck(50); // Keep checking
}
return m_dsp_control.Hex;
}
diff --git a/Source/Core/Core/HW/DSPHLE/DSPHLE.h b/Source/Core/Core/HW/DSPHLE/DSPHLE.h
index d03c5be5cc..a88c66052c 100644
--- a/Source/Core/Core/HW/DSPHLE/DSPHLE.h
+++ b/Source/Core/Core/HW/DSPHLE/DSPHLE.h
@@ -10,6 +10,10 @@
#include "Core/HW/DSP.h"
#include "Core/HW/DSPHLE/MailHandler.h"
+namespace Core
+{
+class System;
+}
class PointerWrap;
namespace DSP::HLE
@@ -19,7 +23,11 @@ class UCodeInterface;
class DSPHLE : public DSPEmulator
{
public:
- DSPHLE();
+ explicit DSPHLE(Core::System& system);
+ DSPHLE(const DSPHLE& other) = delete;
+ DSPHLE(DSPHLE&& other) = delete;
+ DSPHLE& operator=(const DSPHLE& other) = delete;
+ DSPHLE& operator=(DSPHLE&& other) = delete;
~DSPHLE();
bool Initialize(bool wii, bool dsp_thread) override;
@@ -42,6 +50,8 @@ public:
void SetUCode(u32 crc);
void SwapUCode(u32 crc);
+ Core::System& GetSystem() const { return m_system; }
+
private:
void SendMailToDSP(u32 mail);
@@ -67,5 +77,7 @@ private:
DSP::UDSPControl m_dsp_control;
u64 m_control_reg_init_code_clear_time = 0;
CMailHandler m_mail_handler;
+
+ Core::System& m_system;
};
} // namespace DSP::HLE