[1chipMSX]
拡張WAVE音源の不都合修正4
※情報の正確さは保証できません。
この修正は、不都合というのはちょっと大げさかもしれませんね。
scc_wave.vhd に記述されている回路は、6サイクル周期で動作すればいいものを、なぜか8サイクル周期で動作させています。
この真意はわかりませんでした。
内部の状態を示すカウンタ ClkEna が、インクリメントで 0〜7 を循環しています。
一方で、「CPUからの読み書き要求がなければインクリメントするカウンタ ChNum」で、別途内部状態を決定しています。
ChNum は、0〜4 の間に各チャネルの波形を読み出して積分器に加算。あるタイミングで出力にラッチする構造になっています。
ただし、CPU からの読み書きアクセスがあったサイクルは、ChNum は一時停止します。
しかし、ClkEna は、CPU アクセスの有無にかかわらずインクリメントしています。
つまり、値の遷移が ClkEna, ChNum で異なっているわけです。
にもかかわらず、ChNum の値を ClkEna = 7 のタイミングで無からずクリアしているし、出力にラッチするタイミングも ClkEna で決めてます。
この動作だと、出力にラッチするときに、まだ出力が適切に確定していない場合があるため、波形が乱れるのではないかと思います。
実際のところ、CPU は、SCC からみて頻繁にアクセスしに来るわけではないので、2回連続で乱れるようなことはあり得ませんが、
だからこそ出力波形で確認していると、見えないという結果になりかねません。
乱れ方はデータによりけりなので、時折へんなプチノイズが入ったりするかもしれません。
実機は、再生中に CPU から読み書きするとノイズになる場合があるようなので、これはこれで良いのかもしれませんが、乱れ方が
一致していない(と思う)ので、やっぱり直しておきたいところです。
ということで、ClkEna を削除して、内部状態変数は ChNum だけに統一した修正を加えました。
修正ソースは、上に戻って最新版ダウンロードからダウンロードしてください。
[▲上へ]