diff --git a/src/cpu.rs b/src/cpu.rs index 2f466c6..7c2ba9c 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -55,6 +55,8 @@ pub struct CPU { sound: f64, // I/O keys: [bool; 16], + /// Set to the last key that's been *released* after a keypause + pub lastkey: Option, // Execution data cycle: usize, breakpoints: Vec, @@ -163,7 +165,7 @@ impl CPU { if *keyref { *keyref = false; if self.flags.keypause { - self.flags.lastkey = Some(key); + self.lastkey = Some(key); self.flags.keypause = false; } return Ok(true); @@ -306,7 +308,6 @@ impl CPU { keypause: false, draw_wait: false, draw_mode: false, - lastkey: None, ..self.flags }; // clear the stack @@ -320,6 +321,7 @@ impl CPU { self.sound = 0.0; // I/O self.keys = [false; 16]; + self.lastkey = None; // Execution data self.cycle = 0; } @@ -610,6 +612,7 @@ impl Default for CPU { sound: 0.0, cycle: 0, keys: [false; 16], + lastkey: None, flags: Flags { debug: true, ..Default::default() diff --git a/src/cpu/behavior.rs b/src/cpu/behavior.rs index 99e54c5..ae9cb16 100644 --- a/src/cpu/behavior.rs +++ b/src/cpu/behavior.rs @@ -528,9 +528,9 @@ impl CPU { /// |`Fx0A`| Wait for key, then vX = K #[inline(always)] pub(super) fn wait_for_key(&mut self, x: Reg) { - if let Some(key) = self.flags.lastkey { + if let Some(key) = self.lastkey { self.v[x] = key as u8; - self.flags.lastkey = None; + self.lastkey = None; } else { self.pc = self.pc.wrapping_sub(2); self.flags.keypause = true; diff --git a/src/cpu/flags.rs b/src/cpu/flags.rs index 97e53a9..7bb1fd5 100644 --- a/src/cpu/flags.rs +++ b/src/cpu/flags.rs @@ -19,8 +19,6 @@ pub struct Flags { pub draw_wait: bool, /// Set when the emulator is in high-res mode pub draw_mode: bool, - /// Set to the last key that's been *released* after a keypause - pub lastkey: Option, /// Represents the current emulator [Mode] pub mode: Mode, /// Represents the set of emulator [Quirks] to enable, independent of the [Mode] diff --git a/src/cpu/tests.rs b/src/cpu/tests.rs index 8c16110..e7f9a80 100644 --- a/src/cpu/tests.rs +++ b/src/cpu/tests.rs @@ -861,7 +861,7 @@ mod io { assert!(cpu.release(key).expect("Key should be released")); assert!(!cpu.release(key).expect("Key shouldn't be released again")); assert!(!cpu.flags.keypause); - assert_eq!(Some(key), cpu.flags.lastkey); + assert_eq!(Some(key), cpu.lastkey); cpu.wait_for_key(x); assert_eq!(key as u8, cpu.v[x]); } diff --git a/tests/integration.rs b/tests/integration.rs index 2d158fe..ad46355 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -133,7 +133,6 @@ mod cpu { pause: false, keypause: false, draw_wait: false, - lastkey: None, monotonic: None, ..Default::default() };