Compare commits
3 Commits
9973dc8714
...
db012c7f4b
Author | SHA1 | Date |
---|---|---|
Rekai Nyangadzayi Musuka | db012c7f4b | |
Rekai Nyangadzayi Musuka | e42c87aeb7 | |
Rekai Nyangadzayi Musuka | 9113e95fa0 |
35
src/apu.rs
35
src/apu.rs
|
@ -468,22 +468,8 @@ impl Channel1 {
|
|||
|
||||
// If this bit is set, a trigger event occurs
|
||||
if self.freq_hi.initial() {
|
||||
// Envelope Behaviour during trigger event
|
||||
self.period_timer = self.envelope.period();
|
||||
self.current_volume = self.envelope.init_vol();
|
||||
|
||||
// Sweep behaviour during trigger event
|
||||
let sweep_period = self.sweep.period();
|
||||
let sweep_shift = self.sweep.shift_count();
|
||||
self.shadow_freq = self.frequency();
|
||||
self.sweep_timer = if sweep_period == 0 { 8 } else { sweep_period };
|
||||
|
||||
if sweep_period != 0 || sweep_shift != 0 {
|
||||
self.sweep_enabled = true;
|
||||
}
|
||||
|
||||
if sweep_shift != 0 {
|
||||
let _ = self.calc_sweep_freq();
|
||||
if self.is_dac_enabled() {
|
||||
self.enabled = true;
|
||||
}
|
||||
|
||||
// Length behaviour during trigger event
|
||||
|
@ -491,8 +477,21 @@ impl Channel1 {
|
|||
self.length_timer = 64;
|
||||
}
|
||||
|
||||
if self.is_dac_enabled() {
|
||||
self.enabled = true;
|
||||
// Envelope Behaviour during trigger event
|
||||
self.period_timer = self.envelope.period();
|
||||
self.current_volume = self.envelope.init_vol();
|
||||
|
||||
// Sweep behaviour during trigger event
|
||||
let sweep_period = self.sweep.period();
|
||||
let sweep_shift = self.sweep.shift_count();
|
||||
|
||||
self.shadow_freq = self.frequency();
|
||||
self.sweep_timer = if sweep_period == 0 { 8 } else { sweep_period };
|
||||
|
||||
self.sweep_enabled = sweep_period != 0 || sweep_shift != 0;
|
||||
|
||||
if sweep_shift != 0 {
|
||||
let _ = self.calc_sweep_freq();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
14
src/main.rs
14
src/main.rs
|
@ -4,7 +4,6 @@ use gb::{AudioSPSC, Cycle, GB_HEIGHT, GB_WIDTH};
|
|||
use gilrs::Gilrs;
|
||||
use pixels::{PixelsBuilder, SurfaceTexture};
|
||||
use rodio::{OutputStream, Sink};
|
||||
use std::time::{Duration, Instant};
|
||||
use winit::dpi::LogicalSize;
|
||||
use winit::event::{Event, VirtualKeyCode};
|
||||
use winit::event_loop::{ControlFlow, EventLoop};
|
||||
|
@ -71,6 +70,7 @@ fn main() -> Result<()> {
|
|||
let (prod, cons) = spsc.init();
|
||||
let sink = Sink::try_new(&stream_handle)?;
|
||||
sink.append(cons);
|
||||
sink.set_volume(0.1); // TODO: Is this the right way to go about this?
|
||||
game_boy.apu_mut().attach_producer(prod);
|
||||
|
||||
std::thread::spawn(move || {
|
||||
|
@ -78,8 +78,6 @@ fn main() -> Result<()> {
|
|||
});
|
||||
}
|
||||
|
||||
let mut start = Instant::now();
|
||||
let frame_time = Duration::from_secs_f64(1.0 / 59.73); // 59.73 Hz on Host
|
||||
let mut cycle_count: Cycle = Default::default();
|
||||
|
||||
event_loop.run(move |event, _, control_flow| {
|
||||
|
@ -104,15 +102,7 @@ fn main() -> Result<()> {
|
|||
pixels.resize_surface(size.width, size.height);
|
||||
}
|
||||
|
||||
let mut diff = Instant::now() - start;
|
||||
while diff.subsec_nanos() < frame_time.subsec_nanos() {
|
||||
if cycle_count < gb::emu::CYCLES_IN_FRAME {
|
||||
cycle_count += gb::emu::run_frame(&mut game_boy, &mut gamepad, &input);
|
||||
}
|
||||
|
||||
diff = Instant::now() - start;
|
||||
}
|
||||
start = Instant::now();
|
||||
cycle_count += gb::emu::run_frame(&mut game_boy, &mut gamepad, &input);
|
||||
|
||||
if cycle_count >= gb::emu::CYCLES_IN_FRAME {
|
||||
cycle_count %= gb::emu::CYCLES_IN_FRAME;
|
||||
|
|
Loading…
Reference in New Issue