summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner2015-05-12 23:17:30 -0300
committerGravatar Yuri Kunde Schlesner2015-05-15 00:04:39 -0300
commitec514b16a66c0aca19e3f641836d836eacd59e75 (patch)
tree14bbe427b74a2e0d8f0e015f3898cf79f13adb10 /src
parentMemmap: Re-organize memory function in two files (diff)
downloadyuzu-ec514b16a66c0aca19e3f641836d836eacd59e75.tar.gz
yuzu-ec514b16a66c0aca19e3f641836d836eacd59e75.tar.xz
yuzu-ec514b16a66c0aca19e3f641836d836eacd59e75.zip
Memory: Read ConfigMem directly from Memory::Read
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/config_mem.cpp47
-rw-r--r--src/core/hle/config_mem.h38
-rw-r--r--src/core/memory.cpp3
3 files changed, 38 insertions, 50 deletions
diff --git a/src/core/hle/config_mem.cpp b/src/core/hle/config_mem.cpp
index 2f7cc7ee5..aea936d2d 100644
--- a/src/core/hle/config_mem.cpp
+++ b/src/core/hle/config_mem.cpp
@@ -16,52 +16,7 @@
16 16
17namespace ConfigMem { 17namespace ConfigMem {
18 18
19struct ConfigMemDef { 19ConfigMemDef config_mem;
20 u8 kernel_unk; // 0
21 u8 kernel_version_rev; // 1
22 u8 kernel_version_min; // 2
23 u8 kernel_version_maj; // 3
24 u32 update_flag; // 4
25 u64 ns_tid; // 8
26 u32 sys_core_ver; // 10
27 u8 unit_info; // 14
28 u8 boot_firm; // 15
29 u8 prev_firm; // 16
30 INSERT_PADDING_BYTES(0x1); // 17
31 u32 ctr_sdk_ver; // 18
32 INSERT_PADDING_BYTES(0x30 - 0x1C); // 1C
33 u32 app_mem_type; // 30
34 INSERT_PADDING_BYTES(0x40 - 0x34); // 34
35 u32 app_mem_alloc; // 40
36 u32 sys_mem_alloc; // 44
37 u32 base_mem_alloc; // 48
38 INSERT_PADDING_BYTES(0x60 - 0x4C); // 4C
39 u8 firm_unk; // 60
40 u8 firm_version_rev; // 61
41 u8 firm_version_min; // 62
42 u8 firm_version_maj; // 63
43 u32 firm_sys_core_ver; // 64
44 u32 firm_ctr_sdk_ver; // 68
45 INSERT_PADDING_BYTES(0x1000 - 0x6C); // 6C
46};
47
48static_assert(sizeof(ConfigMemDef) == Memory::CONFIG_MEMORY_SIZE, "Config Memory structure size is wrong");
49
50static ConfigMemDef config_mem;
51
52template <typename T>
53inline void Read(T &var, const u32 addr) {
54 u32 offset = addr - Memory::CONFIG_MEMORY_VADDR;
55 ASSERT(offset < Memory::CONFIG_MEMORY_SIZE);
56 var = *(reinterpret_cast<T*>(((uintptr_t)&config_mem) + offset));
57}
58
59// Explicitly instantiate template functions because we aren't defining this in the header:
60
61template void Read<u64>(u64 &var, const u32 addr);
62template void Read<u32>(u32 &var, const u32 addr);
63template void Read<u16>(u16 &var, const u32 addr);
64template void Read<u8>(u8 &var, const u32 addr);
65 20
66void Init() { 21void Init() {
67 std::memset(&config_mem, 0, sizeof(config_mem)); 22 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 @@
9// bootrom. Because we're not emulating this, and essentially just "stubbing" the functionality, I'm 9// bootrom. Because we're not emulating this, and essentially just "stubbing" the functionality, I'm
10// putting this as a subset of HLE for now. 10// putting this as a subset of HLE for now.
11 11
12#include "common/common_funcs.h"
12#include "common/common_types.h" 13#include "common/common_types.h"
14#include "common/swap.h"
15
16#include "core/memory.h"
13 17
14//////////////////////////////////////////////////////////////////////////////////////////////////// 18////////////////////////////////////////////////////////////////////////////////////////////////////
15 19
16namespace ConfigMem { 20namespace ConfigMem {
17 21
18template <typename T> 22struct ConfigMemDef {
19void Read(T &var, const u32 addr); 23 u8 kernel_unk; // 0
24 u8 kernel_version_rev; // 1
25 u8 kernel_version_min; // 2
26 u8 kernel_version_maj; // 3
27 u32_le update_flag; // 4
28 u64_le ns_tid; // 8
29 u32_le sys_core_ver; // 10
30 u8 unit_info; // 14
31 u8 boot_firm; // 15
32 u8 prev_firm; // 16
33 INSERT_PADDING_BYTES(0x1); // 17
34 u32_le ctr_sdk_ver; // 18
35 INSERT_PADDING_BYTES(0x30 - 0x1C); // 1C
36 u32_le app_mem_type; // 30
37 INSERT_PADDING_BYTES(0x40 - 0x34); // 34
38 u32_le app_mem_alloc; // 40
39 u32_le sys_mem_alloc; // 44
40 u32_le base_mem_alloc; // 48
41 INSERT_PADDING_BYTES(0x60 - 0x4C); // 4C
42 u8 firm_unk; // 60
43 u8 firm_version_rev; // 61
44 u8 firm_version_min; // 62
45 u8 firm_version_maj; // 63
46 u32_le firm_sys_core_ver; // 64
47 u32_le firm_ctr_sdk_ver; // 68
48 INSERT_PADDING_BYTES(0x1000 - 0x6C); // 6C
49};
50static_assert(sizeof(ConfigMemDef) == Memory::CONFIG_MEMORY_SIZE, "Config Memory structure size is wrong");
51
52extern ConfigMemDef config_mem;
20 53
21void Init(); 54void Init();
22
23void Shutdown(); 55void Shutdown();
24 56
25} // namespace 57} // namespace
diff --git a/src/core/memory.cpp b/src/core/memory.cpp
index 517167b0a..aee1674b6 100644
--- a/src/core/memory.cpp
+++ b/src/core/memory.cpp
@@ -42,7 +42,8 @@ inline void Read(T &var, const VAddr vaddr) {
42 42
43 // Config memory 43 // Config memory
44 } else if ((vaddr >= CONFIG_MEMORY_VADDR) && (vaddr < CONFIG_MEMORY_VADDR_END)) { 44 } else if ((vaddr >= CONFIG_MEMORY_VADDR) && (vaddr < CONFIG_MEMORY_VADDR_END)) {
45 ConfigMem::Read<T>(var, vaddr); 45 const u8* raw_memory = (const u8*)&ConfigMem::config_mem;
46 var = *((const T*)&raw_memory[vaddr - CONFIG_MEMORY_VADDR]);
46 47
47 // Shared page 48 // Shared page
48 } else if ((vaddr >= SHARED_PAGE_VADDR) && (vaddr < SHARED_PAGE_VADDR_END)) { 49 } else if ((vaddr >= SHARED_PAGE_VADDR) && (vaddr < SHARED_PAGE_VADDR_END)) {