From 6ee55ce4ca9af754fa97b40f65f65445f62376c5 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 12 Feb 2025 17:53:17 +0100 Subject: [PATCH] add a way to show internal FPS (#244) --- src/device.rs | 2 ++ src/device/vi.rs | 39 ++++++++++++++++++--------------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/device.rs b/src/device.rs index 46aaef6..5f98d9b 100644 --- a/src/device.rs +++ b/src/device.rs @@ -436,6 +436,8 @@ impl Device { count_per_scanline: 0, limiter: None, vi_counter: 0, + last_origin: 0, + internal_frame_counter: 0, }, vru_window: controller::vru::VruWindow { window_notifier: None, diff --git a/src/device/vi.rs b/src/device/vi.rs index cb884b1..16ca49f 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -2,7 +2,7 @@ use crate::{device, netplay, ui}; use governor::clock::Clock; const VI_STATUS_REG: u32 = 0; -//const VI_ORIGIN_REG: u32 = 1; +const VI_ORIGIN_REG: u32 = 1; //const VI_WIDTH_REG: u32 = 2; //const VI_V_INTR_REG: u32 = 3; const VI_CURRENT_REG: u32 = 4; @@ -27,10 +27,10 @@ pub struct Vi { pub limiter: Option, pub count_per_scanline: u64, pub vi_counter: u64, + pub last_origin: u32, + pub internal_frame_counter: u64, } -//static mut FRAME_COUNTER: u64 = 0; - const LIMIT_BUFFER: u64 = 3; pub fn set_expected_refresh_rate(device: &mut device::Device) { @@ -109,6 +109,13 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u set_expected_refresh_rate(device); } } + VI_ORIGIN_REG => { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + if device.vi.regs[reg as usize] != device.vi.last_origin { + device.vi.last_origin = device.vi.regs[reg as usize]; + device.vi.internal_frame_counter += 1; + } + } _ => { device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); } @@ -120,12 +127,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { ui::video::update_screen(); ui::video::check_callback(device); - /* - unsafe { - FRAME_COUNTER += 1; - } - */ - let mut enable_speed_limiter = true; if device.netplay.is_some() { netplay::send_sync_check(device); @@ -137,6 +138,14 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { speed_limiter(device); } + /* + let vis = if device.cart.pal { 50 } else { 60 }; + if device.vi.vi_counter % vis == 0 { + println!("FPS: {}", device.vi.internal_frame_counter); + device.vi.internal_frame_counter = 0; + } + */ + /* toggle vi field if in interlaced mode */ device.vi.field ^= (device.vi.regs[VI_STATUS_REG as usize] >> 6) & 0x1; @@ -155,18 +164,6 @@ pub fn init(device: &mut device::Device) { } else { device.vi.clock = 48681812 } - /* - std::thread::spawn(move || { - let mut last_count = 0; - loop { - unsafe { - println!("{:?}", FRAME_COUNTER - last_count); - last_count = FRAME_COUNTER; - } - std::thread::sleep(std::time::Duration::from_secs(1)); - } - }); - */ } fn speed_limiter(device: &device::Device) {