From b5c39680a5c6dc8b55ed964f4ae97ab4c8df42ea Mon Sep 17 00:00:00 2001 From: StapleButter Date: Thu, 18 Oct 2018 04:00:16 +0200 Subject: hax, finally making savestates usable F1 to save, F2 to load. filename hardcoded for now. shits itself: * when the 3D engine is used * when a debugger is used (heh) --- src/DMA.cpp | 2 +- src/libui_sdl/main.cpp | 86 +++++++++++++++++++++++++++----------------------- 2 files changed, 47 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/DMA.cpp b/src/DMA.cpp index ba8cc41..f0c22b5 100644 --- a/src/DMA.cpp +++ b/src/DMA.cpp @@ -120,7 +120,7 @@ void DMA::Reset() void DMA::DoSavestate(Savestate* file) { - char* magic = "DMAx"; + char magic[5] = "DMAx"; magic[3] = '0' + Num + (CPU*4); file->Section(magic); diff --git a/src/libui_sdl/main.cpp b/src/libui_sdl/main.cpp index 873d95a..2870cd1 100644 --- a/src/libui_sdl/main.cpp +++ b/src/libui_sdl/main.cpp @@ -141,6 +141,9 @@ void AudioCallback(void* data, Uint8* stream, int len) } } +// hax. +int savestate_cmd; + int EmuThreadFunc(void* burp) { NDS::Init(); @@ -153,6 +156,8 @@ int EmuThreadFunc(void* burp) ScreenDrawInited = false; Touching = false; + savestate_cmd = 0; + SDL_AudioSpec whatIwant, whatIget; memset(&whatIwant, 0, sizeof(SDL_AudioSpec)); whatIwant.freq = 47340; @@ -192,6 +197,31 @@ int EmuThreadFunc(void* burp) { EmuStatus = 1; + // HAX!! + if (savestate_cmd) + { + if (savestate_cmd == 1) + { + Savestate* test = new Savestate("SAVEZORZ.bin", true); + if (NDS::DoSavestate(test)) + printf("savestate saved OK\n"); + else + printf("saving failed\n"); + delete test; + } + else if (savestate_cmd == 2) + { + Savestate* test = new Savestate("SAVEZORZ.bin", false); + if (NDS::DoSavestate(test)) + printf("savestate loaded OK\n"); + else + printf("loading failed\n"); + delete test; + } + + savestate_cmd = 0; + } + // poll input u32 keymask = KeyInputMask; u32 joymask = 0xFFF; @@ -448,6 +478,22 @@ int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt) } else if (!evt->Repeat) { + // HAX + if (evt->Scancode == 0x3B) // F1 + { + // save state. + savestate_cmd = 1; + printf("saving state\n"); + return 1; + } + if (evt->Scancode == 0x3C) // F2 + { + // load state. + savestate_cmd = 2; + printf("loading state\n"); + return 1; + } + for (int i = 0; i < 12; i++) if (evt->Scancode == Config::KeyMapping[i]) KeyInputMask &= ~(1<Section("BAKA"); - dorp->Var32(&zab); - dorp->Var8(&zob); - dorp->Section("SHIT"); - dorp->Var16(&zib); - dorp->Var32(&zub); - delete dorp; - - zab = 0; zib = 0; zob = 0; zub = 0; - dorp = new Savestate("dorp.zog", false); - dorp->Section("BAKA"); - dorp->Var32(&zab); - dorp->Var8(&zob); - dorp->Section("SHIT"); - dorp->Var16(&zib); - dorp->Var32(&zub); - delete dorp; - printf("-> %d %d %d %d\n", zab, zib, zob, zub); - - zab = 0; zib = 0; zob = 0; zub = 0; - dorp = new Savestate("dorp.zog", false); - dorp->Section("SHIT"); - dorp->Var16(&zib); - dorp->Var32(&zub); - dorp->Section("BAKA"); - dorp->Var32(&zab); - dorp->Var8(&zob); - delete dorp; - printf("-> %d %d %d %d\n", zab, zib, zob, zub); - - // TESTORZ END - Config::Load(); if (!Config::HasConfigFile("bios7.bin") || !Config::HasConfigFile("bios9.bin") || !Config::HasConfigFile("firmware.bin")) -- cgit v1.2.3