PDP11, VAX8600, VAX780, VAX750: Fix prior Massbus auto configure.

As discussed in #307
This commit is contained in:
Mark Pizzolato 2016-05-09 10:40:58 -07:00
parent 550e360769
commit 7bd58c6d7f
2 changed files with 22 additions and 40 deletions

View file

@ -862,16 +862,11 @@ if (dptr->flags & DEV_DIS) { /* Disabling? */
dibp->ba = MBA_AUTO; /* Flag unassigned */
mba_reset (&mba_dev[mb]); /* reset prior MBA */
mba_dev[mb].flags |= DEV_DIS; /* disable prior MBA */
}
build_dib_tab();
if (!(dptr->flags & DEV_DIS)) { /* Enabling? */
uint32 mb = dibp->ba;
mba_dev[mb].flags &= ~DEV_DIS; /* enable assigned MBA */
if (!(dptr->flags & DEV_DIS)) /* Enabling? */
mba_reset (&mba_dev[dibp->ba]); /* reset new MBA */
}
}
/* Show Massbus adapter number */
@ -894,25 +889,20 @@ return SCPE_OK;
void init_mbus_tab (void)
{
uint32 i;
static t_bool initialized = FALSE;
if (!initialized) { /* Force MBA devices to reflect initial state */
DEVICE *dptr; /* of potentially attached devices */
int mba_devs;
for (i = mba_devs = 0; (dptr = sim_devices[i]) != NULL; i++) {
if (dptr->flags & DEV_MBUS) {
mba_dev[mba_devs].flags &= ~DEV_DIS;
mba_dev[mba_devs].flags |= (dptr->flags & DEV_DIS);
mba_devs++;
}
}
initialized = TRUE;
}
for (i = 0; i < MBA_NUM; i++) {
mbregR[i] = NULL;
mbregW[i] = NULL;
mbabort[i] = NULL;
mba_dev[i].flags |= DEV_DIS;
}
for (i = mba_devs = 0; sim_devices[i] != NULL; i++) {
if ((sim_devices[i]->flags & DEV_MBUS) &&
(!(sim_devices[i]->flags & DEV_DIS))) {
mba_dev[mba_devs].flags &= ~DEV_DIS;
mba_devs++;
}
}
mba_active = 0;
}
@ -945,6 +935,7 @@ if (dibp->wr) /* set wr dispatch */
mbregW[idx] = dibp->wr;
if (dibp->ack[0]) /* set abort dispatch */
mbabort[idx] = dibp->ack[0];
mba_dev[idx].flags &= ~DEV_DIS; /* mark MBA enabled */
return build_ubus_tab (&mba_dev[idx], (DIB *)mba_dev[idx].ctxt);
}

View file

@ -926,41 +926,31 @@ if (dptr->flags & DEV_DIS) { /* Disabling? */
dibp->ba = MBA_AUTO; /* Flag unassigned */
mba_reset (&mba_dev[mb]); /* reset prior MBA */
mba_dev[mb].flags |= DEV_DIS; /* disable prior MBA */
}
build_dib_tab();
if (!(dptr->flags & DEV_DIS)) { /* Enabling? */
uint32 mb = dibp->ba;
mba_dev[mb].flags &= ~DEV_DIS; /* enable assigned MBA */
if (!(dptr->flags & DEV_DIS)) /* Enabling? */
mba_reset (&mba_dev[dibp->ba]); /* reset new MBA */
}
}
/* Init Mbus tables */
void init_mbus_tab (void)
{
uint32 i;
static t_bool initialized = FALSE;
if (!initialized) { /* Force MBA devices to reflect initial state */
DEVICE *dptr; /* of potentially attached devices */
int mba_devs;
for (i = mba_devs = 0; (dptr = sim_devices[i]) != NULL; i++) {
if (dptr->flags & DEV_MBUS) {
mba_dev[mba_devs].flags &= ~DEV_DIS;
mba_dev[mba_devs].flags |= (dptr->flags & DEV_DIS);
mba_devs++;
}
}
initialized = TRUE;
}
for (i = 0; i < MBA_NUM; i++) {
mbregR[i] = NULL;
mbregW[i] = NULL;
mbabort[i] = NULL;
mba_dev[i].flags |= DEV_DIS;
}
for (i = mba_devs = 0; sim_devices[i] != NULL; i++) {
if ((sim_devices[i]->flags & DEV_MBUS) &&
(!(sim_devices[i]->flags & DEV_DIS))) {
mba_dev[mba_devs].flags &= ~DEV_DIS;
mba_devs++;
}
}
mba_active = 0;
}
@ -993,6 +983,7 @@ if (dibp->wr) /* set wr dispatch */
mbregW[idx] = dibp->wr;
if (dibp->ack[0]) /* set abort dispatch */
mbabort[idx] = dibp->ack[0];
mba_dev[idx].flags &= ~DEV_DIS; /* mark MBA enabled */
return SCPE_OK;
}