When the 3B2 simulator was set to allow idling, there was significant
clock drift related to the primary timer unit. It turns out that the
simulator was using `AIO_SET_INTERRUPT_LATENCY` and `sim_rtcn_tick_ack`
incorrectly. They are not needed with the structure of system timers in
the 3B2 architecture.
- Allow NULL switches argument in sim_panel_mount()
- Add thread names to help identify threads while debugging
- Make mutexes PTHREAD_MUTEX_ERRORCHECK while debugging
NOCALIBRATE mode allows all activity of a simulator run to occur with
precisely consistent event timing. In this mode, every clock tick takes
precisely the same number of instructions/cycles. Likewise, the polling
activities for MUX or other poll oriented devices occurs after precisely
the same number of instructions/cycles executed. As a consequence of
this mode, no effort to align simulated clock ticks (and simulated access
to wall clock time) is made.
This mode might be useful for running diagnostics which expect a
particular relationship between perceived wall clock and instruction
times. It might also be useful for running test scripts which may want
to compare output of previous executions to to current execution or
to compare execution on arbitrarily different host computers.
In NOCALIBRATE mode, the operator gets to specify the pseudo
execution rate along with the base wall clock time that access to
pseudo wall clock accesses returns.
strtotv was extended long ago to allow radix prefixes (0x, 0X, 0b, 0B
and 0) for input when 0 was specified as the parsing radix. The uses
from calls to get_uint() need to specify a 0 radix to leverage this
which wasn't done at that time.
The simh v3 UNIT structure only provided UNIT fields wait, u3, u4, u5 and u6
available for static initialization beyond what is provided by the UDATA
macro. This change assures that here as well.
If a simulator developer needs to initialize UNIT fields beyond what is
available here and via the UDATA macro, then explicit code usually in
the DEVICE reset routine should be used to initialize those fields.
Fix the CDC1700 simulator which statically initialized additional UNIT fields.
In https:://github.com/open-simh/simh PR number 154 nickd4 that 2 argument
floating point instructions were displayed with the wrong argument order.
This change fixes BOTH the instruction display and the input activities for
these floating point instructions.
Notes: There are two categories of REGisters in simulators:
1) Many simulators contain every interesting simh REGisters
in single variables and use those variables directly
throughout the simulator as needed by the system being
simulated.
2) Some simulators have some of their REGisters in a single
variable, but during instruction execution, the actual
contents of that REGister is split into possibly multiple
pieces which are assembled into the single variable when
the simulator stops instruction execution and split apart
again when simulation starts executing instructions again.
An example of this case is the PSL on the VAX simulator.
In the VAX architecture, the PSL register contains the
condition code information which is a field in the PSL.
For efficiency sake, while sim_instr() is executing
instructions, the condition code is stored a separate
variable CC. Whenever sim_instr() exits, the pieces
that comprise this register are put together into the
PSL variable. This allows the PSL register to be examined
and/or deposited to directly from SCP as needed. The PDP11
simulator handles its PSW in a similar way breaking it
into pieces during sim_instr() execution and reassembling
it upon exit.
Therefore, if every REGister that an application that
uses the sim_frontpanel register APIs is always stored
in single variables (case 1 above), then front panel
access to registers can be most efficient if, at
initialization time, the simulator calls the
sim_set_stable_registers_state() API.
Having called this API allows the internals of the
frontpanel access activities to be significantly more
efficient.
- Run Floating Instruction diagnostics for 2 passes - these have
been observed to fail on the VAX730
- Increase allowed run limit
- When diagnostics fail, emit the diagnostic session output if
diagnostics were not being run in verbose mode.
The only allowed macro to initialize UNIT structures is the UDATA macro.
Setting additional UNIT data structure items should be set through explicit
initialization code in the DEVICE reset routine.
- BUILD_SEPARATE may be either defined and exported from the
environment or via the make command line.
- Add a command line (or environment variable) option QUIET=1 to
suppress full compile and link commands and only output a summary
of what is happening.
- Update dependency list to include gmake where needed.