mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-06-03 12:27:21 +12:00
[Kernel] CreateThread stub
This commit is contained in:
parent
765b51696e
commit
1c4348248d
8 changed files with 58 additions and 7 deletions
|
@ -23,8 +23,12 @@ class CP15 final : public Dynarmic::A32::Coprocessor {
|
|||
|
||||
CallbackOrAccessOneWord CompileSendOneWord(bool two, unsigned opc1, CoprocReg CRn,
|
||||
CoprocReg CRm, unsigned opc2) override {
|
||||
if (!two && opc1 == 0 && CRn == CoprocReg::C7 && CRm == CoprocReg::C10 && opc2 == 4) {
|
||||
return &dummy; // Normally inserts a "Data Synchronization Barrier"
|
||||
}
|
||||
|
||||
if (!two && opc1 == 0 && CRn == CoprocReg::C7 && CRm == CoprocReg::C10 && opc2 == 5) {
|
||||
return &dummy; // TODO: Find out what this is. Some sort of memory barrier reg.
|
||||
return &dummy; // Normally inserts a "Data Memory Barrier"
|
||||
}
|
||||
Helpers::panic("CP15: CompileSendOneWord\nopc1: %d CRn: %d CRm: %d opc2: %d\n", opc1, (int)CRn, (int)CRm, opc2);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,9 @@ class Kernel {
|
|||
std::vector<KernelObject> objects;
|
||||
std::vector<Handle> portHandles;
|
||||
|
||||
u32 currentProcess;
|
||||
Handle currentProcess;
|
||||
Handle currentThread;
|
||||
u32 threadCount;
|
||||
ServiceManager serviceManager;
|
||||
|
||||
// Get pointer to the object with the specified handle
|
||||
|
@ -53,6 +55,7 @@ class Kernel {
|
|||
Handle makeProcess();
|
||||
Handle makePort(const char* name);
|
||||
Handle makeSession(Handle port);
|
||||
Handle makeThread(u32 entrypoint, u32 initialSP, u32 priority, u32 id);
|
||||
|
||||
std::optional<Handle> getPortHandle(const char* name);
|
||||
void deleteObjectData(KernelObject& object);
|
||||
|
@ -68,6 +71,7 @@ class Kernel {
|
|||
// SVC implementations
|
||||
void createAddressArbiter();
|
||||
void createEvent();
|
||||
void createThread();
|
||||
void controlMemory();
|
||||
void mapMemoryBlock();
|
||||
void queryMemory();
|
||||
|
|
|
@ -10,12 +10,14 @@ namespace SVCResult {
|
|||
// Different calls return a different value
|
||||
BadHandle = 0xD8E007F7,
|
||||
BadHandleAlt = 0xD9001BF7,
|
||||
PortNameTooLong = 0xE0E0181E
|
||||
|
||||
BadThreadPriority = 0xE0E01BFD,
|
||||
PortNameTooLong = 0xE0E0181E,
|
||||
};
|
||||
}
|
||||
|
||||
enum class KernelObjectType : u8 {
|
||||
Event, Port, Process, ResourceLimit, Session, Dummy
|
||||
Event, Port, Process, ResourceLimit, Session, Thread, Dummy
|
||||
};
|
||||
|
||||
enum class ResourceLimitCategory : int {
|
||||
|
@ -84,6 +86,7 @@ static const char* kernelObjectTypeToString(KernelObjectType t) {
|
|||
case KernelObjectType::Process: return "process";
|
||||
case KernelObjectType::ResourceLimit: return "resource limit";
|
||||
case KernelObjectType::Session: return "session";
|
||||
case KernelObjectType::Thread: return "thread";
|
||||
case KernelObjectType::Dummy: return "dummy";
|
||||
default: return "unknown";
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue