Properly handle DSP interrupts in HLE

This commit is contained in:
wheremyfoodat 2024-02-19 18:50:41 +02:00
parent 7a5bb2859e
commit f7c6ec3b57
7 changed files with 43 additions and 22 deletions

View file

@ -20,12 +20,14 @@ namespace Audio {
std::array<u8, Memory::DSP_RAM_SIZE> dspRam;
void resetAudioPipe();
bool loaded = false; // Have we loaded a component?
public:
NullDSP(Memory& mem, Scheduler& scheduler, DSPService& dspService) : DSPCore(mem, scheduler, dspService) {}
void reset() override;
void runAudioFrame() override {}
void runAudioFrame() override;
u8* getDspMemory() override { return dspRam.data(); }
u16 recvData(u32 regId) override;
@ -34,8 +36,8 @@ namespace Audio {
std::vector<u8> readPipe(u32 channel, u32 peer, u32 size, u32 buffer) override;
// NOPs for null DSP core
void loadComponent(std::vector<u8>& data, u32 programMask, u32 dataMask) override {}
void unloadComponent() override {}
void loadComponent(std::vector<u8>& data, u32 programMask, u32 dataMask) override;
void unloadComponent() override;
void setSemaphore(u16 value) override {}
void setSemaphoreMask(u16 value) override {}
};

View file

@ -245,6 +245,5 @@ public:
ServiceManager& getServiceManager() { return serviceManager; }
void sendGPUInterrupt(GPUInterrupt type) { serviceManager.sendGPUInterrupt(type); }
void signalDSPEvents() { serviceManager.signalDSPEvents(); }
void clearInstructionCache();
};

View file

@ -66,7 +66,6 @@ public:
Surround = 2
};
void signalEvents();
void triggerPipeEvent(int index);
void triggerSemaphoreEvent();
void triggerInterrupt0();

View file

@ -105,8 +105,6 @@ class ServiceManager {
void setHIDSharedMem(u8* ptr) { hid.setSharedMem(ptr); }
void setCSNDSharedMem(u8* ptr) { csnd.setSharedMemory(ptr); }
void signalDSPEvents() { dsp.signalEvents(); }
// Input function wrappers
HIDService& getHID() { return hid; }
NFCService& getNFC() { return nfc; }