I added the missing dependency sdl2_ttf for arch linux in the dependency checker as after using the checker I still needed to manually install that to compile.
GCC 15 uses c23 instead of c17 by default. Apparently c23 is not backwards compatible to older C standards... This prevented me from easily compuling simh so I added a setting to tell cmake to use c99 fixing the compiling errors.
Fixes#490
This problem was a latent bug introduced when summarized array register
output was added back in 2013 or 2018.
This fixes the problem reported in https://github.com/open-simh/simh/issues/499
1. Making sure that only expected values appear on the bus when
registers are read by CPU;
2. Fix order of I/O cancellation in case of disk detachment with
pending I/O;
3. Fix WLOA bug and make protection consistent with documentation;
4. Added more comments.
A hobbyist found an original FDOS for 8" drives (FD360, FD3712) that
has turned up a bug in both the FDC+ and AltairZ80 implementation of
the FD3712.
In the FDC+, the data pointer into the 128 byte write "shift register"
is reset upon receipt of a CLEAR command. The real hardware never
resets the shift register, so software should not adjust the pointer
either. AltairZ80 may need the same adjustment.
These are tests for the classic LINC, including the features new in
1965: 2048 words of memory, a Z register, an overflow flag, and an
interrupt facility.
This emulates the classic LINC. The design was settled in 1965,
increasing memory to 2048 words, and adding a Z register, an overflow
flag, and an interrupt facility.
Accept devices mapped at IOPAGEBASE -- text buffer/character generator
memory on video board starts at 160000.
Clear invalid PSW bits in trap handler -- system acceptance test writes
PSW 113705 to vector 34 (TRAP instruction).
Pervasive misuse of "ETH_MAC *" (a pointer to an ETH_MAC, aka a 6
element unsigned char array) when a simple "ETH_MAC" is correct. The
best example of this was eth_mac_fmt() in sim_ether.c with the following
prototype:
t_stat eth_mac_fmt (ETH_MAC* const mac, char* strmac)
The first parameter is a pointer to an array of 6 unsigned characters,
whereas it really just wants to be a pointer to the first element of the
array:
t_stat eth_mac_scan (const ETH_MAC mac, char* strmac)
The "ETH_MAC *" indirection error also results in subtle memcpy() and
memcmp() issues, e.g.:
void network_func(DEVICE *dev, ETH_MAC *mac)
{
ETH_MAC other_mac;
/* ...code... */
/* memcpy() bug: */
memcpy(other_mac, mac, sizeof(ETH_MAC));
/* or worse: */
memcpy(mac, other_mac, sizeof(ETH_MAC));
}
eth_copy_mac() and eth_mac_cmp() replace calls to memcpy() and memcmp()
that copy or compare Ethernet MAC addresses. These are type-enforcing
functions, i.e., the parameters are ETH_MAC-s, to avoid the subtle
memcpy() and memcmp() bugs.
This fix solves at least one Heisenbug in _eth_close() while free()-ing
write request buffers (and possibly other Heisenbugs.)
- Nuke and reinstall HomeBrew for macOS builds. Gets around the whole
problem of stale links and conflicting packages installed in the GitHub
macOS images.
- macOS 12 and Ubuntu 20.04 officially deprecated. Ubuntu 20.04 will be
removed from GitHub's runner images on 01 APR 2025.
- .travis/deps.sh: Add mingw32 as a dependency target, enable MinGW64
32-bit builds.
- Work around LTO bug on Ubuntu and macOS compilers, where LTO appears
to miscalculate the number of bytes stored when using the default byte
swapping 'for' loop. This is a workaround that uses compiler swapping
intrinsics for well known sizes that appeases LTO. The alternative is
to wait for a compiler fix, which is infeasible.
The vmnet interface created for a simh instance has its own MAC address.
It doesn't seem too useful to for simh itself (you can just use whatever
MAC address and send/receive frames with that), but it does make
referencing it in other places (i.e. SHOW ETHERNET vs. ifconfig) easier.
The generated MAC address is provided at interface creation time; while
we could look it up earlier like with pcap, this seems more efficient.
Require targeting macOS 10.10, in case the user builds with an older SDK
or sets the target version to an older release. This shouldn't be a
problem with modern macOS SDKs, but users using or targeting older macOS
should have a better message available rather than a compile message.
The check is ugly, but it should work.
A similar check is done for block support; this should only be a problem
with users using GCC instead of clang, which is default on macOS.
Also add a message for vmnet support when printing the build config.
Bridged devices require macOS 10.15 to work correctly. Check if we're on
macOS 10.15 at runtime (so a newer SDK can be used to make simh binaries
that target older macOS), and at compile time (so an older SDK can be
used to build simh).
Also make it so vmnet: for host only is deprecated; you must explicitly
provide either host, shared, or a bridged device name.
Show the allowed bridged network devices SHOW ETHERNET, as well as the
shared/host networking modes. It also shows shared/host/device name for
bridge in i.e. "HELP XS" output as well.
Shared, bridged, and host modes have other options for configuration;
i.e. isolation, IP ranges, etc. Some of these are not well documented,
so should look into these. Bridged mode needs macOS 10.15.
On macOS, tap devices for L2 networking are not supported out of the
box. While a kext can be added to provide tap support, the kext
experience is not very good; Apple has strongly recommended against
their usage.
As a replacement that's documented and recommended, Apple introduced the
vmnet framework, intended for emulators and virtualization software
explicitly. This API requires macOS 10.10, with bridged network support
coming in macOS 10.15.
This introduces basic support for vmnet.framework in SIMH. I've tested
it by booting an emulated MicroVAX 3800 from an emulated InfoServer 150,
where it was able to reach OpenVMS 7.3 standalone BACKUP.
- Allow 3 MB RAM configuration (previously only 1MB, 2MB, and 4MB
configurations were allowed)
- Allow SCSI CIO card to be used under 3B2/400 emulation (previously
it could only be used under 3B2/700 emulation)
- Improved CTC, PORTS, and SCSI diagnostic checks
- Fixed a bug in IDISK device that allowed impossible disk
configurations
The last update is a breaking change that disables the HD161 disk
type by default, since real 3B2 hardware does not support it. The
disk type will still allowed in backward compatibility mode through
use of the "SET IDISK LARGE" command.