2014-03-28 22:46:54 -07:00
|
|
|
// Copyright 2013 Dolphin Emulator Project
|
|
|
|
// Licensed under GPLv2
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2014-08-12 22:55:07 -07:00
|
|
|
#include <memory>
|
|
|
|
#include "Common/Event.h"
|
|
|
|
#include "Common/Flag.h"
|
2014-03-28 22:46:54 -07:00
|
|
|
#include "Common/Thread.h"
|
|
|
|
#include "Core/HW/GCMemcard.h"
|
|
|
|
|
2014-07-29 20:55:07 -04:00
|
|
|
class PointerWrap;
|
|
|
|
|
2014-03-28 22:46:54 -07:00
|
|
|
class MemoryCard : public MemoryCardBase
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
MemoryCard(std::string filename, int _card_index, u16 sizeMb = MemCard2043Mb);
|
2014-07-15 15:20:05 -04:00
|
|
|
~MemoryCard();
|
2014-08-12 22:55:07 -07:00
|
|
|
void FlushThread();
|
2014-09-05 09:36:39 -07:00
|
|
|
void MakeDirty();
|
2014-03-28 22:46:54 -07:00
|
|
|
|
2014-03-28 23:19:04 -07:00
|
|
|
s32 Read(u32 address, s32 length, u8 *destaddress) override;
|
|
|
|
s32 Write(u32 destaddress, s32 length, u8 *srcaddress) override;
|
2014-03-28 22:46:54 -07:00
|
|
|
void ClearBlock(u32 address) override;
|
|
|
|
void ClearAll() override;
|
|
|
|
void DoState(PointerWrap &p) override;
|
2014-03-28 23:19:04 -07:00
|
|
|
|
2014-03-28 22:46:54 -07:00
|
|
|
private:
|
2014-08-12 22:55:07 -07:00
|
|
|
std::string m_filename;
|
|
|
|
std::unique_ptr<u8[]> m_memcard_data;
|
2014-09-05 09:36:39 -07:00
|
|
|
std::unique_ptr<u8[]> m_flush_buffer;
|
2014-08-12 22:55:07 -07:00
|
|
|
std::thread m_flush_thread;
|
|
|
|
std::mutex m_flush_mutex;
|
|
|
|
Common::Event m_flush_trigger;
|
2014-09-05 09:36:39 -07:00
|
|
|
Common::Flag m_dirty;
|
2014-03-28 22:46:54 -07:00
|
|
|
};
|