diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/core.vcxproj | 1 | ||||
-rw-r--r-- | src/core/core.vcxproj.filters | 3 | ||||
-rw-r--r-- | src/core/hle.cpp | 33 | ||||
-rw-r--r-- | src/core/hle/hle.h | 18 | ||||
-rw-r--r-- | src/core/hle/hle_syscall.cpp | 10 | ||||
-rw-r--r-- | src/core/hle/hle_syscall.h | 4 |
6 files changed, 54 insertions, 15 deletions
diff --git a/src/core/core.vcxproj b/src/core/core.vcxproj index 55ce508a6..8097a47d3 100644 --- a/src/core/core.vcxproj +++ b/src/core/core.vcxproj @@ -152,6 +152,7 @@ <ClCompile Include="elf\elf_reader.cpp" /> <ClCompile Include="file_sys\directory_file_system.cpp" /> <ClCompile Include="file_sys\meta_file_system.cpp" /> + <ClCompile Include="hle.cpp" /> <ClCompile Include="hle\hle_syscall.cpp" /> <ClCompile Include="hw\hw.cpp" /> <ClCompile Include="hw\hw_lcd.cpp" /> diff --git a/src/core/core.vcxproj.filters b/src/core/core.vcxproj.filters index 7bac04a2d..79bddf09a 100644 --- a/src/core/core.vcxproj.filters +++ b/src/core/core.vcxproj.filters @@ -81,6 +81,9 @@ <ClCompile Include="hle\hle_syscall.cpp"> <Filter>hle</Filter> </ClCompile> + <ClCompile Include="hle.cpp"> + <Filter>hle</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="arm\disassembler\arm_disasm.h"> diff --git a/src/core/hle.cpp b/src/core/hle.cpp new file mode 100644 index 000000000..f0c7d2178 --- /dev/null +++ b/src/core/hle.cpp @@ -0,0 +1,33 @@ +// 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<HLEModule> g_module_db; + +void RegisterModule(const char *name, int num_functions, const HLEFunction *func_table) { + HLEModule module = {name, num_functions, func_table}; + g_module_db.push_back(module); +} + +void RegisterAllModules() { + Register_SysCall(); +} + +void Init() { + RegisterAllModules(); +} + +void Shutdown() { + g_module_db.clear(); +} + +} // namespace diff --git a/src/core/hle/hle.h b/src/core/hle/hle.h index 6780b52c4..6648c787f 100644 --- a/src/core/hle/hle.h +++ b/src/core/hle/hle.h @@ -10,13 +10,11 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// typedef void (*HLEFunc)(); -typedef void (*SysCallFunc)(); struct HLEFunction { u32 id; HLEFunc func; const char* name; - u32 flags; }; struct HLEModule { @@ -25,11 +23,15 @@ struct HLEModule { const HLEFunction* func_table; }; -struct SysCall { - u8 id; - SysCallFunc func; - const char* name; -}; - #define PARAM(n) Core::g_app_core->GetReg(n) #define RETURN(n) Core::g_app_core->SetReg(0, n) + +namespace HLE { + +void Init(); + +void Shutdown(); + +void RegisterModule(const char *name, int num_functions, const HLEFunction *func_table); + +} // namespace diff --git a/src/core/hle/hle_syscall.cpp b/src/core/hle/hle_syscall.cpp index c8a516848..b17a2e220 100644 --- a/src/core/hle/hle_syscall.cpp +++ b/src/core/hle/hle_syscall.cpp @@ -7,16 +7,18 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// - +typedef u32 Handle; +typedef s32 Result; Result SVC_ConnectToPort(void* out, const char* port_name) { - NOTICE_LOG(OSHLE, "SVC_ConnectToPort called, port_name: %s", port_name); + NOTICE_LOG(OSHLE, "svcConnectToPort called, port_name: %s", port_name); return 0; } -const SysCall SysCallTable[] = { +const HLEFunction SysCallTable[] = { {0x2D, WrapI_VC<SVC_ConnectToPort>, "svcConnectToPort"}, }; -void Register_SysCalls() { +void Register_SysCall() { + HLE::RegisterModule("SysCallTable", ARRAY_SIZE(SysCallTable), SysCallTable); } diff --git a/src/core/hle/hle_syscall.h b/src/core/hle/hle_syscall.h index 506dcfc78..643af0bf4 100644 --- a/src/core/hle/hle_syscall.h +++ b/src/core/hle/hle_syscall.h @@ -35,8 +35,6 @@ //}; -typedef u32 Handle; -typedef s32 Result; -Result ConnectToPort(Handle* out, const char* port_name); +void Register_SysCall(); |