Write proper pointers

This commit is contained in:
Nomi 2023-09-26 04:42:20 +02:00
parent 099a3066e5
commit a167a6d53f
3 changed files with 17 additions and 7 deletions

View file

@ -78,10 +78,20 @@ void AMService::getProgramInfos(u32 messagePointer) {
const u32 titleInfos = mem.read32(messagePointer + 24);
log("AM::GetProgramInfos (media type = %X, title count = %X, title IDs pointer = %X, title infos pointer = %X) (Stubbed)\n", mediaType, titleCount, titleIDs, titleInfos);
for (u32 title = 0; title < titleCount; title++) {
const u64 id = mem.read64(titleIDs + sizeof(u64) * title);
mem.write64(titleInfos + 0x18 * title, id); // Title ID
mem.write64(titleInfos + 0x18 * title + 8, 0); // Size
mem.write16(titleInfos + 0x18 * title + 16, 0); // Version
mem.write16(titleInfos + 0x18 * title + 18, 0); // Padding
mem.write32(titleInfos + 0x18 * title + 20, 0); // Type
}
mem.write32(messagePointer, IPC::responseHeader(0x3, 1, 4));
mem.write32(messagePointer + 4, Result::Success);
mem.write32(messagePointer + 8, IPC::pointerHeader(0, sizeof(u64) * titleCount, IPC::BufferType::Send));
mem.write32(messagePointer + 12, 0xC0DEC0DE);
mem.write32(messagePointer + 12, titleIDs);
mem.write32(messagePointer + 16, IPC::pointerHeader(1, sizeof(u32) * titleCount, IPC::BufferType::Receive));
mem.write32(messagePointer + 20, 0xC0DEC0DE);
mem.write32(messagePointer + 20, titleInfos);
}

View file

@ -392,9 +392,9 @@ void APTService::receiveDeliverArg(u32 messagePointer) {
mem.write32(messagePointer + 8, 0); // Program ID
mem.write8(messagePointer + 16, 1); // Is valid response
mem.write32(messagePointer + 20, IPC::pointerHeader(0, sizeof(u32) * parameterSize, IPC::BufferType::Send));
mem.write32(messagePointer + 24, 0xDEADBEEF); // TODO: look into how this works if program reads from this address
mem.write32(messagePointer + 24, parameter);
mem.write32(messagePointer + 28, IPC::pointerHeader(1, sizeof(u32) * hmacSize, IPC::BufferType::Send));
mem.write32(messagePointer + 32, 0xDEADBEEF);
mem.write32(messagePointer + 32, hmac);
}
void APTService::loadSysMenuArg(u32 messagePointer) {
@ -404,7 +404,7 @@ void APTService::loadSysMenuArg(u32 messagePointer) {
mem.write32(messagePointer, IPC::responseHeader(0x35, 4, 4));
mem.write32(messagePointer + 4, Result::Success);
mem.write32(messagePointer + 8, IPC::pointerHeader(0, sizeof(u32) * outputSize, IPC::BufferType::Send));
mem.write32(messagePointer + 12, 0xDEADBEEF);
mem.write32(messagePointer + 12, outputSize);
}
void APTService::getCaptureInfo(u32 messagePointer) {
@ -415,5 +415,5 @@ void APTService::getCaptureInfo(u32 messagePointer) {
mem.write32(messagePointer, IPC::responseHeader(0x4A, 1, 2));
mem.write32(messagePointer + 4, Result::Success);
mem.write32(messagePointer + 8, IPC::pointerHeader(0, sizeof(u32) * size, IPC::BufferType::Send));
mem.write32(messagePointer + 12, 0xDEADDEAD);
mem.write32(messagePointer + 12, captureBufferInfo);
}

View file

@ -283,7 +283,7 @@ void CFGService::setConfigInfoBlk4(u32 messagePointer) {
mem.write32(messagePointer, IPC::responseHeader(0x401, 1, 2));
mem.write32(messagePointer + 4, Result::Success);
mem.write32(messagePointer + 8, IPC::pointerHeader(0, size, IPC::BufferType::Receive));
mem.write32(messagePointer + 12, 0xCAFE0000); // Nonsensical pointer to see if anything uses this
mem.write32(messagePointer + 12, input);
}
void CFGService::updateConfigNANDSavegame(u32 messagePointer) {