summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Mark Garlanger <mgarlanger@users.noreply.github.com>2025-08-31 18:58:57 -0500
committer GitHub <noreply@github.com>2025-09-01 01:58:57 +0200
commitc346566cd8d85e3cf070674cc2839aecc7fff3e3 (patch)
tree5ba1fcfbbfed1ac5095115bf5e847e882db2dcf9
parent5514fe64de1b01ae5c2c476abacf57e594aa0335 (diff)
diserial.cpp: Avoid updating data frame if nothing changed (#14105)
-rw-r--r--src/emu/diserial.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/emu/diserial.cpp b/src/emu/diserial.cpp
index 839417a8188..eb50741eb5a 100644
--- a/src/emu/diserial.cpp
+++ b/src/emu/diserial.cpp
@@ -154,6 +154,10 @@ void device_serial_interface::set_data_frame(int start_bit_count, int data_bit_c
{
LOGMASKED(LOG_SETUP, "Start bits: %d; Data bits: %d; Parity: %s; Stop bits: %s\n", start_bit_count, data_bit_count, parity_tostring(parity), stop_bits_tostring(stop_bits));
+ bool df_changed = (start_bit_count != m_df_start_bit_count) || (data_bit_count != m_df_word_length) || (parity != m_df_parity);
+ u8 orig_stop_bit_count = m_df_stop_bit_count;
+ u8 orig_min_rx_stop_bit_count = m_df_min_rx_stop_bit_count;
+
m_df_word_length = data_bit_count;
switch (stop_bits)
@@ -180,6 +184,15 @@ void device_serial_interface::set_data_frame(int start_bit_count, int data_bit_c
break;
}
+ df_changed |= (m_df_stop_bit_count != orig_stop_bit_count) || (m_df_min_rx_stop_bit_count != orig_min_rx_stop_bit_count);
+
+ if (!df_changed)
+ {
+ LOGMASKED(LOG_SETUP, "No change to data frame, skipping\n");
+
+ return;
+ }
+
m_df_parity = parity;
m_df_start_bit_count = start_bit_count;