diff --git a/PDP11/pdp11_kmc.c b/PDP11/pdp11_kmc.c index c937a0f3..e40ebc27 100644 --- a/PDP11/pdp11_kmc.c +++ b/PDP11/pdp11_kmc.c @@ -195,7 +195,7 @@ t_stat dma_read(int32 ba, uint8* data, int length) #define MAXQUEUE 16 /* Number of rx bdl's we can handle. */ -#define MAXMSG 2000 /* Largest message we handle. */ +#define MAXMSG (6+2+8192+2) /* Largest message we handle = DDCMP header+BCC+Data+BCC. */ /* local variables: */ @@ -210,7 +210,8 @@ int kmc_txi; uint16 kmc_microcode[KMC_CRAMSIZE]; struct dupblock { - int32 dupnumber; /* Line Number of all DUP11's on Unibus */ + int32 dupnumber; /* Line Number amongst all DUP11's on Unibus (-1 == unassigned) */ + int32 linkstate; /* Line Link Status (i.e. 1 when DCD/DSR is on, 0 otherwise */ uint32 rxqueue[MAXQUEUE]; /* Queue of bd's to receive into. */ uint32 rxcount; /* No. bd's in above. */ uint32 rxnext; /* Next bd to receive into. */ @@ -728,6 +729,7 @@ void kmc_doinput(void) */ sim_debug(DF_CMD, &kmc_dev, "Running DDCMP in full duplex on Line %d (dup %d):\n", line, d->dupnumber); dup_set_DDCMP (d->dupnumber, TRUE); + d->linkstate = 0; /* Link not up yet. */ dup_set_DTR (d->dupnumber, (kmc_sel6 & 0400) ? TRUE : FALSE); dup_set_callback_mode (d->dupnumber, dup_receive, dup_send_complete); break; @@ -960,8 +962,15 @@ t_stat kmc_svc (UNIT* uptr) { int dupno; - dupno = uptr->u3; + for (dupno=0; dupno