diff --git a/src/DSi.cpp b/src/DSi.cpp index 02172612..cfce0ac4 100644 --- a/src/DSi.cpp +++ b/src/DSi.cpp @@ -172,6 +172,11 @@ void Reset() GPU::DispStat[1] |= (1<<6); } +void Stop() +{ + DSi_CamModule::Stop(); +} + void DoSavestate(Savestate* file) { file->Section("DSIG"); diff --git a/src/DSi.h b/src/DSi.h index 4ccddc02..ef60b309 100644 --- a/src/DSi.h +++ b/src/DSi.h @@ -56,6 +56,7 @@ extern u32 NWRAMMask[2][3]; bool Init(); void DeInit(); void Reset(); +void Stop(); void DoSavestate(Savestate* file); diff --git a/src/DSi_Camera.cpp b/src/DSi_Camera.cpp index 3c9db2dc..dcf41a92 100644 --- a/src/DSi_Camera.cpp +++ b/src/DSi_Camera.cpp @@ -83,6 +83,12 @@ void Reset() NDS::ScheduleEvent(NDS::Event_DSi_CamIRQ, true, kIRQInterval, IRQ, 0); } +void Stop() +{ + Camera0->Stop(); + Camera1->Stop(); +} + void DoSavestate(Savestate* file) { file->Section("CAMi"); @@ -418,6 +424,8 @@ void Camera::DoSavestate(Savestate* file) void Camera::Reset() { + Platform::Camera_Stop(Num); + DataPos = 0; RegAddr = 0; RegData = 0; @@ -439,6 +447,11 @@ void Camera::Reset() memset(FrameBuffer, 0, (640*480/2)*sizeof(u32)); } +void Camera::Stop() +{ + Platform::Camera_Stop(Num); +} + bool Camera::IsActivated() { if (StandbyCnt & (1<<14)) return false; // standby diff --git a/src/DSi_Camera.h b/src/DSi_Camera.h index 75e97f27..bf18e597 100644 --- a/src/DSi_Camera.h +++ b/src/DSi_Camera.h @@ -33,6 +33,7 @@ extern Camera* Camera1; bool Init(); void DeInit(); void Reset(); +void Stop(); void DoSavestate(Savestate* file); @@ -56,6 +57,7 @@ public: void DoSavestate(Savestate* file); void Reset(); + void Stop(); bool IsActivated(); void StartTransfer(); diff --git a/src/NDS.cpp b/src/NDS.cpp index 4118836a..966b2529 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -693,6 +693,9 @@ void Stop() Platform::StopEmu(); GPU::Stop(); SPU::Stop(); + + if (ConsoleType == 1) + DSi::Stop(); } bool DoSavestate_Scheduler(Savestate* file)