8253で音量を実現する方法の解説

モード2を使え。以上。

…だと無愛想過ぎるのでもう少し噛み砕いて。
8253はモードが6種あり、そのうちモード2は分周モードである(ちなみに、BEEP音は通常モード3を使う)。
このモードではレジスタに指定した値(以下Nとしよう)で入力クロックを分周するが、
このとき波形は1クロックHIで残り(N-1)クロックがLOになる。
これは、1/NだけHIになるPWMと同じなので、後段のLPFを通した結果1/Nの電圧が出ているのと同等になる。
もちろん、これだけだと一定の電圧が出るだけなので、鳴らしたい周波数に応じて適宜ON/OFFしてやる必要がある。A4=440HzならONOFF合わせて1秒間に880回。
この方法の利点は8253クロックが十分に高ければその周波数がいくつであるかは関係ないところ。欠点は鳴らす周波数に合わせてキッチリON/OFFを制御しなくてはいけないところ。
MI68デモ版ではMCU一個を完全に割り当てられてるのでこれが可能なわけ。

本日の晩酌


わーい、ナナイロゑびすだー、たーのしー
……青被ってるけど。