diff --git a/PDP1/pdp1_dt.c b/PDP1/pdp1_dt.c index e19677da..6c10f030 100644 --- a/PDP1/pdp1_dt.c +++ b/PDP1/pdp1_dt.c @@ -25,6 +25,7 @@ dt Type 550/555 DECtape + 15-Mar-17 RMS Fixed dt_seterr to clear successor states 09-Mar-17 RMS Fixed dt_seterr to handle nx unit select (COVERITY) 28-Mar-15 RMS Revised to use sim_printf 21-Dec-06 RMS Added 16-channel SBS support @@ -868,6 +869,7 @@ if (uptr != NULL) { /* valid unit? */ sim_activate (uptr, dt_dctime); /* sched decel */ DTS_SETSTA (DTS_DECF | (mot & DTS_DIR), 0); /* state = decel */ } + else DTS_SETSTA (mot, 0); /* clear 2nd, 3rd */ } DT_UPDINT; return; diff --git a/PDP11/pdp11_tc.c b/PDP11/pdp11_tc.c index ca029d7b..e5782c4d 100644 --- a/PDP11/pdp11_tc.c +++ b/PDP11/pdp11_tc.c @@ -25,6 +25,7 @@ tc TC11/TU56 DECtape + 15-Mar-17 RMS Fixed to defer error interrupts (Paul Koning) 14-Mar-17 RMS Fixed spurious interrupt when setting GO (Paul Koning) 04-Dec-16 RMS Revised to model TCCM correctly (Josh Dersch) 23-Oct-13 RMS Revised for new boot setup routine @@ -1049,7 +1050,9 @@ return SCPE_OK; /* Utility routines */ -/* Set error flag */ +/* Set error flag + Done must be deferred to allow time for interrupt setup (RSTS V4) +*/ void dt_seterr (UNIT *uptr, int32 e) { @@ -1058,7 +1061,7 @@ int32 mot = DTS_GETMOT (uptr->STATE); tcst = tcst | e; /* set error flag */ tccm = tccm | CSR_ERR; if (!(tccm & CSR_DONE)) { /* not done? */ - DT_SETDONE; + sim_activate (&dt_dev.units[DT_TIMER], dt_ctime); /* sched done */ } if (mot >= DTS_ACCF) { /* ~stopped or stopping? */ sim_cancel (uptr); /* cancel activity */ @@ -1067,6 +1070,7 @@ if (mot >= DTS_ACCF) { /* ~stopped or stopping? sim_activate (uptr, dt_dctime); /* sched decel */ DTS_SETSTA (DTS_DECF | (mot & DTS_DIR), 0); /* state = decel */ } +else DTS_SETSTA (mot, 0); /* clear 2nd, 3rd */ return; } diff --git a/PDP18B/pdp18b_dt.c b/PDP18B/pdp18b_dt.c index d29f392c..4dabbdd1 100644 --- a/PDP18B/pdp18b_dt.c +++ b/PDP18B/pdp18b_dt.c @@ -27,6 +27,7 @@ (PDP-9) TC02/TU55 DECtape (PDP-15) TC15/TU56 DECtape + 15-Mar-17 RMS Fixed dt_seterr to clear successor states 09-Mar-17 RMS Fixed dt_seterr to handle nx unit select (COVERITY) 10-Mar-16 RMS Added 3-cycle databreak set/show entries 07-Mar-16 RMS Revised for dynamically allocated memory @@ -1283,6 +1284,7 @@ if (uptr != NULL) { /* valid select? */ sim_activate (uptr, dt_dctime); /* sched decel */ DTS_SETSTA (DTS_DECF | (mot & DTS_DIR), 0); /* state = decel */ } + else DTS_SETSTA (mot, 0); /* clear 2nd, 3rd */ } DT_UPDINT; return; diff --git a/PDP8/pdp8_dt.c b/PDP8/pdp8_dt.c index 8caf47a7..fb7d7bed 100644 --- a/PDP8/pdp8_dt.c +++ b/PDP8/pdp8_dt.c @@ -1,6 +1,6 @@ /* pdp8_dt.c: PDP-8 DECtape simulator - Copyright (c) 1993-2013, Robert M Supnik + Copyright (c) 1993-2017, Robert M Supnik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -25,6 +25,7 @@ dt TC08/TU56 DECtape + 15-Mar-17 RMS Fixed dt_seterr to clear successor states 17-Sep-13 RMS Changed to use central set_bootpc routine 23-Jun-06 RMS Fixed switch conflict in ATTACH 07-Jan-06 RMS Fixed unaligned register access bug (Doug Carman) @@ -1073,6 +1074,7 @@ if (mot >= DTS_ACCF) { /* ~stopped or stopping? sim_activate (uptr, dt_dctime); /* sched decel */ DTS_SETSTA (DTS_DECF | (mot & DTS_DIR), 0); /* state = decel */ } +else DTS_SETSTA (mot, 0); /* clear 2nd, 3rd */ DT_UPDINT; return; }