mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-08 07:05:40 +12:00
[DSP] Implement ConvertProcessAddressFromDspDram
This commit is contained in:
parent
a3431e7c9c
commit
c34011326e
2 changed files with 14 additions and 2 deletions
|
@ -49,6 +49,7 @@ class DSPService {
|
||||||
DSPPipe audioPipe;
|
DSPPipe audioPipe;
|
||||||
|
|
||||||
// Service functions
|
// Service functions
|
||||||
|
void convertProcessAddressFromDspDram(u32 messagePointer); // Nice function name
|
||||||
void getSemaphoreHandle(u32 messagePointer);
|
void getSemaphoreHandle(u32 messagePointer);
|
||||||
void loadComponent(u32 messagePointer);
|
void loadComponent(u32 messagePointer);
|
||||||
void readPipeIfPossible(u32 messagePointer);
|
void readPipeIfPossible(u32 messagePointer);
|
||||||
|
|
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
namespace DSPCommands {
|
namespace DSPCommands {
|
||||||
enum : u32 {
|
enum : u32 {
|
||||||
|
SetSemaphore = 0x00070040,
|
||||||
|
ConvertProcessAddressFromDspDram = 0x000C0040,
|
||||||
|
WriteProcessPipe = 0x000D0082,
|
||||||
ReadPipeIfPossible = 0x001000C0,
|
ReadPipeIfPossible = 0x001000C0,
|
||||||
LoadComponent = 0x001100C2,
|
LoadComponent = 0x001100C2,
|
||||||
RegisterInterruptEvents = 0x00150082,
|
RegisterInterruptEvents = 0x00150082,
|
||||||
GetSemaphoreHandle = 0x00160000,
|
GetSemaphoreHandle = 0x00160000,
|
||||||
SetSemaphoreMask = 0x00170040,
|
SetSemaphoreMask = 0x00170040,
|
||||||
SetSemaphore = 0x00070040,
|
|
||||||
WriteProcessPipe = 0x000D0082
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +26,7 @@ void DSPService::reset() {
|
||||||
void DSPService::handleSyncRequest(u32 messagePointer) {
|
void DSPService::handleSyncRequest(u32 messagePointer) {
|
||||||
const u32 command = mem.read32(messagePointer);
|
const u32 command = mem.read32(messagePointer);
|
||||||
switch (command) {
|
switch (command) {
|
||||||
|
case DSPCommands::ConvertProcessAddressFromDspDram: convertProcessAddressFromDspDram(messagePointer); break;
|
||||||
case DSPCommands::GetSemaphoreHandle: getSemaphoreHandle(messagePointer); break;
|
case DSPCommands::GetSemaphoreHandle: getSemaphoreHandle(messagePointer); break;
|
||||||
case DSPCommands::LoadComponent: loadComponent(messagePointer); break;
|
case DSPCommands::LoadComponent: loadComponent(messagePointer); break;
|
||||||
case DSPCommands::ReadPipeIfPossible: readPipeIfPossible(messagePointer); break;
|
case DSPCommands::ReadPipeIfPossible: readPipeIfPossible(messagePointer); break;
|
||||||
|
@ -36,6 +38,15 @@ void DSPService::handleSyncRequest(u32 messagePointer) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DSPService::convertProcessAddressFromDspDram(u32 messagePointer) {
|
||||||
|
const u32 address = mem.read32(messagePointer + 4);
|
||||||
|
log("DSP::ConvertProcessAddressFromDspDram (address = %08X)\n", address);
|
||||||
|
|
||||||
|
const u32 converted = (address << 1) + 0x1FF40000;
|
||||||
|
mem.write32(messagePointer + 4, Result::Success);
|
||||||
|
mem.write32(messagePointer + 8, converted); // Converted address
|
||||||
|
}
|
||||||
|
|
||||||
void DSPService::loadComponent(u32 messagePointer) {
|
void DSPService::loadComponent(u32 messagePointer) {
|
||||||
u32 size = mem.read32(messagePointer + 4);
|
u32 size = mem.read32(messagePointer + 4);
|
||||||
u32 programMask = mem.read32(messagePointer + 8);
|
u32 programMask = mem.read32(messagePointer + 8);
|
||||||
|
|
Loading…
Add table
Reference in a new issue