diff --git a/pcsx2/gui/MemoryCardFolder.cpp b/pcsx2/gui/MemoryCardFolder.cpp index 2f6885af4e..6708e62aeb 100644 --- a/pcsx2/gui/MemoryCardFolder.cpp +++ b/pcsx2/gui/MemoryCardFolder.cpp @@ -142,6 +142,10 @@ void FolderMemoryCard::LoadMemoryCardData( const u32 sizeInClusters, const bool CreateRootDir(); MemoryCardFileEntry* const rootDirEntry = &m_fileEntryDict[m_superBlock.data.rootdir_cluster].entries[0]; AddFolder( rootDirEntry, m_folderName.GetPath(), nullptr, enableFiltering, filter ); + + #ifdef DEBUG_WRITE_FOLDER_CARD_IN_MEMORY_TO_FILE_ON_CHANGE + WriteToFile( m_folderName.GetFullPath().RemoveLast() + L"-debug_" + wxDateTime::Now().Format( L"%Y-%m-%d-%H-%M-%S" ) + L"_load.ps2" ); + #endif } } @@ -842,6 +846,10 @@ void FolderMemoryCard::NextFrame() { void FolderMemoryCard::Flush() { if ( m_cache.empty() ) { return; } + #ifdef DEBUG_WRITE_FOLDER_CARD_IN_MEMORY_TO_FILE_ON_CHANGE + WriteToFile( m_folderName.GetFullPath().RemoveLast() + L"-debug_" + wxDateTime::Now().Format( L"%Y-%m-%d-%H-%M-%S" ) + L"_pre-flush.ps2" ); + #endif + Console.WriteLn( L"(FolderMcd) Writing data for slot %u to file system...", m_slot ); const u64 timeFlushStart = wxGetLocalTimeMillis().GetValue(); @@ -900,6 +908,10 @@ void FolderMemoryCard::Flush() { const u64 timeFlushEnd = wxGetLocalTimeMillis().GetValue(); Console.WriteLn( L"(FolderMcd) Done! Took %u ms.", timeFlushEnd - timeFlushStart ); + + #ifdef DEBUG_WRITE_FOLDER_CARD_IN_MEMORY_TO_FILE_ON_CHANGE + WriteToFile( m_folderName.GetFullPath().RemoveLast() + L"-debug_" + wxDateTime::Now().Format( L"%Y-%m-%d-%H-%M-%S" ) + L"_post-flush.ps2" ); + #endif } bool FolderMemoryCard::FlushPage( const u32 page ) { @@ -1344,6 +1356,20 @@ void FolderMemoryCard::CalculateECC( u8* ecc, const u8* data ) { return; } +void FolderMemoryCard::WriteToFile( const wxString& filename ) { + wxFFile targetFile( filename, L"wb" ); + + u8 buffer[FolderMemoryCard::PageSizeRaw]; + u32 adr = 0; + while ( adr < GetSizeInClusters() * FolderMemoryCard::ClusterSizeRaw ) { + Read( buffer, adr, FolderMemoryCard::PageSizeRaw ); + targetFile.Write( buffer, FolderMemoryCard::PageSizeRaw ); + adr += FolderMemoryCard::PageSizeRaw; + } + + targetFile.Close(); +} + FileAccessHelper::FileAccessHelper() { m_files.clear(); diff --git a/pcsx2/gui/MemoryCardFolder.h b/pcsx2/gui/MemoryCardFolder.h index feded636ac..31b23ee2fe 100644 --- a/pcsx2/gui/MemoryCardFolder.h +++ b/pcsx2/gui/MemoryCardFolder.h @@ -24,6 +24,8 @@ #include "PluginCallbacks.h" #include "AppConfig.h" +//#define DEBUG_WRITE_FOLDER_CARD_IN_MEMORY_TO_FILE_ON_CHANGE + // -------------------------------------------------------------------------------------- // Superblock Header Struct // -------------------------------------------------------------------------------------- @@ -348,6 +350,8 @@ public: static void CalculateECC( u8* ecc, const u8* data ); + void WriteToFile( const wxString& filename ); + protected: // initializes memory card data, as if it was fresh from the factory void InitializeInternalData();