39 lines
1.6 KiB
Diff
39 lines
1.6 KiB
Diff
--- a/src/devices/machine/z80scc.cpp
|
|
+++ b/src/devices/machine/z80scc.cpp
|
|
@@ -1045,7 +1045,18 @@
|
|
|
|
m_uart->m_wr0_ptrbits = 0;
|
|
|
|
- m_rx_fifo_sz = (m_uart->m_variant & z80scc_device::SET_ESCC) ? 8 : 3;
|
|
+ // RetroNet patch: see z80scc.h. JOEY_Z80SCC_RX_FIFO=N sets the depth, clamped to 3..512
|
|
+ // (3 = real Z8530; an ESCC keeps at least its real 8). Unset, it is the whole 512.
|
|
+ m_rx_fifo_sz = std::size(m_rx_data_fifo);
|
|
+ if (char const *const depth = osd_getenv("JOEY_Z80SCC_RX_FIFO"); depth && *depth)
|
|
+ {
|
|
+ m_rx_fifo_sz = std::clamp(atoi(depth), 3, m_rx_fifo_sz);
|
|
+ if (m_uart->m_variant & z80scc_device::SET_ESCC)
|
|
+ {
|
|
+ m_rx_fifo_sz = std::max(m_rx_fifo_sz, 8);
|
|
+ }
|
|
+ osd_printf_info("%s: RX FIFO depth %d (JOEY_Z80SCC_RX_FIFO)\n", tag(), m_rx_fifo_sz);
|
|
+ }
|
|
|
|
m_tx_fifo_sz = (m_uart->m_variant & z80scc_device::SET_ESCC) ? 4 : 1;
|
|
|
|
--- a/src/devices/machine/z80scc.h
|
|
+++ b/src/devices/machine/z80scc.h
|
|
@@ -256,8 +256,12 @@
|
|
unsigned int m_delayed_tx_brg_change;
|
|
|
|
// receiver state
|
|
- uint8_t m_rx_data_fifo[8]; // receive data FIFO
|
|
- uint8_t m_rx_error_fifo[8]; // receive error FIFO
|
|
+ // RetroNet patch: widened from 8 so a POLLED receiver (no RX interrupt) survives its deaf
|
|
+ // windows under emulation. The depth in use is m_rx_fifo_sz: all 512 unless the
|
|
+ // JOEY_Z80SCC_RX_FIFO environment variable sets it (3 = real silicon, where clients need
|
|
+ // interrupt RX). See device_start().
|
|
+ uint8_t m_rx_data_fifo[512]; // receive data FIFO
|
|
+ uint8_t m_rx_error_fifo[512]; // receive error FIFO
|
|
uint8_t m_rx_error; // current receive error
|
|
//int m_rx_fifo // receive FIFO pointer
|
|
int m_rx_fifo_rp; // receive FIFO read pointer
|