Added SET CPU AUTOBOOT to the MicroVAX II and VAX 3900 simulators
This commit is contained in:
parent
6dcf5ba7d9
commit
c729942de6
6 changed files with 74 additions and 33 deletions
|
@ -91,9 +91,15 @@
|
||||||
|
|
||||||
/* CPU */
|
/* CPU */
|
||||||
|
|
||||||
#define CPU_MODEL_MODIFIERS \
|
#define CPU_MODEL_MODIFIERS \
|
||||||
{ MTAB_XTD|MTAB_VDV, 0, "MODEL", NULL, \
|
{ MTAB_XTD|MTAB_VDV, 0, "MODEL", NULL, \
|
||||||
NULL, &cpu_show_model },
|
NULL, &cpu_show_model }, \
|
||||||
|
{ MTAB_XTD|MTAB_VDV, 0, "DIAG", "DIAG={FULL|MIN}", \
|
||||||
|
&sysd_set_diag, &sysd_show_diag }, \
|
||||||
|
{ MTAB_XTD|MTAB_VDV, 0, "AUTOBOOT", "AUTOBOOT", \
|
||||||
|
&sysd_set_halt, &sysd_show_halt }, \
|
||||||
|
{ MTAB_XTD|MTAB_VDV|MTAB_NMO, 1, "NOAUTOBOOT", "NOAUTOBOOT",\
|
||||||
|
&sysd_set_halt, &sysd_show_halt },
|
||||||
/* Memory */
|
/* Memory */
|
||||||
|
|
||||||
#define MAXMEMWIDTH 24 /* max mem, std KA655 */
|
#define MAXMEMWIDTH 24 /* max mem, std KA655 */
|
||||||
|
@ -109,9 +115,6 @@
|
||||||
{ UNIT_MSIZE, (1u << 23), NULL, "8M", &cpu_set_size }, \
|
{ UNIT_MSIZE, (1u << 23), NULL, "8M", &cpu_set_size }, \
|
||||||
{ UNIT_MSIZE, (1u << 23) + (1u << 22), NULL, "12M", &cpu_set_size }, \
|
{ UNIT_MSIZE, (1u << 23) + (1u << 22), NULL, "12M", &cpu_set_size }, \
|
||||||
{ UNIT_MSIZE, (1u << 24), NULL, "16M", &cpu_set_size }
|
{ UNIT_MSIZE, (1u << 24), NULL, "16M", &cpu_set_size }
|
||||||
#define CPU_MODEL_MODIFIERS \
|
|
||||||
{ MTAB_XTD|MTAB_VDV, 0, "MODEL", NULL, \
|
|
||||||
NULL, &cpu_show_model },
|
|
||||||
|
|
||||||
/* Qbus I/O page */
|
/* Qbus I/O page */
|
||||||
|
|
||||||
|
@ -385,4 +388,10 @@ int32 Map_WriteW (uint32 ba, int32 bc, uint16 *buf);
|
||||||
|
|
||||||
#include "pdp11_io_lib.h"
|
#include "pdp11_io_lib.h"
|
||||||
|
|
||||||
|
extern t_stat sysd_set_diag (UNIT *uptr, int32 val, char *cptr, void *desc);
|
||||||
|
extern t_stat sysd_show_diag (FILE *st, UNIT *uptr, int32 val, void *desc);
|
||||||
|
extern t_stat sysd_set_halt (UNIT *uptr, int32 val, char *cptr, void *desc);
|
||||||
|
extern t_stat sysd_show_halt (FILE *st, UNIT *uptr, int32 val, void *desc);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -148,7 +148,8 @@ int32 ka_mser = 0; /* KA630 mem sys err */
|
||||||
int32 ka_cear = 0; /* KA630 cpu err */
|
int32 ka_cear = 0; /* KA630 cpu err */
|
||||||
int32 ka_dear = 0; /* KA630 dma err */
|
int32 ka_dear = 0; /* KA630 dma err */
|
||||||
static uint32 rom_delay = 0;
|
static uint32 rom_delay = 0;
|
||||||
t_bool rom_diag_full = 0;
|
t_bool ka_diag_full = FALSE;
|
||||||
|
t_bool ka_hltenab = TRUE; /* Halt Enable / Autoboot flag */
|
||||||
|
|
||||||
t_stat rom_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw);
|
t_stat rom_ex (t_value *vptr, t_addr exta, UNIT *uptr, int32 sw);
|
||||||
t_stat rom_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw);
|
t_stat rom_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw);
|
||||||
|
@ -210,7 +211,6 @@ REG rom_reg[] = {
|
||||||
MTAB rom_mod[] = {
|
MTAB rom_mod[] = {
|
||||||
{ UNIT_NODELAY, UNIT_NODELAY, "fast access", "NODELAY", NULL },
|
{ UNIT_NODELAY, UNIT_NODELAY, "fast access", "NODELAY", NULL },
|
||||||
{ UNIT_NODELAY, 0, "1usec calibrated access", "DELAY", NULL },
|
{ UNIT_NODELAY, 0, "1usec calibrated access", "DELAY", NULL },
|
||||||
{ MTAB_XTD|MTAB_VDV, 0, "DIAG", "DIAG={FULL|MIN}", &rom_set_diag, &rom_show_diag },
|
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -256,13 +256,16 @@ DEVICE nvr_dev = {
|
||||||
UNIT sysd_unit = { UDATA (NULL, 0, 0) };
|
UNIT sysd_unit = { UDATA (NULL, 0, 0) };
|
||||||
|
|
||||||
REG sysd_reg[] = {
|
REG sysd_reg[] = {
|
||||||
{ HRDATAD (CONISP, conisp, 32, "console ISP") },
|
{ HRDATAD (CONISP, conisp, 32, "console ISP") },
|
||||||
{ HRDATAD (CONPC, conpc, 32, "console PD") },
|
{ HRDATAD (CONPC, conpc, 32, "console PD") },
|
||||||
{ HRDATAD (CONPSL, conpsl, 32, "console PSL") },
|
{ HRDATAD (CONPSL, conpsl, 32, "console PSL") },
|
||||||
{ HRDATAD (BDR, ka_bdr, 16, "KA630 boot diag") },
|
{ HRDATAD (BDR, ka_bdr, 16, "KA630 boot diag") },
|
||||||
{ HRDATAD (MSER, ka_mser, 8, "KA630 mem sys err") },
|
{ HRDATAD (MSER, ka_mser, 8, "KA630 mem sys err") },
|
||||||
{ HRDATAD (CEAR, ka_cear, 8, "KA630 cpu err") },
|
{ HRDATAD (CEAR, ka_cear, 8, "KA630 cpu err") },
|
||||||
{ HRDATAD (DEAR, ka_dear, 8, "KA630 dma err") },
|
{ HRDATAD (DEAR, ka_dear, 8, "KA630 dma err") },
|
||||||
|
{ HRDATAD (DEAR, ka_dear, 8, "KA630 dma err") },
|
||||||
|
{ FLDATAD (DIAG, ka_diag_full, 0, "KA630 Full Boot diagnostics") },
|
||||||
|
{ FLDATAD (HLTENAB, ka_hltenab, 0, "KA630 Autoboot/Halt Enable") },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -860,15 +863,27 @@ if (*rom == 0) { /* no boot? */
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
t_stat rom_set_diag (UNIT *uptr, int32 val, char *cptr, void *desc)
|
t_stat sysd_set_diag (UNIT *uptr, int32 val, char *cptr, void *desc)
|
||||||
{
|
{
|
||||||
if (cptr != NULL) rom_diag_full = strcmp(cptr, "MIN");
|
if (cptr != NULL) ka_diag_full = strcmp(cptr, "MIN");
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
t_stat rom_show_diag (FILE *st, UNIT *uptr, int32 val, void *desc)
|
t_stat sysd_show_diag (FILE *st, UNIT *uptr, int32 val, void *desc)
|
||||||
{
|
{
|
||||||
fprintf(st, "diag=%s", (rom_diag_full ? "full" :"min"));
|
fprintf(st, "DIAG=%s", (ka_diag_full ? "full" :"min"));
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
t_stat sysd_set_halt (UNIT *uptr, int32 val, char *cptr, void *desc)
|
||||||
|
{
|
||||||
|
ka_hltenab = val;
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
t_stat sysd_show_halt (FILE *st, UNIT *uptr, int32 val, void *desc)
|
||||||
|
{
|
||||||
|
fprintf(st, "%s", ka_hltenab ? "NOAUTOBOOT" : "AUTOBOOT");
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -878,9 +893,9 @@ t_stat sysd_reset (DEVICE *dptr)
|
||||||
{
|
{
|
||||||
if (sim_switches & SWMASK ('P')) sysd_powerup (); /* powerup? */
|
if (sim_switches & SWMASK ('P')) sysd_powerup (); /* powerup? */
|
||||||
ka_bdr = (BDR_POK | \
|
ka_bdr = (BDR_POK | \
|
||||||
((rom_diag_full ? BDC_NORM : BDC_SKPM) << BDR_V_BDC) | \
|
((ka_diag_full ? BDC_NORM : BDC_SKPM) << BDR_V_BDC) | \
|
||||||
(CPUC_ARB << BDR_V_CPUC) | \
|
(CPUC_ARB << BDR_V_CPUC) | \
|
||||||
BDR_BRKENB | \
|
(ka_hltenab ? BDR_BRKENB : 0) | \
|
||||||
0xF);
|
0xF);
|
||||||
ka_mser = 0;
|
ka_mser = 0;
|
||||||
ka_cear = 0;
|
ka_cear = 0;
|
||||||
|
@ -900,7 +915,7 @@ return "system devices";
|
||||||
|
|
||||||
t_stat sysd_powerup (void)
|
t_stat sysd_powerup (void)
|
||||||
{
|
{
|
||||||
rom_diag_full = 0;
|
ka_diag_full = 0;
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -216,6 +216,7 @@ int32 cso_csr = 0; /* control/status */
|
||||||
int32 cmctl_reg[CMCTLSIZE >> 2] = { 0 }; /* CMCTL reg */
|
int32 cmctl_reg[CMCTLSIZE >> 2] = { 0 }; /* CMCTL reg */
|
||||||
int32 ka_cacr = 0; /* KA655 cache ctl */
|
int32 ka_cacr = 0; /* KA655 cache ctl */
|
||||||
int32 ka_bdr = BDR_BRKENB; /* KA655 boot diag */
|
int32 ka_bdr = BDR_BRKENB; /* KA655 boot diag */
|
||||||
|
t_bool ka_hltenab = 1; /* Halt Enable / Autoboot flag */
|
||||||
int32 ssc_base = SSCBASE; /* SSC base */
|
int32 ssc_base = SSCBASE; /* SSC base */
|
||||||
int32 ssc_cnf = 0; /* SSC conf */
|
int32 ssc_cnf = 0; /* SSC conf */
|
||||||
int32 ssc_bto = 0; /* SSC timeout */
|
int32 ssc_bto = 0; /* SSC timeout */
|
||||||
|
@ -468,6 +469,7 @@ REG sysd_reg[] = {
|
||||||
{ HRDATAD (ADSM1, ssc_adsm[1], 32, "SSC address match 1 address") },
|
{ HRDATAD (ADSM1, ssc_adsm[1], 32, "SSC address match 1 address") },
|
||||||
{ HRDATAD (ADSK1, ssc_adsk[1], 32, "SSC address match 1 mask") },
|
{ HRDATAD (ADSK1, ssc_adsk[1], 32, "SSC address match 1 mask") },
|
||||||
{ BRDATAD (CDGDAT, cdg_dat, 16, 32, CDASIZE >> 2, "cache diagnostic data store") },
|
{ BRDATAD (CDGDAT, cdg_dat, 16, 32, CDASIZE >> 2, "cache diagnostic data store") },
|
||||||
|
{ FLDATAD (HLTENAB, ka_hltenab, 0, "KA655 Autoboot/Halt Enable") },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1632,6 +1634,22 @@ fprintf (st, "MicroVAX 3900 (KA655)");
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t_stat sysd_set_halt (UNIT *uptr, int32 val, char *cptr, void *desc)
|
||||||
|
{
|
||||||
|
ka_hltenab = val;
|
||||||
|
if (ka_hltenab)
|
||||||
|
ka_bdr |= BDR_BRKENB;
|
||||||
|
else
|
||||||
|
ka_bdr &= ~BDR_BRKENB;
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
t_stat sysd_show_halt (FILE *st, UNIT *uptr, int32 val, void *desc)
|
||||||
|
{
|
||||||
|
fprintf(st, "%s", ka_hltenab ? "NOAUTOBOOT" : "AUTOBOOT");
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/* SYSD reset */
|
/* SYSD reset */
|
||||||
|
|
||||||
t_stat sysd_reset (DEVICE *dptr)
|
t_stat sysd_reset (DEVICE *dptr)
|
||||||
|
|
|
@ -126,9 +126,13 @@
|
||||||
{ UNIT_MSIZE, (1u << 27), NULL, "128M", &cpu_set_size }, \
|
{ UNIT_MSIZE, (1u << 27), NULL, "128M", &cpu_set_size }, \
|
||||||
{ UNIT_MSIZE, (1u << 28), NULL, "256M", &cpu_set_size }, \
|
{ UNIT_MSIZE, (1u << 28), NULL, "256M", &cpu_set_size }, \
|
||||||
{ UNIT_MSIZE, (1u << 29), NULL, "512M", &cpu_set_size }
|
{ UNIT_MSIZE, (1u << 29), NULL, "512M", &cpu_set_size }
|
||||||
#define CPU_MODEL_MODIFIERS \
|
#define CPU_MODEL_MODIFIERS \
|
||||||
{ MTAB_XTD|MTAB_VDV, 0, "MODEL", NULL, \
|
{ MTAB_XTD|MTAB_VDV, 0, "MODEL", NULL, \
|
||||||
NULL, &cpu_show_model },
|
NULL, &cpu_show_model }, \
|
||||||
|
{ MTAB_XTD|MTAB_VDV, 0, "AUTOBOOT", "AUTOBOOT", \
|
||||||
|
&sysd_set_halt, &sysd_show_halt }, \
|
||||||
|
{ MTAB_XTD|MTAB_VDV|MTAB_NMO, 1, "NOAUTOBOOT", "NOAUTOBOOT",\
|
||||||
|
&sysd_set_halt, &sysd_show_halt },
|
||||||
|
|
||||||
|
|
||||||
/* Cache diagnostic space */
|
/* Cache diagnostic space */
|
||||||
|
@ -432,4 +436,7 @@ int32 Map_WriteW (uint32 ba, int32 bc, uint16 *buf);
|
||||||
|
|
||||||
#include "pdp11_io_lib.h"
|
#include "pdp11_io_lib.h"
|
||||||
|
|
||||||
|
extern t_stat sysd_set_halt (UNIT *uptr, int32 val, char *cptr, void *desc);
|
||||||
|
extern t_stat sysd_show_halt (FILE *st, UNIT *uptr, int32 val, void *desc);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -453,10 +453,6 @@
|
||||||
RelativePath="..\VAX\vax_defs.h"
|
RelativePath="..\VAX\vax_defs.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\VAX\vaxmod_defs.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Resource Files"
|
Name="Resource Files"
|
||||||
|
|
|
@ -453,10 +453,6 @@
|
||||||
RelativePath="..\VAX\vax_defs.h"
|
RelativePath="..\VAX\vax_defs.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\VAX\vaxmod_defs.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Resource Files"
|
Name="Resource Files"
|
||||||
|
|
Loading…
Add table
Reference in a new issue