1
0
mirror of https://github.com/simh/simh.git synced 2026-03-03 18:16:24 +00:00

DUP: Modem change bits

The modem change bits are specified to:
  o Reset when RXCSR is read, on bus init and device reset.
  o Set when modem signals change

This corrects the implementation.  Previously, the change bits were both set and cleared whenever modem status was polled, which happens every dup_svc poll.
This commit is contained in:
Timothe Litt
2013-07-10 12:58:46 -04:00
parent 6998276aec
commit 06ec621754

View File

@@ -469,6 +469,7 @@ switch ((PA >> 1) & 03) { /* case on PA<2:1> */
case 00: /* RXCSR */
dup_get_modem (dup);
*data = dup_rxcsr[dup];
dup_rxcsr[dup] &= ~(RXCSR_M_DSCHNG|RXCSR_M_BDATSET);
break;
case 01: /* RXDBUF */
@@ -596,6 +597,7 @@ static t_stat dup_get_modem (int32 dup)
int32 modem_bits;
int32 old_rxcsr_a_modem_bits, new_rxcsr_a_modem_bits, old_rxcsr_b_modem_bits, new_rxcsr_b_modem_bits;
TMLN *lp = &dup_desc.ldsc[dup];
t_bool new_modem_change = FALSE;
old_rxcsr_a_modem_bits = dup_rxcsr[dup] & RXCSR_A_MODEM_BITS;
old_rxcsr_b_modem_bits = dup_rxcsr[dup] & RXCSR_B_MODEM_BITS;
@@ -606,17 +608,15 @@ new_rxcsr_a_modem_bits = (((modem_bits & TMXR_MDM_RNG) ? RXCSR_M_RING : 0) |
new_rxcsr_b_modem_bits = ((modem_bits & TMXR_MDM_DSR) ? RXCSR_M_DSR : 0);
dup_rxcsr[dup] &= ~(RXCSR_A_MODEM_BITS | RXCSR_B_MODEM_BITS);
dup_rxcsr[dup] |= new_rxcsr_a_modem_bits | new_rxcsr_b_modem_bits;
if (old_rxcsr_a_modem_bits != new_rxcsr_a_modem_bits)
if (old_rxcsr_a_modem_bits != new_rxcsr_a_modem_bits) {
dup_rxcsr[dup] |= RXCSR_M_DSCHNG;
else
dup_rxcsr[dup] &= ~RXCSR_M_DSCHNG;
if (old_rxcsr_b_modem_bits != new_rxcsr_b_modem_bits)
new_modem_change = TRUE;
}
if (old_rxcsr_b_modem_bits != new_rxcsr_b_modem_bits) {
dup_rxcsr[dup] |= RXCSR_M_BDATSET;
else
dup_rxcsr[dup] &= ~RXCSR_M_BDATSET;
if (dup_modem_change_callback[dup] &&
((dup_rxcsr[dup] & RXCSR_M_DSCHNG) ||
(dup_rxcsr[dup] & RXCSR_M_BDATSET)))
new_modem_change = TRUE;
}
if (dup_modem_change_callback[dup] && new_modem_change)
dup_modem_change_callback[dup](dup);
if ((dup_rxcsr[dup] & RXCSR_M_DSCHNG) &&
(dup_rxcsr[dup] & RXCSR_M_DSCIE))