mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-06 22:25:41 +12:00
Initial impl for createEvent SVC
This commit is contained in:
parent
68698ae7a7
commit
a91035abf4
6 changed files with 28 additions and 2 deletions
|
@ -47,6 +47,7 @@ endif()
|
||||||
set(SOURCE_FILES src/main.cpp src/emulator.cpp src/core/CPU/cpu_dynarmic.cpp src/core/memory.cpp src/core/elf.cpp)
|
set(SOURCE_FILES src/main.cpp src/emulator.cpp src/core/CPU/cpu_dynarmic.cpp src/core/memory.cpp src/core/elf.cpp)
|
||||||
set(KERNEL_SOURCE_FILES src/core/kernel/kernel.cpp src/core/kernel/resource_limits.cpp
|
set(KERNEL_SOURCE_FILES src/core/kernel/kernel.cpp src/core/kernel/resource_limits.cpp
|
||||||
src/core/kernel/memory_management.cpp src/core/kernel/ports.cpp
|
src/core/kernel/memory_management.cpp src/core/kernel/ports.cpp
|
||||||
|
src/core/kernel/events.cpp src/core/kernel/threads.cpp
|
||||||
)
|
)
|
||||||
set(SERVICE_SOURCE_FILES src/core/services/service_manager.cpp src/core/services/apt.cpp src/core/services/hid.cpp
|
set(SERVICE_SOURCE_FILES src/core/services/service_manager.cpp src/core/services/apt.cpp src/core/services/hid.cpp
|
||||||
src/core/services/fs.cpp src/core/services/gsp_gpu.cpp src/core/services/gsp_lcd.cpp
|
src/core/services/fs.cpp src/core/services/gsp_gpu.cpp src/core/services/gsp_lcd.cpp
|
||||||
|
|
|
@ -49,6 +49,7 @@ class Kernel {
|
||||||
return handleCounter++;
|
return handleCounter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Handle makeEvent(u32 resetType);
|
||||||
Handle makeProcess();
|
Handle makeProcess();
|
||||||
Handle makePort(const char* name);
|
Handle makePort(const char* name);
|
||||||
Handle makeSession(Handle port);
|
Handle makeSession(Handle port);
|
||||||
|
@ -63,8 +64,9 @@ class Kernel {
|
||||||
std::string getProcessName(u32 pid);
|
std::string getProcessName(u32 pid);
|
||||||
|
|
||||||
// SVC implementations
|
// SVC implementations
|
||||||
void controlMemory();
|
|
||||||
void createAddressArbiter();
|
void createAddressArbiter();
|
||||||
|
void createEvent();
|
||||||
|
void controlMemory();
|
||||||
void getResourceLimit();
|
void getResourceLimit();
|
||||||
void getResourceLimitLimitValues();
|
void getResourceLimitLimitValues();
|
||||||
void getResourceLimitCurrentValues();
|
void getResourceLimitCurrentValues();
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace SVCResult {
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class KernelObjectType : u8 {
|
enum class KernelObjectType : u8 {
|
||||||
Port, Process, ResourceLimit, Session, Dummy
|
Event, Port, Process, ResourceLimit, Session, Dummy
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class ResourceLimitCategory : int {
|
enum class ResourceLimitCategory : int {
|
||||||
|
@ -68,6 +68,7 @@ struct SessionData {
|
||||||
|
|
||||||
static const char* kernelObjectTypeToString(KernelObjectType t) {
|
static const char* kernelObjectTypeToString(KernelObjectType t) {
|
||||||
switch (t) {
|
switch (t) {
|
||||||
|
case KernelObjectType::Event: return "event";
|
||||||
case KernelObjectType::Port: return "port";
|
case KernelObjectType::Port: return "port";
|
||||||
case KernelObjectType::Process: return "process";
|
case KernelObjectType::Process: return "process";
|
||||||
case KernelObjectType::ResourceLimit: return "resource limit";
|
case KernelObjectType::ResourceLimit: return "resource limit";
|
||||||
|
|
21
src/core/kernel/events.cpp
Normal file
21
src/core/kernel/events.cpp
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#include "kernel.hpp"
|
||||||
|
|
||||||
|
// TODO: What the fuck is resetType meant to be?
|
||||||
|
Handle Kernel::makeEvent(u32 resetType) {
|
||||||
|
Handle ret = makeObject(KernelObjectType::Event);
|
||||||
|
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];
|
||||||
|
printf("CreateEvent(handle pointer = %08X, resetType = %d)\n", outPointer, resetType);
|
||||||
|
|
||||||
|
Handle handle = makeEvent(resetType);
|
||||||
|
regs[0] = SVCResult::Success;
|
||||||
|
regs[1] = handle;
|
||||||
|
mem.write32(outPointer, handle);
|
||||||
|
}
|
|
@ -5,6 +5,7 @@
|
||||||
void Kernel::serviceSVC(u32 svc) {
|
void Kernel::serviceSVC(u32 svc) {
|
||||||
switch (svc) {
|
switch (svc) {
|
||||||
case 0x01: controlMemory(); break;
|
case 0x01: controlMemory(); break;
|
||||||
|
case 0x17: createEvent(); break;
|
||||||
case 0x21: createAddressArbiter(); break;
|
case 0x21: createAddressArbiter(); break;
|
||||||
case 0x23: svcCloseHandle(); break;
|
case 0x23: svcCloseHandle(); break;
|
||||||
case 0x2D: connectToPort(); break;
|
case 0x2D: connectToPort(); break;
|
||||||
|
|
0
src/core/kernel/threads.cpp
Normal file
0
src/core/kernel/threads.cpp
Normal file
Loading…
Add table
Reference in a new issue