YM2610



The YM2610 is a sound synthesis chip made by Yamaha, which is used in all versions of the NeoGeo hardware. It was later merged with the Z80 memory controler in the NEO-YSA and NEO-YSA2 chips, used on some versions of the NeoGeo CD, CDZ and on ROM-Only boards.

The chip's analog output is only the SSG's output. The FM and ADPCM sounds were sent digitally to the YM3016 DAC and passively mixed before amplification.

Z80 CPU interface
The YM2610 is programmed through two pair of "ports": A and B. They're usually called Address A, Data A, Address B, Data B. They're respectively linked to the Z80's ports 4, 5, 6 and 7.


 * Port A (Z80 ports 4 and 5) concerns the SSG, ADPCM-B, and FM channels 1 and 2.
 * Port B (Z80 ports 6 and 7) concerns the ADPCM-A, and FM channels 3 and 4.
 * Data A (Z80 port 5) can also be read ?

The Z80's A0 and A1 lines are directly connected to the YM2610's A0 and A1 inputs. A2 informs the NEO-D0 chip that the I/O request is for the YM2610.

Multiplexed PCM bus
ADPCM-A ROM addressing:
 * SDRMPX low to high: SDRAD0~SDRAD7 are set to address bits 0~7, SDRA8,SDRA9 are set to bits 8~9, (SDRA20~SDRA23 are set to bits 20~23 ?)
 * SDRMPX high to low: SDRAD0~SDRAD7 are set to address bits 10~17, SDRA8,SDRA9 are set to bits 18~19, SDRA20~SDRA23 are set to bits 20~23

ADPCM-B ROM addressing:
 * SDPMPX low to high: SDPAD0~SDPAD7 are set to address bits 0~7, SDPA8~SDPA11 are set to bits 8~11
 * SDPMPX high to low: SDPAD0~SDPAD7 are set to address bits 12~19, SDPA8~SDPA11 are set to bits 20~23

24 bits = 16MiB ADPCM ROMs Max.

Sound generation parts
Sound can come from different parts, each having their own channel(s): SSG, FM synthesis and ADPCM playback.

SSG (Simple Sound Generator)
Given its limited capacities, the SSG is more often used for simple sound effects (coin sound, cursors in menus...) rather than music.

The SSG has 3 square wave channels with programmable frequency, and a LFSR noise channel, all with programmable amplitude. An unique enveloppe generator with predefined shapes can also be linked to the SSG's channels amplitudes.

See YM2610 registers: SSG

FM (Frequency Modulation)
The FM part has 4 channels, each having their own parametrable operators, panning and amplitude. It's the most used way of generatic music in games.

See YM2610 registers: FM

ADPCM
APDCM playback allows sampled sounds stored in the V ROMs or PCM files to be played. It's used for anything that can't be easily synthesized like voices, percussions and wind instruments.

The ADPCM-A part has 6 channels, with a fixed playback frequency of 18.5kHz. Samples can be any size from 256 bytes to 1MB, by 256 bytes increments. Audio is compressed as 4bit per sample and played back as 12bit. Samples cannot cross 1MB pages i.e. top 4 bits of end address should be equal to the start address.

The ADPCM-B part only has 1 channel, but the playback frequency can be changed. Audio is compressed as 4bit per sample and played back as 16bit.

See YM2610 registers: ADPCM-A and ADPCM-B

Trivia

 * Viewpoint uses a lot of sampled drum loops and voice samples for BG music.
 * A lot of games have several recordings of the same instrument playing different notes, rather than having only one sample and changing the ADPCM-B playback frequency to change its pitch. (Trumpet in Viewpoint, electric guitar in Super Sidekicks). Why ?
 * Nazca's sound drivers are able to use the SSG channels for music playback. (Maybe all can ?)

Datasheet
Incomplete/translated datasheet: [YM2610.pdf]