YMZ771を使ってみた

秋月でYMZ771-Fという音源ICが発売されていたので見てみると、PSGが二系統もあるようなので触ってみました。

YMZ771の機能

・パラレル接続のROMを使用したシーケンサ機能。
・AMMデコーダ、リミッター・バスブーストのエフェクター。
・2基のSSG(PSG, AY-3-8910互換コア)+パンポット。
・DAC出力とI2S出力。

アクセス方式はマルチプレクスバスで、1602のLCDとほとんど同じです。いくつかアクセスモードを設定できるようですが、ノーマルモード1を使います。

クロックは16.384MHzで、あまり見ない周波数ですが秋月に売っています。ROMを使わなければ外付け部品はクロックとバイパスフィルター用のコンデンサ、オーディオ用のカップリングコンデンサと抵抗だけなのでシンプルな配線になります。

形状がQFPなのでそのまま配線するのは至難の業です。また一般的な正方形のものではないので変換基盤も用意しにくくなっています(一応サンハヤトのICB-012が使えるようですが)。何故かフットプリントは存在するのでプリント基板の業者に注文してみました。

一応ガーバーデータもありますが、配線が汚いので参考程度に見てください。

また、Raspberry Pi上でYMZ771を制御するプログラムも必要になります。実用的ではありませんが、一応音が出せるところまではできたので公開します。

sysfs版: ymz771.c (曲再生時に高周波のノイズが発生します)

mmio版: ymz7712.c (Raspberry Pi 1/Zero専用)

これらはgcc ymz771.c(ymz7712.c)でコンパイルし、sudo ./a.outで実行することができます。また簡易的な曲データ再生機能もあり、ymConverter.pyで変換した曲データ(64KB以下)をpsg.sngという名前にリネームすると再生させることができます。変換する曲データはzxart.eeで探す事ができます。

いくつか注意点があり、3チャンネル以上使う場合うまく音量を調整しないとすぐに音割れしてしまいます。しかし音量レジスタは4ビットしかないため音量を下げると音の解像度が低くなってしまう可能性があります。
グローバル音量は8ビットありますが、こちらを下げても音割れ解消にはなりません。
また、上の基板だと位相がずれているのか中央の音がかなり歪んでしまいます。

AMM(Amusement music compression)形式とシーケンスデータ

さて、前述の通りAMM形式の音声を再生する機能がついているのですが、データシートを見てもその内容は書いてありません。検索するとどうやら秘密保持契約を結んで専用のオーサリングソフトを購入する必要があるようです。

しかし、同じシリーズのYMZ770はアーケードゲームでの採用例があり(CAVEとか…)、そのエミュレーター(MAME)のソースコードから内容を理解する事ができます。それによると、MPEG-1 Audio Layer-2に独自ヘッダーがついたものの様です。MPEG-1 Audio Layer-2は、MP3の前の圧縮方式であり、あまり普及しませんでした。拡張子はmp2で、TwoLAMEでエンコード可能なものの、ヘッダーは自分で作る必要があります。

シーケンスデータは単純で、書き込みアドレスとデータが交互に現れるものとなっています。0x0eが現れたらウェイトを挟み、0x0fが現れたらシーケンスの終了となるようです。

もっとも、これらのデータを作成できたとしてもピン数の多いEPROMに書きこんで配線をしなければならないので、あまりやりたくはないです…

コメントを残す