Skip to content
Permalink
Browse files
Merge pull request #8873 from AdmiralCurtiss/gcmemcard-namespace
GCMemcard: Move into a Memcard namespace.
  • Loading branch information
Tilka committed Jun 16, 2020
2 parents de5941d + 914ebdf commit 1f50587
Show file tree
Hide file tree
Showing 17 changed files with 156 additions and 118 deletions.
@@ -221,6 +221,7 @@ add_library(core
HW/GCMemcard/GCIFile.h
HW/GCMemcard/GCMemcard.cpp
HW/GCMemcard/GCMemcard.h
HW/GCMemcard/GCMemcardBase.h
HW/GCMemcard/GCMemcardDirectory.cpp
HW/GCMemcard/GCMemcardDirectory.h
HW/GCMemcard/GCMemcardRaw.cpp
@@ -514,6 +514,7 @@
<ClInclude Include="HW\GCKeyboardEmu.h" />
<ClInclude Include="HW\GCMemcard\GCIFile.h" />
<ClInclude Include="HW\GCMemcard\GCMemcard.h" />
<ClInclude Include="HW\GCMemcard\GCMemcardBase.h" />
<ClInclude Include="HW\GCMemcard\GCMemcardDirectory.h" />
<ClInclude Include="HW\GCMemcard\GCMemcardRaw.h" />
<ClInclude Include="HW\GCPad.h" />
@@ -1245,6 +1245,9 @@
<ClInclude Include="HW\GCMemcard\GCMemcard.h">
<Filter>HW %28Flipper/Hollywood%29\GCMemcard</Filter>
</ClInclude>
<ClInclude Include="HW\GCMemcard\GCMemcardBase.h">
<Filter>HW %28Flipper/Hollywood%29\GCMemcard</Filter>
</ClInclude>
<ClInclude Include="HW\GCMemcard\GCMemcardDirectory.h">
<Filter>HW %28Flipper/Hollywood%29\GCMemcard</Filter>
</ClInclude>
@@ -142,7 +142,7 @@ CEXIMemoryCard::CEXIMemoryCard(const int index, bool gciFolder) : card_index(ind
bool useMC251;
IniFile gameIni = SConfig::GetInstance().LoadGameIni();
gameIni.GetOrCreateSection("Core")->Get("MemoryCard251", &useMC251, false);
u16 sizeMb = useMC251 ? MBIT_SIZE_MEMORY_CARD_251 : MBIT_SIZE_MEMORY_CARD_2043;
u16 sizeMb = useMC251 ? Memcard::MBIT_SIZE_MEMORY_CARD_251 : Memcard::MBIT_SIZE_MEMORY_CARD_2043;

if (gciFolder)
{
@@ -245,7 +245,7 @@ void CEXIMemoryCard::SetupRawMemcard(u16 sizeMb)
SConfig::GetDirectoryForRegion(SConfig::ToGameCubeRegion(SConfig::GetInstance().m_region));
MemoryCard::CheckPath(filename, region_dir, is_slot_a);

if (sizeMb == MBIT_SIZE_MEMORY_CARD_251)
if (sizeMb == Memcard::MBIT_SIZE_MEMORY_CARD_251)
filename.insert(filename.find_last_of("."), ".251");

memorycard = std::make_unique<MemoryCard>(filename, card_index, sizeMb);
@@ -545,9 +545,9 @@ void CEXIMemoryCard::DMARead(u32 _uAddr, u32 _uSize)
{
memorycard->Read(address, _uSize, Memory::GetPointer(_uAddr));

if ((address + _uSize) % BLOCK_SIZE == 0)
if ((address + _uSize) % Memcard::BLOCK_SIZE == 0)
{
INFO_LOG(EXPANSIONINTERFACE, "reading from block: %x", address / BLOCK_SIZE);
INFO_LOG(EXPANSIONINTERFACE, "reading from block: %x", address / Memcard::BLOCK_SIZE);
}

// Schedule transfer complete later based on read speed
@@ -561,9 +561,9 @@ void CEXIMemoryCard::DMAWrite(u32 _uAddr, u32 _uSize)
{
memorycard->Write(address, _uSize, Memory::GetPointer(_uAddr));

if (((address + _uSize) % BLOCK_SIZE) == 0)
if (((address + _uSize) % Memcard::BLOCK_SIZE) == 0)
{
INFO_LOG(EXPANSIONINTERFACE, "writing to block: %x", address / BLOCK_SIZE);
INFO_LOG(EXPANSIONINTERFACE, "writing to block: %x", address / Memcard::BLOCK_SIZE);
}

// Schedule transfer complete later based on write speed
@@ -11,6 +11,8 @@
#include "Common/File.h"
#include "Common/Logging/Log.h"

namespace Memcard
{
bool GCIFile::LoadHeader()
{
if (m_filename.empty())
@@ -100,3 +102,4 @@ void GCIFile::DoState(PointerWrap& p)
}
p.Do(m_used_blocks);
}
} // namespace Memcard
@@ -12,6 +12,8 @@

class PointerWrap;

namespace Memcard
{
class GCIFile
{
public:
@@ -27,3 +29,4 @@ class GCIFile
bool m_dirty;
std::string m_filename;
};
} // namespace Memcard
@@ -31,6 +31,8 @@ static constexpr std::optional<u64> BytesToMegabits(u64 bytes)
return megabits;
}

namespace Memcard
{
bool GCMemcardErrorCode::HasCriticalErrors() const
{
return Test(GCMemcardValidityIssues::FAILED_TO_OPEN) || Test(GCMemcardValidityIssues::IO_ERROR) ||
@@ -1744,3 +1746,4 @@ GCMemcardErrorCode Directory::CheckForErrorsWithBat(const BlockAlloc& bat) const

return error_code;
}
} // namespace Memcard
@@ -24,6 +24,8 @@ namespace File
class IOFile;
}

namespace Memcard
{
enum
{
SLOT_A = 0,
@@ -158,28 +160,6 @@ constexpr u8 MEMORY_CARD_ICON_FORMAT_CI8_UNIQUE_PALETTE = 3;
// each palette entry is 16 bits in RGB5A3 format
constexpr u32 MEMORY_CARD_CI8_PALETTE_ENTRIES = 256;

class MemoryCardBase
{
public:
explicit MemoryCardBase(int card_index = 0, int size_mbits = MBIT_SIZE_MEMORY_CARD_2043)
: m_card_index(card_index), m_nintendo_card_id(size_mbits)
{
}
virtual ~MemoryCardBase() {}
virtual s32 Read(u32 src_address, s32 length, u8* dest_address) = 0;
virtual s32 Write(u32 dest_address, s32 length, const u8* src_address) = 0;
virtual void ClearBlock(u32 address) = 0;
virtual void ClearAll() = 0;
virtual void DoState(PointerWrap& p) = 0;
u32 GetCardId() const { return m_nintendo_card_id; }
bool IsAddressInBounds(u32 address) const { return address <= (m_memory_card_size - 1); }

protected:
int m_card_index;
u16 m_nintendo_card_id;
u32 m_memory_card_size;
};

struct GCMBlock
{
GCMBlock();
@@ -511,3 +491,4 @@ class GCMemcard
// reads the animation frames
std::optional<std::vector<GCMemcardAnimationFrameRGBA8>> ReadAnimRGBA8(u8 index) const;
};
} // namespace Memcard
@@ -0,0 +1,33 @@
// Copyright 2020 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#pragma once

#include "Common/CommonTypes.h"

#include "Core/HW/GCMemcard/GCMemcard.h"

class PointerWrap;

class MemoryCardBase
{
public:
explicit MemoryCardBase(int card_index = 0, int size_mbits = Memcard::MBIT_SIZE_MEMORY_CARD_2043)
: m_card_index(card_index), m_nintendo_card_id(size_mbits)
{
}
virtual ~MemoryCardBase() = default;
virtual s32 Read(u32 src_address, s32 length, u8* dest_address) = 0;
virtual s32 Write(u32 dest_address, s32 length, const u8* src_address) = 0;
virtual void ClearBlock(u32 address) = 0;
virtual void ClearAll() = 0;
virtual void DoState(PointerWrap& p) = 0;
u32 GetCardId() const { return m_nintendo_card_id; }
bool IsAddressInBounds(u32 address) const { return address <= (m_memory_card_size - 1); }

protected:
int m_card_index;
u16 m_nintendo_card_id;
u32 m_memory_card_size;
};

0 comments on commit 1f50587

Please sign in to comment.