diff options
| author | bunnei <bunneidev@gmail.com> | 2015-01-05 15:51:36 -0500 |
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2015-01-05 15:51:36 -0500 |
| commit | 4828d0b7afabc4fcc9588b033135ab3a45d61cfa (patch) | |
| tree | cf080db65388f4650878922e7e71eb7ee527e3f8 /src/core/hle | |
| parent | fb0c7492235f1db2ffc0bf45e61628a7ba1a94f1 (diff) | |
| parent | e9650f1c6197baa7e532559964f42578bdde42d5 (diff) | |
Merge pull request #416 from bunnei/fake-dsp-interrupt
DSP: Signal (faked) interrupt on every frame.
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/dsp_dsp.cpp | 22 | ||||
| -rw-r--r-- | src/core/hle/service/dsp_dsp.h | 3 |
2 files changed, 21 insertions, 4 deletions
diff --git a/src/core/hle/service/dsp_dsp.cpp b/src/core/hle/service/dsp_dsp.cpp index 2cf4d118f..d4affdfbf 100644 --- a/src/core/hle/service/dsp_dsp.cpp +++ b/src/core/hle/service/dsp_dsp.cpp @@ -12,9 +12,23 @@ namespace DSP_DSP { -static u32 read_pipe_count; -static Handle semaphore_event; -static Handle interrupt_event; +static u32 read_pipe_count = 0; +static Handle semaphore_event = 0; +static Handle interrupt_event = 0; + +void SignalInterrupt() { + // TODO(bunnei): This is just a stub, it does not do anything other than signal to the emulated + // application that a DSP interrupt occurred, without specifying which one. Since we do not + // emulate the DSP yet (and how it works is largely unknown), this is a work around to get games + // that check the DSP interrupt signal event to run. We should figure out the different types of + // DSP interrupts, and trigger them at the appropriate times. + + if (interrupt_event == 0) { + LOG_WARNING(Service_DSP, "cannot signal interrupt until DSP event has been created!"); + return; + } + Kernel::SignalEvent(interrupt_event); +} /** * DSP_DSP::ConvertProcessAddressFromDspDram service function @@ -102,7 +116,7 @@ void RegisterInterruptEvents(Service::Interface* self) { void WriteReg0x10(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); - Kernel::SignalEvent(interrupt_event); + SignalInterrupt(); cmd_buff[1] = 0; // No error diff --git a/src/core/hle/service/dsp_dsp.h b/src/core/hle/service/dsp_dsp.h index 0b8b64600..fa13bfb7c 100644 --- a/src/core/hle/service/dsp_dsp.h +++ b/src/core/hle/service/dsp_dsp.h @@ -20,4 +20,7 @@ public: } }; +/// Signals that a DSP interrupt has occurred to userland code +void SignalInterrupt(); + } // namespace |
