diff --git a/src/backend/core/Mem.cpp b/src/backend/core/Mem.cpp index 9ca44788..acd9f9ef 100644 --- a/src/backend/core/Mem.cpp +++ b/src/backend/core/Mem.cpp @@ -45,18 +45,16 @@ void Mem::LoadSRAM(SaveType save_type, fs::path path) { saveData.unmap(); } - FILE *f = fopen(sramPath.c_str(), "rb"); - if (!f) { - Util::panic("Could not open {}", sramPath); + auto sramVec = Util::ReadFileBinary(sramPath); + if(sramVec.empty()) { + Util::WriteFileBinary(std::array{}, sramPath); + sramVec = Util::ReadFileBinary(sramPath); } - fseek(f, 0, SEEK_END); - size_t actualSize = ftell(f); - fseek(f, 0, SEEK_SET); - if (actualSize != SRAM_SIZE) { + if (sramVec.size() != SRAM_SIZE) { Util::panic("Corrupt SRAM!"); } - fclose(f); + saveData = mio::make_mmap_sink( sramPath, 0, mio::map_entire_file, error); if (error) { Util::panic("Could not mmap {}", sramPath); } diff --git a/src/backend/core/mem/Flash.cpp b/src/backend/core/mem/Flash.cpp index e7a0835b..532555c7 100644 --- a/src/backend/core/mem/Flash.cpp +++ b/src/backend/core/mem/Flash.cpp @@ -20,18 +20,17 @@ void Flash::Load(SaveType saveType, const std::string& path) { saveData.unmap(); } - FILE *f = fopen(flashPath.c_str(), "rb"); - if (!f) { - Util::panic("Could not open {}", flashPath); + auto flashVec = Util::ReadFileBinary(flashPath); + if(flashVec.empty()) { + std::vector dummy{}; + dummy.resize(FLASH_SIZE); + Util::WriteFileBinary(dummy, flashPath); + flashVec = Util::ReadFileBinary(flashPath); } - fseek(f, 0, SEEK_END); - size_t actualSize = ftell(f); - fseek(f, 0, SEEK_SET); - if (actualSize != FLASH_SIZE) { - Util::panic("Corrupt flash!"); + if (flashVec.size() != FLASH_SIZE) { + Util::panic("Corrupt SRAM!"); } - fclose(f); saveData = mio::make_mmap_sink( flashPath, 0, mio::map_entire_file, error); diff --git a/src/backend/core/mmio/PIF.cpp b/src/backend/core/mmio/PIF.cpp index d21487cf..062f43ec 100644 --- a/src/backend/core/mmio/PIF.cpp +++ b/src/backend/core/mmio/PIF.cpp @@ -39,8 +39,10 @@ void PIF::MaybeLoadMempak() { } auto mempakVec = Util::ReadFileBinary(mempakPath); - if(mempak.empty()) + if(mempak.empty()) { Util::WriteFileBinary(std::array{}, mempakPath); + mempakVec = Util::ReadFileBinary(mempakPath); + } if (mempakVec.size() != MEMPAK_SIZE) { Util::panic("Corrupt mempak!"); @@ -87,6 +89,7 @@ void PIF::LoadEeprom(SaveType saveType, const std::string& path) { std::vector dummy{}; dummy.resize(GetSaveSize(saveType)); Util::WriteFileBinary(dummy, eepromPath); + eepromVec = Util::ReadFileBinary(eepromPath); } if (eepromVec.size() != eepromSize) {