PDP11, VAX: Support explicit deregistering of I/O space addresses
This commit is contained in:
parent
ac40e513cb
commit
0051082dc9
1 changed files with 8 additions and 6 deletions
|
@ -381,7 +381,7 @@ for (i = 0; i < dibp->vnum; i++) { /* loop thru vec */
|
||||||
int_vec[ilvl][ibit] = vec;
|
int_vec[ilvl][ibit] = vec;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Register I/O space address and check for conflicts */
|
/* Register(Deregister) I/O space address and check for conflicts */
|
||||||
for (i = 0; i < (int32) dibp->lnt; i = i + 2) { /* create entries */
|
for (i = 0; i < (int32) dibp->lnt; i = i + 2) { /* create entries */
|
||||||
idx = ((dibp->ba + i) & IOPAGEMASK) >> 1; /* index into disp */
|
idx = ((dibp->ba + i) & IOPAGEMASK) >> 1; /* index into disp */
|
||||||
if ((iodispR[idx] && dibp->rd && /* conflict? */
|
if ((iodispR[idx] && dibp->rd && /* conflict? */
|
||||||
|
@ -411,11 +411,13 @@ for (i = 0; i < (int32) dibp->lnt; i = i + 2) { /* create entries */
|
||||||
"Device %s address conflict with %s at 0%o\n",
|
"Device %s address conflict with %s at 0%o\n",
|
||||||
sim_dname (dptr), cdname, (int)dibp->ba);
|
sim_dname (dptr), cdname, (int)dibp->ba);
|
||||||
}
|
}
|
||||||
if (dibp->rd) /* set rd dispatch */
|
if ((dibp->rd == NULL) && (dibp->wr == NULL) && (dibp->vnum == 0))
|
||||||
iodispR[idx] = dibp->rd;
|
iodibp[idx] = NULL; /* deregister DIB */
|
||||||
if (dibp->wr) /* set wr dispatch */
|
else {
|
||||||
iodispW[idx] = dibp->wr;
|
iodispR[idx] = dibp->rd; /* set rd dispatch */
|
||||||
iodibp[idx] = dibp; /* remember DIB */
|
iodispW[idx] = dibp->wr; /* set wr dispatch */
|
||||||
|
iodibp[idx] = dibp; /* remember DIB */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue