add some of the savestate shit

This commit is contained in:
Arisotura 2022-01-07 01:31:40 +01:00
parent 1e2982481c
commit 8c2cd2beaf
5 changed files with 137 additions and 7 deletions

View File

@ -172,7 +172,74 @@ void DoSavestate(Savestate* file)
{
file->Section("DSIG");
//
file->Var16(&SCFG_BIOS);
file->Var16(&SCFG_Clock9);
file->Var16(&SCFG_Clock7);
file->VarArray(&SCFG_EXT[0], sizeof(u32)*2);
file->Var32(&SCFG_MC);
file->Var16(&SCFG_RST);
//file->VarArray(ARM9iBIOS, 0x10000);
//file->VarArray(ARM7iBIOS, 0x10000);
if (file->Saving)
{
file->VarArray(&MBK[0][0], sizeof(u32)*8);
file->VarArray(&MBK[1][5], sizeof(u32)*3);
file->Var32(&MBK[0][8]);
}
else
{
Set_SCFG_Clock9(SCFG_Clock9);
Set_SCFG_MC(SCFG_MC);
DSi_DSP::SetRstLine(SCFG_RST & 0x0001);
MBK[0][8] = 0;
MBK[1][8] = 0;
u32 mbk[12];
file->VarArray(&mbk, sizeof(u32)*12);
MapNWRAM_A(0, mbk[0] & 0xFF);
MapNWRAM_A(1, (mbk[0] >> 8) & 0xFF);
MapNWRAM_A(2, (mbk[0] >> 16) & 0xFF);
MapNWRAM_A(3, mbk[0] >> 24);
MapNWRAM_B(0, mbk[1] & 0xFF);
MapNWRAM_B(1, (mbk[1] >> 8) & 0xFF);
MapNWRAM_B(2, (mbk[1] >> 16) & 0xFF);
MapNWRAM_B(3, mbk[1] >> 24);
MapNWRAM_B(4, mbk[2] & 0xFF);
MapNWRAM_B(5, (mbk[2] >> 8) & 0xFF);
MapNWRAM_B(6, (mbk[2] >> 16) & 0xFF);
MapNWRAM_B(7, mbk[2] >> 24);
MapNWRAM_C(0, mbk[3] & 0xFF);
MapNWRAM_C(1, (mbk[3] >> 8) & 0xFF);
MapNWRAM_C(2, (mbk[3] >> 16) & 0xFF);
MapNWRAM_C(3, mbk[3] >> 24);
MapNWRAM_C(4, mbk[4] & 0xFF);
MapNWRAM_C(5, (mbk[4] >> 8) & 0xFF);
MapNWRAM_C(6, (mbk[4] >> 16) & 0xFF);
MapNWRAM_C(7, mbk[4] >> 24);
MapNWRAMRange(0, 0, mbk[5]);
MapNWRAMRange(0, 1, mbk[6]);
MapNWRAMRange(0, 2, mbk[7]);
MapNWRAMRange(1, 0, mbk[8]);
MapNWRAMRange(1, 1, mbk[9]);
MapNWRAMRange(1, 2, mbk[10]);
mbk[11] &= 0x00FFFF0F;
MBK[0][8] = mbk[11];
MBK[1][8] = mbk[11];
}
for (int i = 0; i < 8; i++)
NDMAs[i]->DoSavestate(file);
DSi_AES::DoSavestate(file);
}
void DecryptModcryptArea(u32 offset, u32 size, u8* iv)

View File

@ -155,6 +155,43 @@ void Reset()
*(u32*)&KeyY[3][8] = 0x202DDD1D;
}
void DoSavestate(Savestate* file)
{
file->Section("AES.");
file->Var32(&Cnt);
file->Var32(&BlkCnt);
file->Var32(&RemExtra);
file->Var32(&RemBlocks);
file->Bool32(&OutputFlush);
file->Var32(&InputDMASize);
file->Var32(&OutputDMASize);
file->Var32(&AESMode);
InputFIFO->DoSavestate(file);
OutputFIFO->DoSavestate(file);
file->VarArray(IV, 16);
file->VarArray(MAC, 16);
file->VarArray(KeyNormal, 4*16);
file->VarArray(KeyX, 4*16);
file->VarArray(KeyY, 4*16);
file->VarArray(CurKey, 16);
file->VarArray(CurMAC, 16);
file->VarArray(OutputMAC, 16);
file->Bool32(&OutputMACDue);
file->VarArray(Ctx->RoundKey, AES_keyExpSize);
file->VarArray(Ctx->Iv, AES_BLOCKLEN);
}
void ProcessBlock_CCM_Extra()
{

View File

@ -30,6 +30,8 @@ bool Init();
void DeInit();
void Reset();
void DoSavestate(Savestate* file);
u32 ReadCnt();
void WriteCnt(u32 val);
void WriteBlkCnt(u32 val);

View File

@ -63,7 +63,31 @@ void DSi_NDMA::Reset()
void DSi_NDMA::DoSavestate(Savestate* file)
{
// TODO!
char magic[5] = "NDMx";
magic[3] = '0' + Num + (CPU*4);
file->Section(magic);
file->Var32(&SrcAddr);
file->Var32(&DstAddr);
file->Var32(&TotalLength);
file->Var32(&BlockLength);
file->Var32(&SubblockTimer);
file->Var32(&FillData);
file->Var32(&Cnt);
file->Var32(&StartMode);
file->Var32(&CurSrcAddr);
file->Var32(&CurDstAddr);
file->Var32(&SubblockLength);
file->Var32(&RemCount);
file->Var32(&IterCount);
file->Var32(&TotalRemCount);
file->Var32(&SrcAddrInc);
file->Var32(&DstAddrInc);
file->Var32(&Running);
file->Bool32(&InProgress);
file->Bool32(&IsGXFIFODMA);
}
void DSi_NDMA::WriteCnt(u32 val)

View File

@ -814,6 +814,9 @@ bool DoSavestate(Savestate* file)
file->VarArray(SharedWRAM, SharedWRAMSize);
file->VarArray(ARM7WRAM, ARM7WRAMSize);
//file->VarArray(ARM9BIOS, 0x1000);
//file->VarArray(ARM7BIOS, 0x4000);
file->VarArray(ExMemCnt, 2*sizeof(u16));
file->VarArray(ROMSeed0, 2*8);
file->VarArray(ROMSeed1, 2*8);
@ -869,11 +872,8 @@ bool DoSavestate(Savestate* file)
file->Var64(&LastSysClockCycles);
file->Var64(&FrameStartTimestamp);
file->Var32(&NumFrames);
if (file->IsAtleastVersion(7, 1))
{
file->Var32(&NumLagFrames);
file->Bool32(&LagFrameFlag);
}
file->Var32(&NumLagFrames);
file->Bool32(&LagFrameFlag);
// TODO: save KeyInput????
file->Var16(&KeyCnt);