TIMER: Provide a means for VM to indicate its expected calibration rate
As reported and discussed in #817 This allows RUNLIMIT to provide useful results on fast or slow host systems.
This commit is contained in:
parent
03466a6806
commit
1c589030ae
7 changed files with 14 additions and 5 deletions
|
@ -10108,6 +10108,7 @@ for(i=0; i < 128; dev_irq[i++] = 0);
|
||||||
sim_brk_types = SWMASK('E') | SWMASK('W') | SWMASK('R');
|
sim_brk_types = SWMASK('E') | SWMASK('W') | SWMASK('R');
|
||||||
sim_brk_dflt = SWMASK ('E');
|
sim_brk_dflt = SWMASK ('E');
|
||||||
sim_clock_precalibrate_commands = pdp10_clock_precalibrate_commands;
|
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_rtcn_init_unit (&cpu_unit[0], cpu_unit[0].wait, TMR_RTC);
|
||||||
sim_activate(&cpu_unit[0], 10000);
|
sim_activate(&cpu_unit[0], 10000);
|
||||||
#if MPX_DEV
|
#if MPX_DEV
|
||||||
|
|
|
@ -2380,6 +2380,7 @@ if (M == NULL)
|
||||||
sim_vm_pc_value = &pdp10_pc_value;
|
sim_vm_pc_value = &pdp10_pc_value;
|
||||||
sim_vm_is_subroutine_call = &cpu_is_pc_a_subroutine_call;
|
sim_vm_is_subroutine_call = &cpu_is_pc_a_subroutine_call;
|
||||||
sim_clock_precalibrate_commands = pdp10_clock_precalibrate_commands;
|
sim_clock_precalibrate_commands = pdp10_clock_precalibrate_commands;
|
||||||
|
sim_vm_initial_ips = 2 * SIM_INITIAL_IPS;
|
||||||
pcq_r = find_reg ("PCQ", NULL, dptr);
|
pcq_r = find_reg ("PCQ", NULL, dptr);
|
||||||
if (pcq_r)
|
if (pcq_r)
|
||||||
pcq_r->qptr = 0;
|
pcq_r->qptr = 0;
|
||||||
|
|
|
@ -1378,9 +1378,11 @@ return reason;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char *pdp8_clock_precalibrate_commands[] = {
|
static const char *pdp8_clock_precalibrate_commands[] = {
|
||||||
"-m 100 ISZ 110",
|
"106 100"
|
||||||
"-m 101 JMP 100",
|
"-m 100 MQL MQA"
|
||||||
"-m 102 JMP 100",
|
"-m 101 ISZ 112",
|
||||||
|
"-m 102 JMP I 106",
|
||||||
|
"-m 103 JMP I 106",
|
||||||
"PC 100",
|
"PC 100",
|
||||||
NULL};
|
NULL};
|
||||||
|
|
||||||
|
@ -1398,6 +1400,7 @@ if (pcq_r)
|
||||||
else
|
else
|
||||||
return SCPE_IERR;
|
return SCPE_IERR;
|
||||||
sim_clock_precalibrate_commands = pdp8_clock_precalibrate_commands;
|
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_types = SWMASK ('E') | SWMASK('I');
|
||||||
sim_brk_dflt = SWMASK ('E');
|
sim_brk_dflt = SWMASK ('E');
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
|
|
|
@ -3319,6 +3319,7 @@ if (M == NULL) { /* first time init? */
|
||||||
sim_brk_types = sim_brk_dflt = SWMASK ('E');
|
sim_brk_types = sim_brk_dflt = SWMASK ('E');
|
||||||
sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call;
|
sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call;
|
||||||
sim_clock_precalibrate_commands = vax_clock_precalibrate_commands;
|
sim_clock_precalibrate_commands = vax_clock_precalibrate_commands;
|
||||||
|
sim_vm_initial_ips = SIM_INITIAL_IPS;
|
||||||
pcq_r = find_reg ("PCQ", NULL, dptr);
|
pcq_r = find_reg ("PCQ", NULL, dptr);
|
||||||
if (pcq_r == NULL)
|
if (pcq_r == NULL)
|
||||||
return SCPE_IERR;
|
return SCPE_IERR;
|
||||||
|
|
BIN
doc/simh.doc
BIN
doc/simh.doc
Binary file not shown.
1
scp.h
1
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_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);
|
||||||
extern const char **sim_clock_precalibrate_commands;
|
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_interval_units; /* Simulator can change this - default "instructions" */
|
||||||
extern const char *sim_vm_step_unit; /* Simulator can change this - default "instruction" */
|
extern const char *sim_vm_step_unit; /* Simulator can change this - default "instruction" */
|
||||||
|
|
||||||
|
|
|
@ -150,6 +150,8 @@ return real_sim_os_ms_sleep (msec);
|
||||||
t_bool sim_idle_enab = FALSE; /* global flag */
|
t_bool sim_idle_enab = FALSE; /* global flag */
|
||||||
volatile t_bool sim_idle_wait = 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_precalibrate_ips = SIM_INITIAL_IPS;
|
||||||
static int32 sim_calb_tmr = -1; /* the system calibrated timer */
|
static int32 sim_calb_tmr = -1; /* the system calibrated timer */
|
||||||
static int32 sim_calb_tmr_last = -1; /* shadow value when at sim> prompt */
|
static int32 sim_calb_tmr_last = -1; /* shadow value when at sim> prompt */
|
||||||
|
@ -3471,7 +3473,7 @@ sim_idle_stable = 0;
|
||||||
double
|
double
|
||||||
sim_host_speed_factor (void)
|
sim_host_speed_factor (void)
|
||||||
{
|
{
|
||||||
if (sim_precalibrate_ips > SIM_INITIAL_IPS)
|
if (sim_precalibrate_ips > sim_vm_initial_ips)
|
||||||
return 1.0;
|
return 1.0;
|
||||||
return (double)SIM_INITIAL_IPS / (double)sim_precalibrate_ips;
|
return (double)sim_vm_initial_ips / (double)sim_precalibrate_ips;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue