mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-09 23:55:40 +12:00
Should reset the state every time a rom is loaded so the user can keep dragging and dropping roms and it works
This commit is contained in:
parent
a7a908658a
commit
7ad47875b6
2 changed files with 5 additions and 1 deletions
|
@ -64,6 +64,7 @@ class Emulator {
|
||||||
Emulator();
|
Emulator();
|
||||||
~Emulator();
|
~Emulator();
|
||||||
|
|
||||||
|
void stop();
|
||||||
void step();
|
void step();
|
||||||
void render();
|
void render();
|
||||||
void reset();
|
void reset();
|
||||||
|
|
|
@ -59,7 +59,7 @@ Emulator::Emulator() : kernel(cpu, memory, gpu), cpu(memory, kernel), gpu(memory
|
||||||
|
|
||||||
Emulator::~Emulator() { config.save(std::filesystem::current_path() / "config.toml"); }
|
Emulator::~Emulator() { config.save(std::filesystem::current_path() / "config.toml"); }
|
||||||
|
|
||||||
void Emulator::reset() {
|
void Emulator::stop() {
|
||||||
cpu.reset();
|
cpu.reset();
|
||||||
gpu.reset();
|
gpu.reset();
|
||||||
memory.reset();
|
memory.reset();
|
||||||
|
@ -69,7 +69,9 @@ void Emulator::reset() {
|
||||||
// Reloading r13 and r15 needs to happen after everything has been reset
|
// Reloading r13 and r15 needs to happen after everything has been reset
|
||||||
// Otherwise resetting the kernel or cpu might nuke them
|
// Otherwise resetting the kernel or cpu might nuke them
|
||||||
cpu.setReg(13, VirtualAddrs::StackTop); // Set initial SP
|
cpu.setReg(13, VirtualAddrs::StackTop); // Set initial SP
|
||||||
|
}
|
||||||
|
|
||||||
|
void Emulator::reset() {
|
||||||
// If a ROM is active and we reset, reload it. This is necessary to set up stack, executable memory, .data/.rodata/.bss all over again
|
// If a ROM is active and we reset, reload it. This is necessary to set up stack, executable memory, .data/.rodata/.bss all over again
|
||||||
if (romType != ROMType::None && romPath.has_value()) {
|
if (romType != ROMType::None && romPath.has_value()) {
|
||||||
bool success = loadROM(romPath.value());
|
bool success = loadROM(romPath.value());
|
||||||
|
@ -328,6 +330,7 @@ void Emulator::run() {
|
||||||
void Emulator::runFrame() { cpu.runFrame(); }
|
void Emulator::runFrame() { cpu.runFrame(); }
|
||||||
|
|
||||||
bool Emulator::loadROM(const std::filesystem::path& path) {
|
bool Emulator::loadROM(const std::filesystem::path& path) {
|
||||||
|
stop();
|
||||||
// Get path for saving files (AppData on Windows, /home/user/.local/share/ApplcationName on Linux, etc)
|
// Get path for saving files (AppData on Windows, /home/user/.local/share/ApplcationName on Linux, etc)
|
||||||
// Inside that path, we be use a game-specific folder as well. Eg if we were loading a ROM called PenguinDemo.3ds, the savedata would be in
|
// Inside that path, we be use a game-specific folder as well. Eg if we were loading a ROM called PenguinDemo.3ds, the savedata would be in
|
||||||
// %APPDATA%/Alber/PenguinDemo/SaveData on Windows, and so on. We do this because games save data in their own filesystem on the cart
|
// %APPDATA%/Alber/PenguinDemo/SaveData on Windows, and so on. We do this because games save data in their own filesystem on the cart
|
||||||
|
|
Loading…
Add table
Reference in a new issue