t_stat rtc_svc (UNIT *uptr) { M[RTC_CTR] = (M[RTC_CTR] + 1) & DMASK; /* incr counter */ if (M[RTC_CTR] == 0) /* ovflo? set ready */ dev_done = dev_done | INT_RTC; sim_activate (&rtc_unit, sim_rtc_calb (rtc_tps)); /* reactivate */ return SCPE_OK; }
t_stat clk_svc (UNIT *uptr) { int32 t; if ( DEV_IS_BUSY(INT_CLK) ) { DEV_CLR_BUSY( INT_CLK ) ; DEV_SET_DONE( INT_CLK ) ; DEV_UPDATE_INTR ; } t = sim_rtc_calb (clk_tps[clk_sel]); /* calibrate delay */ sim_activate (&clk_unit, t); /* reactivate unit */ if (clk_adj[clk_sel] > 0) /* clk >= 60Hz? */ tmxr_poll = t * clk_adj[clk_sel]; /* poll is longer */ else tmxr_poll = t / (-clk_adj[clk_sel]); /* poll is shorter */ return SCPE_OK; }