Files
P3DS-test/src/core/kernel/events.cpp

38 lines
1.1 KiB
C++

#include "kernel.hpp"
const char* Kernel::resetTypeToString(u32 type) {
switch (type) {
case 0: return "RESET_ONESHOT";
case 1: return "RESET_STICKY";
case 2: return "RESET_PULSE";
default: return "Invalid";
}
}
Handle Kernel::makeEvent(ResetType resetType) {
Handle ret = makeObject(KernelObjectType::Event);
objects[ret].data = new EventData();
auto eventData = static_cast<EventData*>(objects[ret].data);
eventData->resetType = resetType;
return ret;
}
// Result CreateEvent(Handle* event, ResetType resetType)
// TODO: Just like getResourceLimit this seems to output the handle in r1 even though 3dbrew doesn't mention this
// Should the handle be written both in memory and r1, or just r1?
void Kernel::createEvent() {
const u32 outPointer = regs[0];
const u32 resetType = regs[1];
if (resetType > 2)
Helpers::panic("Invalid reset type for event %d", resetType);
printf("CreateEvent(handle pointer = %08X, resetType = %s)\n", outPointer, resetTypeToString(resetType));
Handle handle = makeEvent(static_cast<ResetType>(resetType));
regs[0] = SVCResult::Success;
regs[1] = handle;
mem.write32(outPointer, handle);
}