mirror of
https://github.com/simh/simh.git
synced 2026-04-30 05:25:05 +00:00
PDP11: Add extra RPB device as an additional Massbus device
Note: To avoid potential breakage of existing PDP11 configurations in
the wild, which may expect RP on RHA, TU on RHB and RS on RHC,
RPB is connected to RHD Massbus adapter.
- More robust recovery when Massbus configuration errors occur
- More complete RH{A,B,C,D} help
This commit is contained in:
@@ -642,6 +642,7 @@ typedef struct pdp_dib DIB;
|
||||
#define INT_V_NG 27
|
||||
#define INT_V_DHRX 28
|
||||
#define INT_V_DHTX 29
|
||||
#define INT_V_RHD 30
|
||||
|
||||
#define INT_V_PIR4 0 /* BR4 */
|
||||
#define INT_V_TTI 1
|
||||
@@ -735,6 +736,7 @@ typedef struct pdp_dib DIB;
|
||||
#define INT_DLCJO (1u << INT_V_DLCJO)
|
||||
#define INT_DHRX (1u << INT_V_DHRX)
|
||||
#define INT_DHTX (1u << INT_V_DHTX)
|
||||
#define INT_RHD (1u << INT_V_RHD)
|
||||
|
||||
#define INT_INTERNAL7 (INT_PIR7)
|
||||
#define INT_INTERNAL6 (INT_PIR6 | INT_CLK)
|
||||
@@ -770,6 +772,7 @@ typedef struct pdp_dib DIB;
|
||||
#define IPL_RF 5
|
||||
#define IPL_RC 5
|
||||
#define IPL_RHC 5
|
||||
#define IPL_RHD 5
|
||||
#define IPL_DMCRX 5
|
||||
#define IPL_DMCTX 5
|
||||
#define IPL_KMCA 5
|
||||
@@ -832,7 +835,7 @@ typedef struct pdp_dib DIB;
|
||||
|
||||
/* Massbus definitions */
|
||||
|
||||
#define MBA_NUM 3 /* number of MBA's */
|
||||
#define MBA_NUM 4 /* number of MBA's */
|
||||
#define MBA_AUTO (uint32)0xFFFFFFFF /* Unassigned MBA */
|
||||
#define MBA_RMASK 037 /* max 32 reg */
|
||||
#define MBE_NXD 1 /* nx drive */
|
||||
|
||||
@@ -698,6 +698,8 @@ AUTO_CON auto_tab[] = {/*c #v am vm fxa fxv */
|
||||
{012440}, {0224} }, /* RH11/RH70 - fx CSR, fx VEC */
|
||||
{ { "RHC" }, 1, 1, 0, 0,
|
||||
{012040}, {0204} }, /* RH11/RH70 - fx CSR, fx VEC */
|
||||
{ { "RHD" }, 1, 1, 0, 0,
|
||||
{016300}, {0150} }, /* RH11/RH70 - fx CSR, fx VEC */
|
||||
{ { "CLK" }, 1, 1, 0, 0,
|
||||
{017546}, {0100} }, /* KW11L - fx CSR, fx VEC */
|
||||
{ { "PCLK" }, 1, 1, 0, 0,
|
||||
|
||||
@@ -168,6 +168,7 @@ t_stat mba_show_type (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
|
||||
int32 mba0_inta (void);
|
||||
int32 mba1_inta (void);
|
||||
int32 mba2_inta (void);
|
||||
int32 mba3_inta (void);
|
||||
void mba_set_int (uint32 mb);
|
||||
void mba_clr_int (uint32 mb);
|
||||
void mba_upd_cs1 (uint32 set, uint32 clr, uint32 mb);
|
||||
@@ -834,6 +835,14 @@ massbus[2].iff = 0; /* clear CSTB INTR */
|
||||
return mba2_dib.vec; /* acknowledge */
|
||||
}
|
||||
|
||||
int32 mba3_inta (void)
|
||||
{
|
||||
massbus[3].cs1 &= ~CS1_IE; /* clear int enable */
|
||||
massbus[3].cs3 &= ~CS1_IE; /* in both registers */
|
||||
massbus[3].iff = 0; /* clear CSTB INTR */
|
||||
return mba3_dib.vec; /* acknowledge */
|
||||
}
|
||||
|
||||
/* Map physical address to Massbus number, offset */
|
||||
|
||||
int32 mba_map_pa (int32 pa, int32 *ofs)
|
||||
@@ -897,13 +906,14 @@ if (((dptr->flags & DEV_DIS) && /* Already Disabled */
|
||||
(!(dptr->flags & DEV_DIS) && /* Already Enabled */
|
||||
(dibp->ba != MBA_AUTO)))
|
||||
return;
|
||||
if (dptr->flags & DEV_DIS) { /* Disabling? */
|
||||
if ((dptr->flags & DEV_DIS) || /* Disabling OR */
|
||||
(build_dib_tab() != SCPE_OK)) { /* somehow invalid? */
|
||||
uint32 mb = dibp->ba;
|
||||
|
||||
dptr->flags |= DEV_DIS; /* assure disabled */
|
||||
dibp->ba = MBA_AUTO; /* Flag unassigned */
|
||||
mba_reset (&mba_dev[mb]); /* reset prior MBA */
|
||||
}
|
||||
build_dib_tab();
|
||||
if (!(dptr->flags & DEV_DIS)) /* Enabling? */
|
||||
mba_reset (&mba_dev[dibp->ba]); /* reset new MBA */
|
||||
}
|
||||
@@ -963,7 +973,7 @@ for (i = mba_devs = 0; sim_devices[i] != NULL; i++) {
|
||||
t_stat build_mbus_tab (DEVICE *dptr, DIB *dibp)
|
||||
{
|
||||
uint32 idx;
|
||||
static const char *mbus_devs[] = {"RP", "TU", "RS", NULL};
|
||||
static const char *mbus_devs[] = {"RP", "TU", "RS", "RPB", NULL};
|
||||
|
||||
if ((dptr == NULL) || (dibp == NULL)) /* validate args */
|
||||
return SCPE_IERR;
|
||||
@@ -997,7 +1007,7 @@ const char *const text =
|
||||
#if MBA_NUM == 3
|
||||
" RH11/RH70/RH70-emulating Massbus adapters (RHA, RHB, RHC)\n"
|
||||
#else
|
||||
"1RH11/RH70/RH70-emulating Massbus adapters (RHA, RHB, RHC, RHD)\n"
|
||||
" RH11/RH70/RH70-emulating Massbus adapters (RHA, RHB, RHC, RHD)\n"
|
||||
#endif
|
||||
"\n"
|
||||
" The RH70/RH11/RH70-emulating Massbus adapters interface Massbus\n"
|
||||
|
||||
@@ -101,6 +101,7 @@ extern DEVICE rx_dev;
|
||||
extern DEVICE ry_dev;
|
||||
extern DEVICE mba_dev[];
|
||||
extern DEVICE rp_dev;
|
||||
extern DEVICE rpb_dev;
|
||||
extern DEVICE rs_dev;
|
||||
extern DEVICE rq_dev, rqb_dev, rqc_dev, rqd_dev;
|
||||
extern DEVICE tm_dev;
|
||||
@@ -158,6 +159,7 @@ DEVICE *sim_devices[] = {
|
||||
&mba_dev[0],
|
||||
&mba_dev[1],
|
||||
&mba_dev[2],
|
||||
&mba_dev[3],
|
||||
&clk_dev,
|
||||
&pclk_dev,
|
||||
&ptr_dev,
|
||||
@@ -184,6 +186,7 @@ DEVICE *sim_devices[] = {
|
||||
&rx_dev,
|
||||
&ry_dev,
|
||||
&rp_dev,
|
||||
&rpb_dev,
|
||||
&rs_dev,
|
||||
&rq_dev,
|
||||
&rqb_dev,
|
||||
|
||||
Reference in New Issue
Block a user