diff --git a/README.md b/README.md index 8dd4515..911a0f3 100644 --- a/README.md +++ b/README.md @@ -18,5 +18,5 @@ Repository for emulation of old game systems and other old computing systems - [x] Create link to recordings folder - [ ] Slow motion - [x] Rom ranking system -- [ ] Game genie code support +- [x] Game genie code support - [x] Full screen support diff --git a/nes/rust/src/cartridge.rs b/nes/rust/src/cartridge.rs index 7d3c9a0..fe4b432 100644 --- a/nes/rust/src/cartridge.rs +++ b/nes/rust/src/cartridge.rs @@ -56,11 +56,23 @@ trait NesMapperTrait { for code in &cart.volatile.genie { if code.address() == addr { if let Some(check) = code.check() { - if a == Some(check) { - a = Some(code.value()); + let lv = self.memory_cycle_dump(cart, addr ^ 0x8000); + if let Some(lv) = lv { + if a == Some(check) { + a = Some(lv & code.value()); + } + } else { + if a == Some(check) { + a = Some(code.value()); + } } } else { - a = Some(code.value()); + let lv = self.memory_cycle_dump(cart, addr ^ 0x8000); + if let Some(lv) = lv { + a = Some(lv & code.value()); + } else { + a = Some(code.value()); + } } } } diff --git a/nes/rust/src/windows/genie.rs b/nes/rust/src/windows/genie.rs index d78d820..2658a5d 100644 --- a/nes/rust/src/windows/genie.rs +++ b/nes/rust/src/windows/genie.rs @@ -77,6 +77,10 @@ impl TrackedWindow for Window { if let Some(code) = delete { cart.cartridge_volatile_mut().remove_code(&code); } + if cart.cartridge().volatile.genie.len() > 0 { + ui.separator(); + } + ui.label("Enter game genie code"); ui.text_edit_singleline(&mut self.code); if let Ok(v) = crate::genie::GameGenieCode::from_str(&self.code) { if ui.button("Add game genie code").clicked() {