diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index d29183899..c6b32da93 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -37,6 +37,7 @@ set(SRCS core.cpp
hle/kernel/kernel.cpp
hle/kernel/mutex.cpp
hle/kernel/thread.cpp
+ hle/kernel/shared_memory.cpp
hle/service/apt.cpp
hle/service/gsp.cpp
hle/service/hid.cpp
@@ -82,6 +83,7 @@ set(HEADERS core.h
hle/svc.h
hle/kernel/kernel.h
hle/kernel/mutex.h
+ hle/kernel/shared_memory.h
hle/kernel/thread.h
hle/function_wrappers.h
hle/service/apt.h
diff --git a/src/core/core.vcxproj b/src/core/core.vcxproj
index 621aa60b8..2989d001a 100644
--- a/src/core/core.vcxproj
+++ b/src/core/core.vcxproj
@@ -180,6 +180,7 @@
+
@@ -230,6 +231,7 @@
+
diff --git a/src/core/core.vcxproj.filters b/src/core/core.vcxproj.filters
index 3cf702d44..bd86cc332 100644
--- a/src/core/core.vcxproj.filters
+++ b/src/core/core.vcxproj.filters
@@ -168,6 +168,9 @@
hw
+
+ hle\kernel
+
@@ -301,6 +304,9 @@
hw
+
+ hle\kernel
+
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index 7cd79c2c4..3c9a40286 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -94,6 +94,7 @@ public:
template
T *GetFast(Handle handle) {
const Handle realHandle = handle - HANDLE_OFFSET;
+ //bravia note: there is a weird bug caused here which puts the processor into thumb mode
_dbg_assert_(KERNEL, realHandle >= 0 && realHandle < MAX_COUNT && occupied[realHandle]);
return static_cast(pool[realHandle]);
}
diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp
new file mode 100644
index 000000000..dc9c66ea1
--- /dev/null
+++ b/src/core/hle/kernel/shared_memory.cpp
@@ -0,0 +1,48 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include