PDP11 & Unibus VAX, PDP10: Fix DUP device support for use by internal KMC for TOPS-20
This fixes a regression caused by commit b41acb3
This commit is contained in:
parent
78f56b24f5
commit
6e0e5a714d
1 changed files with 10 additions and 3 deletions
|
@ -74,6 +74,7 @@ static uint16 dup_txdbuf[DUP_LINES];
|
||||||
static t_bool dup_W3[DUP_LINES];
|
static t_bool dup_W3[DUP_LINES];
|
||||||
static t_bool dup_W5[DUP_LINES];
|
static t_bool dup_W5[DUP_LINES];
|
||||||
static t_bool dup_W6[DUP_LINES];
|
static t_bool dup_W6[DUP_LINES];
|
||||||
|
static t_bool dup_kmc[DUP_LINES]; /* being used by a kmc or other internal simulator device */
|
||||||
static uint32 dup_rxi = 0; /* rcv interrupts */
|
static uint32 dup_rxi = 0; /* rcv interrupts */
|
||||||
static uint32 dup_txi = 0; /* xmt interrupts */
|
static uint32 dup_txi = 0; /* xmt interrupts */
|
||||||
static uint32 dup_wait[DUP_LINES]; /* rcv/xmt byte delay */
|
static uint32 dup_wait[DUP_LINES]; /* rcv/xmt byte delay */
|
||||||
|
@ -837,6 +838,7 @@ if (!protocol_DDCMP) {
|
||||||
if (crc_inhibit) {
|
if (crc_inhibit) {
|
||||||
return SCPE_ARG; /* Must enable CRC for DDCMP */
|
return SCPE_ARG; /* Must enable CRC for DDCMP */
|
||||||
}
|
}
|
||||||
|
dup_kmc[dup] = TRUE; /* remember we are being used by an internal simulator device */
|
||||||
/* These settings reflect how RSX operates a bare DUP when used for
|
/* These settings reflect how RSX operates a bare DUP when used for
|
||||||
DECnet communications */
|
DECnet communications */
|
||||||
dup_clear(dup, FALSE);
|
dup_clear(dup, FALSE);
|
||||||
|
@ -955,6 +957,8 @@ return SCPE_OK;
|
||||||
|
|
||||||
static t_stat dup_rcv_byte (int32 dup)
|
static t_stat dup_rcv_byte (int32 dup)
|
||||||
{
|
{
|
||||||
|
int32 crcoffset;
|
||||||
|
|
||||||
sim_debug (DBG_TRC, DUPDPTR, "dup_rcv_byte(dup=%d) - %s, byte %d of %d\n", dup,
|
sim_debug (DBG_TRC, DUPDPTR, "dup_rcv_byte(dup=%d) - %s, byte %d of %d\n", dup,
|
||||||
(dup_rxcsr[dup] & RXCSR_M_RCVEN) ? "enabled" : "disabled",
|
(dup_rxcsr[dup] & RXCSR_M_RCVEN) ? "enabled" : "disabled",
|
||||||
dup_rcvpkinoff[dup], dup_rcvpkbytes[dup]);
|
dup_rcvpkinoff[dup], dup_rcvpkbytes[dup]);
|
||||||
|
@ -966,13 +970,15 @@ if (dup_rcv_packet_data_callback[dup]) {
|
||||||
dup_rcv_packet_data_callback[dup](dup, dup_rcvpkbytes[dup]);
|
dup_rcv_packet_data_callback[dup](dup, dup_rcvpkbytes[dup]);
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
/* if we added trailing SYNs, don't include them in the CRC calc */
|
||||||
|
crcoffset = (dup_kmc[dup] ? 0 : TRAILING_SYNS);
|
||||||
dup_rxcsr[dup] |= RXCSR_M_RXACT;
|
dup_rxcsr[dup] |= RXCSR_M_RXACT;
|
||||||
dup_rxdbuf[dup] &= ~RXDBUF_M_RCRCER;
|
dup_rxdbuf[dup] &= ~RXDBUF_M_RCRCER;
|
||||||
dup_rxdbuf[dup] &= ~RXDBUF_M_RXDBUF;
|
dup_rxdbuf[dup] &= ~RXDBUF_M_RXDBUF;
|
||||||
dup_rxdbuf[dup] |= dup_rcvpacket[dup][dup_rcvpkinoff[dup]++];
|
dup_rxdbuf[dup] |= dup_rcvpacket[dup][dup_rcvpkinoff[dup]++];
|
||||||
dup_rxcsr[dup] |= RXCSR_M_RXDONE;
|
dup_rxcsr[dup] |= RXCSR_M_RXDONE;
|
||||||
if ( ((dup_rcvpkinoff[dup] == 8) ||
|
if ( ((dup_rcvpkinoff[dup] == 8) ||
|
||||||
(dup_rcvpkinoff[dup] >= dup_rcvpkbytes[dup]-TRAILING_SYNS)) && /* don't include trailing SYNs in CRC calc */
|
(dup_rcvpkinoff[dup] >= dup_rcvpkbytes[dup]-crcoffset)) &&
|
||||||
(0 == ddcmp_crc16 (0, dup_rcvpacket[dup], dup_rcvpkinoff[dup])))
|
(0 == ddcmp_crc16 (0, dup_rcvpacket[dup], dup_rcvpkinoff[dup])))
|
||||||
dup_rxdbuf[dup] |= RXDBUF_M_RCRCER;
|
dup_rxdbuf[dup] |= RXDBUF_M_RCRCER;
|
||||||
else
|
else
|
||||||
|
@ -1083,7 +1089,7 @@ for (dup=active=attached=0; dup < dup_desc.lines; dup++) {
|
||||||
}
|
}
|
||||||
memcpy (dup_rcvpacket[dup], buf, size);
|
memcpy (dup_rcvpacket[dup], buf, size);
|
||||||
dup_rcvpkbytes[dup] = size;
|
dup_rcvpkbytes[dup] = size;
|
||||||
if (dup_parcsr[dup] & PARCSR_M_DECMODE) {
|
if (!dup_kmc[dup] && (dup_parcsr[dup] & PARCSR_M_DECMODE)) {
|
||||||
memcpy(&(dup_rcvpacket[dup][size]), tsyns, TRAILING_SYNS);
|
memcpy(&(dup_rcvpacket[dup][size]), tsyns, TRAILING_SYNS);
|
||||||
dup_rcvpkbytes[dup] += TRAILING_SYNS ;
|
dup_rcvpkbytes[dup] += TRAILING_SYNS ;
|
||||||
}
|
}
|
||||||
|
@ -1235,11 +1241,12 @@ if (dup_ldsc == NULL) { /* First time startup */
|
||||||
++attached;
|
++attached;
|
||||||
}
|
}
|
||||||
dup_units[dup_desc.lines] = dup_poll_unit_template;
|
dup_units[dup_desc.lines] = dup_poll_unit_template;
|
||||||
/* Initialize to standard factory Option Jumper Settings */
|
/* Initialize to standard factory Option Jumper Settings and no associated KMC */
|
||||||
for (i = 0; i < DUP_LINES; i++) {
|
for (i = 0; i < DUP_LINES; i++) {
|
||||||
dup_W3[i] = TRUE;
|
dup_W3[i] = TRUE;
|
||||||
dup_W5[i] = FALSE;
|
dup_W5[i] = FALSE;
|
||||||
dup_W6[i] = TRUE;
|
dup_W6[i] = TRUE;
|
||||||
|
dup_kmc[i] = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i = 0; i < dup_desc.lines; i++) { /* init each line */
|
for (i = 0; i < dup_desc.lines; i++) { /* init each line */
|
||||||
|
|
Loading…
Add table
Reference in a new issue