1
0
mirror of https://github.com/simh/simh.git synced 2026-04-24 19:33:40 +00:00

All VAX: Always return the correct Qbus/Unibus interrupt vector bits for all devices. Fix #239

Vector values contained in device information blocks are the true bus relative vector values.  CPU specific biased vector values are produced by the respective vector fetching logic and vector values are limited to 9 bits with <1:0> = 0 as specified in both the Unibus and Qbus documents.
This commit is contained in:
Mark Pizzolato
2015-10-08 04:43:21 -07:00
parent b05c7419f0
commit ed57f061e2
24 changed files with 176 additions and 59 deletions

View File

@@ -751,7 +751,6 @@ typedef struct pdp_dib DIB;
#define INT_IPL5 0x000FFF00
#define INT_IPL4 0x7FF00000
#define VEC_Q 0000 /* vector base */
#define VEC_TU 0224 /* interrupt vectors */
#define VEC_RP 0254
#define VEC_LP20 0754

View File

@@ -1773,9 +1773,9 @@ if (dptr == NULL)
dibp = (DIB *) dptr->ctxt;
if (dibp == NULL)
return SCPE_IERR;
newvec = (uint32) get_uint (cptr, 8, VEC_Q + 01000, &r);
if ((r != SCPE_OK) || (newvec == VEC_Q) ||
((newvec + (dibp->vnum * 4)) >= (VEC_Q + 01000)) ||
newvec = (uint32) get_uint (cptr, 8, 01000, &r);
if ((r != SCPE_OK) ||
((newvec + (dibp->vnum * 4)) >= (01000)) ||
(newvec & ((dibp->vnum > 1)? 07: 03)))
return SCPE_ARG;
dibp->vec = newvec;
@@ -2217,7 +2217,7 @@ AUTO_CON auto_tab[] = {/*c #v am vm fxa fxv */
t_stat auto_config (const char *name, int32 nctrl)
{
uint32 csr = IOPAGEBASE + AUTO_CSRBASE;
uint32 vec = VEC_Q + AUTO_VECBASE;
uint32 vec = AUTO_VECBASE;
AUTO_CON *autp;
DEVICE *dptr;
DIB *dibp;
@@ -2260,7 +2260,7 @@ for (autp = auto_tab; autp->numc >= 0; autp++) { /* loop thru table */
if (autp->numv) { /* vec needed? */
if (autp->fixv[j]) { /* fixed vec avail? */
if (autp->numv > 0)
dibp->vec = VEC_Q + autp->fixv[j]; /* use it */
dibp->vec = autp->fixv[j]; /* use it */
}
else { /* no fixed left */
uint32 numv = abs (autp->numv); /* get num vec */