Skip to content

v1.0.0-alpha.1 — OHCI compatibility fixes for legacy DOS hardware

Pre-release
Pre-release

Choose a tag to compare

@netrunner01 netrunner01 released this 13 May 17:31

v1.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 -Werror on 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 Darwin IOUSBFamily, 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:

  1. Clone this repo: git clone https://github.com/Netrunner01/USBDDOS.git
  2. Check out this version: git checkout v1.0.0-alpha.1
  3. Build with Open Watcom v2 (May 2026 snapshot or later) for the deployment binary usbddos.exe, or DJGPP gcc 12.2.0+ for usbddosp.exe. Build instructions are in upstream's README, unchanged in this fork.

To test on your hardware:

  1. Replace your existing USBDDOS.EXE with the freshly built one.
  2. Run USBDDOS /hid or USBDDOS /disk per upstream's documentation.
  3. 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 kErrataNECIncompleteWrite write-1-to-clear retries on HcRhPortStatus is 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.

](./COPYING) file in the repo for the full text.