From d216297a06f9746458f0906ab8a189452bce3eea Mon Sep 17 00:00:00 2001 From: Richard Cornwell Date: Tue, 21 Jun 2022 09:47:02 -0400 Subject: [PATCH] KA10: Fixed DK10 to properly interrupt. --- PDP10/kx10_dk.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/PDP10/kx10_dk.c b/PDP10/kx10_dk.c index 053fe77b..f8bcde88 100644 --- a/PDP10/kx10_dk.c +++ b/PDP10/kx10_dk.c @@ -80,7 +80,7 @@ DEVICE dk_dev = { NUM_DEVS_DK, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, - &dk_dib, DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &dk_dib, DEV_DISABLE | DEV_DEBUG | DEV_DIS, 0, dev_debug, NULL, NULL, NULL, NULL, NULL, &dk_description }; @@ -190,16 +190,30 @@ set_clock: /* Bump counter by 1 */ void dk_test (UNIT *uptr) { - int dev; + int dev; + double us; + int32 t; + if (uptr->CLK_REG & (~RMASK)) uptr->STAT_REG |= CLK_OVF; uptr->CLK_REG &= RMASK; - if (uptr->INT_REG == uptr->CLK_REG) + if (uptr->INT_REG == uptr->CLK_REG) { uptr->STAT_REG |= CLK_FLG; + uptr->CLK_REG = 0; + } if (uptr->STAT_REG & (CLK_FLG|CLK_OVF)) { dev = ((uptr - dk_unit) << 2) + DK_DEVNUM; set_interrupt(dev, uptr->STAT_REG); } + if (uptr->STAT_REG & CLK_EN) { + if (uptr->INT_REG < uptr->CLK_REG) /* Count until overflow */ + uptr->CLK_TIM = 01000000; + else + uptr->CLK_TIM = uptr->INT_REG; + t = uptr->CLK_TIM - uptr->CLK_REG; + us = (double)(t) * 10.0; + sim_activate_after_d(uptr, us); + } } /* Timer service - */