aboutsummaryrefslogtreecommitdiff
path: root/src/SPU.h
diff options
context:
space:
mode:
authorJesse Talavera-Greenberg <jesse@jesse.tg>2023-11-28 17:16:41 -0500
committerGitHub <noreply@github.com>2023-11-28 23:16:41 +0100
commite973236203292637eb7bd009a4cfbd6fd785181f (patch)
tree4c348a9927bfa6f8f37cc943291174a1096434b3 /src/SPU.h
parentc84cb174628c5a2e8e6cc0179e16de3eab47864a (diff)
Refactor `NDS` and `DSi` to be objects (#1893)
* First crack at refactoring NDS and DSi into objects - Remove all global/`static` variables in `NDS` and related classes - Rely more on virtual dispatch when we need to pick methods at runtime - Pass `NDS&` or `DSi&` to its constituent components where necessary - Introduce some headers or move some definitions to break `#include` cycles * Refactor the frontend to accommodate the core's changes * Move up `SchedList`'s declaration - Move it to before the components are initialized so the `map`s inside are initialized - Fields in C++ are initialized in the order they're declared * Fix a crash when allocating memory * Fix JIT-free builds * Fix GDB-free builds * Fix Linux builds - Explicitly qualify some member types in NDS, since they share the same name as their classes * Remove an unnecessary template argument - This was causing the build to fail on macOS * Fix ARM and Android builds * Rename `Constants.h` to `MemConstants.h` * Add `NDS::IsRunning()` * Use an `#include` guard instead of `#pragma once`
Diffstat (limited to 'src/SPU.h')
-rw-r--r--src/SPU.h12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/SPU.h b/src/SPU.h
index 144c19b..bf0c658 100644
--- a/src/SPU.h
+++ b/src/SPU.h
@@ -24,12 +24,13 @@
namespace melonDS
{
+class NDS;
class SPU;
class SPUChannel
{
public:
- SPUChannel(u32 num);
+ SPUChannel(u32 num, melonDS::NDS& nds);
~SPUChannel();
void Reset();
void DoSavestate(Savestate* file);
@@ -142,13 +143,13 @@ public:
void PanOutput(s32 in, s32& left, s32& right);
private:
- u32 (*BusRead32)(u32 addr);
+ melonDS::NDS& NDS;
};
class SPUCaptureUnit
{
public:
- SPUCaptureUnit(u32 num);
+ SPUCaptureUnit(u32 num, melonDS::NDS&);
~SPUCaptureUnit();
void Reset();
void DoSavestate(Savestate* file);
@@ -199,13 +200,13 @@ public:
void Run(s32 sample);
private:
- void (*BusWrite32)(u32 addr, u32 val);
+ melonDS::NDS& NDS;
};
class SPU
{
public:
- SPU();
+ SPU(melonDS::NDS& nds);
~SPU();
void Reset();
void DoSavestate(Savestate* file);
@@ -240,6 +241,7 @@ public:
private:
static const u32 OutputBufferSize = 2*2048;
+ melonDS::NDS& NDS;
s16 OutputBackbuffer[2 * OutputBufferSize];
u32 OutputBackbufferWritePosition;