AY vs YM sound IC differences

2018/04/05

Tags: YM2149F AY-3-8910

Introduction

The General Instrument (later Microchip) AY-3-8910 and Yamaha YM2149F are very similar sound ICs. The YM2149F is essentally a Yamaha-branded AY-3-8910 compatible made under license. The AY-3-8910 (or its identical sounding variants, the AY-3-8912 and AY-3-8913) were most notably used in the ZX Spectrum 128, Amstrad CPC and MSX computers while the YM2149 was used in the Atari ST.

This article is a collection of all the information I could find about the differences between the AY and the YM, and a chance to hear them for yourself.

Functional differences

Input clock speed

The YM has an internal clock divider, enabling it to be used with an external clock of up to 4Mz vs 2MHz of the AY. Pin 26 which is designated TEST 2 on the AY-3-8910 and should be left NC, is /SEL on the YM2149F. When the voltage level of /SEL is high, the input clock is taken as the master clock. When the voltage level is low, the input clock is divided by 2. The pin has an internal pullup allowing pin compatibility with the AY.

Envelope volume

The envelope volume counter on the AY-3-8910 internally uses 4 bits, resulting in 16 steps. On the YM2149F it has 5 bits, resulting in twice the steps, and counts up twice as fast. This allows for smoother volume ramping, even though the register for setting its direct value remains 4 bits wide.

Unused bits in registers

On the AY, unused bits in registers always read back as 0 even if you had earlier written 1 to them. On the YM2149G, the register values can be read back as written.

Output voltage offset

The YM2149 has a 2V DC offset on all outputs, whereas the AY-3-8910 has a 0.2V offset on a channel if an envelope is active.

Real world sound differences

If you listen to the same compositions played on both chips there are differences:

Internet info

Sergei Bulba has an article on his site in Russian about the differences between the ICs and how to remove said differences. Unfortunately the article dosn’t translate that well with Google Translate.

From this thread on EAB about AY/YM differences user mtb mailed Sergei and he replied: “For listener AY is a little bit louder than YM, because of YM has some steep DAC output graph (YM is closer to logarithmic, than AY). Therefore some music melodies on AY can be called as “legato” and on YM as “staccato”. Some musicians use special effect - sound via envelope generator (some cool bases). So, such effects will be different on AY and YM (AY little bit silent without some hi freq harmonics). Main cause is different DACs and also AY has only 16 output levels on envelope generating, and YM has 32 ones.

AY-3-8912 and AY-3-8910 both has identical sound, only YM2149 is a little different sound. But they are complete software analogs anyway.”

In this interview with composer/musician Ben Daglish, when asked “YM2149”, he responds: “I prefer AY8192 because the sub-modulated square-generated harmonic frequency distribution was more to my liking.”

Another great resource detailing the differences between the chips is the MAME sound driver source that has extensive comments.

And more chat on msx.org forums

Demonstration

To demonstrate the differences between the YM and the AY I recorded the same tune “Karbofos - wat is luv” (a cover of “Haddaway - What Is Love”!) on both the YM2149F (9140 date code) and AY-3-8910A (8907 date code), via my RC2014 sound card into my Focusrite Scarlett 18i8. No processing was done on either recording. To my ears, the AY sounds superior on this tune. This is not that surprising as the composer was probably using a ZX Spectrum or clone with an AY chip.

Enjoy…

AY version

YM version

The visualisation in the videos was generated with ffmpeg using the following command:

ffmpeg -i ym2149.wav -filter_complex \
"[0:a]avectorscope=s=640x518,pad=1280:720[vs]; \
 [0:a]showspectrum=mode=separate:color=intensity:scale=cbrt:s=640x518[ss]; \
 [0:a]showwaves=s=1280x202:mode=line[sw]; \
 [vs][ss]overlay=w[bg]; \
 [bg][sw]overlay=0:H-h[out]" \
-map "[out]" -map 0:a -c:v libx264 -preset fast -crf 18 -c:a copy output.mkv