From 5cd0ea4d59aa826966ce96c3bca4fee0c899459e Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Wed, 18 Jan 2017 23:57:14 -0800 Subject: [PATCH] VAX730, VAX750, VAX780, VAX8600: Fix interval timer ics value - When the running timer is explicitly stopped the ics value needs to be determined before canceling the active unit. --- VAX/vax730_stddev.c | 2 +- VAX/vax750_stddev.c | 4 ++-- VAX/vax780_stddev.c | 4 ++-- VAX/vax860_stddev.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/VAX/vax730_stddev.c b/VAX/vax730_stddev.c index 658578f9..3c8017dc 100644 --- a/VAX/vax730_stddev.c +++ b/VAX/vax730_stddev.c @@ -654,11 +654,11 @@ void iccs_wr (int32 val) { sim_debug_bits_hdr (TMR_DB_REG, &tmr_dev, "iccs_wr()", tmr_iccs_bits, tmr_iccs, val, TRUE); if ((val & TMR_CSR_RUN) == 0) { /* clearing run? */ - sim_cancel (&tmr_unit); /* cancel timer */ if (tmr_iccs & TMR_CSR_RUN) { /* run 1 -> 0? */ tmr_icr = icr_rd (); /* update itr */ sim_rtcn_calb (0, TMR_CLK); /* stop timer */ } + sim_cancel (&tmr_unit); /* cancel timer */ } if (val & CSR_DONE) /* Interrupt Acked? */ sim_rtcn_tick_ack (20, TMR_CLK); /* Let timers know */ diff --git a/VAX/vax750_stddev.c b/VAX/vax750_stddev.c index 1f831a12..6a4dcc65 100644 --- a/VAX/vax750_stddev.c +++ b/VAX/vax750_stddev.c @@ -642,7 +642,7 @@ return "console terminal output"; int32 iccs_rd (void) { -sim_debug (TMR_DB_REG, &tmr_dev, "iccs_rd() = 0x%08X\n", tmr_iccs & TMR_CSR_RD); +sim_debug_bits_hdr (TMR_DB_REG, &tmr_dev, "iccs_rd()", tmr_iccs_bits, tmr_iccs, tmr_iccs, TRUE); return tmr_iccs & TMR_CSR_RD; } @@ -650,11 +650,11 @@ void iccs_wr (int32 val) { sim_debug_bits_hdr (TMR_DB_REG, &tmr_dev, "iccs_wr()", tmr_iccs_bits, tmr_iccs, val, TRUE); if ((val & TMR_CSR_RUN) == 0) { /* clearing run? */ - sim_cancel (&tmr_unit); /* cancel timer */ if (tmr_iccs & TMR_CSR_RUN) { /* run 1 -> 0? */ tmr_icr = icr_rd (); /* update itr */ sim_rtcn_calb (0, TMR_CLK); /* stop timer */ } + sim_cancel (&tmr_unit); /* cancel timer */ } if (val & CSR_DONE) /* Interrupt Acked? */ sim_rtcn_tick_ack (20, TMR_CLK); /* Let timers know */ diff --git a/VAX/vax780_stddev.c b/VAX/vax780_stddev.c index aff8781a..4655f433 100644 --- a/VAX/vax780_stddev.c +++ b/VAX/vax780_stddev.c @@ -620,11 +620,11 @@ void iccs_wr (int32 val) { sim_debug_bits_hdr (TMR_DB_REG, &tmr_dev, "iccs_wr()", tmr_iccs_bits, tmr_iccs, val, TRUE); if ((val & TMR_CSR_RUN) == 0) { /* clearing run? */ - sim_cancel (&tmr_unit); /* cancel timer */ if (tmr_iccs & TMR_CSR_RUN) { /* run 1 -> 0? */ tmr_icr = icr_rd (); /* update itr */ sim_rtcn_calb (0, TMR_CLK); /* stop timer */ } + sim_cancel (&tmr_unit); /* cancel timer */ } if (val & CSR_DONE) /* Interrupt Acked? */ sim_rtcn_tick_ack (20, TMR_CLK); /* Let timers know */ @@ -673,7 +673,7 @@ int32 icr_rd (void) int32 result; if (tmr_iccs & TMR_CSR_RUN) { /* running? */ - uint32 usecs_remaining = (uint32)sim_timer_activate_time_usecs (&tmr_unit); + uint32 usecs_remaining = (uint32)sim_activate_time_usecs (&tmr_unit); result = (int32)(~usecs_remaining + 1); } diff --git a/VAX/vax860_stddev.c b/VAX/vax860_stddev.c index be4b2492..682466fc 100644 --- a/VAX/vax860_stddev.c +++ b/VAX/vax860_stddev.c @@ -755,11 +755,11 @@ void iccs_wr (int32 val) { sim_debug_bits_hdr (TMR_DB_REG, &tmr_dev, "iccs_wr()", tmr_iccs_bits, tmr_iccs, val, TRUE); if ((val & TMR_CSR_RUN) == 0) { /* clearing run? */ - sim_cancel (&tmr_unit); /* cancel timer */ if (tmr_iccs & TMR_CSR_RUN) { /* run 1 -> 0? */ tmr_icr = icr_rd (); /* update itr */ sim_rtcn_calb (0, TMR_CLK); /* stop timer */ } + sim_cancel (&tmr_unit); /* cancel timer */ } if (val & CSR_DONE) /* Interrupt Acked? */ sim_rtcn_tick_ack (20, TMR_CLK); /* Let timers know */