VAX, VAX780, VAX8600, MicroVAX1, MicroVAX2: Stabilize SAVE/RESTORE capabilities to allow restore of older version VAX and VAX780 save images and to properly allow simulator restores of processor model variations as discussed in #197 points 1 & 2
This commit is contained in:
parent
478ff3d453
commit
d75c072235
7 changed files with 54 additions and 8 deletions
|
@ -31,6 +31,13 @@
|
||||||
|
|
||||||
char sim_name[32] = "MicroVAX I (KA610)";
|
char sim_name[32] = "MicroVAX I (KA610)";
|
||||||
|
|
||||||
|
void vax_init(void)
|
||||||
|
{
|
||||||
|
sim_savename = "MicroVAX I (KA610)";
|
||||||
|
}
|
||||||
|
|
||||||
|
void (*sim_vm_init) (void) = &vax_init;
|
||||||
|
|
||||||
extern DEVICE cpu_dev;
|
extern DEVICE cpu_dev;
|
||||||
extern DEVICE mctl_dev;
|
extern DEVICE mctl_dev;
|
||||||
extern DEVICE tlb_dev;
|
extern DEVICE tlb_dev;
|
||||||
|
|
|
@ -31,10 +31,22 @@
|
||||||
|
|
||||||
#if defined(VAX_620)
|
#if defined(VAX_620)
|
||||||
char sim_name[] = "rtVAX1000 (KA620)";
|
char sim_name[] = "rtVAX1000 (KA620)";
|
||||||
|
|
||||||
|
void vax_init(void)
|
||||||
|
{
|
||||||
|
sim_savename = "rtVAX1000 (KA620)";
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
char sim_name[32] = "MicroVAX II (KA630)";
|
char sim_name[32] = "MicroVAX II (KA630)";
|
||||||
|
|
||||||
|
void vax_init(void)
|
||||||
|
{
|
||||||
|
sim_savename = "MicroVAX II (KA630)";
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void (*sim_vm_init) (void) = &vax_init;
|
||||||
|
|
||||||
extern DEVICE cpu_dev;
|
extern DEVICE cpu_dev;
|
||||||
extern DEVICE tlb_dev;
|
extern DEVICE tlb_dev;
|
||||||
extern DEVICE rom_dev;
|
extern DEVICE rom_dev;
|
||||||
|
|
|
@ -31,6 +31,13 @@
|
||||||
|
|
||||||
char sim_name[] = "VAX 11/780";
|
char sim_name[] = "VAX 11/780";
|
||||||
|
|
||||||
|
void vax_init(void)
|
||||||
|
{
|
||||||
|
sim_savename = "VAX780";
|
||||||
|
}
|
||||||
|
|
||||||
|
void (*sim_vm_init) (void) = &vax_init;
|
||||||
|
|
||||||
extern DEVICE cpu_dev;
|
extern DEVICE cpu_dev;
|
||||||
extern DEVICE tlb_dev;
|
extern DEVICE tlb_dev;
|
||||||
extern DEVICE sbi_dev;
|
extern DEVICE sbi_dev;
|
||||||
|
|
|
@ -31,6 +31,13 @@
|
||||||
|
|
||||||
char sim_name[] = "VAX 8600";
|
char sim_name[] = "VAX 8600";
|
||||||
|
|
||||||
|
void vax_init(void)
|
||||||
|
{
|
||||||
|
sim_savename = "VAX 8600";
|
||||||
|
}
|
||||||
|
|
||||||
|
void (*sim_vm_init) (void) = &vax_init;
|
||||||
|
|
||||||
extern DEVICE cpu_dev;
|
extern DEVICE cpu_dev;
|
||||||
extern DEVICE tlb_dev;
|
extern DEVICE tlb_dev;
|
||||||
extern DEVICE abus_dev;
|
extern DEVICE abus_dev;
|
||||||
|
|
|
@ -32,6 +32,13 @@
|
||||||
|
|
||||||
char sim_name[64] = "MicroVAX 3900";
|
char sim_name[64] = "MicroVAX 3900";
|
||||||
|
|
||||||
|
void vax_init(void)
|
||||||
|
{
|
||||||
|
sim_savename = "VAX";
|
||||||
|
}
|
||||||
|
|
||||||
|
void (*sim_vm_init) (void) = &vax_init;
|
||||||
|
|
||||||
extern DEVICE cpu_dev;
|
extern DEVICE cpu_dev;
|
||||||
extern DEVICE tlb_dev;
|
extern DEVICE tlb_dev;
|
||||||
extern DEVICE rom_dev;
|
extern DEVICE rom_dev;
|
||||||
|
|
18
scp.c
18
scp.c
|
@ -528,10 +528,12 @@ static const char *sim_sa64 = "64b addresses";
|
||||||
#else
|
#else
|
||||||
static const char *sim_sa64 = "32b addresses";
|
static const char *sim_sa64 = "32b addresses";
|
||||||
#endif
|
#endif
|
||||||
|
const char *sim_savename = sim_name; /* Simulator Name used in SAVE/RESTORE images */
|
||||||
|
|
||||||
/* Tables and strings */
|
/* Tables and strings */
|
||||||
|
|
||||||
const char save_vercur[] = "V3.5";
|
const char save_vercur[] = "V4.0";
|
||||||
|
const char save_ver35[] = "V3.5";
|
||||||
const char save_ver32[] = "V3.2";
|
const char save_ver32[] = "V3.2";
|
||||||
const char save_ver30[] = "V3.0";
|
const char save_ver30[] = "V3.0";
|
||||||
const struct scp_error {
|
const struct scp_error {
|
||||||
|
@ -5406,7 +5408,7 @@ REG *rptr;
|
||||||
|
|
||||||
fprintf (sfile, "%s\n%s\n%s\n%s\n%s\n%.0f\n",
|
fprintf (sfile, "%s\n%s\n%s\n%s\n%s\n%.0f\n",
|
||||||
save_vercur, /* [V2.5] save format */
|
save_vercur, /* [V2.5] save format */
|
||||||
sim_name, /* sim name */
|
sim_savename, /* sim name */
|
||||||
sim_si64, sim_sa64, eth_capabilities(), /* [V3.5] options */
|
sim_si64, sim_sa64, eth_capabilities(), /* [V3.5] options */
|
||||||
sim_time); /* [V3.2] sim time */
|
sim_time); /* [V3.2] sim time */
|
||||||
WRITE_I (sim_rtime); /* [V2.6] sim rel time */
|
WRITE_I (sim_rtime); /* [V2.6] sim rel time */
|
||||||
|
@ -5533,7 +5535,7 @@ t_addr k, high, old_capac;
|
||||||
t_value val, mask;
|
t_value val, mask;
|
||||||
t_stat r;
|
t_stat r;
|
||||||
size_t sz;
|
size_t sz;
|
||||||
t_bool v35, v32;
|
t_bool v40, v35, v32;
|
||||||
DEVICE *dptr;
|
DEVICE *dptr;
|
||||||
UNIT *uptr;
|
UNIT *uptr;
|
||||||
REG *rptr;
|
REG *rptr;
|
||||||
|
@ -5547,8 +5549,10 @@ t_bool force_restore = sim_switches & SWMASK ('F');
|
||||||
|
|
||||||
fstat (fileno (rfile), &rstat);
|
fstat (fileno (rfile), &rstat);
|
||||||
READ_S (buf); /* [V2.5+] read version */
|
READ_S (buf); /* [V2.5+] read version */
|
||||||
v35 = v32 = FALSE;
|
v40 = v35 = v32 = FALSE;
|
||||||
if (strcmp (buf, save_vercur) == 0) /* version 3.5? */
|
if (strcmp (buf, save_vercur) == 0) /* version 4.0? */
|
||||||
|
v40 = v35 = v32 = TRUE;
|
||||||
|
if (strcmp (buf, save_ver35) == 0) /* version 3.5? */
|
||||||
v35 = v32 = TRUE;
|
v35 = v32 = TRUE;
|
||||||
else if (strcmp (buf, save_ver32) == 0) /* version 3.2? */
|
else if (strcmp (buf, save_ver32) == 0) /* version 3.2? */
|
||||||
v32 = TRUE;
|
v32 = TRUE;
|
||||||
|
@ -5557,7 +5561,7 @@ else if (strcmp (buf, save_ver30) != 0) { /* version 3.0? */
|
||||||
return SCPE_INCOMP;
|
return SCPE_INCOMP;
|
||||||
}
|
}
|
||||||
READ_S (buf); /* read sim name */
|
READ_S (buf); /* read sim name */
|
||||||
if (strcmp (buf, sim_name)) { /* name match? */
|
if (strcmp (buf, sim_savename)) { /* name match? */
|
||||||
sim_printf ("Wrong system type: %s\n", buf);
|
sim_printf ("Wrong system type: %s\n", buf);
|
||||||
return SCPE_INCOMP;
|
return SCPE_INCOMP;
|
||||||
}
|
}
|
||||||
|
@ -5619,7 +5623,9 @@ for ( ;; ) { /* device loop */
|
||||||
READ_I (uptr->u5); /* [V3.0+] more dev spec */
|
READ_I (uptr->u5); /* [V3.0+] more dev spec */
|
||||||
READ_I (uptr->u6);
|
READ_I (uptr->u6);
|
||||||
READ_I (flg); /* [V2.10+] unit flags */
|
READ_I (flg); /* [V2.10+] unit flags */
|
||||||
|
if (v40) { /* [V4.0+] dynflags */
|
||||||
READ_I (uptr->dynflags);
|
READ_I (uptr->dynflags);
|
||||||
|
}
|
||||||
old_capac = uptr->capac; /* save current capacity */
|
old_capac = uptr->capac; /* save current capacity */
|
||||||
if (v35) { /* [V3.5+] capacity */
|
if (v35) { /* [V3.5+] capacity */
|
||||||
READ_I (uptr->capac);
|
READ_I (uptr->capac);
|
||||||
|
|
2
scp.h
2
scp.h
|
@ -229,6 +229,7 @@ extern struct timespec sim_deb_basetime; /* debug base time for r
|
||||||
extern UNIT *sim_clock_queue;
|
extern UNIT *sim_clock_queue;
|
||||||
extern int32 sim_is_running;
|
extern int32 sim_is_running;
|
||||||
extern char *sim_prompt; /* prompt string */
|
extern char *sim_prompt; /* prompt string */
|
||||||
|
extern const char *sim_savename; /* Simulator Name used in Save/Restore files */
|
||||||
extern t_value *sim_eval;
|
extern t_value *sim_eval;
|
||||||
extern volatile int32 stop_cpu;
|
extern volatile int32 stop_cpu;
|
||||||
extern uint32 sim_brk_types; /* breakpoint info */
|
extern uint32 sim_brk_types; /* breakpoint info */
|
||||||
|
@ -266,5 +267,4 @@ extern t_bool (*sim_vm_fprint_stopped) (FILE *st, t_stat reason);
|
||||||
extern t_value (*sim_vm_pc_value) (void);
|
extern t_value (*sim_vm_pc_value) (void);
|
||||||
extern t_bool (*sim_vm_is_subroutine_call) (t_addr **ret_addrs);
|
extern t_bool (*sim_vm_is_subroutine_call) (t_addr **ret_addrs);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue