FS: Stub card SPI and some other things

This commit is contained in:
wheremyfoodat
2024-12-09 19:08:30 +02:00
parent 055dbc7fb6
commit cc669d7cab
12 changed files with 139 additions and 21 deletions

View File

@@ -28,7 +28,8 @@ namespace DSPCommands {
RegisterInterruptEvents = 0x00150082,
GetSemaphoreEventHandle = 0x00160000,
SetSemaphoreMask = 0x00170040,
GetHeadphoneStatus = 0x001F0000
GetHeadphoneStatus = 0x001F0000,
ForceHeadphoneOut = 0x00200040,
};
}
@@ -42,6 +43,7 @@ namespace Result {
void DSPService::reset() {
totalEventCount = 0;
semaphoreMask = 0;
headphonesInserted = true;
semaphoreEvent = std::nullopt;
interrupt0 = std::nullopt;
@@ -60,6 +62,7 @@ void DSPService::handleSyncRequest(u32 messagePointer) {
case DSPCommands::ConvertProcessAddressFromDspDram: convertProcessAddressFromDspDram(messagePointer); break;
case DSPCommands::FlushDataCache: flushDataCache(messagePointer); break;
case DSPCommands::InvalidateDataCache: invalidateDCache(messagePointer); break;
case DSPCommands::ForceHeadphoneOut: forceHeadphoneOut(messagePointer); break;
case DSPCommands::GetHeadphoneStatus: getHeadphoneStatus(messagePointer); break;
case DSPCommands::GetSemaphoreEventHandle: getSemaphoreEventHandle(messagePointer); break;
case DSPCommands::LoadComponent: loadComponent(messagePointer); break;
@@ -210,7 +213,8 @@ void DSPService::getHeadphoneStatus(u32 messagePointer) {
mem.write32(messagePointer, IPC::responseHeader(0x1F, 2, 0));
mem.write32(messagePointer + 4, Result::Success);
mem.write32(messagePointer + 8, Result::HeadphonesInserted); // This should be toggleable for shits and giggles
// This should be toggleable for shits and giggles
mem.write32(messagePointer + 8, headphonesInserted ? Result::HeadphonesInserted : Result::HeadphonesNotInserted);
}
void DSPService::getSemaphoreEventHandle(u32 messagePointer) {
@@ -278,6 +282,17 @@ void DSPService::invalidateDCache(u32 messagePointer) {
mem.write32(messagePointer + 4, Result::Success);
}
void DSPService::forceHeadphoneOut(u32 messagePointer) {
const bool force = mem.read8(messagePointer + 4) != 0;
if (force) {
headphonesInserted = false;
}
log("DSP::ForceHeadphoneOut\n");
mem.write32(messagePointer, IPC::responseHeader(0x20, 1, 0));
mem.write32(messagePointer + 4, Result::Success);
}
DSPService::ComponentDumpResult DSPService::dumpComponent(const std::filesystem::path& path) {
if (loadedComponent.empty()) {
return ComponentDumpResult::NotLoaded;