This change adds a small infinite loop program that will be used by
the simulator to establish a reasonable guess at the host's
performance in order to precalibrate the system timer.
- Integer addition of unsigned types could fail to set the
overflow flag, leading to errors in the SVR3 floating point
emulation library that rely on the overflow flag to detect
carry out of high bit on unsigned addition. This change
will correctly set the V flag if the high bit should be
carried out on an add.
This change adds support for the WE32106 Math Acceleration Unit (MAU).
The WE32106 is an IEEE-754 1985 compatible floating point math
acceleration unit that was an optional component on the 3B2/310 and
3B2/400.
The MAU is implemented using software floating point routines. As
always, there may be bugs, but the MAU currently passes extensive
floating point tests with exactly the same results as a real 3B2/400
equipped with a physical MAU, so I hope these are few.
Previously, the NI ethernet device expected to do all
autoconfiguration at attach time. Furthermore, if attaching failed for
some reason (e.g., permission issues on a tap device, etc.) the card
would be left autoconfigured, but in a broken state that could lead to
reading uninitialized memory.
This change fixes those bugs, and allows the device to be attached and
detached more freely. The card is now autoconfigured when it is
enabled. Attaching and detaching are analogous to connecting or
disconnecting an ethernet transceiver from the physical device.
This change enables the simulator to be shut down cleanly via a
soft-power shutdown command. This is implemented in the real 3B2/400
through the sanity timer, which, if it reaches zero, sets a bus timeout
flag in the CSR and issues an interrupt at IPL 15. The operating
system (System V UNIX) treats this as a shutdown request and enters
runlevel 0.
To use this change in a SIMH startup script, for example to implement a
3B2 simulator as a service, one could add these commands:
# [... simulator setup ...]
BOOT
SET TIMER SHUTDOWN
CONTINUE
EXIT
On catching a SIGTERM, SIGINT, or SIGHUP, the simulator would return to
SCP control, set the soft power shutdown flag, and then continue
simulator execution. After the system is cleanly shut down, the
simulator would then exit back to the operating system.
This change also addresses some unused function parameter warnings
issued by GNU Flycheck (not generally used by the build process, but
useful when editing files with Flycheck enabled)
- Formerly, the floppy controller buffered an entire diskette image
in memory using the unit buffer, and flushed it out on detach or
shutdown. This worked well enough, but it's better to have the
device use the SIMH disk sector read and write routines and
behave like a true disk.
- Read Only (Write Protect) logic has also been enabled in the
floppy controller, allowing users to mount images that do not
have write permissions.
- The IF (Integrated Floppy) and ID (Integrated Disk)
device names were poorly chosen. They conflict with built-in
scp commands and mess up the help system. This commit
changes them to IFLOPPY and IDISK, respectively.
NOTE!! THIS IS A BREAKING CONFIG CHANGE!!
- The DMAC controller "Current Word Count" expects to decrement
beyond 0 to 0xffff. Its initial value should also be 0xffff.
Setting the initial value to 0 introduced a very subtle bug
related to DUART self-test following a soft power reset.
This change cleans up warnings issued when compiled with
-Wall.
- Removed unused functions and variables.
- Moved static declarations out of headers and into source files
- Added braces around initialization where suggested.
Previously, tmxr_set_line_unit() and tmxr_set_line_output_unit()
were being called in the attach routine. These probably belong
in the reset routine instead.
Adds a skeleton framework for CIO ("Common I/O") feature cards. The
first feature card to be implemented will be the "PORTS" serial MUX.
Part of this support involved reworking IRQ handling in the CPU. It
now respects both IRQ Vector and IPL.
This change also removes all 'assert(0)' calls from the simulator and
replaces them with generic "Simulator Error" halts. These should only
happen if there's a genuine logic error lurking somewhere.
This change is a major refactor of how DMA and the DUART interact.
DMA implementation can now be overridden by individual devices that
require DMA. Disk and Floppy both continue to use a generic DMA
implementation, but the DUART code replaces the generic DMA with its
own implementation that correctly rate-limits TX. Among other things,
this allows the simulator to work correctly with real serial
terminals. This functionality has been tested on an AT&T 5620 "Blit"
terminal, which can run the 'layers' windowing software from the
simulator.
- Add "SHOW STACK" support to CPU
- An off-by-one error in checking SDT length was fixed.
- not-present co-processor R/W should not set Bus timeout bit
The 3B2 emulator did not have support for traps, rendering debugging
under the simulator fairly useless. This change adds support for
trap handling. The 'sdb' UNIX debugger under SVR3 should now work
correctly.
Two critical issues are fixed with this commit:
1. The MMU cache was being corrupted by writing the 'Last Used'
bit into the wrong half of the PD cache (low word vs. high word)
2. The MMU cache was being too aggressively flushed on SRAMA
write, because the wrong length was being used. In addition,
the code was walking off the end of the cache array when
flushing any section other than section 0, potentially causing
memory corruption.
This commit adds support for the following emulated hard disks:
HD30 30 MB CDC Wren 94155-36
HD72 73 MB CDC Wren II 94156-86
HD72C 72 MB Fujitsu M2243AS
HD135 161 MB Maxtor XT1190
This commit improves the integrated disk (ID) controller's behavior,
enabling full support for up to two 72MB (emulated WREN II)
integrated winchester disks.
- An overflow bug was causing INSFW and EXTFW to fail
on Windows hosts compiled with Microsoft Visual Studio.
This commit fixes the issue and causes 3B2 diagnostics
to pass under win32.