From da3f851d70d943cf3d821d1a15e5980c0a85bc17 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sat, 8 Jun 2019 13:55:06 -0700 Subject: [PATCH] TIMER: Add minimal tick based calibration APIs. --- doc/simh.doc | Bin 286208 -> 284160 bytes sim_timer.c | 23 +++++++++++++++++++---- sim_timer.h | 2 ++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/doc/simh.doc b/doc/simh.doc index 43dd3652ec333e014e4ae1de0863516f224587ab..6e39cea847c6b09f13e94c49b7f512ada31d2e85 100644 GIT binary patch delta 38836 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 NQpqy3xx;w%zW~7{ruP5< delta 40159 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 diff --git a/sim_timer.c b/sim_timer.c index 96b6b14c..883f7232 100644 --- a/sim_timer.c +++ b/sim_timer.c @@ -840,6 +840,11 @@ return sim_rtcn_init_unit (NULL, time, tmr); int32 sim_rtcn_init_unit (UNIT *uptr, int32 time, int32 tmr) { +return sim_rtcn_init_unit_ticks (uptr, time, tmr, 0); +} + +int32 sim_rtcn_init_unit_ticks (UNIT *uptr, int32 time, int32 tmr, int32 ticksper) +{ if (time == 0) time = 1; if (tmr == SIM_INTERNAL_CLK) @@ -851,7 +856,7 @@ else { /* * If we'd previously succeeded in calibrating a tick value, then use that * delay as a better default to setup when we're re-initialized. - * Re-initializing happens on any boot or after any breakpoint/continue. + * Re-initializing happens on any boot. */ if (rtc_currd[tmr]) time = rtc_currd[tmr]; @@ -890,6 +895,11 @@ _rtcn_configure_calibrated_clock (tmr); return time; } +int32 sim_rtcn_calb_tick (int32 tmr) +{ +return sim_rtcn_calb (rtc_hz[tmr], tmr); +} + int32 sim_rtcn_calb (int32 ticksper, int32 tmr) { uint32 new_rtime, delta_rtime, last_idle_pct; @@ -1181,11 +1191,11 @@ for (tmr=clocks=0; tmr<=SIM_NTIMERS; ++tmr) { if (sim_idle_calib_pct && (sim_idle_calib_pct != 100)) fprintf (st, " Calib Skip when Idle >: %u%%\n", sim_idle_calib_pct); if (rtc_clock_calib_skip_idle[tmr]) - fprintf (st, " Calibs Skip While Idle: %u\n", rtc_clock_calib_skip_idle[tmr]); + fprintf (st, " Calibs Skip While Idle: %s\n", sim_fmt_numeric ((double)rtc_clock_calib_skip_idle[tmr])); if (rtc_clock_calib_backwards[tmr]) - fprintf (st, " Calibs Skip Backwards: %u\n", rtc_clock_calib_backwards[tmr]); + fprintf (st, " Calibs Skip Backwards: %s\n", sim_fmt_numeric ((double)rtc_clock_calib_backwards[tmr])); if (rtc_clock_calib_gap2big[tmr]) - fprintf (st, " Calibs Skip Gap Too Big: %u\n", rtc_clock_calib_gap2big[tmr]); + fprintf (st, " Calibs Skip Gap Too Big: %s\n", sim_fmt_numeric ((double)rtc_clock_calib_gap2big[tmr])); } if (rtc_gtime[tmr]) fprintf (st, " Instruction Time: %.0f\n", rtc_gtime[tmr]); @@ -3290,4 +3300,9 @@ for (tmr=0; tmr<=SIM_NTIMERS; tmr++) { } reset_all_p (0); sim_run_boot_prep (RU_GO); +for (tmr=0; tmr<=SIM_NTIMERS; tmr++) { + if (rtc_calib_initializations[tmr]) + rtc_calib_initializations[tmr] = 1; + } +sim_inst_per_sec_last = sim_precalibrate_ips; } diff --git a/sim_timer.h b/sim_timer.h index 0ec85b89..67934969 100644 --- a/sim_timer.h +++ b/sim_timer.h @@ -108,10 +108,12 @@ void sim_timespec_diff (struct timespec *diff, struct timespec *min, struct time double sim_timenow_double (void); int32 sim_rtcn_init (int32 time, int32 tmr); int32 sim_rtcn_init_unit (UNIT *uptr, int32 time, int32 tmr); +int32 sim_rtcn_init_unit_ticks (UNIT *uptr, int32 time, int32 tmr, int32 ticksper); void sim_rtcn_get_time (struct timespec *now, int tmr); t_stat sim_rtcn_tick_ack (uint32 time, int32 tmr); void sim_rtcn_init_all (void); int32 sim_rtcn_calb (int32 ticksper, int32 tmr); +int32 sim_rtcn_calb_tick (int32 tmr); int32 sim_rtc_init (int32 time); int32 sim_rtc_calb (int32 ticksper); t_stat sim_set_timers (int32 arg, CONST char *cptr);