Experimentation with the SDS 9 Series Algol compiler found a problem in
the card reader.
The Algol card input function reads a complete card with the usual EOM
and WIM loop followed by a disconnect EOM.
A final service is requested after the last column is read to signal
that the card has passed through the reader. If the disconnect EOM
occurs before this service, it cancels it and shuts down the request
as it ought to. However, the disconnect EOM does not reset the status
READING flag and a subsequent Reader Ready Test fails and loops waiting
for the disconnected reader to become ready.
This change fixes the disconnect EOM case to reset the uptr->STATUS and
end of record flag, cr_eor.
- Run simulator with clock calibration disabled so that execution rate
is 1 Mips which the vax ROM diags (the Power up self test) expects
when running from ROM.
- Record test information in the debug file when debugging.
- Add separate mutex serializing debug writes
- Change panel destructor to clear panel on successful destruction.
- Debug status info during shutdown/destruction.
- Request number tracking provided in request and response debug output.
- All relevant thread ids recorded to help debug deadlocks.
- Add debug abort interface to close debug file.
- Reliably detect transitions to HALT state
- When in the middle of a transition to HALT state, avoid calling any
display callback to avoid deadlocks which can occur if the callback
invokes a subsequent dialog with the simulator.
- More robustly capture the reason for the simulator HALTing.
- Avoid register list updates in the callback thread unless in the HALT state.
- Fix potential buffer overrun while pending remote command actions
- Add debug abort interface to close debug file
- Flush partially read command line on EOF
- Flush partially read command line when WRU HALTs execution and switches
to multi-command mode.
- Disable any pending repeat when WRU HALTs execution
- Also abort simulation if idle delay is crazy big which indicates a
problem that has already happened.
- Extend calibration initialization debug output to record optional ticks.
Start of support for PiDP10 front panel.
Moved interrupt checking from check_irq_level to clear_interrupt.
Pending interrupts now saved in IOB_PI.
Cleanup of KL10 Timer interrupts.
Minor code cleanup.
Asynchronous MUX functionality was added long ago and never completely
tested and thus never completed and never actually used.
All of what it was supposed to achieve was independently achieved when
bit rate speed functionality was added.
Forgot to attribute this commit to Seth Morabito <web@loomcom.com>
as author.
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.
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.