mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-27 00:00:07 -06:00
more savestate crapo
This commit is contained in:
@ -82,6 +82,7 @@ u8 eMMC_CID[16];
|
|||||||
|
|
||||||
|
|
||||||
void Set_SCFG_Clock9(u16 val);
|
void Set_SCFG_Clock9(u16 val);
|
||||||
|
void Set_SCFG_MC(u32 val);
|
||||||
|
|
||||||
|
|
||||||
bool Init()
|
bool Init()
|
||||||
@ -240,6 +241,9 @@ void DoSavestate(Savestate* file)
|
|||||||
NDMAs[i]->DoSavestate(file);
|
NDMAs[i]->DoSavestate(file);
|
||||||
|
|
||||||
DSi_AES::DoSavestate(file);
|
DSi_AES::DoSavestate(file);
|
||||||
|
DSi_Camera::DoSavestate(file);
|
||||||
|
DSi_DSP::DoSavestate(file);
|
||||||
|
DSi_I2C::DoSavestate(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DecryptModcryptArea(u32 offset, u32 size, u8* iv)
|
void DecryptModcryptArea(u32 offset, u32 size, u8* iv)
|
||||||
|
@ -157,7 +157,7 @@ void Reset()
|
|||||||
|
|
||||||
void DoSavestate(Savestate* file)
|
void DoSavestate(Savestate* file)
|
||||||
{
|
{
|
||||||
file->Section("AES.");
|
file->Section("AESi");
|
||||||
|
|
||||||
file->Var32(&Cnt);
|
file->Var32(&Cnt);
|
||||||
|
|
||||||
@ -171,8 +171,8 @@ void DoSavestate(Savestate* file)
|
|||||||
file->Var32(&OutputDMASize);
|
file->Var32(&OutputDMASize);
|
||||||
file->Var32(&AESMode);
|
file->Var32(&AESMode);
|
||||||
|
|
||||||
InputFIFO->DoSavestate(file);
|
InputFIFO.DoSavestate(file);
|
||||||
OutputFIFO->DoSavestate(file);
|
OutputFIFO.DoSavestate(file);
|
||||||
|
|
||||||
file->VarArray(IV, 16);
|
file->VarArray(IV, 16);
|
||||||
|
|
||||||
@ -188,8 +188,8 @@ void DoSavestate(Savestate* file)
|
|||||||
file->VarArray(OutputMAC, 16);
|
file->VarArray(OutputMAC, 16);
|
||||||
file->Bool32(&OutputMACDue);
|
file->Bool32(&OutputMACDue);
|
||||||
|
|
||||||
file->VarArray(Ctx->RoundKey, AES_keyExpSize);
|
file->VarArray(Ctx.RoundKey, AES_keyExpSize);
|
||||||
file->VarArray(Ctx->Iv, AES_BLOCKLEN);
|
file->VarArray(Ctx.Iv, AES_BLOCKLEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,6 +70,21 @@ void DSi_Camera::Reset()
|
|||||||
NDS::ScheduleEvent(NDS::Event_DSi_CamIRQ, true, kIRQInterval, IRQ, 0);
|
NDS::ScheduleEvent(NDS::Event_DSi_CamIRQ, true, kIRQInterval, IRQ, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DSi_Camera::DoSavestate(Savestate* file)
|
||||||
|
{
|
||||||
|
file->Section("CAMi");
|
||||||
|
|
||||||
|
file->Var16(&ModuleCnt);
|
||||||
|
file->Var16(&Cnt);
|
||||||
|
|
||||||
|
file->VarArray(FrameBuffer, sizeof(FrameBuffer));
|
||||||
|
file->Var32(&TransferPos);
|
||||||
|
file->Var32(&FrameLength);
|
||||||
|
|
||||||
|
DSi_Camera0->DoCamSavestate(file);
|
||||||
|
DSi_Camera1->DoCamSavestate(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DSi_Camera::IRQ(u32 param)
|
void DSi_Camera::IRQ(u32 param)
|
||||||
{
|
{
|
||||||
@ -150,7 +165,29 @@ DSi_Camera::DSi_Camera(u32 num)
|
|||||||
|
|
||||||
DSi_Camera::~DSi_Camera()
|
DSi_Camera::~DSi_Camera()
|
||||||
{
|
{
|
||||||
//
|
}
|
||||||
|
|
||||||
|
void DSi_Camera::DoCamSavestate(Savestate* file)
|
||||||
|
{
|
||||||
|
char magic[5] = "CAMx";
|
||||||
|
magic[3] = '0' + Num;
|
||||||
|
file->Section(magic);
|
||||||
|
|
||||||
|
file->Var32(&DataPos);
|
||||||
|
file->Var32(&RegAddr);
|
||||||
|
file->Var16(&RegData);
|
||||||
|
|
||||||
|
file->Var16(&PLLDiv);
|
||||||
|
file->Var16(&PLLPDiv);
|
||||||
|
file->Var16(&PLLCnt);
|
||||||
|
file->Var16(&ClocksCnt);
|
||||||
|
file->Var16(&StandbyCnt);
|
||||||
|
file->Var16(&MiscCnt);
|
||||||
|
|
||||||
|
file->Var16(&MCUAddr);
|
||||||
|
// TODO: MCUData??
|
||||||
|
|
||||||
|
file->VarArray(MCURegs, 0x8000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSi_Camera::ResetCam()
|
void DSi_Camera::ResetCam()
|
||||||
|
@ -28,6 +28,8 @@ public:
|
|||||||
static void DeInit();
|
static void DeInit();
|
||||||
static void Reset();
|
static void Reset();
|
||||||
|
|
||||||
|
static void DoSavestate(Savestate* file);
|
||||||
|
|
||||||
static void IRQ(u32 param);
|
static void IRQ(u32 param);
|
||||||
static void RequestFrame(u32 cam);
|
static void RequestFrame(u32 cam);
|
||||||
|
|
||||||
@ -36,6 +38,8 @@ public:
|
|||||||
DSi_Camera(u32 num);
|
DSi_Camera(u32 num);
|
||||||
~DSi_Camera();
|
~DSi_Camera();
|
||||||
|
|
||||||
|
void DoCamSavestate(Savestate* file);
|
||||||
|
|
||||||
void ResetCam();
|
void ResetCam();
|
||||||
bool IsActivated();
|
bool IsActivated();
|
||||||
|
|
||||||
|
@ -587,6 +587,8 @@ void DoSavestate(Savestate* file)
|
|||||||
file->Var16(&DSP_REP[1]);
|
file->Var16(&DSP_REP[1]);
|
||||||
file->Var16(&DSP_REP[2]);
|
file->Var16(&DSP_REP[2]);
|
||||||
file->Var8((u8*)&SCFG_RST);
|
file->Var8((u8*)&SCFG_RST);
|
||||||
|
|
||||||
|
// TODO: save the Teakra state!!!
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,8 +41,6 @@ bool Init();
|
|||||||
void DeInit();
|
void DeInit();
|
||||||
void Reset();
|
void Reset();
|
||||||
|
|
||||||
// TODO: needs to be called!
|
|
||||||
// however, no DSi savestate stuff seems to be actually implemented?!
|
|
||||||
void DoSavestate(Savestate* file);
|
void DoSavestate(Savestate* file);
|
||||||
|
|
||||||
void DSPCatchUpU32(u32 _);
|
void DSPCatchUpU32(u32 _);
|
||||||
|
@ -72,6 +72,14 @@ void Reset()
|
|||||||
Registers[0x81] = 0x64;
|
Registers[0x81] = 0x64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DoSavestate(Savestate* file)
|
||||||
|
{
|
||||||
|
file->Section("I2BP");
|
||||||
|
|
||||||
|
file->VarArray(Registers, 0x100);
|
||||||
|
file->Var32(&CurPos);
|
||||||
|
}
|
||||||
|
|
||||||
u8 GetBootFlag() { return Registers[0x70]; }
|
u8 GetBootFlag() { return Registers[0x70]; }
|
||||||
|
|
||||||
void Start()
|
void Start()
|
||||||
@ -169,6 +177,18 @@ void Reset()
|
|||||||
DSi_Camera::Reset();
|
DSi_Camera::Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DoSavestate(Savestate* file)
|
||||||
|
{
|
||||||
|
file->Section("I2Ci");
|
||||||
|
|
||||||
|
file->Var8(&Cnt);
|
||||||
|
file->Var8(&Data);
|
||||||
|
file->Var32(&Device);
|
||||||
|
|
||||||
|
DSi_BPTWL::DoSavestate(file);
|
||||||
|
// cameras are savestated from the DSi_Camera module
|
||||||
|
}
|
||||||
|
|
||||||
void WriteCnt(u8 val)
|
void WriteCnt(u8 val)
|
||||||
{
|
{
|
||||||
//printf("I2C: write CNT %02X, %08X\n", val, NDS::GetPC(1));
|
//printf("I2C: write CNT %02X, %08X\n", val, NDS::GetPC(1));
|
||||||
|
@ -34,7 +34,7 @@ extern u8 Cnt;
|
|||||||
bool Init();
|
bool Init();
|
||||||
void DeInit();
|
void DeInit();
|
||||||
void Reset();
|
void Reset();
|
||||||
//void DoSavestate(Savestate* file);
|
void DoSavestate(Savestate* file);
|
||||||
|
|
||||||
void WriteCnt(u8 val);
|
void WriteCnt(u8 val);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user