diff options
| author | 2015-01-05 15:51:36 -0500 | |
|---|---|---|
| committer | 2015-01-05 15:51:36 -0500 | |
| commit | 4828d0b7afabc4fcc9588b033135ab3a45d61cfa (patch) | |
| tree | cf080db65388f4650878922e7e71eb7ee527e3f8 /src/core/hle | |
| parent | Merge pull request #420 from lioncash/qflag (diff) | |
| parent | DSP: Signal (faked) interrupt on every frame. (diff) | |
| download | yuzu-4828d0b7afabc4fcc9588b033135ab3a45d61cfa.tar.gz yuzu-4828d0b7afabc4fcc9588b033135ab3a45d61cfa.tar.xz yuzu-4828d0b7afabc4fcc9588b033135ab3a45d61cfa.zip | |
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 @@ | |||
| 12 | 12 | ||
| 13 | namespace DSP_DSP { | 13 | namespace DSP_DSP { |
| 14 | 14 | ||
| 15 | static u32 read_pipe_count; | 15 | static u32 read_pipe_count = 0; |
| 16 | static Handle semaphore_event; | 16 | static Handle semaphore_event = 0; |
| 17 | static Handle interrupt_event; | 17 | static Handle interrupt_event = 0; |
| 18 | |||
| 19 | void SignalInterrupt() { | ||
| 20 | // TODO(bunnei): This is just a stub, it does not do anything other than signal to the emulated | ||
| 21 | // application that a DSP interrupt occurred, without specifying which one. Since we do not | ||
| 22 | // emulate the DSP yet (and how it works is largely unknown), this is a work around to get games | ||
| 23 | // that check the DSP interrupt signal event to run. We should figure out the different types of | ||
| 24 | // DSP interrupts, and trigger them at the appropriate times. | ||
| 25 | |||
| 26 | if (interrupt_event == 0) { | ||
| 27 | LOG_WARNING(Service_DSP, "cannot signal interrupt until DSP event has been created!"); | ||
| 28 | return; | ||
| 29 | } | ||
| 30 | Kernel::SignalEvent(interrupt_event); | ||
| 31 | } | ||
| 18 | 32 | ||
| 19 | /** | 33 | /** |
| 20 | * DSP_DSP::ConvertProcessAddressFromDspDram service function | 34 | * DSP_DSP::ConvertProcessAddressFromDspDram service function |
| @@ -102,7 +116,7 @@ void RegisterInterruptEvents(Service::Interface* self) { | |||
| 102 | void WriteReg0x10(Service::Interface* self) { | 116 | void WriteReg0x10(Service::Interface* self) { |
| 103 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 117 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 104 | 118 | ||
| 105 | Kernel::SignalEvent(interrupt_event); | 119 | SignalInterrupt(); |
| 106 | 120 | ||
| 107 | cmd_buff[1] = 0; // No error | 121 | cmd_buff[1] = 0; // No error |
| 108 | 122 | ||
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: | |||
| 20 | } | 20 | } |
| 21 | }; | 21 | }; |
| 22 | 22 | ||
| 23 | /// Signals that a DSP interrupt has occurred to userland code | ||
| 24 | void SignalInterrupt(); | ||
| 25 | |||
| 23 | } // namespace | 26 | } // namespace |