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);
if (m_command.is_write())
g_SRAM.raw[dev_addr] = data;
g_SRAM[dev_addr] = data;
else
data = g_SRAM.raw[dev_addr];
data = g_SRAM[dev_addr];
}
else if (IN_RANGE(UART))
{

View File

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

View File

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

View File

@ -353,7 +353,7 @@ unsigned int NetPlayServer::OnConnect(ENetPeer* socket)
spac << static_cast<MessageId>(NP_MSG_SYNC_GC_SRAM);
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);