summaryrefslogtreecommitdiffstats
path: root/src/core/hle
diff options
context:
space:
mode:
authorYuri Kunde Schlesner <yuriks@yuriks.net>2015-05-15 05:40:53 +0200
committerYuri Kunde Schlesner <yuriks@yuriks.net>2015-05-15 05:40:53 +0200
commitbb689338943791c735c7c6adb186256457e064b4 (patch)
treea04ba64d18dd163709b1cb4b4212afaca6c091a6 /src/core/hle
parentMerge pull request #769 from lioncash/cond (diff)
parentMemory: Use a table based lookup scheme to read from memory regions (diff)
downloadyuzu-bb689338943791c735c7c6adb186256457e064b4.tar
yuzu-bb689338943791c735c7c6adb186256457e064b4.tar.gz
yuzu-bb689338943791c735c7c6adb186256457e064b4.tar.bz2
yuzu-bb689338943791c735c7c6adb186256457e064b4.tar.lz
yuzu-bb689338943791c735c7c6adb186256457e064b4.tar.xz
yuzu-bb689338943791c735c7c6adb186256457e064b4.tar.zst
yuzu-bb689338943791c735c7c6adb186256457e064b4.zip
Diffstat (limited to 'src/core/hle')
-rw-r--r--src/core/hle/config_mem.cpp49
-rw-r--r--src/core/hle/config_mem.h38
-rw-r--r--src/core/hle/function_wrappers.h6
-rw-r--r--src/core/hle/kernel/address_arbiter.cpp2
-rw-r--r--src/core/hle/kernel/process.cpp2
-rw-r--r--src/core/hle/kernel/session.h2
-rw-r--r--src/core/hle/kernel/shared_memory.cpp2
-rw-r--r--src/core/hle/kernel/thread.cpp2
-rw-r--r--src/core/hle/kernel/thread.h1
-rw-r--r--src/core/hle/service/gsp_gpu.cpp1
-rw-r--r--src/core/hle/shared_page.cpp57
-rw-r--r--src/core/hle/shared_page.h38
-rw-r--r--src/core/hle/svc.cpp2
13 files changed, 83 insertions, 119 deletions
diff --git a/src/core/hle/config_mem.cpp b/src/core/hle/config_mem.cpp
index 35dc9cf58..aea936d2d 100644
--- a/src/core/hle/config_mem.cpp
+++ b/src/core/hle/config_mem.cpp
@@ -9,59 +9,14 @@
#include "common/common_funcs.h"
#include "core/core.h"
-#include "core/mem_map.h"
+#include "core/memory.h"
#include "core/hle/config_mem.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
namespace ConfigMem {
-struct ConfigMemDef {
- u8 kernel_unk; // 0
- u8 kernel_version_rev; // 1
- u8 kernel_version_min; // 2
- u8 kernel_version_maj; // 3
- u32 update_flag; // 4
- u64 ns_tid; // 8
- u32 sys_core_ver; // 10
- u8 unit_info; // 14
- u8 boot_firm; // 15
- u8 prev_firm; // 16
- INSERT_PADDING_BYTES(0x1); // 17
- u32 ctr_sdk_ver; // 18
- INSERT_PADDING_BYTES(0x30 - 0x1C); // 1C
- u32 app_mem_type; // 30
- INSERT_PADDING_BYTES(0x40 - 0x34); // 34
- u32 app_mem_alloc; // 40
- u32 sys_mem_alloc; // 44
- u32 base_mem_alloc; // 48
- INSERT_PADDING_BYTES(0x60 - 0x4C); // 4C
- u8 firm_unk; // 60
- u8 firm_version_rev; // 61
- u8 firm_version_min; // 62
- u8 firm_version_maj; // 63
- u32 firm_sys_core_ver; // 64
- u32 firm_ctr_sdk_ver; // 68
- INSERT_PADDING_BYTES(0x1000 - 0x6C); // 6C
-};
-
-static_assert(sizeof(ConfigMemDef) == Memory::CONFIG_MEMORY_SIZE, "Config Memory structure size is wrong");
-
-static ConfigMemDef config_mem;
-
-template <typename T>
-inline void Read(T &var, const u32 addr) {
- u32 offset = addr - Memory::CONFIG_MEMORY_VADDR;
- ASSERT(offset < Memory::CONFIG_MEMORY_SIZE);
- var = *(reinterpret_cast<T*>(((uintptr_t)&config_mem) + offset));
-}
-
-// Explicitly instantiate template functions because we aren't defining this in the header:
-
-template void Read<u64>(u64 &var, const u32 addr);
-template void Read<u32>(u32 &var, const u32 addr);
-template void Read<u16>(u16 &var, const u32 addr);
-template void Read<u8>(u8 &var, const u32 addr);
+ConfigMemDef config_mem;
void Init() {
std::memset(&config_mem, 0, sizeof(config_mem));
diff --git a/src/core/hle/config_mem.h b/src/core/hle/config_mem.h
index cbb478fb3..9825a09e8 100644
--- a/src/core/hle/config_mem.h
+++ b/src/core/hle/config_mem.h
@@ -9,17 +9,49 @@
// bootrom. Because we're not emulating this, and essentially just "stubbing" the functionality, I'm
// putting this as a subset of HLE for now.
+#include "common/common_funcs.h"
#include "common/common_types.h"
+#include "common/swap.h"
+
+#include "core/memory.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
namespace ConfigMem {
-template <typename T>
-void Read(T &var, const u32 addr);
+struct ConfigMemDef {
+ u8 kernel_unk; // 0
+ u8 kernel_version_rev; // 1
+ u8 kernel_version_min; // 2
+ u8 kernel_version_maj; // 3
+ u32_le update_flag; // 4
+ u64_le ns_tid; // 8
+ u32_le sys_core_ver; // 10
+ u8 unit_info; // 14
+ u8 boot_firm; // 15
+ u8 prev_firm; // 16
+ INSERT_PADDING_BYTES(0x1); // 17
+ u32_le ctr_sdk_ver; // 18
+ INSERT_PADDING_BYTES(0x30 - 0x1C); // 1C
+ u32_le app_mem_type; // 30
+ INSERT_PADDING_BYTES(0x40 - 0x34); // 34
+ u32_le app_mem_alloc; // 40
+ u32_le sys_mem_alloc; // 44
+ u32_le base_mem_alloc; // 48
+ INSERT_PADDING_BYTES(0x60 - 0x4C); // 4C
+ u8 firm_unk; // 60
+ u8 firm_version_rev; // 61
+ u8 firm_version_min; // 62
+ u8 firm_version_maj; // 63
+ u32_le firm_sys_core_ver; // 64
+ u32_le firm_ctr_sdk_ver; // 68
+ INSERT_PADDING_BYTES(0x1000 - 0x6C); // 6C
+};
+static_assert(sizeof(ConfigMemDef) == Memory::CONFIG_MEMORY_SIZE, "Config Memory structure size is wrong");
+
+extern ConfigMemDef config_mem;
void Init();
-
void Shutdown();
} // namespace
diff --git a/src/core/hle/function_wrappers.h b/src/core/hle/function_wrappers.h
index be2626eef..eb52c8fb1 100644
--- a/src/core/hle/function_wrappers.h
+++ b/src/core/hle/function_wrappers.h
@@ -7,7 +7,7 @@
#include "common/common_types.h"
#include "core/arm/arm_interface.h"
-#include "core/mem_map.h"
+#include "core/memory.h"
#include "core/hle/hle.h"
namespace HLE {
@@ -109,7 +109,7 @@ template<ResultCode func(s64*, u32, void*, s32)> void Wrap(){
template<ResultCode func(u32*, const char*)> void Wrap() {
u32 param_1 = 0;
- u32 retval = func(&param_1, Memory::GetCharPointer(PARAM(1))).raw;
+ u32 retval = func(&param_1, (char*)Memory::GetPointer(PARAM(1))).raw;
Core::g_app_core->SetReg(1, param_1);
FuncReturn(retval);
}
@@ -163,7 +163,7 @@ template<void func(s64)> void Wrap() {
}
template<void func(const char*)> void Wrap() {
- func(Memory::GetCharPointer(PARAM(0)));
+ func((char*)Memory::GetPointer(PARAM(0)));
}
#undef PARAM
diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp
index 9d7f6b280..a1221766e 100644
--- a/src/core/hle/kernel/address_arbiter.cpp
+++ b/src/core/hle/kernel/address_arbiter.cpp
@@ -5,7 +5,7 @@
#include "common/common_types.h"
#include "common/logging/log.h"
-#include "core/mem_map.h"
+#include "core/memory.h"
#include "core/hle/hle.h"
#include "core/hle/kernel/address_arbiter.h"
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp
index 1e439db9e..0cdfa58d7 100644
--- a/src/core/hle/kernel/process.cpp
+++ b/src/core/hle/kernel/process.cpp
@@ -8,7 +8,7 @@
#include "core/hle/kernel/process.h"
#include "core/hle/kernel/thread.h"
-#include "core/mem_map.h"
+#include "core/memory.h"
namespace Kernel {
diff --git a/src/core/hle/kernel/session.h b/src/core/hle/kernel/session.h
index 8c3886ffd..54a062971 100644
--- a/src/core/hle/kernel/session.h
+++ b/src/core/hle/kernel/session.h
@@ -6,7 +6,7 @@
#include "core/hle/kernel/kernel.h"
#include "core/hle/kernel/thread.h"
-#include "core/mem_map.h"
+#include "core/memory.h"
namespace Kernel {
diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp
index 0c59f4876..4137683b5 100644
--- a/src/core/hle/kernel/shared_memory.cpp
+++ b/src/core/hle/kernel/shared_memory.cpp
@@ -6,7 +6,7 @@
#include "common/logging/log.h"
-#include "core/mem_map.h"
+#include "core/memory.h"
#include "core/hle/kernel/shared_memory.h"
namespace Kernel {
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index 5bcd03ff3..a5f1904d7 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -21,7 +21,7 @@
#include "core/hle/kernel/thread.h"
#include "core/hle/kernel/mutex.h"
#include "core/hle/result.h"
-#include "core/mem_map.h"
+#include "core/memory.h"
namespace Kernel {
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h
index 6b329c12a..389928178 100644
--- a/src/core/hle/kernel/thread.h
+++ b/src/core/hle/kernel/thread.h
@@ -12,7 +12,6 @@
#include "common/common_types.h"
#include "core/core.h"
-#include "core/mem_map.h"
#include "core/hle/kernel/kernel.h"
#include "core/hle/result.h"
diff --git a/src/core/hle/service/gsp_gpu.cpp b/src/core/hle/service/gsp_gpu.cpp
index c6252a03b..c11c5faba 100644
--- a/src/core/hle/service/gsp_gpu.cpp
+++ b/src/core/hle/service/gsp_gpu.cpp
@@ -5,6 +5,7 @@
#include "common/bit_field.h"
#include "core/mem_map.h"
+#include "core/memory.h"
#include "core/hle/kernel/event.h"
#include "core/hle/kernel/shared_memory.h"
#include "core/hle/result.h"
diff --git a/src/core/hle/shared_page.cpp b/src/core/hle/shared_page.cpp
index 4f227a370..4014eee98 100644
--- a/src/core/hle/shared_page.cpp
+++ b/src/core/hle/shared_page.cpp
@@ -8,7 +8,7 @@
#include "common/common_funcs.h"
#include "core/core.h"
-#include "core/mem_map.h"
+#include "core/memory.h"
#include "core/hle/config_mem.h"
#include "core/hle/shared_page.h"
@@ -16,63 +16,12 @@
namespace SharedPage {
-// see http://3dbrew.org/wiki/Configuration_Memory#Shared_Memory_Page_For_ARM11_Processes
+SharedPageDef shared_page;
-#pragma pack(1)
-struct DateTime {
- u64 date_time; // 0x0
- u64 update_tick; // 0x8
- INSERT_PADDING_BYTES(0x20 - 0x10); // 0x10
-};
-
-struct SharedPageDef {
- // most of these names are taken from the 3dbrew page linked above.
- u32 date_time_selector; // 0x0
- u8 running_hw; // 0x4
- u8 mcu_hw_info; // 0x5: don't know what the acronyms mean
- INSERT_PADDING_BYTES(0x20 - 0x6); // 0x6
- DateTime date_time_0; // 0x20
- DateTime date_time_1; // 0x40
- u8 wifi_macaddr[6]; // 0x60
- u8 wifi_unknown1; // 0x66: 3dbrew says these are "Likely wifi hardware related"
- u8 wifi_unknown2; // 0x67
- INSERT_PADDING_BYTES(0x80 - 0x68); // 0x68
- float sliderstate_3d; // 0x80
- u8 ledstate_3d; // 0x84
- INSERT_PADDING_BYTES(0xA0 - 0x85); // 0x85
- u64 menu_title_id; // 0xA0
- u64 active_menu_title_id; // 0xA8
- INSERT_PADDING_BYTES(0x1000 - 0xB0); // 0xB0
-};
-#pragma pack()
-
-static_assert(sizeof(DateTime) == 0x20, "Datetime size is wrong");
-static_assert(sizeof(SharedPageDef) == Memory::SHARED_PAGE_SIZE, "Shared page structure size is wrong");
-
-static SharedPageDef shared_page;
-
-template <typename T>
-inline void Read(T &var, const u32 addr) {
- u32 offset = addr - Memory::SHARED_PAGE_VADDR;
- var = *(reinterpret_cast<T*>(((uintptr_t)&shared_page) + offset));
-}
-
-// Explicitly instantiate template functions because we aren't defining this in the header:
-template void Read<u64>(u64 &var, const u32 addr);
-template void Read<u32>(u32 &var, const u32 addr);
-template void Read<u16>(u16 &var, const u32 addr);
-template void Read<u8>(u8 &var, const u32 addr);
-
-void Set3DSlider(float amount) {
+void Init() {
std::memset(&shared_page, 0, sizeof(shared_page));
- shared_page.sliderstate_3d = amount;
- shared_page.ledstate_3d = (amount == 0.0f); // off when non-zero
-}
-
-void Init() {
shared_page.running_hw = 0x1; // product
- Set3DSlider(0.0f);
}
void Shutdown() {
diff --git a/src/core/hle/shared_page.h b/src/core/hle/shared_page.h
index 1b6e4e581..fd2ab66a2 100644
--- a/src/core/hle/shared_page.h
+++ b/src/core/hle/shared_page.h
@@ -11,18 +11,46 @@
*/
#include "common/common_types.h"
+#include "common/swap.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
namespace SharedPage {
-template <typename T>
-void Read(T &var, const u32 addr);
-
-void Set3DSlider(float amount);
+// See http://3dbrew.org/wiki/Configuration_Memory#Shared_Memory_Page_For_ARM11_Processes
+
+struct DateTime {
+ u64_le date_time; // 0
+ u64_le update_tick; // 8
+ INSERT_PADDING_BYTES(0x20 - 0x10); // 10
+};
+static_assert(sizeof(DateTime) == 0x20, "Datetime size is wrong");
+
+struct SharedPageDef {
+ // Most of these names are taken from the 3dbrew page linked above.
+ u32_le date_time_selector; // 0
+ u8 running_hw; // 4
+ /// "Microcontroller hardware info"
+ u8 mcu_hw_info; // 5
+ INSERT_PADDING_BYTES(0x20 - 0x6); // 6
+ DateTime date_time_0; // 20
+ DateTime date_time_1; // 40
+ u8 wifi_macaddr[6]; // 60
+ u8 wifi_unknown1; // 66
+ u8 wifi_unknown2; // 67
+ INSERT_PADDING_BYTES(0x80 - 0x68); // 68
+ float_le sliderstate_3d; // 80
+ u8 ledstate_3d; // 84
+ INSERT_PADDING_BYTES(0xA0 - 0x85); // 85
+ u64_le menu_title_id; // A0
+ u64_le active_menu_title_id; // A8
+ INSERT_PADDING_BYTES(0x1000 - 0xB0); // B0
+};
+static_assert(sizeof(SharedPageDef) == Memory::SHARED_PAGE_SIZE, "Shared page structure size is wrong");
+
+extern SharedPageDef shared_page;
void Init();
-
void Shutdown();
} // namespace
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index e8159fbdb..9bf886256 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -315,7 +315,7 @@ static ResultCode GetResourceLimitCurrentValues(s64* values, Handle resource_lim
s32 name_count) {
LOG_ERROR(Kernel_SVC, "(UNIMPLEMENTED) called resource_limit=%08X, names=%p, name_count=%d",
resource_limit, names, name_count);
- Memory::Write32(Core::g_app_core->GetReg(0), 0); // Normmatt: Set used memory to 0 for now
+ values[0] = 0; // Normmatt: Set used memory to 0 for now
return RESULT_SUCCESS;
}