VOGONS


HDA Audio driver for Windows 3.1x

Topic actions

Reply 40 of 53, by myne

User metadata
Rank l33t
Rank
l33t

At some point, I'll try dumping all the w10 infs and look at it properly.

Why? Because all the guids and ven/dev ids and the device/subsection reg quirks will be in there since 10 supported the entire era and it is certain that the guids won't overlap anything.

Your driver won't support the quirks, but at least knowing that x behaves differently might help when someone inevitably tries it.

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 41 of 53, by onethirdxcubed

User metadata
Rank Member
Rank
Member

For various reasons I am using PCI_CC\0403 as the only device ID in the inf, and then reading the PCI vendor and device ID from config space to apply controller specific quirks. This is because most of the controller quirks require reading & writing to config space anyway, so there's no point in storing it in the registry keys, and also there's no way for the PnP Manager to read a codec VID/PID at driver install time because the driver is monolithic and not split into controller & codec(s) on the HDA bus like the Universal Audio Architecture.

Maybe it's possible on 9x to create a bus from the controller driver and make codec drivers attach to that but R. Loew couldn't get that to work and I'm not as smart or experienced. In the future I should still move all of the codec state into its own class to allow for multiple codecs on 1 controller like with a laptop in a docking station. This would also allow using a config script like the Watler's driver instead of depending on the very basic node parser.

Reply 42 of 53, by myne

User metadata
Rank l33t
Rank
l33t

2k used the same drivers, so I assume there's a way.
Then again, the 9x nvidia drivers are one giant sys vs several dlls on the nt branch.

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 43 of 53, by onethirdxcubed

User metadata
Rank Member
Rank
Member

2k also uses WDM drivers, true, but the HD Audio Bus architecture was backported from XP in KB888111 requiring a new sysaudio.sys and portcls.sys which R Loew could never get to work on 98se even with his WDMEX patching up the missing imports. The Toaster driver sample from the Windows 2000 DDK (the example for creating a bus) does not work in 98 either and I don't know why. Believe me if I could have backported the existing driver that would have been a Lot simpler.

Video driver architecture is completely different between 9x and 2k, and 9x drivers still need to have a 16 bit portion that handles GDI. But now anyone who wants to try to implement that can use all the code from JHRobotics' SoftGPU project.

Reply 44 of 53, by myne

User metadata
Rank l33t
Rank
l33t

I'm pretty ignorant, but as I understand from what you said, it's not possible to separate the hda bus from the codec for some reason.

Bus as in the literal bus like pci and isa are a bus? Or some logical bus?

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 45 of 53, by myne

User metadata
Rank l33t
Rank
l33t

HDAUDBUS.inf
Class = System
ClassGuid = {4D36E97D-E325-11CE-BFC1-08002BE10318}
%HDAudio.DeviceDesc% = HDAudio_Device, PCI\CC_0403
%HDAudio.DeviceDesc% = HDAudio_Device, ACPI\CLS_0004&SUBCLS_0003

HDAUDIO.INF
Class=MEDIA
ClassGuid={4d36e96c-e325-11ce-bfc1-08002be10318}

No actual devices in here. Seems like the inf equivalent of a header file.

HDAUDSS.INF
Class=MEDIA
ClassGuid={4d36e96c-e325-11ce-bfc1-08002be10318} Same as above.
Bunch of dev/ven, but not as many as I'd expect

I don't think the few GUIDs in your inf matter - they're all repeated in multiple infs in win11 so I think they're for a group thing.

One interesting thing - which seems to line up with the Watler's driver is the override verbs.

eg:
[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

Presumably that correlates to his - and therefore might be reversable for people to configure his better.

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 46 of 53, by Falcosoft

User metadata
Rank l33t
Rank
l33t

Maybe this new driver deserves its own topic?
WDM drivers have nothing to do with Windows 3.1x which this topic is about...

Website, Youtube
Falcosoft Soundfont Midi Player + Munt VSTi + BassMidi VSTi
VST Midi Driver Midi Mapper
x86 microarchitecture benchmark (MandelX)

Reply 47 of 53, by myne

User metadata
Rank l33t
Rank
l33t

Read the last line.

Possibly discovered something useful for this driver.

That said, I agree

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 48 of 53, by onethirdxcubed

User metadata
Rank Member
Rank
Member

I made a new topic here for my windows 98 driver.

To answer the other question, yes HD Audio is a bus, the controller drives a low speed serial bus which connects to either audio ADC/DAC or modem codec chips. AC97 was also a bus like this which could have multiple devices (often software modems installed in the AMR or CNR slot) and this could be problematic because the controller and codec both had vendor specific Quirks and extensions and this all had to be covered by one driver for all combinations. It's not even possible for Plug & Play to see the ID of the codec(s) with no driver loaded. This meant that Realtek and Analog Devices and Sigmatel and others made their own driver packages with special features and you often had to try several to get one working. Since everything was closed source there was no easy way to tell without trying to use it either.

For HD Audio and the Windows Universal Audio Architecture, the functionality was split so separate drivers could handle the controller and bus, and each codec. Windows could then support the controller and let vendor specific drivers handle only the codec and Plug&Play would be able to find the right ones. But this architecture was never backported to 9x since it was already 2004. For Winmodems this was also pretty pointless since again it was already 2004 and there was never a separate slot for HD Audio modems like for AMR/CNR. They were occasionally used on laptops I think.

Reply 49 of 53, by ntalaec

User metadata
Rank Member
Rank
Member

I had no luck trying to use the driver in my hardware.

I followed the steps from here: Re: HDA Audio driver for Windows 3.1x. And download INI files from here: Re: HDA Audio driver for Windows 3.1x. But I get no sound using speakers or headphones. I'm using Windows 3.11 (not Workgroups) in Standard Mode. Using MS-DOS 6.22 without EMM386 or any other EMS manager.

Reply 50 of 53, by Falcosoft

User metadata
Rank l33t
Rank
l33t
ntalaec wrote on Yesterday, 11:09:

I had no luck trying to use the driver in my hardware.

I followed the steps from here: Re: HDA Audio driver for Windows 3.1x. And download INI files from here: Re: HDA Audio driver for Windows 3.1x. But I get no sound using speakers or headphones. I'm using Windows 3.11 (not Workgroups) in Standard Mode. Using MS-DOS 6.22 without EMM386 or any other EMS manager.

And do you have either Realtek ALC1150 or Realtek ALC3202? Otherwise you should not expect those config files to work. The most important thing to understand is that this driver is not 'universal' in the sense that it can figure out the details of your HD audio system alone. You have to make the proper config files for yourself. The first step is to identify the exact model of your HD audio device/codec. If your HD audio is a Realtek one then there is a good chance that you can finally succeed. You should follow the steps from here:
Re: HDA Audio driver for Windows 3.1x

Website, Youtube
Falcosoft Soundfont Midi Player + Munt VSTi + BassMidi VSTi
VST Midi Driver Midi Mapper
x86 microarchitecture benchmark (MandelX)

Reply 51 of 53, by onethirdxcubed

User metadata
Rank Member
Rank
Member

There was a newer version of the Watlers driver posted on MSFN in June, which includes at least a basic codec parser if you don't provide an INI file. MSFN is down at the moment so I might as well post it here. If Watler has a problem with that he's welcome to contact me.

Reply 52 of 53, by myne

User metadata
Rank l33t
Rank
l33t

AFIK Watler hasn't been heard from in many years.

The down side to the internet is you rarely find out what happened to people.

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 53 of 53, by ntalaec

User metadata
Rank Member
Rank
Member
Falcosoft wrote on Yesterday, 11:38:

And do you have either Realtek ALC1150 or Realtek ALC3202? Otherwise you should not expect those config files to work. The most important thing to understand is that this driver is not 'universal' in the sense that it can figure out the details of your HD audio system alone. You have to make the proper config files for yourself. The first step is to identify the exact model of your HD audio device/codec. If your HD audio is a Realtek one then there is a good chance that you can finally succeed. You should follow the steps from here:
Re: HDA Audio driver for Windows 3.1x

According ASTRA is a Realtek ALC262.

Details
Realtek ALC262
Device (27D8h): 82801G (ICH7 Family) High Definition Audio
Subsys Vendor (104Dh): Sony Corp
Subsystem ID (9064h): Unknown
Class (04h): Multimedia
SubClass (03h): High Definition Audio
Hardware ID: VEN_8086&DEV_27D8
Revision: 02h
Interface: 00h
Device Properties
Device Timing: Fast
Memory Access: [X]
I/O Access: [ ]
Bus Master: [X]
66 MHz Speed Support: [ ]
Device Resources
Memory Address: F0440000h - F0443FFFh
System IRQ: 7
Interrupt Pin: INTA#
Sound
Audio Codec Name: Realtek ALC262
Controller Type: High Definition Audio
onethirdxcubed wrote on Yesterday, 17:49:

There was a newer version of the Watlers driver posted on MSFN in June, which includes at least a basic codec parser if you don't provide an INI file. MSFN is down at the moment so I might as well post it here. If Watler has a problem with that he's welcome to contact me.

This version worked for me without editing any .INI files. But I have two issues: the volume is close to zero (I can barely hear anything) and takes about a minute to load.

These are my auto-generated files:

HDACFG.INI

Details
[ALLHDA]
$00D8=$27D88086

[HDA]
Mytimer=1
winmode=Enhanced;(HDATSR required!)
TSR=HDATSR Found
PCI_VID=$8086
PCI_DID=$27D8

[BUSMASTER]
myPCIHI=$0012
myPCILO=$0000
myPCI=$00120000
aPCIHI=$0011
aPCILO=$0000
aPCI=$00110000

[HDA_27D88086,9064104D]
cardmemregistersLO=$0000
cardmemregistersHI=$F044
CODEC_Index=$0
Verbinterface=$1
wait1=$100
wait2=$60
pcipatchB=$0000
PCI_BUS=$00
PCI_DEVICE=$1B
PCI_FUNCTION=$0
GCAP=$4401
VMIN=$00
VMAJ=$01
GCTL=$0001
CODEC BITMAP=00000001
CODEC_VID=$10EC
CODEC_DID=$0262
CODEC_REV=$100302
CODEC_NODEINFO=$010001
CODEC_AFG_GPIO_CAP=$40000004
CODEC_AFG_SUBSYSTEM_ID=$104D4000
CODEC_AFG_PM_SUPPORT=$4000000F
CODEC_AFG_PCM_DEFINITION=$E0560
CODEC_AFG_F000B=$01
SleepingWidget=$02
OutputWidget=$02
VolumeWidget=$02

HDALOG.TXT

Details
$000F0000=$10EC0262
$000F0004=$00000000
$000F0005=$00000000
$000F0000=$10EC0262
$000F0002=$00100302
$000F0004=$00010001
$001F0011=$40000004
$001F2000=$104D4000
$001F000F=$4000000F
$001F000A=$000E0560
$001F000B=$00000001
$00170500=$00000000
$00C707C0=$00000000
$00C3B000=$00000000
$00C3B000=$00000000
$00D707C0=$00000000
$00D3B000=$00000000
$00D3B000=$00000000
$00E707C0=$00000000
$00E3B000=$00000000
$00E3B000=$00000000
$00F707C0=$00000000
$00F3B000=$00000000
$00F3B000=$00000000
$010707C0=$00000000
$0103B000=$00000000
$0103B000=$00000000
$011707C0=$00000000
$0113B000=$00000000
$0113B000=$00000000
$012707C0=$00000000
$0123B000=$00000000
$0123B000=$00000000
$013707C0=$00000000
$0133B000=$00000000
$0133B000=$00000000
$014707C0=$00000000
$0143B000=$00000000
$0143B000=$00000000
$015707C0=$00000000
$0153B000=$00000000
$0153B000=$00000000
$016707C0=$00000000
$0163B000=$00000000
$0163B000=$00000000
$017707C0=$00000000
$0173B000=$00000000
$0173B000=$00000000
$018707C0=$00000000
$0183B000=$00000000
$0183B000=$00000000
$019707C0=$00000000
$0193B000=$00000000
$0193B000=$00000000
$01A707C0=$00000000
$01A3B000=$00000000
$01A3B000=$00000000
$01B707C0=$00000000
$01B3B000=$00000000
$01B3B000=$00000000
Show last 8 lines
$00224011=$00000000
$00270610=$00000000
$00224011=$00000000
$00270610=$00000000
$00270500=$00000000
$0023A07F=$00000000
$0023907F=$00000000

If I run WAVEOUT.EXE and press the button waveOutGetDevCaps I get this log:

Details
szPName: HDA Sound   
Driver Version: 0.145
Stereo
Independent L/R volume
11 kHz (1 channel) 8bits
11 kHz (2 channel) 8bits
11 kHz (1 channel) 16bits
11 kHz (2 channel) 16bits
22 kHz (1 channel) 8bits
22 kHz (2 channel) 8bits
22 kHz (1 channel) 16bits
22 kHz (2 channel) 16bits
44 kHz (1 channel) 8bits
44 kHz (2 channel) 8bits
44 kHz (1 channel) 16bits
44 kHz (2 channel) 16bits
48 kHz, mono, 8-bit
48 kHz, stereo, 8-bit
48 kHz, mono, 16-bit
48 kHz, stereo, 16-bit
Left : 65280, Right : 65280

If I change the sliders (volume control?) in the left, these lines are added to HDACFG.INI:

[Volume]
waveout=$FF00FF00
floatvolL=1
floatvolR=1

This don't have any change in output volume. According README.TXT in WAVEOUT's folder, VolumeWidget in HDACFG.ini can be changed to $7F, but there's no difference in volume and after exit Windows $02 value is restored. The TXT also says that "Volume may not work on some computers. Not all devices support volume control." maybe it's my case.

I also can't reduce the one minute delay when loading Windows. Does not matter the value in wait1 or wait2 in HDACFG.ini.