summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner2015-05-12 23:29:24 -0300
committerGravatar Yuri Kunde Schlesner2015-05-15 00:04:41 -0300
commit52158c1b8dccd3b469ab502a42a46a1d277928aa (patch)
tree7232d68efcb7d0570a12f628cf6a8634c7e51ed1 /src
parentMemory: Read ConfigMem directly from Memory::Read (diff)
downloadyuzu-52158c1b8dccd3b469ab502a42a46a1d277928aa.tar.gz
yuzu-52158c1b8dccd3b469ab502a42a46a1d277928aa.tar.xz
yuzu-52158c1b8dccd3b469ab502a42a46a1d277928aa.zip
Memory: Read SharedPage directly from Memory::Read
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/shared_page.cpp55
-rw-r--r--src/core/hle/shared_page.h38
-rw-r--r--src/core/memory.cpp3
3 files changed, 37 insertions, 59 deletions
diff --git a/src/core/hle/shared_page.cpp b/src/core/hle/shared_page.cpp
index 9de832158..4014eee98 100644
--- a/src/core/hle/shared_page.cpp
+++ b/src/core/hle/shared_page.cpp
@@ -16,63 +16,12 @@
16 16
17namespace SharedPage { 17namespace SharedPage {
18 18
19// see http://3dbrew.org/wiki/Configuration_Memory#Shared_Memory_Page_For_ARM11_Processes 19SharedPageDef shared_page;
20 20
21#pragma pack(1) 21void Init() {
22struct DateTime {
23 u64 date_time; // 0x0
24 u64 update_tick; // 0x8
25 INSERT_PADDING_BYTES(0x20 - 0x10); // 0x10
26};
27
28struct SharedPageDef {
29 // most of these names are taken from the 3dbrew page linked above.
30 u32 date_time_selector; // 0x0
31 u8 running_hw; // 0x4
32 u8 mcu_hw_info; // 0x5: don't know what the acronyms mean
33 INSERT_PADDING_BYTES(0x20 - 0x6); // 0x6
34 DateTime date_time_0; // 0x20
35 DateTime date_time_1; // 0x40
36 u8 wifi_macaddr[6]; // 0x60
37 u8 wifi_unknown1; // 0x66: 3dbrew says these are "Likely wifi hardware related"
38 u8 wifi_unknown2; // 0x67
39 INSERT_PADDING_BYTES(0x80 - 0x68); // 0x68
40 float sliderstate_3d; // 0x80
41 u8 ledstate_3d; // 0x84
42 INSERT_PADDING_BYTES(0xA0 - 0x85); // 0x85
43 u64 menu_title_id; // 0xA0
44 u64 active_menu_title_id; // 0xA8
45 INSERT_PADDING_BYTES(0x1000 - 0xB0); // 0xB0
46};
47#pragma pack()
48
49static_assert(sizeof(DateTime) == 0x20, "Datetime size is wrong");
50static_assert(sizeof(SharedPageDef) == Memory::SHARED_PAGE_SIZE, "Shared page structure size is wrong");
51
52static SharedPageDef shared_page;
53
54template <typename T>
55inline void Read(T &var, const u32 addr) {
56 u32 offset = addr - Memory::SHARED_PAGE_VADDR;
57 var = *(reinterpret_cast<T*>(((uintptr_t)&shared_page) + offset));
58}
59
60// Explicitly instantiate template functions because we aren't defining this in the header:
61template void Read<u64>(u64 &var, const u32 addr);
62template void Read<u32>(u32 &var, const u32 addr);
63template void Read<u16>(u16 &var, const u32 addr);
64template void Read<u8>(u8 &var, const u32 addr);
65
66void Set3DSlider(float amount) {
67 std::memset(&shared_page, 0, sizeof(shared_page)); 22 std::memset(&shared_page, 0, sizeof(shared_page));
68 23
69 shared_page.sliderstate_3d = amount;
70 shared_page.ledstate_3d = (amount == 0.0f); // off when non-zero
71}
72
73void Init() {
74 shared_page.running_hw = 0x1; // product 24 shared_page.running_hw = 0x1; // product
75 Set3DSlider(0.0f);
76} 25}
77 26
78void Shutdown() { 27void Shutdown() {
diff --git a/src/core/hle/shared_page.h b/src/core/hle/shared_page.h
index 1b6e4e581..fd2ab66a2 100644
--- a/src/core/hle/shared_page.h
+++ b/src/core/hle/shared_page.h
@@ -11,18 +11,46 @@
11 */ 11 */
12 12
13#include "common/common_types.h" 13#include "common/common_types.h"
14#include "common/swap.h"
14 15
15//////////////////////////////////////////////////////////////////////////////////////////////////// 16////////////////////////////////////////////////////////////////////////////////////////////////////
16 17
17namespace SharedPage { 18namespace SharedPage {
18 19
19template <typename T> 20// See http://3dbrew.org/wiki/Configuration_Memory#Shared_Memory_Page_For_ARM11_Processes
20void Read(T &var, const u32 addr); 21
21 22struct DateTime {
22void Set3DSlider(float amount); 23 u64_le date_time; // 0
24 u64_le update_tick; // 8
25 INSERT_PADDING_BYTES(0x20 - 0x10); // 10
26};
27static_assert(sizeof(DateTime) == 0x20, "Datetime size is wrong");
28
29struct SharedPageDef {
30 // Most of these names are taken from the 3dbrew page linked above.
31 u32_le date_time_selector; // 0
32 u8 running_hw; // 4
33 /// "Microcontroller hardware info"
34 u8 mcu_hw_info; // 5
35 INSERT_PADDING_BYTES(0x20 - 0x6); // 6
36 DateTime date_time_0; // 20
37 DateTime date_time_1; // 40
38 u8 wifi_macaddr[6]; // 60
39 u8 wifi_unknown1; // 66
40 u8 wifi_unknown2; // 67
41 INSERT_PADDING_BYTES(0x80 - 0x68); // 68
42 float_le sliderstate_3d; // 80
43 u8 ledstate_3d; // 84
44 INSERT_PADDING_BYTES(0xA0 - 0x85); // 85
45 u64_le menu_title_id; // A0
46 u64_le active_menu_title_id; // A8
47 INSERT_PADDING_BYTES(0x1000 - 0xB0); // B0
48};
49static_assert(sizeof(SharedPageDef) == Memory::SHARED_PAGE_SIZE, "Shared page structure size is wrong");
50
51extern SharedPageDef shared_page;
23 52
24void Init(); 53void Init();
25
26void Shutdown(); 54void Shutdown();
27 55
28} // namespace 56} // namespace
diff --git a/src/core/memory.cpp b/src/core/memory.cpp
index aee1674b6..8570689dd 100644
--- a/src/core/memory.cpp
+++ b/src/core/memory.cpp
@@ -47,7 +47,8 @@ inline void Read(T &var, const VAddr vaddr) {
47 47
48 // Shared page 48 // Shared page
49 } else if ((vaddr >= SHARED_PAGE_VADDR) && (vaddr < SHARED_PAGE_VADDR_END)) { 49 } else if ((vaddr >= SHARED_PAGE_VADDR) && (vaddr < SHARED_PAGE_VADDR_END)) {
50 SharedPage::Read<T>(var, vaddr); 50 const u8* raw_memory = (const u8*)&SharedPage::shared_page;
51 var = *((const T*)&raw_memory[vaddr - SHARED_PAGE_VADDR]);
51 52
52 // DSP memory 53 // DSP memory
53 } else if ((vaddr >= DSP_RAM_VADDR) && (vaddr < DSP_RAM_VADDR_END)) { 54 } else if ((vaddr >= DSP_RAM_VADDR) && (vaddr < DSP_RAM_VADDR_END)) {