diff options
| author | 2015-05-12 23:17:30 -0300 | |
|---|---|---|
| committer | 2015-05-15 00:04:39 -0300 | |
| commit | ec514b16a66c0aca19e3f641836d836eacd59e75 (patch) | |
| tree | 14bbe427b74a2e0d8f0e015f3898cf79f13adb10 /src | |
| parent | Memmap: Re-organize memory function in two files (diff) | |
| download | yuzu-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.cpp | 47 | ||||
| -rw-r--r-- | src/core/hle/config_mem.h | 38 | ||||
| -rw-r--r-- | src/core/memory.cpp | 3 |
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 | ||
| 17 | namespace ConfigMem { | 17 | namespace ConfigMem { |
| 18 | 18 | ||
| 19 | struct ConfigMemDef { | 19 | ConfigMemDef 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 | |||
| 48 | static_assert(sizeof(ConfigMemDef) == Memory::CONFIG_MEMORY_SIZE, "Config Memory structure size is wrong"); | ||
| 49 | |||
| 50 | static ConfigMemDef config_mem; | ||
| 51 | |||
| 52 | template <typename T> | ||
| 53 | inline 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 | |||
| 61 | template void Read<u64>(u64 &var, const u32 addr); | ||
| 62 | template void Read<u32>(u32 &var, const u32 addr); | ||
| 63 | template void Read<u16>(u16 &var, const u32 addr); | ||
| 64 | template void Read<u8>(u8 &var, const u32 addr); | ||
| 65 | 20 | ||
| 66 | void Init() { | 21 | void 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 | ||
| 16 | namespace ConfigMem { | 20 | namespace ConfigMem { |
| 17 | 21 | ||
| 18 | template <typename T> | 22 | struct ConfigMemDef { |
| 19 | void 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 | }; | ||
| 50 | static_assert(sizeof(ConfigMemDef) == Memory::CONFIG_MEMORY_SIZE, "Config Memory structure size is wrong"); | ||
| 51 | |||
| 52 | extern ConfigMemDef config_mem; | ||
| 20 | 53 | ||
| 21 | void Init(); | 54 | void Init(); |
| 22 | |||
| 23 | void Shutdown(); | 55 | void 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)) { |