v1.0.0-alpha.1 — OHCI compatibility fixes for legacy DOS hardware
Pre-releasev1.0.0-alpha.1 — OHCI compatibility fixes for legacy DOS hardware
What this is
A research fork of crazii/USBDDOS
maintained at upstream commit 54345d0 (Feb 2024). Upstream has been
functionally dormant since early 2024; this fork is a public home for
a focused set of OHCI compatibility patches targeting 386–486 /
early-Pentium DOS hardware (NEC, ALi, SiS, OPTi OHCI silicon).
About the -alpha.1 designation: this version is alpha because
real-hardware verification on the silicon the patches target is
pending — NOT because the code is unstable or broken. Specifically:
- All 12 commits build clean with
-Werroron both Open Watcom v2 and DJGPP gcc 12.2.0. - The 7-test QEMU regression suite passes 7 / 7.
- Every patch is derived from authoritative documentation (USB 2.0
spec, Linux
pci-quirks.c, Apple DarwinIOUSBFamily, chip vendor datasheets, FYSOS Book 8).
What's missing is a regression pass against the actual silicon each chip-quirk fix targets. QEMU emulates spec-compliant USB devices; the patched paths exist precisely because real silicon deviates from spec. So the code works in the emulator and addresses identifiable bugs from upstream reports — but the proof that each fix behaves correctly against the real chip is missing.
This release moves to beta when at least one independent real-hardware test report exists per patched gap. If you have any of the affected hardware listed below and can run a smoke test, please file an issue with results either way.
What's fixed (vs upstream crazii/USBDDOS@54345d0)
The full per-gap detail is in CHANGELOG.md. Short version:
| Gap | Symptom | Hardware most affected |
|---|---|---|
| 1 | OHCI driver dies silently after Unrecoverable Error interrupt | NEC OHCI, generic |
| 2 | OHCI init silently fails on first try; HcFmInterval doesn't latch | OPTi 82C861 (FireLink), older SiS |
| 3 | USBDDOS hangs at load on BIOSes that don't release SMM ownership | Intel ICH/PCH, some VIA |
| 4 | Devices behind a USB hub fail to enumerate; assertion at hcd.c(91) | Any USB hub topology |
| 5 | PS/2-emulated keyboard ghosting, spurious interrupts | NEC µPD720101, SiS 7001 |
| 6 | System hard-hangs on USBDDOS load with no log output | ALi M5237, ALi M1543C, ULi |
| 8 | Hot-plugged USB device intermittently fails first-try enumeration | NEC µPD720101 (POTPGT race) |
| HCD | Plugging in unsupported device class triggers assertion | Anyone plugging in audio / printer / vendor-specific class |
Plus: case-correct #include paths for cross-build on Linux,
COM1 _LOG output enabled in debug builds, README discoverability
sections, and CHANGELOG.md.
Affected hardware
NEC µPD720101 / µPD720100A / NEC USB 2.0 PCI card · ALi M5237 · ALi M1543C · ULi · SiS 7001 / 630 / 5595 · OPTi 82C861 / FireLink · VIA VT82C686A/B / VT8231/8233/8235/8237 · Intel ICH4–ICH10 / Cougar Point / Panther Point / NM10 · AMD-756 / AMD-768 · KT133A · Mac Mini 2011 · Sandy Bridge ThinkPads · Compaq Evo N600c · Toshiba Portege M200 / Satellite 2410 · Lenovo ThinkPad T540p · Asus Eee PC (Atom / Cedarview) · Gigabyte P67-DS3-B3.
(Listed silicon and platforms are those for which authoritative documentation or upstream bug reports identify a specific USBDDOS-side fix. Other hardware may benefit indirectly from the defensive HCD changes.)
How to use this release
This release ships as source patches, not binaries.
To build:
- Clone this repo:
git clone https://github.com/Netrunner01/USBDDOS.git - Check out this version:
git checkout v1.0.0-alpha.1 - Build with Open Watcom v2 (May 2026 snapshot or later) for the
deployment binary
usbddos.exe, or DJGPP gcc 12.2.0+ forusbddosp.exe. Build instructions are in upstream's README, unchanged in this fork.
To test on your hardware:
- Replace your existing USBDDOS.EXE with the freshly built one.
- Run
USBDDOS /hidorUSBDDOS /diskper upstream's documentation. - File an issue on this repo with the results — what hardware, which mode, what happened. Reports of "it worked fine" are just as valuable as bug reports for moving to beta.
What this release does NOT do
- No xHCI support (upstream-planned, out of scope here).
- No EHCI USBLEGSUP/USBLEGCTLSTS BIOS handoff yet — likely root cause of remaining hangs on Intel Cougar Point / Panther Point systems (Gigabyte P67-DS3-B3, Mac Mini 2011 EFI-class platforms).
- No Gap 7 fix yet — NEC
kErrataNECIncompleteWritewrite-1-to-clear retries onHcRhPortStatusis sketched but not patched. - No real-hardware test reports yet (see "About the alpha designation" above).
Acknowledgements
- crazii — original author of USBDDOS.
- stanwebber — independent case-
sensitivity fix work in
stanwebber/USBDDOS(April 2025), filed upstream issues crazii#17 and crazii#19. The Build commit in this fork arrives at the same fix shape independently. - philippe-85 — diagnosed and reported the hub-feature-confusion symptom in upstream #16; the Gap 4 fix here is in the same code region.
- hjnijlunsing, volkertb, AudrenThibault, L10N37, wxpc8 — upstream issue reports that helped scope this fork.
- Linux USB host-controller code (
drivers/usb/host/). - Apple Darwin
IOUSBFamily. - Benjamin Lunt (fysnet), FYSOS Book 8.
License
GPL-2.0, inherited unchanged from upstream crazii/USBDDOS. See the
COPYING file in the repo for the full text.