MMC5 audio
Overview
Nintendo's MMC5 mapper provides extra sound output, consisting of two pulse wave channels and a PCM channel. The pulse wave channels behave almost identically to the native pulse channels in the NES APU.
Pulse 1 ($5000-$5003)
These registers manipulate the MMC5's first pulse wave channel, which functions identically to those found in the NES APU except that it lacks sweep support.
Pulse 2 ($5004-$5007)
These registers manipulate the MMC5's second pulse channel.
PCM Mode/IRQ ($5010)
NOTE: MMC5 PCM was never used on any commercial NES or Famicom games. The below documentation was supposedly taken from the MMC5 patent. It has not yet been tested on hardware.
Write
7 bit 0 ---- ---- xxxx xxxM | +- Mode select (0 = PCM Write Stream on. 1 = PCM Read Stream on.)
Read
7 bit 0 ---- ---- Ixxx xxxx | +-------- IRQ (0 = No IRQ triggered. 1 = $00 read during PCM Read Stream resulting in IRQ)
PCM Write Stream Mode
This functions exactly the same as the NES APU's register $4011, except that all 8 bits are used. $5010 IRQs are not generated in this mode.
PCM Read Stream Mode
The MMC5 digital channel has a circuit that automatically puts the data bus (D0-D7) read from anywhere in $8000-$BFFF into the DAC. However, if a $00 byte is read, then an IRQ is generated by the MMC5 and acknowledged by bit 7 of $5010. This could be used to read stream 8-bit PCM from ROM and terminate at $00.
It uses $8000-$BFFF because the 2A03 DMC uses $C000-$FFFF. However, it will also wrap to $8000 when it increments from $FFFF though. Interestingly enough this could be used to allow MMC5 and 2A03 playing the same data at the same time, although it will sound different because of the 8-bit MMC5 PCM format and the 7-bit 2A03 PCM or 1-bit DPCM.
Raw PCM ($5011)
7 bit 0 ---- ---- WWWW WWWW |||| |||| ++++-++++- 8-bit PCM data
Status ($5015, read/write)
This register is analogous to the APU Status register found within the NES at $4015, except that only the bottom 2 bits are used; being for the MMC5's two pulse channels.