From dbed84c370ecb267fd9780f6f0db7fddd16eb744 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Fri, 30 Dec 2016 14:43:12 -0800 Subject: [PATCH] PDP11: Fix PCLK device to properly behave with a 0 value interval (65536) Also migrate to usecs remaining API to simplify producing the remaining interval value. --- PDP11/pdp11_pclk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/PDP11/pdp11_pclk.c b/PDP11/pdp11_pclk.c index 0c6553de..7fb7b7cf 100644 --- a/PDP11/pdp11_pclk.c +++ b/PDP11/pdp11_pclk.c @@ -274,6 +274,8 @@ else { uint32 delay = DMASK & ((pclk_csr & CSR_UPDN) ? (DMASK + 1 - val) : val); int32 rv; + if (delay == 0) + delay = DMASK + 1; rv = CSR_GETRATE (pclk_csr); /* get rate */ sim_activate_after (&pclk_unit, xtim[rv] * delay); /* schedule interrupt */ } @@ -288,7 +290,7 @@ if (!sim_is_active (&pclk_unit)) return pclk_ctr; rv = CSR_GETRATE (pclk_csr); /* get rate */ -val = (uint32)((sim_activate_time (&pclk_unit) / sim_timer_inst_per_sec ()) * (1000000 / xtim[rv])); +val = (uint32)((sim_activate_time_usecs (&pclk_unit) / xtim[rv])); val &= DMASK; if (pclk_csr & CSR_UPDN) val = DMASK + 1 - val;