前に FS5500や FS-A1FにFM音源を追加 したことがありました。
しかし、特定のソフトで変なノイズが乗ることに気付きました。
ほとんどのソフトでFM音源を認識して普通にFM音源の音が鳴っていたのですが、GAMEARTSのFIRE HAWKのみへんなノイズが混じります。
しかしFS-A1WSXやFS-A1STではノイズが混じることはありません。
FS5500もFS-A1FもアドレスデコードやROMの切替に汎用ロジックICを使っていたので、もしかして応答速度が足りていないかもしれないことに思い至りました。
そこでCPLDを使って改善できないか、検証してみました。
◇◇◇
CPLDは汎用ロジックICと違い、ユーザが自由に論理回路を構成できるロジックICです。
今はFPGAがトレンドですが、FPGAの前身ともいえるデバイス(※)です。
FPGAよりも小規模で、事前に設定した論理回路が電源投入時から動作するというものです。
ちなみにFPGAはCPLDよりも大規模な論理回路を構成できますが、その論理回路の設定は揮発メモリにあるため電源投入時に外部のROMから読み込む必要があります。
(最近はFlashROMを内蔵したFPGAもあるようですが…)
※:突込みが入りそうなので補足しておきますが、FPGAとCPLDはその成り立ちが違います。
ですので、FGPAはCPLDの発展系ではありません。
むしろ、調べてみたところではCPLDよりFPGAの方が登場は早いようです。
あくまで、市場のトレンドという意味で書いています。
私が作るような回路では、FPGAは規模が大きすぎます。
CPLD、それもかなり規模が少ないデバイスがちょうどよさそうです。
CPLD自体は2000年代前半辺りが最盛期だったようで、現在では各メーカーもディスコン(※)になっています。
※:ディスコン:Discontinuedの略で、要するに「生産終了」のこと
ちょっと試してみたいだけなので、あまり費用をかけずに今でも入手できるCPLDを探したところ、Xilinx社のXC9500シリーズがありました。
とりあえずMSXにFM音源を追加するためにXC9500シリーズを使ってみました。
【'19/02/20追記】
Atmel,Xilinxが現在でもCPLDを生産していました。
Xilinxもディスコンになったのは5V動作のXC9500の全タイプ,2.5V動作のXC9500XVの全タイプ,3.3V動作のXC9500XLのPLCCタイプで、残りのXC9500XLのQFPタイプはまだ生産しているようです。
【'19/02/20追記終わり】
◇◇◇
一応FM音源の音は鳴っているので、FM-BIOSのイネーブルはうまくいっていると思われます。
とすると、FM音源へのI/Oポート出力にかかる時間がFM-BIOSが想定するよりも大きくなっている可能性があります。
※詳細はここでは省略しますが、FM音源はその制御の際に一定の時間を待つ必要があります。
※汎用ゲートICを使うとその段数に応じて信号伝達に遅延が発生するため、必要な待ち時間を満たせていない可能性があると考えました。
今使っている部品のデータシートから計算すると最大27ナノ秒かかることになっています。
そこで15ナノ秒品のCPLDを使ってみることにしました。
CPLDの開発環境を構築するのにもいろいろ紆余曲折があったのですが、それは別の記事で記録するとして。

