mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-09-02 15:45:46 +00:00
DSP: Own DSP RAM and add it to fastmem
This commit is contained in:
parent
ff100dc5ac
commit
90323164dc
6 changed files with 18 additions and 7 deletions
|
@ -146,7 +146,7 @@ namespace Audio {
|
|||
|
||||
std::array<std::vector<u8>, pipeCount> pipeData; // The data of each pipe
|
||||
std::array<Source, Audio::HLE::sourceCount> sources; // DSP voices
|
||||
Audio::HLE::DspMemory dspRam;
|
||||
Audio::HLE::DspMemory& dspRam;
|
||||
|
||||
Audio::DSPMixer mixer;
|
||||
std::unique_ptr<Audio::AAC::Decoder> aacDecoder;
|
||||
|
|
|
@ -20,6 +20,7 @@ namespace Audio {
|
|||
|
||||
// Get a pointer to a data memory address
|
||||
u8* getDataPointer(u32 address) { return getDspMemory() + Memory::DSP_DATA_MEMORY_OFFSET + address; }
|
||||
Teakra::UserConfig getTeakraConfig();
|
||||
|
||||
enum class PipeDirection {
|
||||
DSPtoCPU = 0,
|
||||
|
@ -89,7 +90,7 @@ namespace Audio {
|
|||
}
|
||||
|
||||
void setAudioEnabled(bool enable) override;
|
||||
u8* getDspMemory() override { return teakra.GetDspMemory().data(); }
|
||||
u8* getDspMemory() override { return teakra.GetDspMemory(); }
|
||||
void* getRegisters() override;
|
||||
DSPCore::Type getType() override { return DSPCore::Type::Teakra; }
|
||||
u16 readProgramWord(u32 address) override { return teakra.ProgramRead(address); }
|
||||
|
|
|
@ -22,7 +22,6 @@ std::unique_ptr<Audio::DSPCore> Audio::makeDSPCore(EmulatorConfig& config, Memor
|
|||
break;
|
||||
}
|
||||
|
||||
mem.setDSPMem(core->getDspMemory());
|
||||
return core;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace Audio {
|
|||
}
|
||||
|
||||
HLE_DSP::HLE_DSP(Memory& mem, Scheduler& scheduler, DSPService& dspService, EmulatorConfig& config)
|
||||
: DSPCore(mem, scheduler, dspService, config) {
|
||||
: DSPCore(mem, scheduler, dspService, config), dspRam(*(Audio::HLE::DspMemory*)mem.getDSPMem()) {
|
||||
// Set up source indices
|
||||
for (int i = 0; i < sources.size(); i++) {
|
||||
sources[i].index = i;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
using namespace Audio;
|
||||
|
||||
TeakraDSP::TeakraDSP(Memory& mem, Scheduler& scheduler, DSPService& dspService, EmulatorConfig& config)
|
||||
: DSPCore(mem, scheduler, dspService, config), pipeBaseAddr(0), running(false) {
|
||||
: DSPCore(mem, scheduler, dspService, config), pipeBaseAddr(0), teakra(getTeakraConfig()), running(false) {
|
||||
// Set up callbacks for Teakra
|
||||
Teakra::AHBMCallback ahbm;
|
||||
|
||||
|
@ -82,6 +82,13 @@ TeakraDSP::TeakraDSP(Memory& mem, Scheduler& scheduler, DSPService& dspService,
|
|||
teakra.SetSemaphoreHandler([processPipeEvent]() { processPipeEvent(false); });
|
||||
}
|
||||
|
||||
Teakra::UserConfig TeakraDSP::getTeakraConfig() {
|
||||
Teakra::UserConfig config;
|
||||
config.dsp_memory = mem.getDSPMem();
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
void TeakraDSP::reset() {
|
||||
teakra.Reset();
|
||||
running = false;
|
||||
|
@ -237,7 +244,7 @@ void TeakraDSP::loadComponent(std::vector<u8>& data, u32 programMask, u32 dataMa
|
|||
teakra.Reset();
|
||||
running = true;
|
||||
|
||||
u8* dspCode = teakra.GetDspMemory().data();
|
||||
u8* dspCode = teakra.GetDspMemory();
|
||||
u8* dspData = dspCode + 0x40000;
|
||||
|
||||
Dsp1 dsp1;
|
||||
|
|
|
@ -24,7 +24,7 @@ Memory::Memory(KFcram& fcramManager, const EmulatorConfig& config) : fcramManage
|
|||
paddrTable.resize(totalPageCount, 0);
|
||||
|
||||
fcram = arena->BackingBasePointer() + FASTMEM_FCRAM_OFFSET;
|
||||
// arenaDSPRam = arena->BackingBasePointer() + FASTMEM_DSP_RAM_OFFSET;
|
||||
dspRam = arena->BackingBasePointer() + FASTMEM_DSP_RAM_OFFSET;
|
||||
useFastmem = fastmemEnabled && arena->VirtualBasePointer() != nullptr;
|
||||
}
|
||||
|
||||
|
@ -395,6 +395,10 @@ void Memory::mapPhysicalMemory(u32 vaddr, u32 paddr, s32 pages, bool r, bool w,
|
|||
}
|
||||
} else if (paddr >= VirtualAddrs::DSPMemStart && paddr < VirtualAddrs::DSPMemStart + DSP_RAM_SIZE) {
|
||||
hostPtr = dspRam + (paddr - VirtualAddrs::DSPMemStart);
|
||||
|
||||
if (useFastmem) {
|
||||
addFastmemView(vaddr, FASTMEM_DSP_RAM_OFFSET + paddr - VirtualAddrs::DSPMemStart, usize(pages) * pageSize, w);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < pages; i++) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue