mirror of
https://github.com/simh/simh.git
synced 2026-01-14 15:45:18 +00:00
VAX750, VAX780, VAX8600: Add Extra Massbus for New RPB disks
This commit is contained in:
parent
ef0f49204e
commit
6e7cf79eb3
@ -585,6 +585,10 @@ static struct boot_dev boot_tab[] = {
|
||||
{ "RP", "DB", "ka750_new.bin", BOOT_B, 0, 0 }, /* DBAn */
|
||||
{ "RP", "DRA", "ka750_new.bin", BOOT_B, BOOT_MB, 0 }, /* DRAn */
|
||||
{ "RP", "DR", "ka750_new.bin", BOOT_B, 0, 0 }, /* DRAn */
|
||||
{ "RPB", "DBB", "ka750_new.bin", BOOT_B, BOOT_MB, 0 }, /* DBAn */
|
||||
{ "RPB", "DBB", "ka750_new.bin", BOOT_B, 0, 0 }, /* DBAn */
|
||||
{ "RPB", "DRB", "ka750_new.bin", BOOT_B, BOOT_MB, 0 }, /* DRAn */
|
||||
{ "RPB", "DRB", "ka750_new.bin", BOOT_B, 0, 0 }, /* DRAn */
|
||||
{ "HK", "DMA", "ka750_old.bin", BOOT_B, BOOT_HK, 0 }, /* DMAn */
|
||||
{ "HK", "DM", "ka750_old.bin", BOOT_B, 0, 0 }, /* DMAn */
|
||||
{ "RL", "DLA", "ka750_old.bin", BOOT_C, BOOT_RL, 0 }, /* DLAn */
|
||||
|
||||
@ -79,10 +79,11 @@
|
||||
|
||||
#define NEXUS_NUM 16 /* number of nexus */
|
||||
#define MCTL_NUM 2 /* number of mem ctrl */
|
||||
#define MBA_NUM 2 /* number of MBA's */
|
||||
#define MBA_NUM 3 /* number of MBA's */
|
||||
#define TR_MCTL 0 /* nexus assignments */
|
||||
#define TR_MBA0 4
|
||||
#define TR_MBA1 5
|
||||
#define TR_MBA2 6
|
||||
#define TR_UBA 8
|
||||
#define TR_CI 15
|
||||
#define NEXUS_HLVL (IPL_HMAX - IPL_HMIN + 1)
|
||||
@ -99,6 +100,7 @@
|
||||
#define IPL_UBA (0x15 - IPL_HMIN)
|
||||
#define IPL_MBA0 (0x15 - IPL_HMIN)
|
||||
#define IPL_MBA1 (0x15 - IPL_HMIN)
|
||||
#define IPL_MBA2 (0x15 - IPL_HMIN)
|
||||
#define IPL_CI (0x15 - IPL_HMIN)
|
||||
|
||||
/* Nexus interrupt macros */
|
||||
|
||||
@ -55,6 +55,7 @@ extern DEVICE rl_dev;
|
||||
extern DEVICE hk_dev;
|
||||
extern DEVICE rk_dev;
|
||||
extern DEVICE rp_dev;
|
||||
extern DEVICE rpb_dev;
|
||||
extern DEVICE ry_dev;
|
||||
extern DEVICE ts_dev;
|
||||
extern DEVICE tq_dev;
|
||||
@ -75,6 +76,7 @@ DEVICE *sim_devices[] = {
|
||||
&uba_dev,
|
||||
&mba_dev[0],
|
||||
&mba_dev[1],
|
||||
&mba_dev[2],
|
||||
&clk_dev,
|
||||
&tmr_dev,
|
||||
&tti_dev,
|
||||
@ -87,6 +89,7 @@ DEVICE *sim_devices[] = {
|
||||
&cr_dev,
|
||||
&lpt_dev,
|
||||
&rp_dev,
|
||||
&rpb_dev,
|
||||
&rl_dev,
|
||||
&hk_dev,
|
||||
&rk_dev,
|
||||
|
||||
@ -269,7 +269,7 @@ static t_stat (*mbregR[MBA_NUM])(int32 *dat, int32 ad, int32 md);
|
||||
static t_stat (*mbregW[MBA_NUM])(int32 dat, int32 ad, int32 md);
|
||||
static int32 (*mbabort[MBA_NUM])(void);
|
||||
|
||||
static int32 mba_active = 0; /* Number of active MBA's */
|
||||
static uint32 mba_active = 0; /* Number of active MBA's */
|
||||
|
||||
/* Massbus adapter data structures
|
||||
|
||||
@ -324,6 +324,7 @@ REG mba1_reg[] = {
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
#if MBA_NUM != 2
|
||||
DIB mba2_dib = { TR_MBA2, 0, &mba_rdreg, &mba_wrreg, 0, NVCL (MBA2) };
|
||||
|
||||
UNIT mba2_unit = { UDATA (NULL, 0, 0) };
|
||||
@ -346,6 +347,7 @@ REG mba2_reg[] = {
|
||||
{ FLDATAD (NEXINT, nexus_req[IPL_MBA2], TR_MBA2, "nexus interrupt request") },
|
||||
{ NULL }
|
||||
};
|
||||
#endif
|
||||
|
||||
DEBTAB mba_deb[] = {
|
||||
{ "REGREAD", MBA_DEB_RRD },
|
||||
@ -376,6 +378,7 @@ DEVICE mba_dev[] = {
|
||||
&mba1_dib, DEV_NEXUS | DEV_DEBUG, 0,
|
||||
mba_deb, NULL, NULL, &mba_help, NULL, NULL,
|
||||
&mba_description
|
||||
#if MBA_NUM != 2
|
||||
},
|
||||
{
|
||||
"MBA2", &mba2_unit, mba2_reg, mba2_mod,
|
||||
@ -385,6 +388,7 @@ DEVICE mba_dev[] = {
|
||||
&mba2_dib, DEV_NEXUS | DEV_DEBUG, 0,
|
||||
mba_deb, NULL, NULL, &mba_help, NULL, NULL,
|
||||
&mba_description
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
@ -392,8 +396,8 @@ DEVICE mba_dev[] = {
|
||||
|
||||
t_stat mba_rdreg (int32 *val, int32 pa, int32 lnt)
|
||||
{
|
||||
int32 mb, ofs, drv, rtype;
|
||||
uint32 t;
|
||||
int32 ofs, drv, rtype;
|
||||
uint32 mb, t;
|
||||
t_stat r;
|
||||
|
||||
mb = NEXUS_GETNEX (pa) - TR_MBA0; /* get MBA */
|
||||
@ -410,7 +414,7 @@ if ((pa & 3) || (lnt != L_LONG)) { /* unaligned or not lw?
|
||||
return SCPE_OK;
|
||||
}
|
||||
#endif
|
||||
if (mb >= MBA_NUM) /* valid? */
|
||||
if (mb >= mba_active) /* valid? */
|
||||
return SCPE_NXM;
|
||||
rtype = MBA_RTYPE (pa); /* get reg type */
|
||||
|
||||
@ -491,8 +495,8 @@ return SCPE_OK;
|
||||
|
||||
t_stat mba_wrreg (int32 val, int32 pa, int32 lnt)
|
||||
{
|
||||
int32 mb, ofs, drv, rtype;
|
||||
uint32 old_reg, old_sr;
|
||||
int32 ofs, drv, rtype;
|
||||
uint32 mb, old_reg, old_sr;
|
||||
t_stat r;
|
||||
t_bool cs1dt;
|
||||
|
||||
@ -504,7 +508,7 @@ if ((pa & 3) || (lnt != L_LONG)) { /* unaligned or not lw?
|
||||
#endif
|
||||
return SCPE_OK;
|
||||
}
|
||||
if (mb >= MBA_NUM) /* valid? */
|
||||
if (mb >= mba_active) /* valid? */
|
||||
return SCPE_NXM;
|
||||
rtype = MBA_RTYPE (pa); /* get reg type */
|
||||
|
||||
@ -630,7 +634,7 @@ int32 mba_rdbufW (uint32 mb, int32 bc, uint16 *buf)
|
||||
int32 i, j, ba, mbc, pbc;
|
||||
uint32 pa, dat;
|
||||
|
||||
if (mb >= MBA_NUM) /* valid MBA? */
|
||||
if (mb >= mba_active) /* valid MBA? */
|
||||
return 0;
|
||||
ba = mba_va[mb]; /* get virt addr */
|
||||
mbc = (MBABC_WR + 1) - mba_bc[mb]; /* get Mbus bc */
|
||||
@ -679,7 +683,7 @@ int32 mba_wrbufW (uint32 mb, int32 bc, const uint16 *buf)
|
||||
int32 i, j, ba, mbc, pbc;
|
||||
uint32 pa, dat;
|
||||
|
||||
if (mb >= MBA_NUM) /* valid MBA? */
|
||||
if (mb >= mba_active) /* valid MBA? */
|
||||
return 0;
|
||||
ba = mba_va[mb]; /* get virt addr */
|
||||
mbc = (MBABC_WR + 1) - mba_bc[mb]; /* get Mbus bc */
|
||||
@ -729,7 +733,7 @@ int32 mba_chbufW (uint32 mb, int32 bc, uint16 *buf)
|
||||
int32 i, j, ba, mbc, pbc;
|
||||
uint32 pa, dat, cmp;
|
||||
|
||||
if (mb >= MBA_NUM) /* valid MBA? */
|
||||
if (mb >= mba_active) /* valid MBA? */
|
||||
return 0;
|
||||
ba = mba_va[mb]; /* get virt addr */
|
||||
mbc = (MBABC_WR + 1) - mba_bc[mb]; /* get Mbus bc */
|
||||
@ -811,7 +815,7 @@ return;
|
||||
|
||||
int32 mba_get_bc (uint32 mb)
|
||||
{
|
||||
if (mb >= MBA_NUM)
|
||||
if (mb >= mba_active)
|
||||
return 0;
|
||||
return (MBABC_WR + 1) - mba_bc[mb];
|
||||
}
|
||||
@ -820,7 +824,7 @@ void mba_set_int (uint32 mb)
|
||||
{
|
||||
DIB *dibp;
|
||||
|
||||
if (mb >= MBA_NUM)
|
||||
if (mb >= mba_active)
|
||||
return;
|
||||
dibp = (DIB *) mba_dev[mb].ctxt;
|
||||
if (dibp) {
|
||||
@ -834,7 +838,7 @@ void mba_clr_int (uint32 mb)
|
||||
{
|
||||
DIB *dibp;
|
||||
|
||||
if (mb >= MBA_NUM)
|
||||
if (mb >= mba_active)
|
||||
return;
|
||||
dibp = (DIB *) mba_dev[mb].ctxt;
|
||||
if (dibp) {
|
||||
@ -848,7 +852,7 @@ void mba_upd_sr (uint32 set, uint32 clr, uint32 mb)
|
||||
{
|
||||
uint32 o_sr;
|
||||
|
||||
if (mb >= MBA_NUM)
|
||||
if (mb >= mba_active)
|
||||
return;
|
||||
o_sr = mba_sr[mb];
|
||||
if (set & MBASR_ABORTS)
|
||||
@ -894,14 +898,23 @@ return build_dib_tab();
|
||||
|
||||
t_stat mba_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr)
|
||||
{
|
||||
fprintf (st, "Massbus Adapters (MBA0, MBA1)\n\n");
|
||||
fprintf (st, "The Massbus adapters (MBA0, MBA1) simulate RH780's. RP disk drives get\n");
|
||||
fprintf (st, "assigned to MBA0 if it is enabled, and TU tape drives get assigned to\n");
|
||||
fprintf (st, "MBA1 if RP is enabled, and MBA0 otherwise.\n");
|
||||
fprint_set_help (st, dptr);
|
||||
fprint_show_help (st, dptr);
|
||||
fprint_reg_help (st, dptr);
|
||||
return SCPE_OK;
|
||||
const char *const text =
|
||||
/*567901234567890123456789012345678901234567890123456789012345678901234567890*/
|
||||
#if MBA_NUM == 3
|
||||
" Massbus Adapters (MBA0, MBA1, MBA2)\n\n"
|
||||
" The Massbus adapters (MBA0, MBA1, MBA2) simulate RH780's. RP, RPB and TU\n"
|
||||
" get assigned to MBA0, MBA1 and MBA2 in that order if they are enabled.\n"
|
||||
#else
|
||||
" Massbus Adapters (MBA0, MBA1)\n\n"
|
||||
" The Massbus adapters (MBA0, MBA1) simulate RH780's. RP disk drives get\n"
|
||||
" assigned to MBA0 if it is enabled, and TU tape drives get assigned to\n"
|
||||
" MBA1 if RP is enabled, and MBA0 otherwise.\n"
|
||||
#endif
|
||||
"1$Set commands\n"
|
||||
"1$Show commands\n"
|
||||
"1$Registers\n";
|
||||
|
||||
return scp_help (st, dptr, uptr, flag, text, "");
|
||||
}
|
||||
|
||||
const char *mba_description (DEVICE *dptr)
|
||||
@ -1004,11 +1017,9 @@ if ((mbregR[idx] && dibp->rd && /* conflict? */
|
||||
(mbregW[idx] && dibp->wr &&
|
||||
(mbregW[idx] != dibp->wr)) ||
|
||||
(mbabort[idx] && dibp->ack[0] &&
|
||||
(mbabort[idx] != dibp->ack[0]))) {
|
||||
sim_printf ("Massbus %s assignment conflict at %d\n",
|
||||
sim_dname (dptr), dibp->ba);
|
||||
return SCPE_STOP;
|
||||
}
|
||||
(mbabort[idx] != dibp->ack[0])))
|
||||
return sim_messagef (SCPE_STOP, "Massbus %s assignment conflict at %d\n",
|
||||
sim_dname (dptr), dibp->ba);
|
||||
if (dibp->rd) /* set rd dispatch */
|
||||
mbregR[idx] = dibp->rd;
|
||||
if (dibp->wr) /* set wr dispatch */
|
||||
|
||||
@ -93,6 +93,7 @@ char cpu_boot_cmd[CBUFSIZE] = { 0 }; /* boot command */
|
||||
|
||||
static struct boot_dev boot_tab[] = {
|
||||
{ "RP", BOOT_MB, 0 },
|
||||
{ "RPB", BOOT_MB, 0 },
|
||||
{ "HK", BOOT_HK, 0 },
|
||||
{ "RL", BOOT_RL, 0 },
|
||||
{ "RQ", BOOT_UDA, 1 << 24 },
|
||||
|
||||
@ -110,12 +110,13 @@
|
||||
|
||||
#define NEXUS_NUM 16 /* number of nexus */
|
||||
#define MCTL_NUM 2 /* number of mem ctrl */
|
||||
#define MBA_NUM 2 /* number of MBA's */
|
||||
#define MBA_NUM 3 /* number of MBA's */
|
||||
#define TR_MCTL0 1 /* nexus assignments */
|
||||
#define TR_MCTL1 2
|
||||
#define TR_UBA 3
|
||||
#define TR_MBA0 8
|
||||
#define TR_MBA1 9
|
||||
#define TR_MBA2 10
|
||||
#define TR_CI 14
|
||||
#define NEXUS_HLVL (IPL_HMAX - IPL_HMIN + 1)
|
||||
#define SCB_NEXUS 0x100 /* nexus intr base */
|
||||
@ -131,6 +132,7 @@
|
||||
#define IPL_UBA (0x15 - IPL_HMIN)
|
||||
#define IPL_MBA0 (0x15 - IPL_HMIN)
|
||||
#define IPL_MBA1 (0x15 - IPL_HMIN)
|
||||
#define IPL_MBA2 (0x15 - IPL_HMIN)
|
||||
#define IPL_CI (0x15 - IPL_HMIN)
|
||||
|
||||
/* Nexus interrupt macros */
|
||||
|
||||
@ -55,6 +55,7 @@ extern DEVICE rl_dev;
|
||||
extern DEVICE hk_dev;
|
||||
extern DEVICE rk_dev;
|
||||
extern DEVICE rp_dev;
|
||||
extern DEVICE rpb_dev;
|
||||
extern DEVICE ry_dev;
|
||||
extern DEVICE ts_dev;
|
||||
extern DEVICE tq_dev;
|
||||
@ -74,6 +75,7 @@ DEVICE *sim_devices[] = {
|
||||
&uba_dev,
|
||||
&mba_dev[0],
|
||||
&mba_dev[1],
|
||||
&mba_dev[2],
|
||||
&clk_dev,
|
||||
&tmr_dev,
|
||||
&tti_dev,
|
||||
@ -86,6 +88,7 @@ DEVICE *sim_devices[] = {
|
||||
&cr_dev,
|
||||
&lpt_dev,
|
||||
&rp_dev,
|
||||
&rpb_dev,
|
||||
&rl_dev,
|
||||
&hk_dev,
|
||||
&rk_dev,
|
||||
|
||||
@ -242,6 +242,10 @@
|
||||
RelativePath="..\PDP11\pdp11_rp.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\PDP11\pdp11_rpb.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\PDP11\pdp11_rq.c"
|
||||
>
|
||||
|
||||
@ -246,6 +246,10 @@
|
||||
RelativePath="..\PDP11\pdp11_rp.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\PDP11\pdp11_rpb.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\PDP11\pdp11_rq.c"
|
||||
>
|
||||
|
||||
@ -246,6 +246,10 @@
|
||||
RelativePath="..\PDP11\pdp11_rp.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\PDP11\pdp11_rpb.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\PDP11\pdp11_rq.c"
|
||||
>
|
||||
|
||||
16
makefile
16
makefile
@ -1779,10 +1779,10 @@ VAX750 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
|
||||
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
|
||||
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
|
||||
${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
|
||||
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_tu.c \
|
||||
${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_dup.c \
|
||||
${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \
|
||||
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c \
|
||||
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_rpb.c \
|
||||
${PDP11D}/pdp11_tu.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c \
|
||||
${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c \
|
||||
${PDP11D}/pdp11_rk.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c \
|
||||
$(NETWORK_DEPS)
|
||||
VAX750_OPT = -DVM_VAX -DVAX_750 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT}
|
||||
|
||||
@ -1829,10 +1829,10 @@ VAX8600 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
|
||||
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
|
||||
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
|
||||
${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
|
||||
${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_tu.c ${PDP11D}/pdp11_hk.c \
|
||||
${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_dup.c \
|
||||
${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \
|
||||
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c \
|
||||
${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_rpb.c ${PDP11D}/pdp11_tu.c \
|
||||
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c \
|
||||
${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c \
|
||||
${PDP11D}/pdp11_rk.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c \
|
||||
$(NETWORK_DEPS)
|
||||
VAX8600_OPT = -DVM_VAX -DVAX_860 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user