このICはSSG(Software-controlled Sound Generator)音源です。いわゆるビープ音が出てくるのですが、ファミコンのようにパルスの幅を変化させることはできません。 同様の音源に元祖でGI製のAY-3-8910、それのYamahaコピー版がYM2149、3つの音が内部でミックスされて外部へのGPIO端子が省略されているのがYMZ294です。 SSGLという名前でYMZ284という型番もあります。
内部には3系統のオシレータとボリュームコントロールがあり、1系統のノイズをそれぞれのミキサーでミックスできます。
右のエンベロープジェネレータではいわゆるLFOを発生させ、ボリュームコントロールに入れることによってハードウエアでエンベロープを作ることができます。
YMZ294の特徴として、φMに入れるクロックが4MHz固定ではなく6MHzを使うこともできます。TEST端子もあるのですが仕様が分からないため使いません。
ネット上ではYMZ294のデータシートは落ちていないようなので、YMZ284あたりのデータシートを探すと同等の構成で役に立つと思います。
もちろんソフトウエアレベルではAY-3-8910・YM2149とも共通です。
値 | mV | dB | 対数補正後のベロシティ値 |
---|---|---|---|
15 | 1000 | 0 | 117 |
14 | 707 | -3 | 98 |
13 | 500 | -6 | 83 |
12 | 353 | -9 | 70 |
11 | 250 | -12 | 58 |
10 | 177 | -15 | 49 |
9 | 125 | -18 | 41 |
8 | 88.4 | -21 | 35 |
7 | 62.5 | -24 | 29 |
6 | 44.2 | -27 | 25 |
5 | 31.3 | -30 | 21 |
4 | 22.1 | -33 | 17 |
3 | 15.6 | -36 | 15 |
2 | 11.0 | -39 | 12 |
1 | 7.81 | -42 | 10 |
0 | 5.52 | -45 | 0 |
ところでボリュームレジスタやエンベロープジェネレータを操作した時の出力値は、リニアカーブではなく対数カーブになっています。 そのままリニアでMIDIのベロシティなどに置き換えてしまうと音量変化が大きくなりすぎるのでソフト側で何とかしたほうが良いかもしれません。
回路の設計中に気が付いたのですが、YMZ294は3チャンネルを同時に鳴らしても音がクリップしないようです。
YM2149やYM2203のSSGセクションでは3つのチャンネルを抵抗でミックスさせるため、下のように各チャンネルの電圧が加算されて最終的な波形が生成されます。
YMZ294の出力は2音同時だろうが3音同時だろうがほぼ一定です。
拡大した波形を見ると、YMZ294のほうはパルスの幅が変わっているようです。
よく観察するとA・B・Cのオシレータが入れ替わりでオンされていることが分かります。
つまり音程のレジスタで指定した数値はパルスを何回出力したらON/OFFを切り替えるかというもので、数値に反比例した周波数の音が出力されるのです。
右下の写真は、オシレータAのレジスタに1を指定したところで、1回ごとに一番高いパルスが切り替わっているのが良く分かります。
あとはコンデンサなどで積分すれば和音に聞こえるという仕掛けです。これならポケコンでも和音の演奏ができるんじゃないでしょうか…?