Stub LDR_RO::LoadCRONew

This commit is contained in:
Nomi 2023-08-27 17:22:52 +02:00
parent d2ae87ae20
commit 9d0c4c150e
2 changed files with 22 additions and 1 deletions

View file

@ -13,6 +13,7 @@ class LDRService {
// Service commands
void initialize(u32 messagePointer);
void loadCRR(u32 messagePointer);
void loadCRONew(u32 messagePointer);
public:
LDRService(Memory& mem) : mem(mem) {}

View file

@ -4,7 +4,8 @@
namespace LDRCommands {
enum : u32 {
Initialize = 0x000100C2,
LoadCRR = 0x00020082
LoadCRR = 0x00020082,
LoadCRONew = 0x000902C2,
};
}
@ -15,6 +16,7 @@ void LDRService::handleSyncRequest(u32 messagePointer) {
switch (command) {
case LDRCommands::Initialize: initialize(messagePointer); break;
case LDRCommands::LoadCRR: loadCRR(messagePointer); break;
case LDRCommands::LoadCRONew: loadCRONew(messagePointer); break;
default: Helpers::panic("LDR::RO service requested. Command: %08X\n", command);
}
}
@ -38,4 +40,22 @@ void LDRService::loadCRR(u32 messagePointer) {
log("LDR_RO::LoadCRR (buffer = %08X, size = %08X, process = %X)\n", crrPointer, size, process);
mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 0));
mem.write32(messagePointer + 4, Result::Success);
}
void LDRService::loadCRONew(u32 messagePointer) {
const u32 croPointer = mem.read32(messagePointer + 4);
const u32 mapVaddr = mem.read32(messagePointer + 8);
const u32 size = mem.read32(messagePointer + 12);
const u32 dataVaddr = mem.read32(messagePointer + 16);
const u32 dataSize = mem.read32(messagePointer + 24);
const u32 bssVaddr = mem.read32(messagePointer + 28);
const u32 bssSize = mem.read32(messagePointer + 32);
const bool autoLink = mem.read32(messagePointer + 36) != 0;
const u32 fixLevel = mem.read32(messagePointer + 40);
const Handle process = mem.read32(messagePointer + 52);
log("LDR_RO::LoadCRONew (buffer = %08X, vaddr = %08X, size = %08X, .data vaddr = %08X, .data size = %08X, .bss vaddr = %08X, .bss size = %08X, auto link = %d, fix level = %X, process = %X)\n", croPointer, mapVaddr, size, dataVaddr, dataSize, bssVaddr, bssSize, autoLink, fixLevel, process);
mem.write32(messagePointer, IPC::responseHeader(0x9, 2, 0));
mem.write32(messagePointer + 4, Result::Success);
mem.write32(messagePointer + 8, size);
}