VOGONS


HD Audio Driver for Windows 98

Topic actions

First post, by onethirdxcubed

User metadata
Rank Newbie
Rank
Newbie

My WDM drivers for HD Audio sound in Windows 98se/Me are just about ready for wider testing. These are likely to work in VMware, VirtualBox and on Intel chipsets with a Realtek codec. Also works on a HP T5540 thin client and an Atom netbook, installs but doesn't seem to output anything on Wyse Cx0 and all IDT and Sigmatel codecs.

Current release: Alpha-016 2026-01-28

Changelog:

Details

## WDMHDA Alpha-016 2026-01-28

Note: You must install this version of the driver again with the .inf file!

- Fixed PCIe No-Snoop flag which was causing garbled audio on Intel PCH and newer
- May be fixed for AMD SB450/600 as well, need to test
- Fixed DMA Position Buffer but disabled it by default again

## WDMHDA Alpha-015 2026-01-23

Note: You must install this version of the driver again with the .inf file!

- Add Registry key reader for driver settings. Change settings in the [AddReg] section of HDA.inf
- Add support for DMA Position Buffer (untested, will check on real hardware)
- restrict available sample rates to 22050-48000 because Windows will try the native sample rate of the WAV first and then the highest rate possible. Supporting 96khz means that Windows will use it ALL THE TIME. Supporting rates below 22050 makes buffer interrupt handling more complicated and Windows can just upsample it anyway.

## WDMHDA Alpha-014 2026-01-12

- Better debugging information
- Ignores outputs which are listed as Not Connected in the BIOS pin configuration. If this loads and displays a speaker icon in the Taskbar but you get no sound at all, try version Alpha-012 instead. I will add a Registry key to enable / disable this but haven't done it yet.

edit 2026-01-12: fixed page fault crash bug. Please redownload

## WDMHDA Alpha-013 2026-01-09

- Now tries to connect all Line Out paths in codec (up to 8 total output paths).
- Rearranged a lot of the codec init to improve compatibility as much as possible
- Headphone connection detection is still not working.
- Can now produce some audio on a system with an ALC887 but it is garbled. I think this is an interrupt sharing issue, maybe with the SoftGPU video driver. The problem system puts everything on IRQ 11.

## WDMHDA Alpha-012 2026-01-02

- tries to init the codecs listed in STATESTS before resorting to probing blindly
- SPDIF, CD and Phone outputs will NOT be used as audio outputs. May add these back later
- add more debugging info to determine the output nodes the driver is actually using
- code cleanups, decreases file size a bit
- set the version and other information of the dll file so you can tell what release is installed from the device manager

## WDMHDA Alpha-011 2025-12-13

Fixes stupid IRQ sharing bug. Should fix freezes on some platforms where the audio controller shares an interrupt with USB. Also rewrote interrupt service routine to handle all streams and not to try to service the stream for non-stream interrupts.

## WDMHDA Alpha-010 2025-12-11

Fixes out of bounds read (maybe leading to crash) bug when saving mixer settings to registry that was in the original SB16 driver.

## WDMHDA Alpha-009 2025-12-10

- Set data format before powering up each node in codec, this fixes horrible distortion on Realtek ALC2xx
- Add controller-specific PCI configuration writes that are necessary for many systems
- Fix the mixer controls enough to allow the master volume slider to work on real hardware. On VMWare and Virtualbox it still doesn't do anything but I think that's by design for the VM, you can use the Wave volume slider in the mixer or the host's volume control.

I now consider this driver functional enough to post about on retro hardware forums for further testing.

## WDMHDA Alpha-008 2025-11-23

Fixes:

- Fix double-free if device was disabled in Device Manager
- Add variable sample rates but only the range of 8-48 khz for now. Still locked to 16-bit stereo but Windows can upconvert for anything that opens an 8 bit or mono channel.
- Fix fundamental CORB/RIRB communication error that was leaving the pointers misaligned if the codec did not respond.

Known Bugs:

- Severe USB & Performance issues when sharing an IRQ with a USB controller
- Realtek codecs: Left channel sounds fine but right channel is extremely overamplified and distorted

## WDMHDA Alpha-007 2025-11-19

Added PCI Configuration Register writes for controller-specific quirks.

## WDMHDA Alpha-006 2025-11-05

Still trying to get this working on real hardware. Now including the debug build in the ZIP file, the hda.sys file in that folder may be copied into C:\Windows\System32\Drivers after installation to get full debug log output.

- Check STATESTS register to see if some codecs attach,
- Wait the required amount of time for codec init,
- Don't try to continue into codec init with a STATUS_UNSUCCESSFUL.

## WDMHDA Alpha-005 2025-10-31

- Add codec reset command listed in Realtek datasheet
- Tweak delays, timings, and buffer sizes to align with spec.
- Now packaging the release build instead of the debug build to reduce slowdown from debug-log spam.

## WDMHDA Alpha-004 2025-10-29

Now supports immediate command interface to the codec, and now functions in VMWare as well as VirtualBox. Will test on some real hardware but don't get your hopes up. I still get occasional hard freezes for reasons I don't understand yet.

## WDMHDA Alpha 003 Pre-release 2025-10-27

Fixed more bugs around interrupts and timeouts. Probably doesn't work on real hardware but at least shouldn't freeze instantly anymore

## WDMHDA Alpha 002 Pre-release 2025-10-21

Maybe fixed interrupt issue, some minor polish changes

## WDMHDA Alpha 001 Pre-release 2025-10-20

Alpha release. No guarantees whatsoever. Only tested in VirtualBox! Only works at 16-bit 44100 Hz! Winamp produces horrible screeching noises sometimes! Also the release build doesn't produce sound so this is a debug build. For best results, run with a kernel debugger attached so you can tell why it doesn't work and why everything is frozen. You might get sound, or it might wipe your hard drive and unleash the nasal demons. If it doesn't work for you i would like to see the debug logs to figure out why.

No readme and no instructions are provided for this. If you don;t know how to install windows driver binaries through Device Manager this is not the way to learn.

Install the inf with Device Manager as usual. The unknown device to install it on is probably just called "PCI Card" in Device Manager, if you have multiple of those check with HWINFO for which one has the PCI class code 0403.

https://github.com/andrew-hoffman/WDMHDA/releases

Last edited by onethirdxcubed on 2026-01-28, 20:47. Edited 4 times in total.

Reply 1 of 63, by myne

User metadata
Rank l33t
Rank
l33t

I can confirm it works better on ME in Virtualbox than the other 3.1 HDA driver.

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic

Reply 2 of 63, by onethirdxcubed

User metadata
Rank Newbie
Rank
Newbie

Released a new version fixing the IRQ sharing bug so this should load properly on a lot more systems. Time to test on a lot more thin clients

Reply 3 of 63, by Lualb

User metadata
Rank Newbie
Rank
Newbie

Hello everyone!... I really wanted to say that this project to port HD audio to Windows 98 seems great to me, since I'm currently using Windows 3.11, but I'd like to be able to install Windows 98SE on a PC with an i3 4160 CPU, 4GB of DDR3 RAM, and a 40GB SATA hard drive... I hope I can get it working on my PC very soon!

Reply 5 of 63, by Lualb

User metadata
Rank Newbie
Rank
Newbie

I have a question... Can this driver run DOS games within Windows, using Sound Blaster emulation?

Reply 6 of 63, by onethirdxcubed

User metadata
Rank Newbie
Rank
Newbie

Like all WDM audio drivers, this uses the SBEMUL.SYS Sound Blaster emulation, so it will support DOS games with 8-bit digital sound and MIDI pass-through ONLY. No Adlib emulation. Overall the DOS support should be exactly the same as for USB audio if the driver works on your controller/codec. It Might be possible to improve this support using the Alpha version of VDMSound but I haven't tested it. If I wanted to trap the IO port to do Adlib emulation the driver would have to be a VxD and I haven't found many good references for developing a VxD.

Of course you can always reboot into DOS mode to run DOS games with SBEMUL or VSBHDA, and they will work on Windows 98's DOS as long as the memory manager is replaced with QEMM or JEMMEX. The easiest way to do this is to make a PIF file with custom config.sys and autoexec.bat.

At some point I would like to properly reverse-engineer SBEMUL.SYS. It reads a Registry key for a "SoftFM" parameter that seems to be a IO port address but it either doesn't do anything or breaks the emulation completely, and there is also a BLASTER string with type 6 that is referenced in the code but I don't know if there is any way to activate the Sound Blaster 16 mode in the released version.

Reply 7 of 63, by myne

User metadata
Rank l33t
Rank
l33t

Hmm. Possibly one of those cases where it worked for most things, but shit the bed for others and wasn't worth the support headache.
Wonder if it changed much between 95a,b,98,se,me.
Might have to do some poking around myself.

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic

Reply 8 of 63, by onethirdxcubed

User metadata
Rank Newbie
Rank
Newbie

It seems it is only working for the Realtek ALC2xx at this time, for other Realtek codecs it is not finding the correct output pathway. Will troubleshoot more when I have a chance.

If anyone here is getting a resource conflict at 0000-3FFF like mskrzynski, please try the latest version of Patcher9x released a few days ago to correct the above 4gb resources bug. https://github.com/JHRobotics/patcher9x/releases/tag/v0.9.91

Reply 9 of 63, by jamesfmackenzie

User metadata
Rank Newbie
Rank
Newbie

Thanks for this fantastic project!

Just tried this on a dell optiplex 760 with ICH10 HDA audio and Analog Devices AD1984A audio codec chip.

The driver installs without a hitch, but no audio output on any ports. I believe this is expected.

I also have a dell dimension e520 with ICH8 HDA audio and a Sigmatel STAC9227X5 audio codec chip. I haven’t tested this yet but understand I will likely see the same audio output issues.

Very much looking forward to more news 😎

Reply 10 of 63, by myne

User metadata
Rank l33t
Rank
l33t
onethirdxcubed wrote on 2025-12-26, 19:20:

It seems it is only working for the Realtek ALC2xx at this time, for other Realtek codecs it is not finding the correct output pathway. Will troubleshoot more when I have a chance.

Did you have a look at the win10 infs?
The verb architecture in the watler driver seems to be more or less similar to all the 'workarounds' in the infs.
I figured there might be some inspiration for different implementations in there.

Re: HDA Audio driver for Windows 3.1x

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic

Reply 11 of 63, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie
jamesfmackenzie wrote on 2025-12-30, 23:37:
Thanks for this fantastic project! […]
Show full quote

Thanks for this fantastic project!

Just tried this on a dell optiplex 760 with ICH10 HDA audio and Analog Devices AD1984A audio codec chip.

The driver installs without a hitch, but no audio output on any ports. I believe this is expected.

I also have a dell dimension e520 with ICH8 HDA audio and a Sigmatel STAC9227X5 audio codec chip. I haven’t tested this yet but understand I will likely see the same audio output issues.

Very much looking forward to more news 😎

Yes, same here. I assume proper audio routing is missing for other then 2xx Codecs. But I'm also looking forward for a wider support of Codecs 😀.

Reply 12 of 63, by onethirdxcubed

User metadata
Rank Newbie
Rank
Newbie

Yes I did have a look at the Windows 10 infs. The Windows UAA driver can accept a list of codec commands encoded as Registry keys though it's only supposed to be used for testing and not allowed for release builds. There is some more information in this book here. https://archive.org/details/highdefinitionau0000roac

Reply 13 of 63, by myne

User metadata
Rank l33t
Rank
l33t

I was thinking more like this bit

[HdAudModel_DellPrecision380.HdAudInit]
HKR,PinConfigOverrideVerbs,NumVerbs, 0x1,20,00,00,00
HKR,PinConfigOverrideVerbs,0000, 0x1,f0,1c,87,00
HKR,PinConfigOverrideVerbs,0001, 0x1,00,1d,87,00
HKR,PinConfigOverrideVerbs,0002, 0x1,00,1e,87,00
HKR,PinConfigOverrideVerbs,0003, 0x1,40,1f,87,00

Which to me looks very similar to the watler driver reassigning "ports/pins" for that particular codec.

I'm assuming that some devices don't report their capabilities properly as per the standard.
Which could be similar to your problem with whatever hardware you're testing.

On the msfn I think thread for that driver, someone had built a bunch of verb files for various hardware, and I'm guessing they're very much similar.

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic

Reply 14 of 63, by onethirdxcubed

User metadata
Rank Newbie
Rank
Newbie

The node parser from "BleskOS" just does one pass through the list of audio function group nodes and picks one speaker out, maybe one headphone out, and a line or SPDIF out only if there isn't a headphone or speaker output at all. That's not fit for purpose on a desktop motherboard with the ALC887 because the only output with anything connected is a line out but it picks the unconnected speaker out first.

Mpxplay has a much better parser but I can't just use it directly even though SBEMU does, and I can't use the one from Watler's driver either for the same reason. There's no license at all included with the code. Just because someone has posted it to Github doesn't mean I can do anything with it.

Reply 15 of 63, by myne

User metadata
Rank l33t
Rank
l33t

If copyright meant anything, trillion dollar corporations wouldn't copy the entire knowledge of human history without asking

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic

Reply 16 of 63, by onethirdxcubed

User metadata
Rank Newbie
Rank
Newbie

We're supposed to care about copyright here at Vogons, though the line that's drawn here does not always seem to be in the same place as the legal one.

No one has any problem linking to full images of Creative driver discs for instance, even though those have a lot of creative works on them besides the bare driver files needed for interoperability.

About seventeen years ago Creative used to send Cease and Desists to anyone who posted the full Audigy drivers because they were making money selling driver CDs to anyone who had a used card without discs, and now it's all on VogonsDrivers and no one is getting sued.

Heck, Microsoft uploaded most of their sample code for free to Github (and then trained their chatbots on it) when they used to charge thousands for development tools. It's generally considered better business now to let people make things for your product instead of suing your biggest fans. But the law is still the same as it was.

Reply 17 of 63, by ElTentakel

User metadata
Rank Newbie
Rank
Newbie

One solution could be a clean room implementation with LLMs. Create a documentation for the routing and then (or let a LLM) implement the code. The advantage would be, that other projects could benefit from that documentation.

And I fully agree. Just because no one cares today, that's no prof that no one will care tomorrow.

Reply 18 of 63, by onethirdxcubed

User metadata
Rank Newbie
Rank
Newbie

The coding LLMs were trained extensively on open source code and can easily reproduce the whole HD Audio section of ALSA already just for the asking. Does the GPL still attach if you have a LLM rewrite that code from memory? I have no idea and I don't think the legal system does either yet.

In any case Win98 can't support more than one output stream at the OS level so all I really need to do is set up as many paths as I can to stream 1, then keep a list of the paths and the volume control node & capabilities for each. Then I can apply the one volume control to every output for now. To add separate volume sliders for each output I need to change the Topology miniport to create more pins and then hide the ones that aren't present.

Reply 19 of 63, by myne

User metadata
Rank l33t
Rank
l33t

Perhaps Linux's HDA enumerator could be adapted?

This looks to my untrained eye like a function that might be useful.

int azalia_codec_sort_pins(codec_t *this) {

https://github.com/openbsd/src/blob/master/sy … /azalia.c#L1901

I built:
Convert old ASUS ASC boardviews to KICAD PCB!
Re: A comprehensive guide to install and play MechWarrior 2 on new versions on Windows.
Dos+Windows 3.11+tcp+vbe_svga auto-install iso template
Script to backup Win9x\ME drivers from a working install
Re: The thing no one asked for: KICAD 440bx reference schematic