DSP: Signal (faked) interrupt on every frame.

- Hack to work around games checking that the DSP event has been signaled by a real DSP interrupt.
This commit is contained in:
bunnei 2015-01-05 00:19:28 -05:00
parent cc23269ff4
commit e9650f1c61
3 changed files with 28 additions and 5 deletions

View file

@ -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

View file

@ -20,4 +20,7 @@ public:
}
};
/// Signals that a DSP interrupt has occurred to userland code
void SignalInterrupt();
} // namespace