diff --git a/src/core/memory_card.cpp b/src/core/memory_card.cpp index 6d8f886ff..ee69836b7 100644 --- a/src/core/memory_card.cpp +++ b/src/core/memory_card.cpp @@ -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; \ } \ diff --git a/src/core/memory_card.h b/src/core/memory_card.h index c48f278e1..3aacc2851 100644 --- a/src/core/memory_card.h +++ b/src/core/memory_card.h @@ -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 {