1
0
mirror of https://github.com/simh/simh.git synced 2026-05-10 08:37:22 +00:00

Merge branch 'master' into KDP

This commit is contained in:
Timothe Litt
2013-07-11 15:45:20 -04:00
35 changed files with 44 additions and 28 deletions

View File

@@ -613,6 +613,7 @@ struct pdp_dib {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routines */
uint32 ulnt; /* IO length per unit */
};
typedef struct pdp_dib DIB;

View File

@@ -1156,7 +1156,8 @@ for (i = 0; dib_tab[i] != NULL; i++) { /* print table */
(dib_tab[i]->vloc<=19)? 5: 4);
else
fprintf (st, " ");
fprintf (st, " %2u %s\n", (dptr? dptr->numunits: 1), dptr? sim_dname (dptr): "CPU");
fprintf (st, " %2u %s\n", (dib_tab[i]->ulnt? dib_tab[i]->lnt/dib_tab[i]->ulnt:
(dptr? dptr->numunits: 1)), dptr? sim_dname (dptr): "CPU");
}
return SCPE_OK;
}

View File

@@ -387,7 +387,7 @@ t_stat rp_set_size (UNIT *uptr, int32 val, char *cptr, void *desc);
DIB rp_dib = {
IOBA_RP, IOLN_RP, &rp_rd, &rp_wr,
1, IVCL (RP), VEC_RP, { &rp_inta }
1, IVCL (RP), VEC_RP, { &rp_inta }, IOLN_RP
};
UNIT rp_unit[] = {

View File

@@ -359,7 +359,7 @@ t_stat tu_map_err (UNIT *uptr, t_stat st, t_bool qdt);
DIB tu_dib = {
IOBA_TU, IOLN_TU, &tu_rd, &tu_wr,
1, IVCL (TU), VEC_TU, { &tu_inta }
1, IVCL (TU), VEC_TU, { &tu_inta }, IOLN_TU,
};
UNIT tu_unit[] = {

View File

@@ -154,7 +154,7 @@ char *dcx_description (DEVICE *dptr);
DIB dci_dib = {
IOBA_AUTO, IOLN_DC * DCX_LINES, &dcx_rd, &dcx_wr,
2, IVCL (DCI), VEC_AUTO, { &dci_iack, &dco_iack }
2, IVCL (DCI), VEC_AUTO, { &dci_iack, &dco_iack }, IOLN_DC,
};
UNIT dci_unit = { UDATA (&dci_svc, 0, 0), KBD_POLL_WAIT };

View File

@@ -513,6 +513,7 @@ struct pdp_dib {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routines */
uint32 ulnt; /* IO length per-unit */
};
typedef struct pdp_dib DIB;

View File

@@ -118,7 +118,7 @@ void dlx_reset_ln (int32 ln);
DIB dli_dib = {
IOBA_AUTO, IOLN_DL * DLX_LINES, &dlx_rd, &dlx_wr,
2, IVCL (DLI), VEC_AUTO, { &dli_iack, &dlo_iack }
2, IVCL (DLI), VEC_AUTO, { &dli_iack, &dlo_iack }, IOLN_DL,
};
UNIT dli_unit = { UDATA (&dli_svc, 0, 0), KBD_POLL_WAIT };

View File

@@ -293,7 +293,8 @@ char *dz_description (DEVICE *dptr);
DIB dz_dib = {
IOBA_AUTO, IOLN_DZ * DZ_MUXES, &dz_rd, &dz_wr,
2, IVCL (DZRX), VEC_AUTO, { &dz_rxinta, &dz_txinta }
2, IVCL (DZRX), VEC_AUTO, { &dz_rxinta, &dz_txinta },
IOLN_DZ,
};
UNIT dz_unit = { UDATA (&dz_svc, UNIT_IDLE|UNIT_ATTABLE|DZ_8B_DFLT, 0) };

View File

@@ -581,7 +581,7 @@ char *hk_description (DEVICE *dptr);
DIB hk_dib = {
IOBA_AUTO, IOLN_HK, &hk_rd, &hk_wr,
1, IVCL (HK), VEC_AUTO, { NULL }
1, IVCL (HK), VEC_AUTO, { NULL }, IOLN_HK,
};
UNIT hk_unit[] = {

View File

@@ -327,7 +327,8 @@ for (i = 0, dibp = NULL; i < (IOPAGESIZE >> 1); i++) { /* loop thru entries */
l = strlen (dptr? sim_dname (dptr): "CPU");
if (l>maxname)
maxname = (int32)l;
j = (dptr? dptr->numunits: 1);
j = (dibp->ulnt? dibp->lnt/dibp->ulnt:
(dptr? dptr->numunits: 1));
if (j > maxdev)
maxdev = j;
} /* end if */
@@ -407,7 +408,9 @@ for (i = 0, dibp = NULL; i < (IOPAGESIZE >> 1); i++) { /* loop thru entries */
fprintf (st, " %2u", dibp->vloc/32);
else
fprintf (st, " ");
fprintf (st, " %*u %s\n", maxdev, (dptr? dptr->numunits: 1), dptr? sim_dname (dptr): "CPU");
fprintf (st, " %*u %s\n", maxdev, (dibp->ulnt? dibp->lnt/dibp->ulnt:
(dptr? dptr->numunits: 1)),
dptr? sim_dname (dptr): "CPU");
} /* end if */
} /* end for i */
return SCPE_OK;

View File

@@ -201,7 +201,7 @@ static DIB kg_dib = {
(IOLN_KG + 2) * KG_UNITS,
&kg_rd,
&kg_wr,
0, 0, 0, { NULL }
0, 0, 0, { NULL }, IOLN_KG+2
};
static UNIT kg_unit[] = {

View File

@@ -187,7 +187,7 @@ static DIB rc_dib = {
IOLN_RC,
&rc_rd,
&rc_wr,
1, IVCL (RC), VEC_AUTO, { NULL }
1, IVCL (RC), VEC_AUTO, { NULL }, IOLN_RC,
};
static UNIT rc_unit = {

View File

@@ -145,7 +145,7 @@ uint32 update_rfcs (uint32 newcs, uint32 newdae);
DIB rf_dib = {
IOBA_AUTO, IOLN_RF, &rf_rd, &rf_wr,
1, IVCL (RF), VEC_AUTO, {NULL}
1, IVCL (RF), VEC_AUTO, {NULL}, IOLN_RF,
};

View File

@@ -207,7 +207,7 @@ static int32 mba_mapofs[(MBA_OFSMASK + 1) >> 1] = {
DIB mba0_dib = {
IOBA_AUTO, IOLN_RP, &mba_rd, &mba_wr,
1, IVCL (RP), VEC_AUTO, { &mba0_inta }
1, IVCL (RP), VEC_AUTO, { &mba0_inta }, IOLN_RP,
};
UNIT mba0_unit = { UDATA (NULL, 0, 0) };

View File

@@ -216,7 +216,7 @@ t_stat rk_boot (int32 unitno, DEVICE *dptr);
DIB rk_dib = {
IOBA_AUTO, IOLN_RK, &rk_rd, &rk_wr,
1, IVCL (RK), VEC_AUTO, { &rk_inta }
1, IVCL (RK), VEC_AUTO, { &rk_inta }, IOLN_RK,
};
UNIT rk_unit[] = {

View File

@@ -275,7 +275,7 @@ char *rl_description (DEVICE *dptr);
static DIB rl_dib = {
IOBA_AUTO, IOLN_RL, &rl_rd, &rl_wr,
1, IVCL (RL), VEC_AUTO, { NULL } };
1, IVCL (RL), VEC_AUTO, { NULL }, IOLN_RL };
static UNIT rl_unit[] = {
{ UDATA (&rl_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+

View File

@@ -857,7 +857,7 @@ MSC rq_ctx = { 0 };
DIB rq_dib = {
IOBA_AUTO, IOLN_RQ, &rq_rd, &rq_wr,
1, IVCL (RQ), 0, { &rq_inta }
1, IVCL (RQ), 0, { &rq_inta }, IOLN_RQ
};
UNIT rq_unit[] = {

View File

@@ -144,7 +144,7 @@ void rx_done (int32 esr_flags, int32 new_ecode);
DIB rx_dib = {
IOBA_AUTO, IOLN_RX, &rx_rd, &rx_wr,
1, IVCL (RX), VEC_AUTO, { NULL }
1, IVCL (RX), VEC_AUTO, { NULL }, IOLN_RX,
};
UNIT rx_unit[] = {

View File

@@ -180,7 +180,7 @@ char *ry_description (DEVICE *dptr);
DIB ry_dib = {
IOBA_AUTO, IOLN_RY, &ry_rd, &ry_wr,
1, IVCL (RY), VEC_AUTO, { NULL }
1, IVCL (RY), VEC_AUTO, { NULL }, IOLN_RY,
};
UNIT ry_unit[] = {

View File

@@ -150,7 +150,7 @@ uint32 ta_crc (uint8 *buf, uint32 cnt);
DIB ta_dib = {
IOBA_AUTO, IOLN_TA, &ta_rd, &ta_wr,
1, IVCL (TA), VEC_AUTO, { NULL }
1, IVCL (TA), VEC_AUTO, { NULL }, IOLN_TA
};
UNIT ta_unit[] = {

View File

@@ -319,7 +319,7 @@ int32 dt_gethdr (UNIT *uptr, int32 blk, int32 relpos);
DIB dt_dib = {
IOBA_AUTO, IOLN_TC, &dt_rd, &dt_wr,
1, IVCL (DTA), VEC_AUTO, { NULL }
1, IVCL (DTA), VEC_AUTO, { NULL }, IOLN_TC,
};
UNIT dt_unit[] = {

View File

@@ -191,7 +191,7 @@ t_stat tm_vlock (UNIT *uptr, int32 val, char *cptr, void *desc);
DIB tm_dib = {
IOBA_AUTO, IOLN_TM, &tm_rd, &tm_wr,
1, IVCL (TM), VEC_AUTO, { NULL }
1, IVCL (TM), VEC_AUTO, { NULL }, IOLN_TM,
};
UNIT tm_unit[] = {

View File

@@ -417,7 +417,7 @@ UNIT *tq_getucb (uint32 lu);
DIB tq_dib = {
IOBA_AUTO, IOLN_TQ, &tq_rd, &tq_wr,
1, IVCL (TQ), 0, { &tq_inta }
1, IVCL (TQ), 0, { &tq_inta }, IOLN_TQ,
};
UNIT tq_unit[] = {

View File

@@ -311,7 +311,7 @@ char *ts_description (DEVICE *dptr);
DIB ts_dib = {
IOBA_AUTO, IOLN_TS, &ts_rd, &ts_wr,
1, IVCL (TS), VEC_AUTO, { NULL }
1, IVCL (TS), VEC_AUTO, { NULL }, IOLN_TS
};
UNIT ts_unit = { UDATA (&ts_svc, UNIT_ATTABLE + UNIT_ROABLE + UNIT_DISABLE, 0) };

View File

@@ -361,7 +361,8 @@ static DIB vh_dib = {
2, /* # of vectors */
IVCL (VHRX),
VEC_FLOAT,
{ &vh_rxinta, &vh_txinta } /* int. ack. routines */
{ &vh_rxinta, &vh_txinta }, /* int. ack. routines */
IOLN_VH, /* IO space per device */
};
static UNIT vh_unit[VH_MUXES] = {

View File

@@ -326,7 +326,7 @@ struct xq_device xqb = {
#define IOLN_XQ 020
DIB xqa_dib = { IOBA_AUTO, IOLN_XQ, &xq_rd, &xq_wr,
1, IVCL (XQ), 0, { &xq_int } };
1, IVCL (XQ), 0, { &xq_int }, IOLN_XQ };
UNIT xqa_unit[] = {
{ UDATA (&xq_svc, UNIT_IDLE|UNIT_ATTABLE|UNIT_DISABLE, 2047) }, /* receive timer */

View File

@@ -134,7 +134,7 @@ char *xu_description (DEVICE *dptr);
#define IOLN_XU 010
DIB xua_dib = { IOBA_AUTO, IOLN_XU, &xu_rd, &xu_wr,
1, IVCL (XU), VEC_AUTO, {&xu_int} };
1, IVCL (XU), VEC_AUTO, {&xu_int}, IOLN_XU };
UNIT xua_unit[] = {
{ UDATA (&xu_svc, UNIT_IDLE|UNIT_ATTABLE|UNIT_DISABLE, 0) }, /* receive timer */
@@ -234,7 +234,7 @@ DEVICE xu_dev = {
#define IOLN_XU 010
DIB xub_dib = { IOBA_AUTO, IOLN_XU, &xu_rd, &xu_wr,
1, IVCL (XU), 0, { &xu_int } };
1, IVCL (XU), 0, { &xu_int }, IOLN_XU };
UNIT xub_unit[] = {
{ UDATA (&xu_svc, UNIT_IDLE|UNIT_ATTABLE|UNIT_DISABLE, 0) } /* receive timer */

View File

@@ -196,6 +196,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Qbus I/O page layout - see pdp11_io_lib.c for address layout details */

View File

@@ -243,6 +243,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Qbus I/O page layout - see pdp11_io_lib.c for address layout details */

View File

@@ -237,6 +237,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Unibus I/O page layout - see pdp11_io_lib.c for address layout details */

View File

@@ -274,6 +274,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Unibus I/O page layout - see pdp11_io_lib.c for address layout details

View File

@@ -286,6 +286,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Unibus I/O page layout - see pdp11_io_lib.c for address layout details

View File

@@ -321,6 +321,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Unibus I/O page layout - XUB,RQB,RQC,RQD float based on number of DZ's

View File

@@ -284,6 +284,7 @@ typedef struct {
int32 vloc; /* locator */
int32 vec; /* value */
int32 (*ack[VEC_DEVMAX])(void); /* ack routine */
uint32 ulnt; /* IO length per unit */
} DIB;
/* Qbus I/O page layout - see pdp11_io_lib.c for address layout details */

3
scp.c
View File

@@ -3664,7 +3664,8 @@ if (uptr->flags & UNIT_ATT) /* already attached? */
return r;
}
else
return SCPE_ALATT; /* Already attached */
if (!(uptr->dynflags & UNIT_ATTMULT))
return SCPE_ALATT; /* Already attached */
sim_trim_endspc (cptr); /* trim trailing spc */
return scp_attach_unit (dptr, uptr, cptr); /* attach */
}