mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-11-04 12:34:39 +08:00 
			
		
		
		
	Memory: Read SharedPage directly from Memory::Read
This commit is contained in:
		
							parent
							
								
									ec514b16a6
								
							
						
					
					
						commit
						52158c1b8d
					
				@ -16,63 +16,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace SharedPage {
 | 
					namespace SharedPage {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// see http://3dbrew.org/wiki/Configuration_Memory#Shared_Memory_Page_For_ARM11_Processes
 | 
					SharedPageDef shared_page;
 | 
				
			||||||
 | 
					 | 
				
			||||||
#pragma pack(1)
 | 
					 | 
				
			||||||
struct DateTime {
 | 
					 | 
				
			||||||
    u64     date_time;      // 0x0
 | 
					 | 
				
			||||||
    u64     update_tick;    // 0x8
 | 
					 | 
				
			||||||
    INSERT_PADDING_BYTES(0x20 - 0x10); // 0x10
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct SharedPageDef {
 | 
					 | 
				
			||||||
    // most of these names are taken from the 3dbrew page linked above.
 | 
					 | 
				
			||||||
    u32    date_time_selector;  // 0x0
 | 
					 | 
				
			||||||
    u8     running_hw;          // 0x4
 | 
					 | 
				
			||||||
    u8     mcu_hw_info;         // 0x5: don't know what the acronyms mean
 | 
					 | 
				
			||||||
    INSERT_PADDING_BYTES(0x20 - 0x6); // 0x6
 | 
					 | 
				
			||||||
    DateTime date_time_0;       // 0x20
 | 
					 | 
				
			||||||
    DateTime date_time_1;       // 0x40
 | 
					 | 
				
			||||||
    u8      wifi_macaddr[6];    // 0x60
 | 
					 | 
				
			||||||
    u8      wifi_unknown1;      // 0x66: 3dbrew says these are "Likely wifi hardware related"
 | 
					 | 
				
			||||||
    u8      wifi_unknown2;      // 0x67
 | 
					 | 
				
			||||||
    INSERT_PADDING_BYTES(0x80 - 0x68); // 0x68
 | 
					 | 
				
			||||||
    float   sliderstate_3d;     // 0x80
 | 
					 | 
				
			||||||
    u8      ledstate_3d;        // 0x84
 | 
					 | 
				
			||||||
    INSERT_PADDING_BYTES(0xA0 - 0x85); // 0x85
 | 
					 | 
				
			||||||
    u64     menu_title_id;      // 0xA0
 | 
					 | 
				
			||||||
    u64     active_menu_title_id; // 0xA8
 | 
					 | 
				
			||||||
    INSERT_PADDING_BYTES(0x1000 - 0xB0); // 0xB0
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
#pragma pack()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static_assert(sizeof(DateTime) == 0x20, "Datetime size is wrong");
 | 
					 | 
				
			||||||
static_assert(sizeof(SharedPageDef) == Memory::SHARED_PAGE_SIZE, "Shared page structure size is wrong");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static SharedPageDef shared_page;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template <typename T>
 | 
					 | 
				
			||||||
inline void Read(T &var, const u32 addr) {
 | 
					 | 
				
			||||||
    u32 offset = addr - Memory::SHARED_PAGE_VADDR;
 | 
					 | 
				
			||||||
    var = *(reinterpret_cast<T*>(((uintptr_t)&shared_page) + 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 Set3DSlider(float amount) {
 | 
					 | 
				
			||||||
    std::memset(&shared_page, 0, sizeof(shared_page));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    shared_page.sliderstate_3d = amount;
 | 
					 | 
				
			||||||
    shared_page.ledstate_3d = (amount == 0.0f); // off when non-zero
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Init() {
 | 
					void Init() {
 | 
				
			||||||
 | 
					    std::memset(&shared_page, 0, sizeof(shared_page));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    shared_page.running_hw = 0x1; // product
 | 
					    shared_page.running_hw = 0x1; // product
 | 
				
			||||||
    Set3DSlider(0.0f);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Shutdown() {
 | 
					void Shutdown() {
 | 
				
			||||||
 | 
				
			|||||||
@ -11,18 +11,46 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "common/common_types.h"
 | 
					#include "common/common_types.h"
 | 
				
			||||||
 | 
					#include "common/swap.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace SharedPage {
 | 
					namespace SharedPage {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename T>
 | 
					// See http://3dbrew.org/wiki/Configuration_Memory#Shared_Memory_Page_For_ARM11_Processes
 | 
				
			||||||
void Read(T &var, const u32 addr);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Set3DSlider(float amount);
 | 
					struct DateTime {
 | 
				
			||||||
 | 
					    u64_le date_time;                  // 0
 | 
				
			||||||
 | 
					    u64_le update_tick;                // 8
 | 
				
			||||||
 | 
					    INSERT_PADDING_BYTES(0x20 - 0x10); // 10
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					static_assert(sizeof(DateTime) == 0x20, "Datetime size is wrong");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct SharedPageDef {
 | 
				
			||||||
 | 
					    // Most of these names are taken from the 3dbrew page linked above.
 | 
				
			||||||
 | 
					    u32_le   date_time_selector;         // 0
 | 
				
			||||||
 | 
					    u8       running_hw;                 // 4
 | 
				
			||||||
 | 
					    /// "Microcontroller hardware info"
 | 
				
			||||||
 | 
					    u8       mcu_hw_info;                // 5
 | 
				
			||||||
 | 
					    INSERT_PADDING_BYTES(0x20 - 0x6);    // 6
 | 
				
			||||||
 | 
					    DateTime date_time_0;                // 20
 | 
				
			||||||
 | 
					    DateTime date_time_1;                // 40
 | 
				
			||||||
 | 
					    u8       wifi_macaddr[6];            // 60
 | 
				
			||||||
 | 
					    u8       wifi_unknown1;              // 66
 | 
				
			||||||
 | 
					    u8       wifi_unknown2;              // 67
 | 
				
			||||||
 | 
					    INSERT_PADDING_BYTES(0x80 - 0x68);   // 68
 | 
				
			||||||
 | 
					    float_le sliderstate_3d;             // 80
 | 
				
			||||||
 | 
					    u8       ledstate_3d;                // 84
 | 
				
			||||||
 | 
					    INSERT_PADDING_BYTES(0xA0 - 0x85);   // 85
 | 
				
			||||||
 | 
					    u64_le   menu_title_id;              // A0
 | 
				
			||||||
 | 
					    u64_le   active_menu_title_id;       // A8
 | 
				
			||||||
 | 
					    INSERT_PADDING_BYTES(0x1000 - 0xB0); // B0
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					static_assert(sizeof(SharedPageDef) == Memory::SHARED_PAGE_SIZE, "Shared page structure size is wrong");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern SharedPageDef shared_page;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Init();
 | 
					void Init();
 | 
				
			||||||
 | 
					 | 
				
			||||||
void Shutdown();
 | 
					void Shutdown();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace
 | 
					} // namespace
 | 
				
			||||||
 | 
				
			|||||||
@ -47,7 +47,8 @@ inline void Read(T &var, const VAddr 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)) {
 | 
				
			||||||
        SharedPage::Read<T>(var, vaddr);
 | 
					        const u8* raw_memory = (const u8*)&SharedPage::shared_page;
 | 
				
			||||||
 | 
					        var = *((const T*)&raw_memory[vaddr - SHARED_PAGE_VADDR]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // DSP memory
 | 
					    // DSP memory
 | 
				
			||||||
    } else if ((vaddr >= DSP_RAM_VADDR)  && (vaddr < DSP_RAM_VADDR_END)) {
 | 
					    } else if ((vaddr >= DSP_RAM_VADDR)  && (vaddr < DSP_RAM_VADDR_END)) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user