diff --git a/scp.c b/scp.c index 78c7c14..caedbe9 100644 --- a/scp.c +++ b/scp.c @@ -2996,6 +2996,13 @@ while (stat != SCPE_EXIT) { /* in case exit */ if (stat >= SCPE_BASE) /* error? */ sim_printf ("%s\n", sim_error_text (stat)); } + if ((sim_on_check[sim_do_depth]) && + (stat != SCPE_OK)) { + if ((stat <= SCPE_MAX_ERR) && sim_on_actions[sim_do_depth][stat]) + sim_brk_setact (sim_on_actions[sim_do_depth][stat]); + else + sim_brk_setact (sim_on_actions[sim_do_depth][0]); + } if (sim_vm_post != NULL) (*sim_vm_post) (TRUE); } /* end while */ @@ -4007,8 +4014,7 @@ do { stat = SCPE_OK; /* so adjust it to SCPE_OK */ if (staying && (sim_on_check[sim_do_depth]) && - (stat != SCPE_OK) && - (stat != SCPE_STEP)) { + (stat != SCPE_OK)) { if ((stat <= SCPE_MAX_ERR) && sim_on_actions[sim_do_depth][stat]) sim_brk_setact (sim_on_actions[sim_do_depth][stat]); else diff --git a/sim_timer.c b/sim_timer.c index 990cac9..38a2def 100644 --- a/sim_timer.c +++ b/sim_timer.c @@ -3457,10 +3457,12 @@ while (*cmd) exdep_cmd (EX_D, *(cmd++)); sim_switches = saved_switches; sim_cancel (&SIM_INTERNAL_UNIT); -sim_activate (&precalib_unit, sim_precalibrate_ips); start = sim_os_msec(); -sim_instr(); -end = sim_os_msec(); +do { + sim_activate (&precalib_unit, sim_precalibrate_ips); + sim_instr(); + end = sim_os_msec(); + } while ((end - start) < SIM_PRE_CALIBRATE_MIN_MS); sim_precalibrate_ips = (int32)(1000.0 * (sim_precalibrate_ips / (double)(end - start))); for (tmr=0; tmr<=SIM_NTIMERS; tmr++) { diff --git a/sim_timer.h b/sim_timer.h index 6f811fc..8e30491 100644 --- a/sim_timer.h +++ b/sim_timer.h @@ -78,6 +78,7 @@ int clock_gettime(int clock_id, struct timespec *tp); #define SIM_INITIAL_IPS 5000000 /* uncalibrated assumption */ /* about instructions per second */ +#define SIM_PRE_CALIBRATE_MIN_MS 100 /* minimum time to run precalibration activities */ #define SIM_IDLE_CAL 10 /* ms to calibrate */ #define SIM_IDLE_STMIN 2 /* min sec for stability */