From cbe5780837c63d46a0fc83d50102625bf5009959 Mon Sep 17 00:00:00 2001 From: StapleButter Date: Thu, 18 Oct 2018 02:54:48 +0200 Subject: [PATCH] SPI done --- src/NDS.cpp | 2 +- src/SPI.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/SPI.h | 3 +++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/NDS.cpp b/src/NDS.cpp index 1a1714aa..d2551dc1 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -512,7 +512,7 @@ bool DoSavestate(Savestate* file) NDSCart::DoSavestate(file); GPU::DoSavestate(file); SPU::DoSavestate(file); - // SPI + SPI::DoSavestate(file); // RTC // wifi diff --git a/src/SPI.cpp b/src/SPI.cpp index 98f59033..3ffb20fe 100644 --- a/src/SPI.cpp +++ b/src/SPI.cpp @@ -193,6 +193,22 @@ void Reset() StatusReg = 0x00; } +void DoSavestate(Savestate* file) +{ + file->Section("SPFW"); + + // CHECKME/TODO: trust the firmware to stay the same????? + // embedding the whole firmware in the savestate would be derpo tho?? + + file->Var32(&Hold); + file->Var8(&CurCmd); + file->Var32(&DataPos); + file->Var8(&Data); + + file->Var8(&StatusReg); + file->Var32(&Addr); +} + void SetupDirectBoot() { NDS::ARM9Write32(0x027FF864, 0); @@ -360,6 +376,19 @@ void Reset() RegMasks[4] = 0x0F; } +void DoSavestate(Savestate* file) +{ + file->Section("SPPW"); + + file->Var32(&Hold); + file->Var32(&DataPos); + file->Var8(&Index); + file->Var8(&Data); + + file->VarArray(Registers, 8); + file->VarArray(RegMasks, 8); // is that needed?? +} + u8 Read() { return Data; @@ -441,6 +470,17 @@ void Reset() ConvResult = 0; } +void DoSavestate(Savestate* file) +{ + file->Section("SPTS"); + + file->Var32(&DataPos); + file->Var8(&ControlByte); + file->Var8(&Data); + + file->Var16(&ConvResult); +} + void SetTouchCoords(u16 x, u16 y) { // scr.x = (adc.x-adc.x1) * (scr.x2-scr.x1) / (adc.x2-adc.x1) + (scr.x1-1) @@ -526,6 +566,18 @@ void Reset() SPI_TSC::Reset(); } +void DoSavestate(Savestate* file) +{ + file->Section("SPIG"); + + file->Var16(&Cnt); + file->Var32(&CurDevice); + + SPI_Firmware::DoSavestate(file); + SPI_Powerman::DoSavestate(file); + SPI_TSC::DoSavestate(file); +} + void WriteCnt(u16 val) { diff --git a/src/SPI.h b/src/SPI.h index 04e94719..f2f8e0aa 100644 --- a/src/SPI.h +++ b/src/SPI.h @@ -19,6 +19,8 @@ #ifndef SPI_H #define SPI_H +#include "Savestate.h" + namespace SPI_Firmware { @@ -45,6 +47,7 @@ extern u16 Cnt; bool Init(); void DeInit(); void Reset(); +void DoSavestate(Savestate* file); u16 ReadCnt(); void WriteCnt(u16 val);