aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/NDS.cpp2
-rw-r--r--src/SPI.cpp52
-rw-r--r--src/SPI.h3
3 files changed, 56 insertions, 1 deletions
diff --git a/src/NDS.cpp b/src/NDS.cpp
index 1a1714a..d2551dc 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 98f5903..3ffb20f 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 04e9471..f2f8e0a 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);