From 442cf5748b5d421250415c49ffdfe508c6629e68 Mon Sep 17 00:00:00 2001 From: Franco Colmenarez Date: Wed, 6 Nov 2024 21:22:13 -0500 Subject: [PATCH] Restart emulation as soon as a ROM is loaded --- snes-core/src/emulator.rs | 7 ++++++- snes-frontend/src/emu_ui/debug/cpu.rs | 2 +- snes-frontend/src/emu_ui/menu.rs | 10 ++++++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/snes-core/src/emulator.rs b/snes-core/src/emulator.rs index edf9040..3f7709d 100644 --- a/snes-core/src/emulator.rs +++ b/snes-core/src/emulator.rs @@ -34,9 +34,14 @@ impl Emulator { } } - pub fn reset(&mut self) { + pub fn reset_vector(&mut self) { self.cpu.reset_vector(&mut self.bus); } + + pub fn hard_reset(&mut self) { + self.cpu = CPU::new(); + self.bus = Bus::new(); + } } impl Default for Emulator { diff --git a/snes-frontend/src/emu_ui/debug/cpu.rs b/snes-frontend/src/emu_ui/debug/cpu.rs index d1923d3..a8a0020 100644 --- a/snes-frontend/src/emu_ui/debug/cpu.rs +++ b/snes-frontend/src/emu_ui/debug/cpu.rs @@ -34,7 +34,7 @@ pub fn build_cpu_debug_controls(ctx: &egui::Context, cpu_debug_options: &mut CPU ui.monospace("Vectors:"); ui.horizontal(|ui| { if ui.button("Reset").clicked() { - emulator.reset(); + emulator.reset_vector(); } }); ui.separator(); diff --git a/snes-frontend/src/emu_ui/menu.rs b/snes-frontend/src/emu_ui/menu.rs index 989e370..99dd335 100644 --- a/snes-frontend/src/emu_ui/menu.rs +++ b/snes-frontend/src/emu_ui/menu.rs @@ -11,9 +11,15 @@ pub fn build_menu_bar(emulator: &mut Emulator, ui: &mut egui::Ui, state: &mut Ap if let Some(path) = rfd::FileDialog::new().pick_file() { let picked_path = path.display().to_string(); match emulator.bus.rom.load(&picked_path) { - Ok(_) => println!("Loaded ROM"), + Ok(_) => { + emulator.hard_reset(); + state.emulation_state.is_paused = false; + state.emulation_state.one_tick_per_frame = false; + emulator.reset_vector(); + println!("Loaded ROM"); + }, Err(err) => println!("Error loading the ROM: {}", err), - } + }; } } });