前に 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の開発環境を構築するのにもいろいろ紆余曲折があったのですが、それは別の記事で記録するとして。

 
○FS5500用CPLD版FM音源拡張基板
 
うまくいけばそのままFS5500に使えるし、手持ちの機材でFS-A1にも繋げられるので、FS5500用の基板を作ってみました。
音源だけではMSXソフトFM音源を認識しないのでpFM-BIOSを書き込んだROMも載せてあります。
 
○検証中
 
MSX本体に繋いで、効果を検証しているところです。
 
◇◇◇
 
残念ながら、改善しませんでした。
 
どうやらH/Wだけで解決できる問題ではなさそうです。
 
というか、手持ちのソフトでは今のところFIRE HAWKでしかノイズが混じる現象は起きていません。
もしかしたら、FIRE HAWKではFM-BIOSを全く使わず直接FM音源を操作している可能性もあります。
そうなると、ゲートアレイでFM音源の制御を行なっているFM音源内蔵の本体やFM-PACをターゲットに調整している可能性が高いです。
私のようなアマチュアがアドオンしたFM音源ではきちんと動かないのかもしれません。
 
そのうちにそのあたりの検証をしてみることにします。
 
【11/14追記】
手持ちのソフトのいくつかを試してみましたが、どれもFM-BIOSのルーチンは使っていないことがわかりました。
確認したのは以下のソフトです。
・FIRE HAWK
・ゼビウス ファードラウト伝説
・FRAY
自作のなんちゃってFM-BIOSではI/Oポートへの出力ルーチンのみちゃんと実装してありました。
このルーチンを何もしない処理に書き換えてみました。これでFM音源の音は鳴らないはずです。
しかし、普通にFM音源の音が鳴ります。
 
となるとやっぱりノイズが混じる原因はゲートアレイとCPLDの遅延時間の違いかなぁ…。
【11/14追記終わり】
 
【'19/3/10追記】
こちらの記事 で少し改善しました。
【'19/3/10追記終わり】
 
【'19/5/12追記】
解決しました。記事はこちら
【'19/5/12追記終わり】