mirror of
https://github.com/FranLMSP/snes.git
synced 2026-01-01 07:21:35 -05:00
refactor frame loop
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user