diff --git a/src/core/core.cpp b/src/core/core.cpp index 9473b5c0c..fe6fcd068 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -198,6 +198,8 @@ System::ResultStatus System::Init(EmuWindow& emu_window, u32 system_mode) { dsp_core = std::make_unique(*memory); } + memory->SetDSP(*dsp_core); + dsp_core->SetSink(Settings::values.sink_id, Settings::values.audio_device_id); dsp_core->EnableStretching(Settings::values.enable_audio_stretching); diff --git a/src/core/hle/service/dsp/dsp_dsp.cpp b/src/core/hle/service/dsp/dsp_dsp.cpp index 22eba5ea4..474501761 100644 --- a/src/core/hle/service/dsp/dsp_dsp.cpp +++ b/src/core/hle/service/dsp/dsp_dsp.cpp @@ -394,7 +394,7 @@ void InstallInterfaces(Core::System& system) { auto& service_manager = system.ServiceManager(); auto dsp = std::make_shared(system); dsp->InstallAsService(service_manager); - Core::DSP().SetServiceToInterrupt(std::move(dsp)); + system.DSP().SetServiceToInterrupt(std::move(dsp)); } } // namespace Service::DSP diff --git a/src/core/memory.cpp b/src/core/memory.cpp index cb2c4c905..1584c6222 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -67,6 +67,7 @@ public: std::vector page_table_list; ARM_Interface* cpu = nullptr; + AudioCore::DspInterface* dsp = nullptr; }; MemorySystem::MemorySystem() : impl(std::make_unique()) {} @@ -325,7 +326,7 @@ u8* MemorySystem::GetPhysicalPointer(PAddr address) { target_pointer = impl->vram.get() + offset_into_region; break; case DSP_RAM_PADDR: - target_pointer = Core::DSP().GetDspMemory().data() + offset_into_region; + target_pointer = impl->dsp->GetDspMemory().data() + offset_into_region; break; case FCRAM_PADDR: target_pointer = impl->fcram.get() + offset_into_region; @@ -808,4 +809,8 @@ u8* MemorySystem::GetFCRAMPointer(u32 offset) { return impl->fcram.get() + offset; } +void MemorySystem::SetDSP(AudioCore::DspInterface& dsp) { + impl->dsp = &dsp; +} + } // namespace Memory diff --git a/src/core/memory.h b/src/core/memory.h index 4a72f184e..bda4f9c24 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -18,6 +18,10 @@ namespace Kernel { class Process; } +namespace AudioCore { +class DspInterface; +} + namespace Memory { // Are defined in a system header @@ -292,6 +296,8 @@ public: /// Unregisters page table for rasterizer cache marking void UnregisterPageTable(PageTable* page_table); + void SetDSP(AudioCore::DspInterface& dsp); + private: template T Read(const VAddr vaddr);