From 61679ed8f0599b0f939211c54caac37f73ed56d4 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sun, 19 Nov 2017 08:18:02 -0800 Subject: [PATCH] SCP: Add optional write_callback to REGister structure called only on DEPOSIT Add necessary macros to populate this field and cleanup all the existing macros to be simpler. --- doc/simh.doc | Bin 274432 -> 292352 bytes scp.c | 5 ++ sim_defs.h | 179 ++++++++++++++++++++++++++------------------------- 3 files changed, 97 insertions(+), 87 deletions(-) diff --git a/doc/simh.doc b/doc/simh.doc index 9701466253c5b2ac92b0deaa39131eaefc8e139e..87369297ca17cba6878f26857d2d5875a0b670e5 100644 GIT binary patch delta 49665 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 H49)aUuaURj delta 33233 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 u;Q_&6!Qq92!~8=E2L=b33x|b=mn&Q$%loc) + id) & \ ~((m) << (rp)->offset)) | ((v) << (rp)->offset)) +if (rptr->write_callback) + old_val = get_rval (rptr, idx); if (rptr == sim_PC) sim_brk_npc (0); sz = SZ_R (rptr); @@ -7696,6 +7699,8 @@ else PUT_RVAL (t_uint64, rptr, idx, val, mask); #else else PUT_RVAL (uint32, rptr, idx, val, mask); #endif +if ((rptr->write_callback) && (!(sim_switches & SIM_SW_REST))) + rptr->write_callback (old_val, rptr, idx); return; } diff --git a/sim_defs.h b/sim_defs.h index 88dafd90..c76d2125 100644 --- a/sim_defs.h +++ b/sim_defs.h @@ -648,9 +648,12 @@ struct REG { uint32 depth; /* save depth */ const char *desc; /* description */ BITFIELD *fields; /* bit fields */ - uint32 flags; /* flags */ uint32 qptr; /* circ q ptr */ size_t str_size; /* structure size */ + void (*write_callback)(t_value old_value, REG *rptr, int idx); + /* called during DEPOSIT */ + /* NOTE: Flags MUST always be last since it is initialized outside of macro definitions */ + uint32 flags; /* flags */ }; /* Register flags */ @@ -855,111 +858,113 @@ struct MEMFILE { #define UDATA(act,fl,cap) NULL,act,NULL,NULL,NULL,0,0,(fl),0,(cap),0,NULL,0,0 +/* Internal use ONLY (see below) Generic Register declaration for all fields */ +#define _REGDATANF(nm,loc,rdx,wd,off,dep,desc,flds,qptr,siz,cbak) \ + nm, (loc), (rdx), (wd), (off), (dep), (desc), (flds), (qptr), (siz), (cbak) + +/* Right Justified Octal Register Data */ +#define ORDATA(nm,loc,wd) ORDATAD(nm,loc,wd,NULL) +/* Right Justified Decimal Register Data */ +#define DRDATA(nm,loc,wd) DRDATAD(nm,loc,wd,NULL) +/* Right Justified Hexadecimal Register Data */ +#define HRDATA(nm,loc,wd) HRDATAD(nm,loc,wd,NULL) +/* Right Justified Binary Register Data */ +#define BINRDATA(nm,loc,wd) BINRDATAD(nm,loc,wd,NULL) +/* One-bit binary flag at an arbitrary offset in a 32-bit word Register */ +#define FLDATA(nm,loc,pos) FLDATAD(nm,loc,pos,NULL) +/* Arbitrary location and Radix Register */ +#define GRDATA(nm,loc,rdx,wd,pos) GRDATAD(nm,loc,rdx,wd,pos,NULL) +/* Arrayed register whose data is kept in a standard C array Register */ +#define BRDATA(nm,loc,rdx,wd,dep) BRDATAD(nm,loc,rdx,wd,dep,NULL) +/* Arrayed register whose data is part of the UNIT structure */ +#define URDATA(nm,loc,rdx,wd,off,dep,fl) URDATAD(nm,loc,rdx,wd,off,dep,fl,NULL) +/* Arrayed register whose data is part of an arbitrary structure */ +#define STRDATA(nm,loc,rdx,wd,off,dep,siz,fl) STRDATAD(nm,loc,rdx,wd,off,dep,siz,fl,NULL) +/* Same as above, but with additional description initializer */ +#define ORDATAD(nm,loc,wd,desc) ORDATADF(nm,loc,wd,desc,NULL) +#define DRDATAD(nm,loc,wd,desc) DRDATADF(nm,loc,wd,desc,NULL) +#define HRDATAD(nm,loc,wd,desc) HRDATADF(nm,loc,wd,desc,NULL) +#define BINRDATAD(nm,loc,wd,desc) BINRDATADF(nm,loc,wd,desc,NULL) +#define FLDATAD(nm,loc,pos,desc) FLDATADF(nm,loc,pos,desc,NULL) +#define GRDATAD(nm,loc,rdx,wd,pos,desc) GRDATADF(nm,loc,rdx,wd,pos,desc,NULL) +#define BRDATAD(nm,loc,rdx,wd,dep,desc) BRDATADF(nm,loc,rdx,wd,dep,desc,NULL) +#define URDATAD(nm,loc,rdx,wd,off,dep,fl,desc) URDATADF(nm,loc,rdx,wd,off,dep,fl,desc,NULL) +#define STRDATAD(nm,loc,rdx,wd,off,dep,siz,fl,desc) STRDATADF(nm,loc,rdx,wd,off,dep,siz,fl,desc,NULL) +/* Same as above, but with additional description initializer, and bitfields */ +#define ORDATADF(nm,loc,wd,desc,flds) ORDATADFC(nm,loc,wd,desc,flds,NULL) +#define DRDATADF(nm,loc,wd,desc,flds) DRDATADFC(nm,loc,wd,desc,flds,NULL) +#define HRDATADF(nm,loc,wd,desc,flds) HRDATADFC(nm,loc,wd,desc,flds,NULL) +#define BINRDATADF(nm,loc,wd,desc,flds) BINRDATADFC(nm,loc,wd,desc,flds,NULL) +#define FLDATADF(nm,loc,pos,desc,flds) FLDATADFC(nm,loc,pos,desc,flds,NULL) +#define GRDATADF(nm,loc,rdx,wd,pos,desc,flds) GRDATADFC(nm,loc,rdx,wd,pos,desc,flds,NULL) +#define BRDATADF(nm,loc,rdx,wd,dep,desc,flds) BRDATADFC(nm,loc,rdx,wd,dep,desc,flds,NULL) +#define URDATADF(nm,loc,rdx,wd,off,dep,fl,desc,flds) URDATADFC(nm,loc,rdx,wd,off,dep,fl,desc,flds,NULL) +#define STRDATADF(nm,loc,rdx,wd,off,dep,siz,fl,desc,flds) STRDATADFC(nm,loc,rdx,wd,off,dep,siz,fl,desc,flds,NULL) + #if defined (__STDC__) || defined (_WIN32) /* Variants which depend on how macro arguments are convered to strings */ /* Generic Register declaration for all fields. If the register structure is extended, this macro will be retained and a new macro will be provided that populates the new register structure */ #define REGDATA(nm,loc,rdx,wd,off,dep,desc,flds,fl,qptr,siz) \ - #nm, &(loc), (rdx), (wd), (off), (dep), (desc), (flds), (fl), (qptr), (siz) -/* Internal use ONLY (see below) Generic Register declaration for all fields */ -#define _REGDATA(nm,loc,rdx,wd,off,dep,desc,flds,fl,qptr,siz) \ - nm, &(loc), (rdx), (wd), (off), (dep), (desc), (flds), (fl), (qptr), (siz) -/* Right Justified Octal Register Data */ -#define ORDATA(nm,loc,wd) #nm, &(loc), 8, (wd), 0, 1, NULL, NULL -/* Right Justified Decimal Register Data */ -#define DRDATA(nm,loc,wd) #nm, &(loc), 10, (wd), 0, 1, NULL, NULL -/* Right Justified Hexadecimal Register Data */ -#define HRDATA(nm,loc,wd) #nm, &(loc), 16, (wd), 0, 1, NULL, NULL -/* Right Justified Binary Register Data */ -#define BINRDATA(nm,loc,wd) #nm, &(loc), 2, (wd), 0, 1, NULL, NULL -/* One-bit binary flag at an arbitrary offset in a 32-bit word Register */ -#define FLDATA(nm,loc,pos) #nm, &(loc), 2, 1, (pos), 1, NULL, NULL -/* Arbitrary location and Radix Register */ -#define GRDATA(nm,loc,rdx,wd,pos) #nm, &(loc), (rdx), (wd), (pos), 1, NULL, NULL -/* Arrayed register whose data is kept in a standard C array Register */ -#define BRDATA(nm,loc,rdx,wd,dep) #nm, (loc), (rdx), (wd), 0, (dep), NULL, NULL -/* Same as above, but with additional description initializer */ -#define ORDATAD(nm,loc,wd,desc) #nm, &(loc), 8, (wd), 0, 1, (desc), NULL -#define DRDATAD(nm,loc,wd,desc) #nm, &(loc), 10, (wd), 0, 1, (desc), NULL -#define HRDATAD(nm,loc,wd,desc) #nm, &(loc), 16, (wd), 0, 1, (desc), NULL -#define BINRDATAD(nm,loc,wd,desc) #nm, &(loc), 2, (wd), 0, 1, (desc), NULL -#define FLDATAD(nm,loc,pos,desc) #nm, &(loc), 2, 1, (pos), 1, (desc), NULL -#define GRDATAD(nm,loc,rdx,wd,pos,desc) #nm, &(loc), (rdx), (wd), (pos), 1, (desc), NULL -#define BRDATAD(nm,loc,rdx,wd,dep,desc) #nm, (loc), (rdx), (wd), 0, (dep), (desc), NULL -/* Same as above, but with additional description initializer, and bitfields */ -#define ORDATADF(nm,loc,wd,desc,flds) #nm, &(loc), 8, (wd), 0, 1, (desc), (flds) -#define DRDATADF(nm,loc,wd,desc,flds) #nm, &(loc), 10, (wd), 0, 1, (desc), (flds) -#define HRDATADF(nm,loc,wd,desc,flds) #nm, &(loc), 16, (wd), 0, 1, (desc), (flds) -#define BINRDATADF(nm,loc,wd) #nm, &(loc), 2, (wd), 0, 1, NULL, NULL -#define FLDATADF(nm,loc,pos,desc,flds) #nm, &(loc), 2, 1, (pos), 1, (desc), (flds) -#define GRDATADF(nm,loc,rdx,wd,pos,desc,flds) #nm, &(loc), (rdx), (wd), (pos), 1, (desc), (flds) -#define BRDATADF(nm,loc,rdx,wd,dep,desc,flds) #nm, (loc), (rdx), (wd), 0, (dep), (desc), (flds) + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,qptr,siz,NULL),(fl) +/* Same as above, but with callback initializer */ +#define ORDATADFC(nm,loc,wd,desc,flds,cbk) \ + _REGDATANF(#nm,&(loc),8,wd,0,1,desc,flds,0,0,cbk) +#define DRDATADFC(nm,loc,wd,desc,flds,cbk) \ + _REGDATANF(#nm,&(loc),10,wd,0,1,desc,flds,0,0,cbk) +#define HRDATADFC(nm,loc,wd,desc,flds,cbk) \ + _REGDATANF(#nm,&(loc),16,wd,0,1,desc,flds,0,0,cbk) +#define BINRDATADFC(nm,loc,wd,desc,flds,cbk) \ + _REGDATANF(#nm,&(loc),2,wd,0,1,desc,flds,0,0,cbk) +#define FLDATADFC(nm,loc,pos,desc,flds,cbk) \ + _REGDATANF(#nm,&(loc),2,1,pos,1,desc,flds,0,0,cbk) +#define GRDATADFC(nm,loc,rdx,wd,pos,desc,flds,cbk) \ + _REGDATANF(#nm,&(loc),rdx,wd,pos,1,desc,flds,0,0,cbk) +#define BRDATADFC(nm,loc,rdx,wd,dep,desc,flds,cbk) \ + _REGDATANF(#nm,loc,rdx,wd,0,dep,desc,flds,0,0,cbk) +#define URDATADFC(nm,loc,rdx,wd,off,dep,fl,desc,flds,cbk) \ + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,0,0,cbk),((fl) | REG_UNIT) +#define STRDATADFC(nm,loc,rdx,wd,off,dep,siz,fl,desc,flds,cbk) \ + _REGDATANF(#nm,&(loc),rdx,wd,off,dep,desc,flds,0,siz,cbk),((fl) | REG_STRUCT) #define BIT(nm) {#nm, 0xffffffff, 1} /* Single Bit definition */ #define BITNC {"", 0xffffffff, 1} /* Don't care Bit definition */ #define BITF(nm,sz) {#nm, 0xffffffff, sz} /* Bit Field definition */ #define BITNCF(sz) {"", 0xffffffff, sz} /* Don't care Bit Field definition */ #define BITFFMT(nm,sz,fmt) {#nm, 0xffffffff, sz, NULL, #fmt}/* Bit Field definition with Output format */ #define BITFNAM(nm,sz,names) {#nm, 0xffffffff, sz, names} /* Bit Field definition with value->name map */ -/* Arrayed register whose data is part of the UNIT structure */ -#define URDATA(nm,loc,rdx,wd,off,dep,fl) \ - _REGDATA(#nm,(loc),(rdx),(wd),(off),(dep),NULL,NULL,((fl) | REG_UNIT),0,0) -/* Arrayed register whose data is part of an arbitrary structure */ -#define STRDATA(nm,loc,rdx,wd,off,dep,siz,fl) \ - _REGDATA(#nm,(loc),(rdx),(wd),(off),(dep),NULL,NULL,((fl) | REG_STRUCT),0,(siz)) -/* Same as above, but with additional description initializer */ -#define URDATAD(nm,loc,rdx,wd,off,dep,fl,desc) \ - _REGDATA(#nm,(loc),(rdx),(wd),(off),(dep),(desc),NULL,((fl) | REG_UNIT),0,0) -#define STRDATAD(nm,loc,rdx,wd,off,dep,siz,fl,desc) \ - _REGDATA(#nm,(loc),(rdx),(wd),(off),(dep),(desc),NULL,((fl) | REG_STRUCT),0,(siz)) -/* Same as above, but with additional description initializer, and bitfields */ -#define URDATADF(nm,loc,rdx,wd,off,dep,fl,desc,flds) \ - _REGDATA(#nm,(loc),(rdx),(wd),(off),(dep),(desc),(flds),((fl) | REG_UNIT),0,0) -#define STRDATADF(nm,loc,rdx,wd,off,dep,siz,fl,desc,flds) \ - _REGDATA(#nm,(loc),(rdx),(wd),(off),(dep),(desc),(flds),((fl) | REG_STRUCT),0,(siz)) #else /* For non-STD-C compiler which can't stringify macro arguments with # */ +/* Generic Register declaration for all fields. + If the register structure is extended, this macro will be retained and a + new macro will be provided that populates the new register structure */ #define REGDATA(nm,loc,rdx,wd,off,dep,desc,flds,fl,qptr,siz) \ - "nm", &(loc), (rdx), (wd), (off), (dep), (desc), (flds), (fl), (qptr), (siz) -#define _REGDATA(nm,loc,rdx,wd,off,dep,desc,flds,fl,qptr,siz) \ - nm, &(loc), (rdx), (wd), (off), (dep), (desc), (flds), (fl), (qptr), (siz) -#define ORDATA(nm,loc,wd) "nm", &(loc), 8, (wd), 0, 1, NULL, NULL -#define DRDATA(nm,loc,wd) "nm", &(loc), 10, (wd), 0, 1, NULL, NULL -#define HRDATA(nm,loc,wd) "nm", &(loc), 16, (wd), 0, 1, NULL, NULL -#define BINRDATA(nm,loc,wd) "nm", &(loc), 2, (wd), 0, 1, NULL, NULL -#define FLDATA(nm,loc,pos) "nm", &(loc), 2, 1, (pos), 1, NULL, NULL -#define GRDATA(nm,loc,rdx,wd,pos) "nm", &(loc), (rdx), (wd), (pos), 1, NULL, NULL -#define BRDATA(nm,loc,rdx,wd,dep) "nm", (loc), (rdx), (wd), 0, (dep), NULL, NULL -#define ORDATAD(nm,loc,wd,desc) "nm", &(loc), 8, (wd), 0, 1, (desc), NULL -#define DRDATAD(nm,loc,wd,desc) "nm", &(loc), 10, (wd), 0, 1, (desc), NULL -#define HRDATAD(nm,loc,wd,desc) "nm", &(loc), 16, (wd), 0, 1, (desc), NULL -#define BINRDATAD(nm,loc,wd,desc) "nm", &(loc), 2, (wd), 0, 1, (desc), NULL -#define FLDATAD(nm,loc,pos,desc) "nm", &(loc), 2, 1, (pos), 1, (desc), NULL -#define GRDATAD(nm,loc,rdx,wd,pos,desc) "nm", &(loc), (rdx), (wd), (pos), 1, (desc), NULL -#define BRDATAD(nm,loc,rdx,wd,dep,desc) "nm", (loc), (rdx), (wd), 0, (dep), (desc), NULL -#define ORDATADF(nm,loc,wd,desc,flds) "nm", &(loc), 8, (wd), 0, 1, (desc), (flds) -#define DRDATADF(nm,loc,wd,desc,flds) "nm", &(loc), 10, (wd), 0, 1, (desc), (flds) -#define HRDATADF(nm,loc,wd,desc,flds) "nm", &(loc), 16, (wd), 0, 1, (desc), (flds) -#define BINRDATADF(nm,loc,wd,desc,flds) "nm", &(loc), 2, (wd), 0, 1, (desc), (flds) -#define FLDATADF(nm,loc,pos,desc,flds) "nm", &(loc), 2, 1, (pos), 1, (desc), (flds) -#define GRDATADF(nm,loc,rdx,wd,pos,desc,flds) "nm", &(loc), (rdx), (wd), (pos), 1, (desc), (flds) -#define BRDATADF(nm,loc,rdx,wd,dep,desc,flds) "nm", (loc), (rdx), (wd), 0, (dep), (desc), (flds) + _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,qptr,siz,NULL),(fl) +/* Same as above, but with callback initializer */ +#define ORDATADFC(nm,loc,wd,desc,flds,cbk) \ + _REGDATANF("nm",&(loc),8,wd,0,1,desc,flds,0,0,cbk) +#define DRDATADFC(nm,loc,wd,desc,flds,cbk) \ + _REGDATANF("nm",&(loc),10,wd,0,1,desc,flds,0,0,cbk) +#define HRDATADFC(nm,loc,wd,desc,flds,cbk) \ + _REGDATANF("nm",&(loc),16,wd,0,1,desc,flds,0,0,cbk) +#define BINRDATADFC(nm,loc,wd,cbk) \ + _REGDATANF("nm",&(loc),2,wd,0,1,desc,flds,0,0,cbk) +#define FLDATADFC(nm,loc,pos,desc,flds,cbk) \ + _REGDATANF("nm",&(loc),2,1,pos,1,desc,flds,0,0,cbk) +#define GRDATADFC(nm,loc,rdx,wd,pos,desc,flds,cbk) \ + _REGDATANF("nm",&(loc),rdx,wd,pos,1,desc,flds,0,0,cbk) +#define BRDATADFC(nm,loc,rdx,wd,dep,desc,flds,cbk) \ + _REGDATANF("nm",loc,rdx,wd,0,dep,desc,flds,0,0,cbk) +#define URDATADFC(nm,loc,rdx,wd,off,dep,fl,desc,flds,cbk) \ + _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,0,0,cbk),((fl) | REG_UNIT) +#define STRDATADFC(nm,loc,rdx,wd,off,dep,siz,fl,desc,flds,cbk) \ + _REGDATANF("nm",&(loc),rdx,wd,off,dep,desc,flds,0,siz,cbk),((fl) | REG_STRUCT) +#define REGDATA(nm,loc,rdx,wd,off,dep,desc,flds,fl,qptr,siz) \ + "nm", &(loc), (rdx), (wd), (off), (dep), (desc), (flds), (qptr), (siz), NULL, (fl) #define BIT(nm) {"nm", 0xffffffff, 1} /* Single Bit definition */ #define BITNC {"", 0xffffffff, 1} /* Don't care Bit definition */ #define BITF(nm,sz) {"nm", 0xffffffff, sz} /* Bit Field definition */ #define BITNCF(sz) {"", 0xffffffff, sz} /* Don't care Bit Field definition */ #define BITFFMT(nm,sz,fmt) {"nm", 0xffffffff, sz, NULL, "fmt"}/* Bit Field definition with Output format */ #define BITFNAM(nm,sz,names) {"nm", 0xffffffff, sz, names} /* Bit Field definition with value->name map */ -#define URDATA(nm,loc,rdx,wd,off,dep,fl) \ - _REGDATA("nm",(loc),(rdx),(wd),(off),(dep),NULL,NULL,((fl) | REG_UNIT),0,0) -#define STRDATA(nm,loc,rdx,wd,off,dep,siz,fl) \ - _REGDATA("nm",(loc),(rdx),(wd),(off),(dep),NULL,NULL,((fl) | REG_STRUCT),0,(siz)) -#define URDATAD(nm,loc,rdx,wd,off,dep,fl,desc) \ - _REGDATA("nm",(loc),(rdx),(wd),(off),(dep),(desc),NULL,((fl) | REG_UNIT),0,0) -#define STRDATAD(nm,loc,rdx,wd,off,dep,siz,fl,desc) \ - _REGDATA("nm",(loc),(rdx),(wd),(off),(dep),(desc),NULL,((fl) | REG_STRUCT),0,(siz)) -#define URDATADF(nm,loc,rdx,wd,off,dep,fl,desc,flds) \ - _REGDATA("nm",(loc),(rdx),(wd),(off),(dep),(desc),(flds),((fl) | REG_UNIT),0,0) -#define STRDATADF(nm,loc,rdx,wd,off,dep,siz,fl,desc,flds) \ - _REGDATA("nm",(loc),(rdx),(wd),(off),(dep),(desc),(flds),((fl) | REG_STRUCT),0,(siz)) #endif #define ENDBITS {NULL} /* end of bitfield list */