refactor frame loop

This commit is contained in:
2023-07-09 12:40:52 -05:00
parent a68a4b1764
commit 85f41b872d
2 changed files with 12 additions and 15 deletions

View File

@@ -25,12 +25,17 @@ impl Emulator {
self.cpu.cycles = 0;
}
pub fn is_frame_ending(&self) -> bool {
self.bus.ppu.registers.v_count == 0
}
pub fn is_frame_starting(&self) -> bool {
self.bus.ppu.registers.v_count == 1
pub fn loop_frame(&mut self) {
let mut frame_started = true;
loop {
self.tick();
if !frame_started && self.bus.ppu.registers.v_count == 260 {
break;
}
if self.bus.ppu.registers.v_count >= 261 {
frame_started = false;
}
}
}
pub fn reset(&mut self) {

View File

@@ -450,15 +450,7 @@ fn main() {
// Actually run the emulation
if !state.emulation.is_paused {
// We want to keep the emulator running
// as long as we are not at the end of the frame
while !emulator.is_frame_ending() {
emulator.tick()
}
// It takes some amount of cycles to get out of 0 v-count
while !emulator.is_frame_starting() {
emulator.tick()
}
emulator.loop_frame();
}
// Render emulator framebuffer