diff --git a/src/core/core.vcxproj b/src/core/core.vcxproj
index 55ce508a68..8097a47d36 100644
--- a/src/core/core.vcxproj
+++ b/src/core/core.vcxproj
@@ -152,6 +152,7 @@
+
diff --git a/src/core/core.vcxproj.filters b/src/core/core.vcxproj.filters
index 7bac04a2d4..79bddf09a1 100644
--- a/src/core/core.vcxproj.filters
+++ b/src/core/core.vcxproj.filters
@@ -81,6 +81,9 @@
hle
+
+ hle
+
diff --git a/src/core/hle.cpp b/src/core/hle.cpp
new file mode 100644
index 0000000000..f0c7d21785
--- /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
+
+#include "core/hle/hle.h"
+#include "core/hle/hle_syscall.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace HLE {
+
+static std::vector 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 6780b52c44..6648c787fe 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 c8a5168485..b17a2e2204 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, "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 506dcfc786..643af0bf46 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();