diff --git a/PDP10/kx10_cpu.c b/PDP10/kx10_cpu.c index 0c2f5567..a9f3ec1d 100644 --- a/PDP10/kx10_cpu.c +++ b/PDP10/kx10_cpu.c @@ -10108,6 +10108,7 @@ for(i=0; i < 128; dev_irq[i++] = 0); sim_brk_types = SWMASK('E') | SWMASK('W') | SWMASK('R'); sim_brk_dflt = SWMASK ('E'); sim_clock_precalibrate_commands = pdp10_clock_precalibrate_commands; +sim_vm_initial_ips = 4 * SIM_INITIAL_IPS; sim_rtcn_init_unit (&cpu_unit[0], cpu_unit[0].wait, TMR_RTC); sim_activate(&cpu_unit[0], 10000); #if MPX_DEV diff --git a/PDP10/pdp10_cpu.c b/PDP10/pdp10_cpu.c index a37c8070..667199e2 100644 --- a/PDP10/pdp10_cpu.c +++ b/PDP10/pdp10_cpu.c @@ -2380,6 +2380,7 @@ if (M == NULL) sim_vm_pc_value = &pdp10_pc_value; sim_vm_is_subroutine_call = &cpu_is_pc_a_subroutine_call; sim_clock_precalibrate_commands = pdp10_clock_precalibrate_commands; +sim_vm_initial_ips = 2 * SIM_INITIAL_IPS; pcq_r = find_reg ("PCQ", NULL, dptr); if (pcq_r) pcq_r->qptr = 0; diff --git a/PDP8/pdp8_cpu.c b/PDP8/pdp8_cpu.c index 30782b78..3b1990df 100644 --- a/PDP8/pdp8_cpu.c +++ b/PDP8/pdp8_cpu.c @@ -1378,9 +1378,11 @@ return reason; */ static const char *pdp8_clock_precalibrate_commands[] = { - "-m 100 ISZ 110", - "-m 101 JMP 100", - "-m 102 JMP 100", + "106 100" + "-m 100 MQL MQA" + "-m 101 ISZ 112", + "-m 102 JMP I 106", + "-m 103 JMP I 106", "PC 100", NULL}; @@ -1398,6 +1400,7 @@ if (pcq_r) else return SCPE_IERR; sim_clock_precalibrate_commands = pdp8_clock_precalibrate_commands; +sim_vm_initial_ips = 10 * SIM_INITIAL_IPS; sim_brk_types = SWMASK ('E') | SWMASK('I'); sim_brk_dflt = SWMASK ('E'); return SCPE_OK; diff --git a/VAX/vax_cpu.c b/VAX/vax_cpu.c index 125d8475..b68cc72e 100644 --- a/VAX/vax_cpu.c +++ b/VAX/vax_cpu.c @@ -3319,6 +3319,7 @@ if (M == NULL) { /* first time init? */ sim_brk_types = sim_brk_dflt = SWMASK ('E'); sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call; sim_clock_precalibrate_commands = vax_clock_precalibrate_commands; + sim_vm_initial_ips = SIM_INITIAL_IPS; pcq_r = find_reg ("PCQ", NULL, dptr); if (pcq_r == NULL) return SCPE_IERR; diff --git a/doc/simh.doc b/doc/simh.doc index 725ff299..b3aa2fca 100644 Binary files a/doc/simh.doc and b/doc/simh.doc differ diff --git a/scp.h b/scp.h index ba2db861..3e2b1435 100644 --- a/scp.h +++ b/scp.h @@ -429,6 +429,7 @@ extern t_bool (*sim_vm_fprint_stopped) (FILE *st, t_stat reason); extern t_value (*sim_vm_pc_value) (void); extern t_bool (*sim_vm_is_subroutine_call) (t_addr **ret_addrs); extern const char **sim_clock_precalibrate_commands; +extern int32 sim_vm_initial_ips; /* base estimate of simulated instructions per second */ extern const char *sim_vm_interval_units; /* Simulator can change this - default "instructions" */ extern const char *sim_vm_step_unit; /* Simulator can change this - default "instruction" */ diff --git a/sim_timer.c b/sim_timer.c index 8dd4cf07..3fe6d119 100644 --- a/sim_timer.c +++ b/sim_timer.c @@ -150,6 +150,8 @@ return real_sim_os_ms_sleep (msec); t_bool sim_idle_enab = FALSE; /* global flag */ volatile t_bool sim_idle_wait = FALSE; /* global flag */ +int32 sim_vm_initial_ips = SIM_INITIAL_IPS; + static int32 sim_precalibrate_ips = SIM_INITIAL_IPS; static int32 sim_calb_tmr = -1; /* the system calibrated timer */ static int32 sim_calb_tmr_last = -1; /* shadow value when at sim> prompt */ @@ -3471,7 +3473,7 @@ sim_idle_stable = 0; double sim_host_speed_factor (void) { -if (sim_precalibrate_ips > SIM_INITIAL_IPS) +if (sim_precalibrate_ips > sim_vm_initial_ips) return 1.0; -return (double)SIM_INITIAL_IPS / (double)sim_precalibrate_ips; +return (double)sim_vm_initial_ips / (double)sim_precalibrate_ips; }