ファミコンエミュレータ

・NesApu.cs

APU(オーディオ処理ユニット)の処理が書いてあります。

CPU から呼び出されることで動作します。
呼び出されるときに、CPU の処理済クロック数が渡され、
そのクロック数分、 APU を動作させるようになっています。

1 バイト単位でサウンドバッファを操作する必要があったので、
やむなく DirectSound を使っています。
ここに DirectSound を使わなければ、mono で動作していたかもしれません。

DirectSound は別スレッドで動作します。
DirectSound のスレッドは、常にリングバッファを走査しながらそこにあるデータを
そのまま鳴らしていきます。

APU のスレッド(CPU のスレッドと同じ)は、DirectSound のリングバッファに
50ms 分ずつ書き込んで行きます。
リングバッファは 250ms 分確保しています。
状態によっては、音が出るのが 200ms 遅れるかもしれません。



メンバ変数リスト (全部で 77 個の変数があります)

メンバ定数リスト (全部で 3 個の定数があります)

メンバ関数リスト (全部で 38 個の関数があります)