From 01f93e950787573ec5471d6df1ce65228cc1ea71 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 9 Jan 2020 23:53:41 -0800 Subject: [PATCH] SCP: Add SHOW RUNLIMIT to examine the state/condition of any execution limit --- doc/simh_doc.doc | Bin 273408 -> 268288 bytes scp.c | 83 ++++++++++++++++++++++++++++++++++++++++------- scp.h | 1 + 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index feaa0a54227e58ab39cbec28395e38fe61bfd628..5078c9412fc3ca32a7a5ada0876b52a9512fe461 100644 GIT binary patch delta 29115 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 G>i+|==u!v( delta 32745 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 show displays the device specific show commands\n" "++++++++ available\n" #define HLP_SHOW_CONFIG "*Commands SHOW" @@ -1555,6 +1565,7 @@ static const char simh_help[] = #define HLP_SHOW_VIDEO "*Commands SHOW" #define HLP_SHOW_CLOCKS "*Commands SHOW" #define HLP_SHOW_ON "*Commands SHOW" +#define HLP_SHOW_RUNLIMIT "*Commands SHOW" #define HLP_SHOW_SEND "*Commands SHOW" #define HLP_SHOW_EXPECT "*Commands SHOW" #define HLP_HELP "*Commands HELP" @@ -2470,6 +2481,8 @@ static CTAB set_glob_tab[] = { { "QUIET", &set_quiet, 1, HLP_SET_QUIET }, { "NOQUIET", &set_quiet, 0, HLP_SET_QUIET }, { "PROMPT", &set_prompt, 0, HLP_SET_PROMPT }, + { "RUNLIMIT", &set_runlimit, 1, HLP_RUNLIMIT }, + { "NORUNLIMIT", &set_runlimit, 0, HLP_RUNLIMIT }, { NULL, NULL, 0 } }; @@ -2523,6 +2536,7 @@ static SHTAB show_glob_tab[] = { { "SEND", &sim_show_send, 0, HLP_SHOW_SEND }, { "EXPECT", &sim_show_expect, 0, HLP_SHOW_EXPECT }, { "ON", &show_on, 0, HLP_SHOW_ON }, + { "RUNLIMIT", &show_runlimit, 0, HLP_SHOW_RUNLIMIT }, { NULL, NULL, 0 } }; @@ -6107,7 +6121,6 @@ t_stat show_queue (FILE *st, DEVICE *dnotused, UNIT *unotused, int32 flag, CONST { DEVICE *dptr; UNIT *uptr; -int32 accum; MEMFILE buf; memset (&buf, 0, sizeof (buf)); @@ -6122,7 +6135,6 @@ else { fprintf (st, "%s event queue status, time = %.0f, executing %s instructions/sec\n", sim_name, sim_time, sim_fmt_numeric (inst_per_sec)); - accum = 0; for (uptr = sim_clock_queue; uptr != QUEUE_LIST_END; uptr = uptr->next) { if (uptr == &sim_step_unit) fprintf (st, " Step timer"); @@ -6138,16 +6150,15 @@ else { else fprintf (st, " Unknown"); if (inst_per_sec != 0.0) - tim = sim_fmt_secs(((accum + uptr->time) / sim_timer_inst_per_sec ()) + (uptr->usecs_remaining / 1000000.0)); + tim = sim_fmt_secs(((_sim_activate_queue_time (uptr) - 1) / sim_timer_inst_per_sec ()) + (uptr->usecs_remaining / 1000000.0)); if (uptr->usecs_remaining) - fprintf (st, " at %d plus %.0f usecs%s%s%s%s\n", accum + uptr->time, uptr->usecs_remaining, + fprintf (st, " at %d plus %.0f usecs%s%s%s%s\n", _sim_activate_queue_time (uptr) - 1, uptr->usecs_remaining, (*tim) ? " (" : "", tim, (*tim) ? " total)" : "", (uptr->flags & UNIT_IDLE) ? " (Idle capable)" : ""); else - fprintf (st, " at %d%s%s%s%s\n", accum + uptr->time, + fprintf (st, " at %d%s%s%s%s\n", _sim_activate_queue_time (uptr) - 1, (*tim) ? " (" : "", tim, (*tim) ? ")" : "", (uptr->flags & UNIT_IDLE) ? " (Idle capable)" : ""); - accum = accum + uptr->time; } } sim_show_clock_queues (st, dnotused, unotused, flag, cptr); @@ -6900,7 +6911,8 @@ num = (int32) get_uint (gbuf, 10, INT_MAX, &r); if ((r != SCPE_OK) || (num == 0)) /* error? */ return sim_messagef (SCPE_ARG, "Invalid argument: %s\n", gbuf); cptr = get_glyph (cptr, gbuf, 0); /* get next glyph */ -if (MATCH_CMD (gbuf, "CYCLES") == 0) +if ((gbuf[0] == '\0') || + (MATCH_CMD (gbuf, "CYCLES") == 0)) sim_switches &= ~SWMASK ('T'); else { int i; @@ -6931,15 +6943,53 @@ sim_runlimit_enabled = TRUE; sim_cancel (&sim_runlimit_unit); sim_runlimit_switches = sim_switches; if (sim_runlimit_switches & SWMASK ('T')) { - sim_runlimit_d = num * usec_factor; + sim_runlimit_d_initial = sim_runlimit_d = num * usec_factor; return sim_activate_after_d (&sim_runlimit_unit, sim_runlimit_d); } else { - sim_runlimit = num; + sim_runlimit_initial = sim_runlimit = num; return sim_activate (&sim_runlimit_unit, sim_runlimit); } } +t_stat set_runlimit (int32 flag, CONST char *cptr) +{ +return runlimit_cmd (flag, cptr); +} + +t_stat show_runlimit (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, CONST char *cptr) +{ +if (sim_runlimit_enabled) { + if (sim_runlimit_switches & SWMASK ('T')) { + double inst_per_sec = sim_timer_inst_per_sec (); + + if (sim_runlimit_d_initial != sim_runlimit_d) { + fprintf (st, "%s initially, ", sim_fmt_secs (sim_runlimit_d_initial / 1000000.0)); + if (sim_is_active (&sim_runlimit_unit)) + fprintf (st, "and %s remaining\n", sim_fmt_secs (sim_runlimit_d / 1000000.0)); + else + fprintf (st, "expired now\n"); + } + else + fprintf (st, "%s\n", sim_fmt_secs (sim_runlimit_d_initial / 1000000.0)); + } + else { + if (sim_runlimit_initial != sim_runlimit) { + fprintf (st, "%d cycles initially, ", sim_runlimit_initial); + if (sim_is_active (&sim_runlimit_unit)) + fprintf (st, "and %d cycles remaining\n", sim_activate_time (&sim_runlimit_unit)); + else + fprintf (st, "expired now\n"); + } + else + fprintf (st, "%d cycles\n", sim_runlimit_initial); + } + } +else + fprintf (st, "Run Limit Disabled\n"); +return SCPE_OK; +} + /* Reset devices start..end Inputs: @@ -8290,7 +8340,7 @@ if (sim_runlimit_enabled) { if (sim_runlimit_switches & SWMASK ('T')) sim_runlimit_d = sim_activate_time_usecs (&sim_runlimit_unit); else - sim_runlimit = sim_activate_time (&sim_runlimit_unit); + sim_runlimit = sim_activate_time (&sim_runlimit_unit) - 1; } if ((SCPE_BARE_STATUS(r) == SCPE_STOP) && /* WRU exit from sim_instr() */ @@ -11273,7 +11323,7 @@ return (((uptr->next) || AIO_IS_ACTIVE(uptr) || ((uptr->dynflags & UNIT_TMR_UNIT result = absolute activation time + 1, 0 if inactive */ -int32 _sim_activate_time (UNIT *uptr) +int32 _sim_activate_queue_time (UNIT *uptr) { UNIT *cptr; int32 accum; @@ -11287,11 +11337,20 @@ for (cptr = sim_clock_queue; cptr != QUEUE_LIST_END; cptr = cptr->next) { else accum = accum + cptr->time; if (cptr == uptr) - return accum + 1 + (int32)((uptr->usecs_remaining * sim_timer_inst_per_sec ()) / 1000000.0); + return accum + 1; } return 0; } +int32 _sim_activate_time (UNIT *uptr) +{ +int32 accum = _sim_activate_queue_time (uptr); + +if (accum) + return accum + (int32)((uptr->usecs_remaining * sim_timer_inst_per_sec ()) / 1000000.0); +return 0; +} + int32 sim_activate_time (UNIT *uptr) { int32 accum; diff --git a/scp.h b/scp.h index 7309da66..ae7b5b25 100644 --- a/scp.h +++ b/scp.h @@ -142,6 +142,7 @@ t_stat _sim_activate_after_abs (UNIT *uptr, double usecs_walltime); t_stat sim_cancel (UNIT *uptr); t_bool sim_is_active (UNIT *uptr); int32 sim_activate_time (UNIT *uptr); +int32 _sim_activate_queue_time (UNIT *uptr); int32 _sim_activate_time (UNIT *uptr); double sim_activate_time_usecs (UNIT *uptr); t_stat sim_run_boot_prep (int32 flag);