Added VAX 11/785 model variation to the VAX 11/780 simulator based on VAX 8600/8650 model variants and some information from Matt Burke's VAX 11/785 page at 9track.net
This commit is contained in:
parent
2a5caf87a7
commit
48ba877259
3 changed files with 53 additions and 5 deletions
|
@ -56,6 +56,8 @@
|
|||
/* Microcode constructs */
|
||||
|
||||
#define VAX780_SID (1 << 24) /* system ID */
|
||||
#define VAX780_TYP (0 << 23) /* sys type: 780 */
|
||||
#define VAX785_TYP (1 << 23) /* sys type: 785 */
|
||||
#define VAX780_ECO (7 << 19) /* ucode revision */
|
||||
#define VAX780_PLANT (0 << 12) /* plant (Salem NH) */
|
||||
#define VAX780_SN (1234)
|
||||
|
@ -68,6 +70,10 @@
|
|||
#define VER_WCSP (VER_FPLA) /* WCS primary version */
|
||||
#define VER_WCSS 0x12 /* WCS secondary version */
|
||||
#define VER_PCS ((VER_WCSS >> 4) & 0x3) /* PCS version */
|
||||
#define VER_WCSP_785 0x01 /* 785 WCS primary version */
|
||||
#define VER_WCSS_785 0x00 /* 785 WCS secondary version */
|
||||
#define VER_PCS_785 0x04 /* 785 PCS version */
|
||||
#define VER_MTCH_785 0x04 /* 785 PCS/WCS primary version */
|
||||
|
||||
/* Interrupts */
|
||||
|
||||
|
@ -142,6 +148,11 @@
|
|||
#define LP_MBZ84_TEST(r) if ((((uint32)(r)) & 0xF8C00000) != 0) RSVD_OPND_FAULT
|
||||
#define LP_MBZ92_TEST(r) if ((((uint32)(r)) & 0x7FC00000) != 0) RSVD_OPND_FAULT
|
||||
|
||||
/* CPU */
|
||||
|
||||
#define CPU_MODEL_MODIFIERS \
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "MODEL", "MODEL={785|780}", \
|
||||
&cpu_set_model, &cpu_show_model },
|
||||
/* Memory */
|
||||
|
||||
#define MAXMEMWIDTH 23 /* max mem, MS780C */
|
||||
|
@ -470,6 +481,9 @@ t_stat show_nexus (FILE *st, UNIT *uptr, int32 val, void *desc);
|
|||
void sbi_set_errcnf (void);
|
||||
int32 clk_cosched (int32 wait);
|
||||
|
||||
t_stat cpu_set_model (UNIT *uptr, int32 val, char *cptr, void *desc);
|
||||
t_stat cpu_show_model (FILE *st, UNIT *uptr, int32 val, void *desc);
|
||||
|
||||
#include "pdp11_io_lib.h"
|
||||
|
||||
#endif
|
||||
|
|
|
@ -108,6 +108,7 @@ uint32 sbi_sc = 0; /* SBI silo comparator *
|
|||
uint32 sbi_mt = 0; /* SBI maintenance */
|
||||
uint32 sbi_er = 0; /* SBI error status */
|
||||
uint32 sbi_tmo = 0; /* SBI timeout addr */
|
||||
int32 sys_model = 0; /* 780 or 785 */
|
||||
static char cpu_boot_cmd[CBUFSIZE] = { 0 }; /* boot command */
|
||||
|
||||
static t_stat (*nexusR[NEXUS_NUM])(int32 *dat, int32 ad, int32 md);
|
||||
|
@ -389,7 +390,10 @@ switch (rg) {
|
|||
break;
|
||||
|
||||
case MT_SID: /* SID */
|
||||
val = VAX780_SID | VAX780_ECO | VAX780_PLANT | VAX780_SN;
|
||||
if (sys_model)
|
||||
val = VAX780_SID | VAX785_TYP | VAX780_ECO | VAX780_PLANT | VAX780_SN;
|
||||
else
|
||||
val = VAX780_SID | VAX780_TYP | VAX780_ECO | VAX780_PLANT | VAX780_SN;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -814,3 +818,21 @@ for (i = 0; (dptr = sim_devices[i]) != NULL; i++) { /* loop thru dev */
|
|||
} /* end for */
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
t_stat cpu_set_model (UNIT *uptr, int32 val, char *cptr, void *desc)
|
||||
{
|
||||
if (cptr == NULL) return SCPE_ARG;
|
||||
if (strcmp(cptr, "780") == 0)
|
||||
sys_model = 0;
|
||||
else if (strcmp(cptr, "785") == 0)
|
||||
sys_model = 1;
|
||||
else
|
||||
return SCPE_ARG;
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
t_stat cpu_show_model (FILE *st, UNIT *uptr, int32 val, void *desc)
|
||||
{
|
||||
fprintf (st, "model=%s", (sys_model ? "785" : "780"));
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
|
|
@ -110,6 +110,9 @@
|
|||
#define COMM_WCSV 0153 /* WCS version */
|
||||
#define COMM_WCSS 0154 /* WCS secondary */
|
||||
#define COMM_FPLV 0155 /* FPLA version */
|
||||
#define COMM_MTCH_785 0153 /* 785 PCS/WCS version */
|
||||
#define COMM_WCSP_785 0154 /* 785 WCS version */
|
||||
#define COMM_WCSS_785 0155 /* 785 WCS secondary */
|
||||
#define COMM_DATA 0x300 /* comm data return */
|
||||
#define MISC_MASK 0xFF /* console data mask */
|
||||
#define MISC_SWDN 0x1 /* software done */
|
||||
|
@ -1054,6 +1057,7 @@ return;
|
|||
t_stat fl_reset (DEVICE *dptr)
|
||||
{
|
||||
uint32 i;
|
||||
extern int32 sys_model;
|
||||
|
||||
fl_esr = FL_STAINC;
|
||||
fl_ecode = 0; /* clear error */
|
||||
|
@ -1065,10 +1069,18 @@ sim_cancel (&fl_unit); /* cancel drive */
|
|||
fl_unit.TRACK = 0;
|
||||
for (i = 0; i < COMM_LNT; i++)
|
||||
comm_region[i] = 0;
|
||||
comm_region[COMM_FPLV] = VER_FPLA;
|
||||
comm_region[COMM_PCSV] = VER_PCS;
|
||||
comm_region[COMM_WCSV] = VER_WCSP;
|
||||
comm_region[COMM_WCSS] = VER_WCSS;
|
||||
if (sys_model) { /* 785 */
|
||||
comm_region[COMM_WCSS_785] = VER_WCSS_785;
|
||||
comm_region[COMM_WCSP_785] = VER_WCSP_785;
|
||||
comm_region[COMM_MTCH_785] = VER_MTCH_785;
|
||||
comm_region[COMM_PCSV] = VER_PCS_785;
|
||||
}
|
||||
else { /* 780 */
|
||||
comm_region[COMM_FPLV] = VER_FPLA;
|
||||
comm_region[COMM_PCSV] = VER_PCS;
|
||||
comm_region[COMM_WCSV] = VER_WCSP;
|
||||
comm_region[COMM_WCSS] = VER_WCSS;
|
||||
}
|
||||
comm_region[COMM_GH] = 1;
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue