mirror of
https://github.com/citra-emu/citra-canary.git
synced 2024-12-23 15:35:33 +00:00
Memory: Read ConfigMem directly from Memory::Read
This commit is contained in:
parent
7ada357b2d
commit
ec514b16a6
|
@ -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…
Reference in a new issue