Memory: Read ConfigMem directly from Memory::Read
This commit is contained in:
		| @@ -16,52 +16,7 @@ | ||||
|  | ||||
| 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)); | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -42,7 +42,8 @@ inline void Read(T &var, const VAddr vaddr) { | ||||
|  | ||||
|     // Config memory | ||||
|     } 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 | ||||
|     } else if ((vaddr >= SHARED_PAGE_VADDR)  && (vaddr < SHARED_PAGE_VADDR_END)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Yuri Kunde Schlesner
					Yuri Kunde Schlesner