From 1318adaafb9c3588664dbabf2d44544c9144667a Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Fri, 6 Oct 2023 20:30:49 -0600 Subject: [PATCH] only once --- src/device/vi.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/device/vi.rs b/src/device/vi.rs index 5f8864a..c140a58 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -92,20 +92,26 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u match reg as u32 { VI_CURRENT_REG => device::mi::clear_rcp_interrupt(device, device::mi::MI_INTR_VI), VI_V_INTR_REG => { - device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); - set_vertical_interrupt(device); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + if device.vi.regs[reg as usize] != value & mask { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + set_vertical_interrupt(device); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } } VI_V_SYNC_REG => { - device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); - set_vertical_interrupt(device); - set_expected_refresh_rate(device); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + if device.vi.regs[reg as usize] != value & mask { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + set_vertical_interrupt(device); + set_expected_refresh_rate(device); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } } VI_H_SYNC_REG => { - device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); - set_expected_refresh_rate(device); - ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + if device.vi.regs[reg as usize] != value & mask { + device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask); + set_expected_refresh_rate(device); + ui::video::set_register(reg as u32, device.vi.regs[reg as usize]) + } } _ => { device::memory::masked_write_32(&mut device.vi.regs[reg as usize], value, mask);