PDP11, VAX: Fix RQ initialization of extra units

As reported in #711
This commit is contained in:
Mark Pizzolato 2019-06-25 00:31:29 -07:00
parent 2bee79b5e7
commit 1e214afec3

View file

@ -2962,7 +2962,8 @@ return SCPE_OK;
t_stat rq_reset (DEVICE *dptr) t_stat rq_reset (DEVICE *dptr)
{ {
int32 i, j, cidx; uint32 i;
int32 j, cidx;
UNIT *uptr; UNIT *uptr;
MSC *cp; MSC *cp;
static t_bool plugs_inited = FALSE; static t_bool plugs_inited = FALSE;
@ -3017,7 +3018,8 @@ dibp->vec = 0; /* no vector */
cp->comm = 0; /* no comm region */ cp->comm = 0; /* no comm region */
if (UNIBUS) /* Unibus? */ if (UNIBUS) /* Unibus? */
cp->sa = SA_S1 | SA_S1C_DI | SA_S1C_MP; cp->sa = SA_S1 | SA_S1C_DI | SA_S1C_MP;
else cp->sa = SA_S1 | SA_S1C_Q22 | SA_S1C_DI | SA_S1C_MP; /* init SA val */ else
cp->sa = SA_S1 | SA_S1C_Q22 | SA_S1C_DI | SA_S1C_MP;/* init SA val */
cp->cflgs = CF_RPL; /* ctrl flgs off */ cp->cflgs = CF_RPL; /* ctrl flgs off */
cp->htmo = RQ_DHTMO; /* default timeout */ cp->htmo = RQ_DHTMO; /* default timeout */
cp->hat = cp->htmo; /* default timer */ cp->hat = cp->htmo; /* default timer */
@ -3036,8 +3038,8 @@ cp->rspq = 0; /* no q'd rsp pkts */
cp->pbsy = 0; /* all pkts free */ cp->pbsy = 0; /* all pkts free */
cp->pip = 0; /* not polling */ cp->pip = 0; /* not polling */
rq_clrint (cp); /* clr intr req */ rq_clrint (cp); /* clr intr req */
for (i = 0; i < (RQ_NUMDR + 2); i++) { /* init units */ for (i = 0; i < dptr->numunits; i++) { /* init units */
uptr = dptr->units + i; uptr = &dptr->units[i];
sim_cancel (uptr); /* clr activity */ sim_cancel (uptr); /* clr activity */
sim_disk_reset (uptr); sim_disk_reset (uptr);
uptr->cnum = cidx; /* set ctrl index */ uptr->cnum = cidx; /* set ctrl index */
@ -3048,7 +3050,7 @@ for (i = 0; i < (RQ_NUMDR + 2); i++) { /* init units */
if (uptr->rqxb == NULL) if (uptr->rqxb == NULL)
return SCPE_MEM; return SCPE_MEM;
} }
for (i=cp->max_plug=0; i<RQ_NUMDR; i++) for (i=cp->max_plug = 0; i < (dptr->numunits - 2); i++)
if ((0 == (dptr->units[i].flags & UNIT_DIS)) && (dptr->units[i].unit_plug > cp->max_plug)) if ((0 == (dptr->units[i].flags & UNIT_DIS)) && (dptr->units[i].unit_plug > cp->max_plug))
cp->max_plug = (uint16)dptr->units[i].unit_plug; cp->max_plug = (uint16)dptr->units[i].unit_plug;
return auto_config (0, 0); /* run autoconfig */ return auto_config (0, 0); /* run autoconfig */