From 2f03b015f18c572759928af68fd5fea3d582a34d Mon Sep 17 00:00:00 2001 From: Kevin Hamacher Date: Sun, 16 Feb 2020 20:53:25 +0100 Subject: [PATCH] Small performance improvements --- src/display.rs | 3 --- src/sound/mod.rs | 37 +++++++++++++++++++------------------ src/sound/square.rs | 8 ++++---- src/sound/wave.rs | 1 - 4 files changed, 23 insertions(+), 26 deletions(-) diff --git a/src/display.rs b/src/display.rs index 173d4fb..92a9876 100644 --- a/src/display.rs +++ b/src/display.rs @@ -459,9 +459,6 @@ impl Display { // We need to draw this. let wide_mode = self.control & CTRL_BG_SPRITE_SIZE > 0; - if wide_mode { - // panic!("TODO"); - } let limit = match wide_mode { true => 16, false => 8, diff --git a/src/sound/mod.rs b/src/sound/mod.rs index 4a341a6..ae42434 100644 --- a/src/sound/mod.rs +++ b/src/sound/mod.rs @@ -371,27 +371,28 @@ impl SoundManager { let mut counter = 0; while !*do_exit.lock().unwrap() { - let (s1, s2) = { - let mut c_obj = obj.lock().unwrap(); + for _ in 0..100 { + let (s1, s2) = { + let mut c_obj = obj.lock().unwrap(); - // Check for 512 Hz timer - if counter >= (OUTPUT_SAMPLE_RATE / 512) { - c_obj.clock(); - counter = 0; - } else { - counter += 1; - } + // Check for 512 Hz timer + if counter >= (OUTPUT_SAMPLE_RATE / 512) { + c_obj.clock(); + counter = 0; + } else { + counter += 1; + } - // Sample clock - c_obj.sample_clock(); + // Sample clock + c_obj.sample_clock(); - // Get sample - c_obj.sample() - }; - let samps = [[s1, s2]]; - //let samps = [[0f32, 0f32]]; - // No sleep needed, it seems like the playback.write is blocking - playback.write(&samps[..]); + // Get sample + c_obj.sample() + }; + let samps = [[s1, s2]]; + playback.write(&samps[..]); + } + std::thread::sleep(std::time::Duration::from_millis(1)); } }) .unwrap(), diff --git a/src/sound/square.rs b/src/sound/square.rs index 8c4962a..d56684b 100644 --- a/src/sound/square.rs +++ b/src/sound/square.rs @@ -59,17 +59,17 @@ impl SquareWaveGenerator { // 0: Addition (frequency increases) // 1: Subtraction (frequency decreases) //Bit 2-0 - Number of sweep shift (n: 0-7) - self.sweep_change_period = (reg >> 4) & 7; + self.sweep_change_period = (reg >> 4) & 0b0111; self.sweep_dec = reg & (1 << 3) > 0; - self.sweep_change = reg & 7; + self.sweep_change = reg & 0b111; self.sweep_clock = 0; } pub fn sweep_clock(&mut self) { // This should be sampled at 128Hz - if self.sweep_change_period > 0 + if self.sweep_change_period > 0 // enabled && self.sweep_clock >= self.sweep_change_period - && self.sweep_change > 0 + // sweep time hit { self.sweep_clock = 0; let change = self.frequency / (2f32.powi(self.sweep_change as _)); diff --git a/src/sound/wave.rs b/src/sound/wave.rs index 7895e48..d75f195 100644 --- a/src/sound/wave.rs +++ b/src/sound/wave.rs @@ -41,7 +41,6 @@ impl WaveGenerator { fn update_frequency(&mut self) { self.frequency = ((2048 - self.gb_reg_freq) * 2) as _; self.time = 0f32; - println!("Freq = {}", self.frequency); } pub fn set_lower_freq(&mut self, freq: u8) {