Memory: Read ConfigMem directly from Memory::Read
This commit is contained in:
		| @@ -16,52 +16,7 @@ | |||||||
|  |  | ||||||
| namespace ConfigMem { | namespace ConfigMem { | ||||||
|  |  | ||||||
| struct ConfigMemDef { | ConfigMemDef config_mem; | ||||||
|     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); |  | ||||||
|  |  | ||||||
| void Init() { | void Init() { | ||||||
|     std::memset(&config_mem, 0, sizeof(config_mem)); |     std::memset(&config_mem, 0, sizeof(config_mem)); | ||||||
|   | |||||||
| @@ -9,17 +9,49 @@ | |||||||
| // bootrom. Because we're not emulating this, and essentially just "stubbing" the functionality, I'm | // bootrom. Because we're not emulating this, and essentially just "stubbing" the functionality, I'm | ||||||
| // putting this as a subset of HLE for now. | // putting this as a subset of HLE for now. | ||||||
|  |  | ||||||
|  | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "common/swap.h" | ||||||
|  |  | ||||||
|  | #include "core/memory.h" | ||||||
|  |  | ||||||
| //////////////////////////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
| namespace ConfigMem { | namespace ConfigMem { | ||||||
|  |  | ||||||
| template <typename T> | struct ConfigMemDef { | ||||||
| void Read(T &var, const u32 addr); |     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 Init(); | ||||||
|  |  | ||||||
| void Shutdown(); | void Shutdown(); | ||||||
|  |  | ||||||
| } // namespace | } // namespace | ||||||
|   | |||||||
| @@ -42,7 +42,8 @@ inline void Read(T &var, const VAddr vaddr) { | |||||||
|  |  | ||||||
|     // Config memory |     // Config memory | ||||||
|     } else if ((vaddr >= CONFIG_MEMORY_VADDR)  && (vaddr < CONFIG_MEMORY_VADDR_END)) { |     } else if ((vaddr >= CONFIG_MEMORY_VADDR)  && (vaddr < CONFIG_MEMORY_VADDR_END)) { | ||||||
|         ConfigMem::Read<T>(var, vaddr); |         const u8* raw_memory = (const u8*)&ConfigMem::config_mem; | ||||||
|  |         var = *((const T*)&raw_memory[vaddr - CONFIG_MEMORY_VADDR]); | ||||||
|  |  | ||||||
|     // Shared page |     // Shared page | ||||||
|     } else if ((vaddr >= SHARED_PAGE_VADDR)  && (vaddr < SHARED_PAGE_VADDR_END)) { |     } else if ((vaddr >= SHARED_PAGE_VADDR)  && (vaddr < SHARED_PAGE_VADDR_END)) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Yuri Kunde Schlesner
					Yuri Kunde Schlesner