diff --git a/src/cheats/genie.rs b/src/cheats/genie.rs index 369b37e3cb74ddc8f0fbca5bf5a2d81d31173e37..3501f77000e77d71d58672db4bb3f23c9de3e72b 100644 --- a/src/cheats/genie.rs +++ b/src/cheats/genie.rs @@ -41,18 +41,18 @@ impl GameGenie { self.codes.contains_key(&addr) } - pub fn get_addr(&self, addr: u16) -> &GameGenieCode { - self.codes.get(&addr).unwrap() + pub fn get_addr(&self, addr: u16) -> Result<&GameGenieCode, String> { + match self.codes.get(&addr) { + Some(code) => Ok(code), + None => Err(format!("Invalid address: {}", addr)), + } } pub fn add_code(&mut self, code: &str) -> Result<&GameGenieCode, String> { - let genie_code = match GameGenieCode::from_code(code, None) { - Ok(genie_code) => genie_code, - Err(message) => return Err(message), - }; + let genie_code = GameGenieCode::from_code(code, None)?; let addr = genie_code.addr; self.codes.insert(addr, genie_code); - Ok(self.get_addr(addr)) + self.get_addr(addr) } } diff --git a/src/cheats/shark.rs b/src/cheats/shark.rs index 565b3b814ff96e49f644220221a155872a709001..5d19a2c788dd83bd7defc94287dffaa4edf318a5 100644 --- a/src/cheats/shark.rs +++ b/src/cheats/shark.rs @@ -48,18 +48,18 @@ impl GameShark { self.codes.clear(); } - pub fn get_addr(&self, addr: u16) -> &GameSharkCode { - self.codes.get(&addr).unwrap() + pub fn get_addr(&self, addr: u16) -> Result<&GameSharkCode, String> { + match self.codes.get(&addr) { + Some(code) => Ok(code), + None => Err(format!("Invalid address: {}", addr)), + } } pub fn add_code(&mut self, code: &str) -> Result<&GameSharkCode, String> { - let genie_code = match GameSharkCode::from_code(code, &self.rom_type) { - Ok(genie_code) => genie_code, - Err(message) => return Err(message), - }; - let addr = genie_code.addr; - self.codes.insert(addr, genie_code); - Ok(self.get_addr(addr)) + let shark_code = GameSharkCode::from_code(code, &self.rom_type)?; + let addr = shark_code.addr; + self.codes.insert(addr, shark_code); + self.get_addr(addr) } pub fn writes(&self) -> Vec<(u16, u16, u8)> { @@ -89,7 +89,7 @@ impl Default for GameShark { #[derive(Clone)] pub struct GameSharkCode { - /// The Game Genie code that is going to be applied to the ROM. + /// The GameShark code that is going to be applied to the ROM. code: String, /// The RAM bank that the cheat code is going to be applied to, diff --git a/src/rom.rs b/src/rom.rs index 1a53b4f29e3ab2384bdbcb34a2052060388d50f6..c2120006dd1c3c3e28a26c0fb72a2638f4d3fa1f 100644 --- a/src/rom.rs +++ b/src/rom.rs @@ -1023,7 +1023,7 @@ pub static GAME_GENIE: Mbc = Mbc { // retrieves the Game Genie code that matches the current address // keep in mind that this assumes that no more that one code is // registered for the same memory address - let genie_code = game_genie.get_addr(addr); + let genie_code = game_genie.get_addr(addr).unwrap(); // obtains the current byte that is stored at the address using // the MBC, this value will probably be patched