On Friday, September 11, 2015 at 1:43 PM, J. David Bryan wrote: > On Friday, September 11, 2015 at 15:32, Paul Koning wrote: > > > Not quite. It would break existing simulators that use the addr field > > for register radix without masking it. > > But existing simulators wouldn't be passing any user-defined REG_* flags, so > "(rptr->flags & REG_UFMASK) | rdx" would be equal to "rdx", and they'd > receive the radix just as before.
I like this idea exactly for the reasons Dave outlines, and most importantly since adding it won't break any existing simulators. > > If you want to disregard that case, would it not be just as simple, > > but more powerful, to pass the index into the registers array as > > "addr"? Then all you need is to find the regs vector from the UNIT > > pointer, and index that with addr, and you have all the information > > you might want about that register -- its flags, name, or the register > > number if you want to use that. > > Assume that I have three CPU registers that I want to format identically. > How do I tell if I've been called for one of these? If I receive the index, > then > I'd have to do: > > if (addr == 3 || addr == 7 || addr == 12) ... > > or: > > if (strcmp (cpu_reg [addr].name, "CIR") == 0 || > strcmp (cpu_reg [addr].name, "NIR") == 0 || > strcmp (cpu_reg [addr].name, "XIR") == 0) ... > > whereas with a user-defined flag, it's: > > if (addr & REG_IR > > When I first ran into the problem two years ago, I had done what you > suggested, i.e., pass the register index. But in addition to being more > complicated, the problem with using register numbers or names is that it's > fragile. The register definitions are (typically) in cpu.c, but the above > usage is > in sys.c. If I rearrange the register order or insert a new register or > change > the names in cpu.c without correcting the usage in sys.c, things fail > silently. Another good point. This concern only affects the fragility of the simulator which uses it, so presumably the code which depends on the order would always be tested... > > True, but if you can see the register array entry, then you can test > > the flag from that entry, which is just as general. > > I'd argue the other way around. :-) If you need the index number, you can > define a flag field to hold it. Absolutely true. Let's wait a couple of days for other ides here before adopting Dave's suggestion. Paul, Does Dave's approach work for you? - Mark _______________________________________________ Simh mailing list [email protected] http://mailman.trailing-edge.com/mailman/listinfo/simh
