MemoryCard: Use constants for address and offset mask

And sanitize them on state load.
pull/3781/head
Stenzek 2 months ago
parent 7111f4c12d
commit b5a990bbdc
No known key found for this signature in database

@ -77,6 +77,12 @@ bool MemoryCard::DoState(StateWrapper& sw)
sw.Do(&m_data);
sw.Do(&m_changed);
if (sw.IsReading())
{
m_address &= ADDRESS_MASK;
m_sector_offset &= OFFSET_MASK;
}
return !sw.HasError();
}
@ -126,7 +132,7 @@ bool MemoryCard::Transfer(const u8 data_in, u8* data_out)
{ \
*data_out = 0x00; \
ack = true; \
m_address = ((m_address & u16(0x00FF)) | (ZeroExtend16(data_in) << 8)) & 0x3FF; \
m_address = ((m_address & u16(0x00FF)) | (ZeroExtend16(data_in) << 8)) & ADDRESS_MASK; \
m_state = next_state; \
} \
break;
@ -136,7 +142,7 @@ bool MemoryCard::Transfer(const u8 data_in, u8* data_out)
{ \
*data_out = m_last_byte; \
ack = true; \
m_address = ((m_address & u16(0xFF00)) | ZeroExtend16(data_in)) & 0x3FF; \
m_address = ((m_address & u16(0xFF00)) | ZeroExtend16(data_in)) & ADDRESS_MASK; \
m_sector_offset = 0; \
m_state = next_state; \
} \

@ -41,11 +41,11 @@ public:
void Format();
private:
enum : u32
{
// save in three seconds, that should be long enough for everything to finish writing
SAVE_DELAY_IN_SECONDS = 5,
};
static constexpr u16 ADDRESS_MASK = 0x3FF;
static constexpr u8 OFFSET_MASK = 0x7F;
// save in three seconds, that should be long enough for everything to finish writing
static constexpr u32 SAVE_DELAY_IN_SECONDS = 5;
union FLAG
{

Loading…
Cancel
Save