From a1785ac1d0f4ba5cc23c861606e6108910f903f4 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Tue, 2 Mar 2021 05:35:04 -0800 Subject: [PATCH] SCP: Add optional VM routine that is invoked on specific REGister updates The new REG_DEPOSIT register flag bit indicates that updates to a REGister with this flag specified will invoke the sim_vm_reg_update routine after the data has been updated. --- doc/simh.doc | Bin 307712 -> 310784 bytes scp.c | 26 +++++++++++++++++++++++--- scp.h | 1 + sim_defs.h | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/doc/simh.doc b/doc/simh.doc index 94f038ef76a2a1d60a5137694d4b1e5488ca0e86..6fda17d06dd34255cfe5825d279b92aa36cc5bd6 100644 GIT binary patch delta 36682 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 for (rptr = dptr->registers; rptr->name != NULL; rptr++) { if (rptr->flags & REG_HIDDEN) continue; + side_effects += ((rptr->flags & REG_DEPOSIT) != 0); if (rptr->depth > 1) sprintf (rangebuf, "[%d:%d]", 0, rptr->depth-1); else @@ -3172,8 +3175,11 @@ else { namebuf = (char *)calloc (max_namelen + 1, sizeof (*namebuf)); fprintf (st, "\nThe %s device implements these registers:\n\n", dptr->name); for (rptr = dptr->registers; rptr->name != NULL; rptr++) { + char note[2]; + if (rptr->flags & REG_HIDDEN) continue; + strlcpy (note, (side_effects != 0) ? ((rptr->flags & REG_DEPOSIT) ? "+" : " ") : "", sizeof (note)); if (rptr->depth <= 1) sprintf (namebuf, "%*s", -((int)max_namelen), rptr->name); else { @@ -3181,16 +3187,22 @@ else { sprintf (namebuf, "%s%*s", rptr->name, (int)(strlen(rptr->name))-((int)max_namelen), rangebuf); } if (all_unique) { - fprintf (st, " %s %4d %s\n", namebuf, rptr->width, rptr->desc ? rptr->desc : ""); + fprintf (st, " %s %4d %s %s\n", namebuf, rptr->width, note, rptr->desc ? rptr->desc : ""); continue; } trptr = find_reg_glob (rptr->name, &tptr, &tdptr); if ((trptr == NULL) || (tdptr != dptr)) - fprintf (st, " %s %s %4d %s\n", dptr->name, namebuf, rptr->width, rptr->desc ? rptr->desc : ""); + fprintf (st, " %s %s %4d %s %s\n", dptr->name, namebuf, rptr->width, note, rptr->desc ? rptr->desc : ""); else - fprintf (st, " %*s %s %4d %s\n", (int)strlen(dptr->name), "", namebuf, rptr->width, rptr->desc ? rptr->desc : ""); + fprintf (st, " %*s %s %4d %s %s\n", (int)strlen(dptr->name), "", namebuf, rptr->width, note, rptr->desc ? rptr->desc : ""); } free (namebuf); + if (side_effects) + fprintf (st, "\n + Deposits to %s register%s will have some additional\n" + " side effects which can be suppressed if the deposit is\n" + " done with the -Z switch specified\n", + (side_effects == 1) ? "this" : "these", + (side_effects == 1) ? "" : "s"); } } @@ -9441,6 +9453,11 @@ void put_rval_pcchk (REG *rptr, uint32 idx, t_value val, t_bool pc_chk) size_t sz; t_value mask; uint32 *ptr; +t_value prev_val; + +if ((!(sim_switches & SWMASK ('Z'))) && + (rptr->flags & REG_DEPOSIT) && sim_vm_reg_update) + prev_val = get_rval (rptr, idx); #define PUT_RVAL(sz,rp,id,v,m) \ *(((sz *) rp->loc) + id) = \ @@ -9499,6 +9516,9 @@ else PUT_RVAL (t_uint64, rptr, idx, val, mask); #else else PUT_RVAL (uint32, rptr, idx, val, mask); #endif +if ((!(sim_switches & SWMASK ('Z'))) && + (rptr->flags & REG_DEPOSIT) && sim_vm_reg_update) + sim_vm_reg_update (rptr, idx, prev_val, val); } void put_rval (REG *rptr, uint32 idx, t_value val) diff --git a/scp.h b/scp.h index 5f423afe..711a8ca7 100644 --- a/scp.h +++ b/scp.h @@ -371,6 +371,7 @@ extern t_addr (*sim_vm_parse_addr) (DEVICE *dptr, CONST char *cptr, CONST char * extern t_bool (*sim_vm_fprint_stopped) (FILE *st, t_stat reason); extern t_value (*sim_vm_pc_value) (void); extern t_bool (*sim_vm_is_subroutine_call) (t_addr **ret_addrs); +extern void (*sim_vm_reg_update) (REG *rptr, uint32 idx, t_value prev_val, t_value new_val); extern const char **sim_clock_precalibrate_commands; extern int32 sim_vm_initial_ips; /* base estimate of simulated instructions per second */ extern const char *sim_vm_interval_units; /* Simulator can change this - default "instructions" */ diff --git a/sim_defs.h b/sim_defs.h index 6beb2146..dbc8c96b 100644 --- a/sim_defs.h +++ b/sim_defs.h @@ -710,6 +710,7 @@ struct REG { #define REG_VMIO 00400 /* use VM data print/parse */ #define REG_VMAD 01000 /* use VM addr print/parse */ #define REG_FIT 02000 /* fit access to size */ +#define REG_DEPOSIT 04000 /* call VM routine after update */ #define REG_HRO (REG_RO | REG_HIDDEN) /* hidden, read only */ #define REG_V_UF 16 /* device specific */