Here's my notes on your presentation:
- The Audio Controller device is normally not contained directly inside the CPU unless the CPU is a SoC (like the Bay Trail Atom). Physically, it is usually contained in the Southbridge or PCH chip. Logically, it is on the PCI or PCIe bus and accesses audio data in main memory by DMA.
- Audio could be directly generated by the CPU using interrupts and PWM (this is often done on embedded systems) but this would consume a significant amount of CPU time and any jitter in the interrupt timing would result in a scratchy unpleasant sound. Also, high performance analog and digital electronics generally require very different processes and design considerations so it is desirable to separate the analog and digital functions into separate devices when possible.
- The AC97 controller register specification is published as part of Intel's ICH documentation and most other chipset manufacturers (VIA, Nvidia, ATI) followed this design closely. AC97 drivers should normally be chosen based on the codec manufacturer because many of the codecs have vendor-specific extensions. The problem with the AC97 architecture is that there's no way to detect the codec's device ID if there is no AC97 driver installed so often the wrong AC97 driver will install but won't function correctly.
- Windows Vista and newer include a generic HD Audio codec driver that may be used when the manufacturer driver is unavailable but this was NOT backported to Windows 2000/XP as it depends on some aspects of the Universal Audio Architecture. Manufacturer specific codec drivers that don't have support for newer chips can sometimes be forced to install by editing the INF file to add the device IDs but this is obviously unsupported and may have unpredictable results.
- There is a reference implementation of the Intel ICH AC97 audio driver published in the Windows DDK (Driver Development Kit) Since Windows 2000; the final version in the Windows 8.1 DDK was released by Microsoft under the MIT license and I have used this as a reference for creating my HDA driver. Development of a universal AC97 driver could proceed based on this sample if this is your aim. Many other manufacturer drivers like the AMD Geode audio are directly based on this sample, which I know because they didn't bother to change any of the GUIDs or function names.
- There are also open source drivers available for the Creative Emu10k series (the KxProject) and the CMI8738 (by Dogbert1) which are the 2 most common PCI sound cards.
- It is easy to detect whether an audio controller is AC97 or HD Audio since they have different PCI Class Codes (AC97 is CC\0401, and HD Audio is generally CC\0403) so drivers for AC97 and HD Audio could be packaged together under one installer and then the correct driver file could be selected by Plug & Play. It is not necessary to merge all drivers into one binary file and this would probably be wasteful in terms of memory usage and duplicated code. I would be fine with my driver being distributed in this way as long as the terms of the MIT license are abided by and it is made clear that the driver is an Alpha and not feature-complete yet.
- The smoothing (and sine-wave ringing) of triangle and square waves is caused by either the Windows kernel mixer when resampling or by your audio codec on output, and is not an artifact of my driver (which does no sound processing whatsoever on its own, though it may pass on processing done by the Windows Kernel Mixer). In fact this is expected and desirable behavior and you would hear high frequency aliasing artifacts if this smoothing did not take place. For reference, please look up such topics as the Fourier transform, the Nyquist limit and band-limited sound synthesis
- My HDA driver is currently hard-limited to 16-bit audio and 48khz even when the underlying hardware supports better resolutions and sample rates; this is because of limits in Windows 98. I could possibly add 88.2 and 96khz audio at 16-bits for Windows 2000 and XP. It's just not high on my priorities list. I would certainly accept patches to improve this situation as long as it did not interfere with operation on Win98. Supporting 20 and 24 bit audio would require the creation of custom CopyFrom and CopyTo functions for the DMA channel to pack the samples in the way that the codec expects. See the mydma.h file.
- I'm not actually sure what's going on with your problems 4, 5 & 6... This may be due to Windows's resampling of high resolution audio down to 48 khz 16-bit?
I am somewhat interested in your display driver but there's a couple of things that make it a lot less interesting:
- Not open source
- Not available anywhere but your FTP server
- No documentation of what devices, resolutions and features are supported besides 4 hours of video? A simple Readme and Changelog file would be helpful, and zip packages including previous versions.
Of course even if it was open source I probably wouldn't be able to use much of the mode setting code to improve VmDisp9x and SoftGPU for use with Windows 9x because 98SE and ME don't support WDM for display drivers anyway, instead the mode setting is done from a 16 bit DLL.