aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/NDS.cpp2
-rw-r--r--src/NDSCart.cpp27
-rw-r--r--src/NDSCart.h3
3 files changed, 25 insertions, 7 deletions
diff --git a/src/NDS.cpp b/src/NDS.cpp
index aef4d3c..5181b34 100644
--- a/src/NDS.cpp
+++ b/src/NDS.cpp
@@ -1000,6 +1000,8 @@ u32 RunFrame()
GPU3D::Timestamp-SysTimestamp);
#endif
+ NDSCart::FlushSRAMFile();
+
NumFrames++;
return GPU::TotalScanlines;
diff --git a/src/NDSCart.cpp b/src/NDSCart.cpp
index 077bf48..2d8396a 100644
--- a/src/NDSCart.cpp
+++ b/src/NDSCart.cpp
@@ -37,6 +37,7 @@ u8* SRAM;
u32 SRAMLength;
char SRAMPath[1024];
+bool SRAMFileDirty;
void (*WriteFunc)(u8 val, bool islast);
@@ -445,14 +446,21 @@ void Write(u8 val, u32 hold)
break;
}
- if (islast && (CurCmd == 0x02 || CurCmd == 0x0A) && (SRAMLength > 0))
+ SRAMFileDirty |= islast && (CurCmd == 0x02 || CurCmd == 0x0A) && (SRAMLength > 0);
+}
+
+void FlushSRAMFile()
+{
+ if (!SRAMFileDirty)
+ return;
+
+ SRAMFileDirty = false;
+
+ FILE* f = Platform::OpenFile(SRAMPath, "wb");
+ if (f)
{
- FILE* f = Platform::OpenFile(SRAMPath, "wb");
- if (f)
- {
- fwrite(SRAM, SRAMLength, 1, f);
- fclose(f);
- }
+ fwrite(SRAM, SRAMLength, 1, f);
+ fclose(f);
}
}
@@ -1034,6 +1042,11 @@ void RelocateSave(const char* path, bool write)
NDSCart_SRAM::RelocateSave(path, write);
}
+void FlushSRAMFile()
+{
+ NDSCart_SRAM::FlushSRAMFile();
+}
+
int ImportSRAM(const u8* data, u32 length)
{
memcpy(NDSCart_SRAM::SRAM, data, std::min(length, NDSCart_SRAM::SRAMLength));
diff --git a/src/NDSCart.h b/src/NDSCart.h
index 9fe916d..7d3f4a1 100644
--- a/src/NDSCart.h
+++ b/src/NDSCart.h
@@ -46,6 +46,9 @@ void DoSavestate(Savestate* file);
void DecryptSecureArea(u8* out);
bool LoadROM(const char* path, const char* sram, bool direct);
+
+void FlushSRAMFile();
+
void RelocateSave(const char* path, bool write);
int ImportSRAM(const u8* data, u32 length);