From 957262ff7ecb3d2581c7d3b8a0501e64067e9ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Wed, 22 Mar 2023 22:29:20 +0000 Subject: [PATCH] feat: reset support for SDL frontend --- frontends/sdl/src/main.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/frontends/sdl/src/main.rs b/frontends/sdl/src/main.rs index d3ff65da..17e35639 100644 --- a/frontends/sdl/src/main.rs +++ b/frontends/sdl/src/main.rs @@ -47,6 +47,7 @@ pub struct Emulator { graphics: Option<Graphics>, audio: Option<Audio>, title: &'static str, + rom_path: String, logic_frequency: u32, visual_frequency: f32, next_tick_time: f32, @@ -63,6 +64,7 @@ impl Emulator { graphics: None, audio: None, title: TITLE, + rom_path: String::from("invalid"), logic_frequency: GameBoy::CPU_FREQ, visual_frequency: GameBoy::VISUAL_FREQ, next_tick_time: 0.0, @@ -163,8 +165,9 @@ impl Emulator { self.audio = Some(Audio::new(sdl)); } - pub fn load_rom(&mut self, path: &str) { - let rom = self.system.load_rom_file(path); + pub fn load_rom(&mut self, path: Option<&str>) { + let path_res = path.unwrap_or(&self.rom_path); + let rom = self.system.load_rom_file(path_res); println!( "========= Cartridge =========\n{}\n=============================", rom @@ -175,6 +178,13 @@ impl Emulator { .window_mut() .set_title(format!("{} [{}]", self.title, rom.title()).as_str()) .unwrap(); + self.rom_path = String::from(path_res); + } + + pub fn reset(&mut self) { + self.system.reset(); + self.system.load_boot_default(); + self.load_rom(None); } pub fn benchmark(&mut self, params: Benchmark) { @@ -262,6 +272,10 @@ impl Emulator { keycode: Some(Keycode::Escape), .. } => break 'main, + Event::KeyDown { + keycode: Some(Keycode::R), + .. + } => self.reset(), Event::KeyDown { keycode: Some(Keycode::B), .. @@ -301,7 +315,7 @@ impl Emulator { Event::DropFile { filename, .. } => { self.system.reset(); self.system.load_boot_default(); - self.load_rom(&filename); + self.load_rom(Some(&filename)); } _ => (), } @@ -437,7 +451,7 @@ fn main() { // ROM file and starts running it let mut emulator = Emulator::new(game_boy); emulator.start(SCREEN_SCALE); - emulator.load_rom("../../res/roms/pocket.gb"); + emulator.load_rom(Some("../../res/roms/pocket.gb")); emulator.toggle_palette(); emulator.run(); } -- GitLab