May 5 2008, 12:36 AM
Hey, I was looking through the source code for the openxdk's audio code in hopes to learn how the AC'97 works. I was told that the Xbox's AC97 was mostly identical to the PC's version. I've mainly been studying this documentation: http://people.freenet.de/kxdev/docs/codecs/ac97r21.pdf
What I'm trying to figure out is what registers are acessed through MMIO and which ones are accessed by PMIO and PCI statements. This is where I'm stuck at. Are the registers being written to in the openxdk exclusive to the xbox? Thanks.
May 6 2008, 09:09 PM
You probably already know, but for those who do not know, it's located in OpenXDK\src\hal\audio.c
AC97 is more a concept than a tight specification. If you can read AC97 that means you can expect to find a minimal set of controls over the sound playback. The very detail about how controls are done (which register, which way to write in it) varies a lots. I could study several models of Sound Blaster, some Muse card, some Sis and Intel sound chipsets... etc. The low level code to access controls varies a lot.
A wonderful source is the source code of ALSA (advanced linux sound audio), a good sound management library for linux. But it consumes time to just extract the low level access knowledge to rewrite small efficient code.
The audio.c file was already in openxdk when I started coding on my xb1, but I guess it was close to another existing sound chipset (clue is given at start of audio.c file, I guess). I just pushed a bit to have DPC (delayed procedure call) usage everywhere to avoid console hang-ons.
MS, for the 360 didn't care at all about the AC97 specification.