From 2bde8f28561ea9436d13d990f6b129a0e80a325e Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 10 Apr 2014 23:26:12 -0400 Subject: base code to call a syscall from ARM11 appcore --- src/core/hle.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'src/core/hle.cpp') diff --git a/src/core/hle.cpp b/src/core/hle.cpp index 8dad7695b..d62d2d0ce 100644 --- a/src/core/hle.cpp +++ b/src/core/hle.cpp @@ -13,21 +13,45 @@ namespace HLE { static std::vector g_module_db; +const FunctionDef* GetSyscallInfo(u32 opcode) { + u32 func_num = opcode & 0xFFFFFF; // 8 bits + if (func_num > 0xFF) { + ERROR_LOG(HLE,"Unknown syscall: 0x%02X", func_num); + return NULL; + } + return &g_module_db[0].func_table[func_num]; +} + +void CallSyscall(u32 opcode) { + const FunctionDef *info = GetSyscallInfo(opcode); + + if (!info) { + return; + } + if (info->func) { + info->func(); + } else { + ERROR_LOG(HLE, "Unimplemented HLE function %s", info->name); + } +} + void RegisterModule(std::string name, int num_functions, const FunctionDef* func_table) { ModuleDef module = {name, num_functions, func_table}; g_module_db.push_back(module); } void RegisterAllModules() { - Register_SysCall(); + Register_Syscall(); } void Init() { RegisterAllModules(); + NOTICE_LOG(HLE, "initialized OK"); } void Shutdown() { - g_module_db.clear(); + g_module_db.clear(); + NOTICE_LOG(HLE, "shutdown OK"); } } // namespace -- cgit v1.2.3