There is an Open Watcom install on this host (C:\WATCOM19), and its Windows build compiles the compiler's own sources in about a second. Every declaration mismatch in the unification commits was found that way; each one would otherwise have cost a DOSBox-X boot and a full compiler build to surface, with a DOS-side message that names the wrong thing. Add tools/tests/test_host_syntax.py: compile all twelve sources with the flags build-dos.bat uses (-za -wx -wcd=202) and fail on any diagnostic. It skips when Watcom is absent, so the suite still runs elsewhere. Two structural checks come with it -- that build-dos.bat, the Makefile and the test agree on the source list, and that no .c under fec/src is compiled by nothing. Both would have caught check.c and emit_c.c quietly leaving the build when the M7 wrappers included them textually. ferro-test now runs these and the 8.3 name check before starting the VM, and stops if they fail. This is not verification and does not claim to be: wcc386 targets 32-bit where the real build is 16-bit large model, so it sees syntax, types and declarations and nothing about code generation. The DOS build and the milestone suite remain the gate. It only moves the cheap failures earlier.
Development tools
Host support
The automated DOS development environment currently supports Windows 10/11.
The host only needs uv. The setup command downloads the pinned DOSBox-X and
Open Watcom DOS archives, verifies their SHA-256 hashes, and installs them in the
ignored .dosboxx/ cache.
uv run ferro-dos setup --accept-watcom-license
Review the Open Watcom license referenced by
tools/toolchains/dosboxx.lock.json before accepting it. Neither downloaded
archives nor installed tools are committed.
General DOS environment
ferro-dos provides the development entry points:
uv run ferro-dos build
uv run ferro-dos exec "FEC.EXE --check TESTS\M6\OKLAST.FE"
uv run ferro-dos batch fec\test-dos.bat
uv run ferro-dos shell
uv run ferro-dos --help
Every invocation creates an isolated host directory under .dosboxx/runs/ and
mounts it as writable C:. The repository is mounted read-only as R: and the
pinned Open Watcom installation as read-only W:. Current compiler sources,
the standard library, and fixtures are copied to C:\FEC; all compilation and
execution happen there inside DOSBox-X. Successful runs are removed by default.
Use --keep to retain a workspace and --show-dos to display the DOS window.
This directory-backed layout deliberately has no QEMU, disk-image, TCP-agent, or OCR dependency. A future disk-image backend can be added without changing the command interface.
Pytest regression suite
ferro-test uses the same isolated DOSBox-X/Open Watcom environment, builds
FEC.EXE once, and executes all selected cases sequentially in that one DOS
instance. Pytest still reports each registered case separately.
uv run ferro-test run --through m6 -v
uv run ferro-test run --only m6 --dos-log
uv run ferro-test --help
--keep-failed preserves a failed workspace, --dos-log prints captured DOS
output, --trace-dos disables per-command redirection, and --show-dos displays
the GUI. Working rules and DOS/Open Watcom build traps are in AGENTS.md.