HD Audio Driver for Windows 98SE/ME
This project is a High Definition Audio aka Azalea codec and controller driver. This is for Intel 915 and later chipset motherboards with onboard audio that is not AC97.
It is designed for all versions of Windows with Windows Driver Model (WDM) support, but currently only Windows 98 SE and ME are officially supported.
Windows 98 1st Edition may work but there are known issues with sample rate and depth conversion not working, and because Microsoft does not recommend WDM audio drivers for this version, it will be unsupported.
Windows 2000/XP has the official KB888111 HDA bus driver update and is not required by this project (it may work but is not tested and is not a priority).
The current state of this driver is an alpha that works in VMware and VirtualBox, and on many Intel and VIA chipset HD Audio controllers with Realtek codecs; More development and testing is needed to support more real hardware. Nvidia and AMD chipsets, and IDT, Analog Devices, Cirrus Logic and VIA codecs are not well supported yet.
This is dependent on the BIOS pin configuration default to select a sensible combination of driver outputs and there is no override yet for a bad BIOS. You may experience distorted or glitchy audio, potentially horrible screeching noises or static, or complete silence, as well as possible hard freezes when the driver is loaded or unloaded.
If you want to use it in some kind of business critical production application, I would highly recommend using the Sound Blaster Live, CMI8738 or any of the $2 USB audio dongles instead. (Seriously, almost all the cheapest USB Audio 1.0 class adapters work perfectly in 98se/Me.)
Windows 9x may need to be patched to work on modern hardware and > 512 MB of RAM, even when virtualized. This is mandatory for Intel 12th Gen and newer. Check out JHRobotics’ Patcher9X project which now includes Sweetlo’s patch for memory resource contention issues. Or for a ready-made solution, try Windows 98 QuickInstall from Oerg866.
Install HDA.inf with Device Manager on the HD Audio Controller device which will be listed as “PCI Card” with class code 0403 (you can run hwinfo/gui to view vendor/device information on unknown devices). Select the location of the HDA.sys file when Windows asks you. The release build of the driver is in the buildfree\i386 folder, the debug build is in buildchk\i386.
For best results, go to Multimedia Control Panel, click the Advanced Properties button for Playback Devices, go to the Performance tab and set Audio Acceleration to Standard (one notch to the left of Full) and Sample Rate Conversion Quality to Best (all the way to the right).
Installing DirectX 8.1 or newer after installing this driver is recommended but not strictly required.
- Only supports 22-48khz 16-bit sampling rate (32-bit up to 96khz can technically be added but 9x doesn’t make the best choice regarding resampling)
- Playback only, recording is not supported
- Single audio stream, no hardware mixing
- Audio latency is maximum ~40 ms. This is a kernel limitation
- Volume control applied only to the main mix output
- Jack detection and retasking is not supported
- A lot of real hardware freezes, crashes, fails to start, or makes horrible noises. no guarantee.
Source code from Microsoft’s driver samples
And BleskOS is used under the MIT license.
Also see Dogbert’s open source CMI driver.
For build instructions, see the build instructions.txt file
Anyone who can run this on bare metal with a kernel debugger, their testing and feedback would be appreciated.
If the driver won’t start for you or has other problems here’s how you can get the debug logs:
- Find and install Sysinternals Debug View. I think a version that works on Win98 is here https://www.digiater.nl/openvms/decus/vmslt00a/nt/dbgview.htm
- Install debug version of my driver using HDA.sys which is in objchk\i386 folder. If the driver was already installed you can copy it to C:\Windows\System32\Drivers
- Disable HD Audio Controller device in Device Manager
- restart
- open debugview
- Enable HD Audio Controller Device
- Look at the debug messages that come up, they should explain why the driver is failing to initialize
- Save the log file from debug view and post it here on an issue or discussion thread.
Generative AI (large language models) has been used during this project for research and debugging assistance. A small amount of boilerplate code is also written by LLM (C++ class and interface definitions). I don’t intend for this to be a “vibe coded” project. Pull requests automatically generated by the LLM tool will not be accepted.
This software is provided with no express or implied warranties. See the MIT license file for more information. For support, please file an issue on Github or visit Sirius Cybernetics Corporation’s Complaints Department.
<a href