The gate was using a system-wide Open Watcom that only ships the 32-bit compiler. The project downloads its own toolchain, and .dosboxx/watcom/binnt has the Windows-hosted 16-bit wcl.exe -- the same compiler and the same target as the DOS build. Run that instead, with build-dos.bat's exact command. The difference is not academic. Compiling 16-bit immediately reported three functions the unification had orphaned: emit_type_helpers, which the M7 program emitter replaced, and emit_drop_helpers and emit_drop_fields, which it was the only caller of. The 32-bit check had been clean. Those warnings were going to the DOS screen, where the runner cannot see them: COMMAND.COM redirects handle 1 only, and Watcom writes diagnostics to handle 2. So the suite was green while the build was not quiet. Nothing in the runner would ever have said so. Found while chasing W210/W107 reported from a DOS screen, which this does not yet explain -- those are not among what the compiler build emits now. M1-M7: 214 passed.
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.