diff --git a/src/NDS.cpp b/src/NDS.cpp index 2f1759fa..a2329bc6 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -858,8 +858,8 @@ bool DoSavestate(Savestate* file) file->VarArray(SharedWRAM, SharedWRAMSize); file->VarArray(ARM7WRAM, ARM7WRAMSize); - //file->VarArray(ARM9BIOS, 0x1000); - //file->VarArray(ARM7BIOS, 0x4000); + file->VarArray(ARM9BIOS, 0x1000); + file->VarArray(ARM7BIOS, 0x4000); file->VarArray(ExMemCnt, 2*sizeof(u16)); file->VarArray(ROMSeed0, 2*8); diff --git a/src/SPI.cpp b/src/SPI.cpp index bbfacbf2..09703ecd 100644 --- a/src/SPI.cpp +++ b/src/SPI.cpp @@ -458,6 +458,28 @@ void DoSavestate(Savestate* file) // CHECKME/TODO: trust the firmware to stay the same????? // embedding the whole firmware in the savestate would be derpo tho?? + file->Var32(&FirmwareLength); + if (file->Saving) + { + file->VarArray(Firmware, FirmwareLength); + } + else + { + if (Firmware) delete[] Firmware; + Firmware = new u8[FirmwareLength]; + file->VarArray(Firmware, FirmwareLength); + + FirmwareMask = FirmwareLength - 1; + + u32 userdata = 0x7FE00 & FirmwareMask; + if (*(u16*)&Firmware[userdata+0x170] == ((*(u16*)&Firmware[userdata+0x70] + 1) & 0x7F)) + { + if (VerifyCRC16(0xFFFF, userdata+0x100, 0x70, userdata+0x172)) + userdata += 0x100; + } + + UserSettings = userdata; + } file->Var32(&Hold); file->Var8(&CurCmd);