summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2014-07-02 22:35:32 -0400
committerLioncash <mathew1800@gmail.com>2014-07-02 22:35:32 -0400
commita2b052504297db49efa06d92af3b8bd35aa4e374 (patch)
tree08dc02b301becbfb8d8ad4d2a7a76f0eabc251ac
parentaec4cc7e29d0a946f02a876cb28beb8534df6173 (diff)
parentde3f587b32add744678c3a6aa85b25d762110c40 (diff)
Merge pull request #550 from RachelBryk/movie-mc2
Add support for 2 memory cards for movies.
-rw-r--r--Source/Core/Core/BootManager.cpp9
-rw-r--r--Source/Core/Core/HW/EXI.cpp13
-rw-r--r--Source/Core/Core/HW/EXI_DeviceMemoryCard.cpp4
-rw-r--r--Source/Core/Core/Movie.cpp15
-rw-r--r--Source/Core/Core/Movie.h8
5 files changed, 28 insertions, 21 deletions
diff --git a/Source/Core/Core/BootManager.cpp b/Source/Core/Core/BootManager.cpp
index c3cc17ecca..7bf601afbf 100644
--- a/Source/Core/Core/BootManager.cpp
+++ b/Source/Core/Core/BootManager.cpp
@@ -219,10 +219,13 @@ bool BootCore(const std::string& _rFilename)
StartUp.bFastDiscSpeed = Movie::IsFastDiscSpeed();
StartUp.iCPUCore = Movie::GetCPUMode();
StartUp.bSyncGPU = Movie::IsSyncGPU();
- if (Movie::IsUsingMemcard() && Movie::IsStartingFromClearSave() && !StartUp.bWii)
+ for (int i = 0; i < 2; ++i)
{
- if (File::Exists(File::GetUserPath(D_GCUSER_IDX) + "Movie.raw"))
- File::Delete(File::GetUserPath(D_GCUSER_IDX) + "Movie.raw");
+ if (Movie::IsUsingMemcard(i) && Movie::IsStartingFromClearSave() && !StartUp.bWii)
+ {
+ if (File::Exists(File::GetUserPath(D_GCUSER_IDX) + StringFromFormat("Movie%s.raw", (i == 0) ? "A" : "B")))
+ File::Delete(File::GetUserPath(D_GCUSER_IDX) + StringFromFormat("Movie%s.raw", (i == 0) ? "A" : "B"));
+ }
}
}
diff --git a/Source/Core/Core/HW/EXI.cpp b/Source/Core/Core/HW/EXI.cpp
index 24846e820f..cbbeff1bf1 100644
--- a/Source/Core/Core/HW/EXI.cpp
+++ b/Source/Core/Core/HW/EXI.cpp
@@ -28,15 +28,18 @@ void Init()
for (u32 i = 0; i < MAX_EXI_CHANNELS; i++)
g_Channels[i] = new CEXIChannel(i);
- if (Movie::IsPlayingInput() && Movie::IsUsingMemcard() && Movie::IsConfigSaved())
- g_Channels[0]->AddDevice(EXIDEVICE_MEMORYCARD, 0); // SlotA
- else if (Movie::IsPlayingInput() && !Movie::IsUsingMemcard() && Movie::IsConfigSaved())
- g_Channels[0]->AddDevice(EXIDEVICE_NONE, 0); // SlotA
+ if (Movie::IsPlayingInput() && Movie::IsConfigSaved())
+ {
+ g_Channels[0]->AddDevice(Movie::IsUsingMemcard(0) ? EXIDEVICE_MEMORYCARD : EXIDEVICE_NONE, 0); // SlotA
+ g_Channels[1]->AddDevice(Movie::IsUsingMemcard(1) ? EXIDEVICE_MEMORYCARD : EXIDEVICE_NONE, 0); // SlotB
+ }
else
+ {
g_Channels[0]->AddDevice(SConfig::GetInstance().m_EXIDevice[0], 0); // SlotA
+ g_Channels[1]->AddDevice(SConfig::GetInstance().m_EXIDevice[1], 0); // SlotB
+ }
g_Channels[0]->AddDevice(EXIDEVICE_MASKROM, 1);
g_Channels[0]->AddDevice(SConfig::GetInstance().m_EXIDevice[2], 2); // Serial Port 1
- g_Channels[1]->AddDevice(SConfig::GetInstance().m_EXIDevice[1], 0); // SlotB
g_Channels[2]->AddDevice(EXIDEVICE_AD16, 0);
changeDevice = CoreTiming::RegisterEvent("ChangeEXIDevice", ChangeDeviceCallback);
diff --git a/Source/Core/Core/HW/EXI_DeviceMemoryCard.cpp b/Source/Core/Core/HW/EXI_DeviceMemoryCard.cpp
index 84a32f13e7..96de4866f2 100644
--- a/Source/Core/Core/HW/EXI_DeviceMemoryCard.cpp
+++ b/Source/Core/Core/HW/EXI_DeviceMemoryCard.cpp
@@ -163,9 +163,9 @@ void CEXIMemoryCard::setupRawMemcard(u16 sizeMb)
{
std::string filename =
(card_index == 0) ? SConfig::GetInstance().m_strMemoryCardA : SConfig::GetInstance().m_strMemoryCardB;
- if (Movie::IsPlayingInput() && Movie::IsConfigSaved() && Movie::IsUsingMemcard() &&
+ if (Movie::IsPlayingInput() && Movie::IsConfigSaved() && Movie::IsUsingMemcard(card_index) &&
Movie::IsStartingFromClearSave())
- filename = File::GetUserPath(D_GCUSER_IDX) + "Movie.raw";
+ filename = File::GetUserPath(D_GCUSER_IDX) + StringFromFormat("Movie%s.raw", (card_index == 0) ? "A" : "B");
if (sizeMb == MemCard251Mb)
{
diff --git a/Source/Core/Core/Movie.cpp b/Source/Core/Core/Movie.cpp
index e6ef93366b..08d3a318b0 100644
--- a/Source/Core/Core/Movie.cpp
+++ b/Source/Core/Core/Movie.cpp
@@ -58,7 +58,7 @@ u64 g_currentInputCount = 0, g_totalInputCount = 0; // just stats
u64 g_totalTickCount = 0, g_tickCountAtLastInput = 0; // just stats
u64 g_recordingStartTime; // seconds since 1970 that recording started
bool bSaveConfig = false, bSkipIdle = false, bDualCore = false, bProgressive = false, bDSPHLE = false, bFastDiscSpeed = false;
-bool bMemcard = false, g_bClearSave = false, bSyncGPU = false, bNetPlay = false;
+bool g_bClearSave = false, bSyncGPU = false, bNetPlay = false;
std::string videoBackend = "unknown";
int iCPUCore = 1;
bool g_bDiscChange = false;
@@ -66,7 +66,7 @@ std::string g_discChange = "";
std::string author = "";
u64 g_titleID = 0;
unsigned char MD5[16];
-u8 bongos;
+u8 bongos, memcards;
u8 revision[20];
u32 DSPiromHash = 0;
u32 DSPcoefHash = 0;
@@ -365,9 +365,9 @@ bool IsStartingFromClearSave()
return g_bClearSave;
}
-bool IsUsingMemcard()
+bool IsUsingMemcard(int memcard)
{
- return bMemcard;
+ return memcards & (1 << memcard);
}
bool IsSyncGPU()
{
@@ -707,7 +707,7 @@ void ReadHeader()
bFastDiscSpeed = tmpHeader.bFastDiscSpeed;
iCPUCore = tmpHeader.CPUCore;
g_bClearSave = tmpHeader.bClearSave;
- bMemcard = tmpHeader.bMemcard;
+ memcards = tmpHeader.memcards;
bongos = tmpHeader.bongos;
bSyncGPU = tmpHeader.bSyncGPU;
bNetPlay = tmpHeader.bNetPlay;
@@ -1143,7 +1143,7 @@ void SaveRecording(const std::string& filename)
header.bEFBEmulateFormatChanges = g_ActiveConfig.bEFBEmulateFormatChanges;
header.bUseXFB = g_ActiveConfig.bUseXFB;
header.bUseRealXFB = g_ActiveConfig.bUseRealXFB;
- header.bMemcard = bMemcard;
+ header.memcards = memcards;
header.bClearSave = g_bClearSave;
header.bSyncGPU = bSyncGPU;
header.bNetPlay = bNetPlay;
@@ -1212,7 +1212,8 @@ void GetSettings()
bNetPlay = NetPlay::IsNetPlayRunning();
if (!Core::g_CoreStartupParameter.bWii)
g_bClearSave = !File::Exists(SConfig::GetInstance().m_strMemoryCardA);
- bMemcard = SConfig::GetInstance().m_EXIDevice[0] == EXIDEVICE_MEMORYCARD;
+ memcards |= (SConfig::GetInstance().m_EXIDevice[0] == EXIDEVICE_MEMORYCARD) << 0;
+ memcards |= (SConfig::GetInstance().m_EXIDevice[1] == EXIDEVICE_MEMORYCARD) << 1;
unsigned int tmp;
for (int i = 0; i < 20; ++i)
{
diff --git a/Source/Core/Core/Movie.h b/Source/Core/Core/Movie.h
index 05ee86cada..c2177e4afa 100644
--- a/Source/Core/Core/Movie.h
+++ b/Source/Core/Core/Movie.h
@@ -107,7 +107,7 @@ struct DTMHeader
bool bEFBEmulateFormatChanges;
bool bUseXFB;
bool bUseRealXFB;
- bool bMemcard;
+ u8 memcards;
bool bClearSave; // Create a new memory card when playing back a movie if true
u8 bongos;
bool bSyncGPU;
@@ -136,7 +136,7 @@ bool IsJustStartingRecordingInputFromSaveState();
bool IsJustStartingPlayingInputFromSaveState();
bool IsPlayingInput();
bool IsReadOnly();
-u64 GetRecordingStartTime();
+u64 GetRecordingStartTime();
bool IsConfigSaved();
bool IsDualCore();
@@ -144,9 +144,9 @@ bool IsProgressive();
bool IsSkipIdle();
bool IsDSPHLE();
bool IsFastDiscSpeed();
-int GetCPUMode();
+int GetCPUMode();
bool IsStartingFromClearSave();
-bool IsUsingMemcard();
+bool IsUsingMemcard(int memcard);
bool IsSyncGPU();
void SetGraphicsConfig();
void GetSettings();