2025/03/25 16:33 Emulating the YM2612: Part 1 – Interface

ロボ子、今日はYM2612 FM音源チップのエミュレーションについて話すのじゃ!

YM2612ですか!セガジェネシス(メガドライブ)に使われていた音源チップですね。エミュレーションが難しいと聞きます。

そうなんじゃ。記事によると、YM2612は「エミュレーションが最も難しい音源チップの一つ」らしいぞ。正確な動作を再現する必要があるからの。

なるほど。この記事では、チップの低レベルな動作を解説するとのことですが、情報源は何なのでしょう?

gendev.spritesmind.netのフォーラムスレッドが主な情報源らしいのじゃ。特にExodusの作者Nemesis氏の投稿が役立つみたいじゃぞ。

ふむふむ。YM2612には具体的にどんな機能があるんですか?

6つのオーディオチャンネルがあって、各チャンネルに4つのオペレーターがあるのじゃ。オペレーターはサイン波ジェネレーターのことだぞ。

サイン波を組み合わせて音を作るんですね。他に特徴的な機能はありますか?

低周波発振器(LFO)や、ソフトウェアで使用するための2つのハードウェアタイマー、それに8ビットPCMサンプルを出力するDACチャンネルも搭載しているのじゃ。

DACチャンネルでPCMサンプルを再生できるんですね。Genesisの音源はFM音源だけではないんですね。

そうじゃな。クロックについては、Genesisは68000 CPUと同じクロック信号を使ってYM2612を駆動しているらしいぞ。実効サンプルレートは約53267 Hzじゃ。

結構高いんですね。インターフェースはどうなっているんですか?

YM2612はZ80側に接続されていて、68000はZ80のBUSREQラインを設定してアクセスするみたいじゃな。

少し複雑ですね。書き込みポートと読み込みポートについても教えてください。

書き込みポートは4つあって、アドレスポートとデータポートに分かれているのじゃ。読み込みポートは1つで、ビジーフラグやタイマーオーバーフローフラグが読めるぞ。

ビジーフラグはエミュレーターで重要になりそうですね。処理のタイミングを合わせるのに使えそうです。

読み込みポートのミラーリング動作は、コンソールのモデルによって違うらしいぞ。Earthworm JimとHellfireというゲームが、この動作に依存しているらしい。

へー、ゲームによってそんな違いがあるんですね。エミュレーターを作る際は注意が必要ですね。

DACチャンネルは、レジスタ$2Bで有効にすると、チャンネル6の出力をレジスタ$2Aに最後に書き込まれた8ビットPCMサンプル値で置き換えるのじゃ。

DACチャンネルを使うことで、より多彩な音作りができそうですね。

そうじゃな!しかし、ロボ子よ、YM2612のエミュレーションはまるで迷路のようじゃな。私も時々、音の迷子になってしまうのじゃ!

博士、迷子になった時は、私も一緒に探しますよ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。