diff options
author | bunnei <ericbunnie@gmail.com> | 2014-04-12 00:07:49 +0200 |
---|---|---|
committer | bunnei <ericbunnie@gmail.com> | 2014-04-12 00:07:49 +0200 |
commit | f6c328cf37fe6e0250c20fcbf128f301b3d71d36 (patch) | |
tree | a533548f1fd41f7dd9f8351bce54025823680636 /src/core/hle/hle.cpp | |
parent | added remaining known syscall functions to Syscall_Table (diff) | |
download | yuzu-f6c328cf37fe6e0250c20fcbf128f301b3d71d36.tar yuzu-f6c328cf37fe6e0250c20fcbf128f301b3d71d36.tar.gz yuzu-f6c328cf37fe6e0250c20fcbf128f301b3d71d36.tar.bz2 yuzu-f6c328cf37fe6e0250c20fcbf128f301b3d71d36.tar.lz yuzu-f6c328cf37fe6e0250c20fcbf128f301b3d71d36.tar.xz yuzu-f6c328cf37fe6e0250c20fcbf128f301b3d71d36.tar.zst yuzu-f6c328cf37fe6e0250c20fcbf128f301b3d71d36.zip |
Diffstat (limited to 'src/core/hle/hle.cpp')
-rw-r--r-- | src/core/hle/hle.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/core/hle/hle.cpp b/src/core/hle/hle.cpp new file mode 100644 index 000000000..d62d2d0ce --- /dev/null +++ b/src/core/hle/hle.cpp @@ -0,0 +1,57 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include <vector> + +#include "core/hle/hle.h" +#include "core/hle/hle_syscall.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +namespace HLE { + +static std::vector<ModuleDef> 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(); +} + +void Init() { + RegisterAllModules(); + NOTICE_LOG(HLE, "initialized OK"); +} + +void Shutdown() { + g_module_db.clear(); + NOTICE_LOG(HLE, "shutdown OK"); +} + +} // namespace |