From c729942de6c3d16d837dcdb441e51a2ea147a367 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sat, 26 Jan 2013 17:07:27 -0800 Subject: [PATCH] Added SET CPU AUTOBOOT to the MicroVAX II and VAX 3900 simulators --- VAX/vax630_defs.h | 21 +++++++++---- VAX/vax630_sysdev.c | 47 ++++++++++++++++++---------- VAX/vax_sysdev.c | 18 +++++++++++ VAX/vaxmod_defs.h | 13 ++++++-- Visual Studio Projects/VAX620.vcproj | 4 --- Visual Studio Projects/VAX630.vcproj | 4 --- 6 files changed, 74 insertions(+), 33 deletions(-) diff --git a/VAX/vax630_defs.h b/VAX/vax630_defs.h index bfe04eb6..23d0386b 100644 --- a/VAX/vax630_defs.h +++ b/VAX/vax630_defs.h @@ -91,9 +91,15 @@ /* CPU */ -#define CPU_MODEL_MODIFIERS \ - { MTAB_XTD|MTAB_VDV, 0, "MODEL", NULL, \ - NULL, &cpu_show_model }, +#define CPU_MODEL_MODIFIERS \ + { MTAB_XTD|MTAB_VDV, 0, "MODEL", NULL, \ + 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 */ #define MAXMEMWIDTH 24 /* max mem, std KA655 */ @@ -109,9 +115,6 @@ { UNIT_MSIZE, (1u << 23), NULL, "8M", &cpu_set_size }, \ { UNIT_MSIZE, (1u << 23) + (1u << 22), NULL, "12M", &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 */ @@ -385,4 +388,10 @@ int32 Map_WriteW (uint32 ba, int32 bc, uint16 *buf); #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 diff --git a/VAX/vax630_sysdev.c b/VAX/vax630_sysdev.c index 94cde966..74d7add5 100644 --- a/VAX/vax630_sysdev.c +++ b/VAX/vax630_sysdev.c @@ -148,7 +148,8 @@ int32 ka_mser = 0; /* KA630 mem sys err */ int32 ka_cear = 0; /* KA630 cpu err */ int32 ka_dear = 0; /* KA630 dma err */ 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_dep (t_value val, t_addr exta, UNIT *uptr, int32 sw); @@ -210,7 +211,6 @@ REG rom_reg[] = { MTAB rom_mod[] = { { UNIT_NODELAY, UNIT_NODELAY, "fast access", "NODELAY", 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 } }; @@ -256,13 +256,16 @@ DEVICE nvr_dev = { UNIT sysd_unit = { UDATA (NULL, 0, 0) }; REG sysd_reg[] = { - { HRDATAD (CONISP, conisp, 32, "console ISP") }, - { HRDATAD (CONPC, conpc, 32, "console PD") }, - { HRDATAD (CONPSL, conpsl, 32, "console PSL") }, - { HRDATAD (BDR, ka_bdr, 16, "KA630 boot diag") }, - { HRDATAD (MSER, ka_mser, 8, "KA630 mem sys err") }, - { HRDATAD (CEAR, ka_cear, 8, "KA630 cpu err") }, - { HRDATAD (DEAR, ka_dear, 8, "KA630 dma err") }, + { HRDATAD (CONISP, conisp, 32, "console ISP") }, + { HRDATAD (CONPC, conpc, 32, "console PD") }, + { HRDATAD (CONPSL, conpsl, 32, "console PSL") }, + { HRDATAD (BDR, ka_bdr, 16, "KA630 boot diag") }, + { HRDATAD (MSER, ka_mser, 8, "KA630 mem sys 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") }, + { FLDATAD (DIAG, ka_diag_full, 0, "KA630 Full Boot diagnostics") }, + { FLDATAD (HLTENAB, ka_hltenab, 0, "KA630 Autoboot/Halt Enable") }, { NULL } }; @@ -860,15 +863,27 @@ if (*rom == 0) { /* no boot? */ 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; } -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; } @@ -878,9 +893,9 @@ t_stat sysd_reset (DEVICE *dptr) { if (sim_switches & SWMASK ('P')) sysd_powerup (); /* powerup? */ 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) | \ - BDR_BRKENB | \ + (ka_hltenab ? BDR_BRKENB : 0) | \ 0xF); ka_mser = 0; ka_cear = 0; @@ -900,7 +915,7 @@ return "system devices"; t_stat sysd_powerup (void) { -rom_diag_full = 0; +ka_diag_full = 0; return SCPE_OK; } diff --git a/VAX/vax_sysdev.c b/VAX/vax_sysdev.c index 7cfbc21d..86353b26 100644 --- a/VAX/vax_sysdev.c +++ b/VAX/vax_sysdev.c @@ -216,6 +216,7 @@ int32 cso_csr = 0; /* control/status */ int32 cmctl_reg[CMCTLSIZE >> 2] = { 0 }; /* CMCTL reg */ int32 ka_cacr = 0; /* KA655 cache ctl */ 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_cnf = 0; /* SSC conf */ 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 (ADSK1, ssc_adsk[1], 32, "SSC address match 1 mask") }, { BRDATAD (CDGDAT, cdg_dat, 16, 32, CDASIZE >> 2, "cache diagnostic data store") }, + { FLDATAD (HLTENAB, ka_hltenab, 0, "KA655 Autoboot/Halt Enable") }, { NULL } }; @@ -1632,6 +1634,22 @@ fprintf (st, "MicroVAX 3900 (KA655)"); 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 */ t_stat sysd_reset (DEVICE *dptr) diff --git a/VAX/vaxmod_defs.h b/VAX/vaxmod_defs.h index 11d7fb5b..1d03939a 100644 --- a/VAX/vaxmod_defs.h +++ b/VAX/vaxmod_defs.h @@ -126,9 +126,13 @@ { UNIT_MSIZE, (1u << 27), NULL, "128M", &cpu_set_size }, \ { UNIT_MSIZE, (1u << 28), NULL, "256M", &cpu_set_size }, \ { UNIT_MSIZE, (1u << 29), NULL, "512M", &cpu_set_size } -#define CPU_MODEL_MODIFIERS \ - { MTAB_XTD|MTAB_VDV, 0, "MODEL", NULL, \ - NULL, &cpu_show_model }, +#define CPU_MODEL_MODIFIERS \ + { MTAB_XTD|MTAB_VDV, 0, "MODEL", NULL, \ + 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 */ @@ -432,4 +436,7 @@ int32 Map_WriteW (uint32 ba, int32 bc, uint16 *buf); #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 diff --git a/Visual Studio Projects/VAX620.vcproj b/Visual Studio Projects/VAX620.vcproj index f6bf62d3..d78d0be2 100644 --- a/Visual Studio Projects/VAX620.vcproj +++ b/Visual Studio Projects/VAX620.vcproj @@ -453,10 +453,6 @@ RelativePath="..\VAX\vax_defs.h" > - - - -