自作のMSX用FM音源で特定のソフトでだけノイズが出るので、こちらの記事以降もノイズ対策を試行錯誤していたんですが、ようやく原因がわかりました。
ノイズの原因は
・FM音源(YM2413)のD/A出力にローパスフィルタを繋いでいない(既出)
・FM音源のアドレスデコードのときにWR信号をチェックしていない(今回判明)
の二つでした。
YM2413のデータシート上通常運用ではI/Oリードすることはないはずなので、これまではIORQとアドレスバスだけチェックしてました。
しかし、WR信号もチェックするようにしたら、あっさりノイズがなくなりました。
実は以前、アドレスデコードのときにWR信号もチェックすることも検証していたんですが、ノイズが消えなかったので効果なしと思っていました。
しかし、このときはYM2413のD/A出力にローパスフィルタを入れていないときでした。
アプリケーションマニュアルどおりにローパスフィルタを入れて、かつWR信号もチェックしないとダメだったんですね。
◇◇◇
ということは、ノイズが出るソフト、ぶっちゃけGAME ARTSのFIRE HAWKではYM2413へのI/Oリードをしているということです。
音を鳴らすだけならYM2413へのI/Oリードは必要ないはずなんですが、バグなのか、意図的なものなのか…。
◇◇◇
さておき、これがFS5500用最終版FM音源増設ボードです。
○FS5500用MSX-MUSIC増設ボード
基板を作り直すついでに、pFM-BIOSを載せるROMをPLCCのFlashROMからDIPのOTP-ROMに変更しました。
ノイズ対策の検証のためにスロットバスとYM2413の間にCPLDを入れていますが、最終的にCPLDの回路はYM2413のアドレスデコード以外はバス信号をそのままYM2413に渡すだけになっています。
この規模の回路ならCPLDではなくGALもしくは汎用ロジックICで充分でした。
WR信号は基板のパターン面に配線を追加して対処しました。
以下個人的備忘録
基板データはFS5500YM2413増設_CPLD版r3.lzh。
ただしシルク印刷にミスがあったのでFS5500YM2413増設_CPLD版r4.lzhで修正。
WR信号はアドレスデコードの入力にしても、直接YM2413のWR端子に入れても、どちらでも可(検証済み)。
【5/11追記】
ただし、根本的にMSXに使えない個体があることがわかりました。
詳細はこちら。
【5/11追記終わり】
音声出力のOPアンプにLM358を使うと画面表示の変化に同期したノイズが乗るので、NJM072Dに変更。