mx sram: replace union-with-byte-array with operator[] to make gcc happy.

This commit is contained in:
Shawn Hoffman 2018-09-30 20:34:22 -07:00
parent d300f3bbbc
commit 2a0f022da3
4 changed files with 28 additions and 19 deletions

View File

@ -341,9 +341,9 @@ void CEXIIPL::TransferByte(u8& data)
{ {
u32 dev_addr = DEV_ADDR_CURSOR(SRAM); u32 dev_addr = DEV_ADDR_CURSOR(SRAM);
if (m_command.is_write()) if (m_command.is_write())
g_SRAM.raw[dev_addr] = data; g_SRAM[dev_addr] = data;
else else
data = g_SRAM.raw[dev_addr]; data = g_SRAM[dev_addr];
} }
else if (IN_RANGE(UART)) else if (IN_RANGE(UART))
{ {

View File

@ -10,13 +10,22 @@
#include "Common/Swap.h" #include "Common/Swap.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
// english // English
const Sram sram_dump = {{0, 0, 0, 0, 0x00, 0x2C, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, // This is just a template. Most/all fields are updated with sane(r) values at runtime.
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, const Sram sram_dump = {Common::BigEndianValue<u32>{0},
0x44, 0x4F, 0x4C, 0x50, 0x48, 0x49, 0x4E, 0x53, 0x4C, 0x4F, 0x54, 0x41, {Common::BigEndianValue<u16>{0x2c}, Common::BigEndianValue<u16>{0xffd0}, 0,
0x44, 0x4F, 0x4C, 0x50, 0x48, 0x49, 0x4E, 0x53, 0x4C, 0x4F, 0x54, 0x42, 0, 0, 0, 0, 0, 0x20 | SramFlags::kOobeDone | SramFlags::kStereo},
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, {{
0x00, 0x00, 0x6E, 0x6D, 0x00, 0x00, 0x00, 0x00}}; {'D', 'O', 'L', 'P', 'H', 'I', 'N', 'S', 'L', 'O', 'T', 'A'},
{'D', 'O', 'L', 'P', 'H', 'I', 'N', 'S', 'L', 'O', 'T', 'B'},
},
0,
{},
0,
0,
{0x6E, 0x6D},
0,
{}}};
#if 0 #if 0
// german // german

View File

@ -114,17 +114,17 @@ struct SramSettingsEx
u8 field_3e[2]; u8 field_3e[2];
}; };
union Sram struct Sram
{ {
// TODO determine real full sram size for gc/wii Common::BigEndianValue<u32> rtc;
u8 raw[0x44]; SramSettings settings;
struct SramSettingsEx settings_ex;
{ // Allow access to this entire structure as a raw blob
Common::BigEndianValue<u32> rtc; // Typical union-with-byte-array method can't be used here on GCC
SramSettings settings; u8& operator[](size_t offset) { return reinterpret_cast<u8*>(&rtc)[offset]; }
SramSettingsEx settings_ex;
};
}; };
// TODO determine real full sram size for gc/wii
static_assert(sizeof(Sram) == 0x44);
#pragma pack(pop) #pragma pack(pop)

View File

@ -353,7 +353,7 @@ unsigned int NetPlayServer::OnConnect(ENetPeer* socket)
spac << static_cast<MessageId>(NP_MSG_SYNC_GC_SRAM); spac << static_cast<MessageId>(NP_MSG_SYNC_GC_SRAM);
for (size_t i = 0; i < sizeof(g_SRAM) - offsetof(Sram, settings); ++i) for (size_t i = 0; i < sizeof(g_SRAM) - offsetof(Sram, settings); ++i)
{ {
spac << g_SRAM.raw[offsetof(Sram, settings) + i]; spac << g_SRAM[offsetof(Sram, settings) + i];
} }
Send(player.socket, spac); Send(player.socket, spac);