mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Memory: Read ConfigMem directly from Memory::Read
This commit is contained in:
		
							parent
							
								
									7ada357b2d
								
							
						
					
					
						commit
						ec514b16a6
					
				
					 3 changed files with 38 additions and 50 deletions
				
			
		|  | @ -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)) { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue