When compiling with `-O -Wall -Werror`, the compiler produced
a diagnostic that `op1` was used uninitialized in these
two locations.
Similar to the implementation of `case 0xC0: /* SUB M imm */`,
save the initial value of the `A` operand in `op1` so that the
flags can be computed correctly.
- Accept all allowed vde connection specifiers.
- Avoid using the vde_open_args parameter since it no longer operates
consistent with the original documentation.
- Continue support for the legacy simh vde port number specifier
vde:switch-path{:port} is transformed to vde:switch-path[port]
- Provide the vde switch port description to include the connecting
simulator type, its pid and the device name in that simulator
Changes inspired by discussion in https://github.com/open-simh/simh/issues/542
This bug report was generated by Codex on Perry Metzger's codebase.
Summary
In scp.c, SCP expression evaluation can parse the wrong string after
_sim_get_env_special() returns a value.
The failure occurs when:
- the expression element is not a register name
- _sim_get_env_special() finds a numeric value
- the returned pointer is not the local string buffer passed by
the caller, but some other backing storage, such as a host
environment string
In that case, sim_eval_expression() incorrectly parses string instead of
the pointer returned by _sim_get_env_special().
User-visible effect
A numeric expression that refers to a host environment variable can evaluate
incorrectly.
Example:
SIMH_TEST_EXPR_VALUE=41
expression: SIMH_TEST_EXPR_VALUE + 1
expected: 42
actual: 1
The + 1 still works, but the left-hand variable is parsed from the wrong
buffer, so it contributes 0.
Symptom
After one regex match with more capture groups, a later regex match with
fewer groups could leave stale _EXPECT_MATCH_GROUP_n values behind from
the earlier match.
Example:
1) A first match exports:
- _EXPECT_MATCH_GROUP_0=ab42
- _EXPECT_MATCH_GROUP_1=4
- _EXPECT_MATCH_GROUP_2=2
2) A later match with only one subgroup exports:
- _EXPECT_MATCH_GROUP_0=cd7
- _EXPECT_MATCH_GROUP_1=7
3) _EXPECT_MATCH_GROUP_2 incorrectly remained "2" instead of
being cleared or blanked.
Cause
sim_exp_check() tracked the prior regex state in a static
sim_exp_match_sub_count, but it updated that count incorrectly after a
successful match.
It stored the wrong bound for later cleanup, so the loop that blanked
stale _EXPECT_MATCH_GROUP_n entries did not run far enough.
This problem was discovered by Codex initiated by Perry Metzger.
sim_fwrite() in sim_fio.c has a bug in the big-endian/swapped write
path. When a write spans more than one internal flip buffer, the
function advances its source pointer by size * count on every chunk
instead of by size * c, where c is the number of elements actually
written in that chunk.
This causes later chunks to read from the wrong part of the caller's
buffer, which corrupts the file contents.
Why this is wrong
sim_fwrite() may break the caller's write into multiple pieces:
nelem is the number of elements that fit in the flip buffer
nbuf is the number of chunks to write
c is the number of elements in the current chunk
After writing one chunk, the source pointer must advance by the
size of that chunk:
sptr = sptr + size * c;
But the original code advanced by the size of the entire original request
every time:
sptr = sptr + size * count;
That is only correct if there is exactly one chunk.
- More details are displayed when multiple targets are being built with
or without parallel build activities.
- Display relative path displays when building. Avoid noisy full path info.
- Pass jobs value in CI builds since some versions of GNU Make don't
expose the -j value in the MAKEFLAGS internal variable.
- This change avoids the possibility of mangling a tape image if the tape
type auto detection (12b, 16b, 18b) has changed the in memory tape
format.
- Anyone who wants the off reel detection to have the simulator drop
back to a sim> prompt should have a non-zero value in the STOP_OFFR
register.
This avoids some platform cases where SO_REUSEADDR isn't always
effective and on some build hosts being done in parallel, a simple
time based random value isn't unique enough.
This update to the Altair8800 simulator includes:
Adds MITS hard disk controller device
Adds FarmTek FDC+ disk controller device (1.5MB)
Adds iCOM 3712/3812 disk controller device
Adds Processor Technology VDM1 video device
Fixes boot bug in TARBELL and VFII devices
TARBELL returns 0xff for DMA status if 1011
Fixes DAZZLER vertical blank status timing
Adds DDT command to control DDT-style output
Improves MEMORY dump display
Adds Cromemco DAZZLER video device
Adds PMMI MM-103 modem device
Adds SET RAM PROT/UNPROT=pages
Adds Martin Eberhard's CDBL ROM
Corrects file format for cromemco and pmmi header files.
- Enhance file name extension matching logic to allow for file names
that are enclosed in quotes ('' or "").
- Normalize exported environment variables that describe the Git
Commit Id.
- Minor update to help for the ZAPTYPE command.
- Some versions of Omni OS no longer include sys/filio.h in sys/ioctl.h
- Add more robust support for locating OS tools in scp.c
- SHOW VERSION output displays SunOS host system specific info
Fix#1238
- Scripts I650/sw/Build_is_from_decks.ini and I650/sw/Build_soap_from_source.ini
are incorrectly named for I650/650_demo_all.ini to function correctly.
File not found errors are thrown immediately after running the demo.
- Moreover, their capitalization does not match any of the other .ini scripts
(all start with lowercase letters).
- Cleanup tape debug options and internal usage
- Add MTSE_DBG_INT for internal API activities
- Make sure SCSI uses the correct debug value for tape debug
- Some OS support had a bug in the command passed to run telnet in the
new window.
- Report when there appears to be no telnet client available on the
local system.
- Add support for Fedora KDE.