ファミコン開発:PAL対応・周波数
PAL対応の話の続きです。ファミコンのCPUクロック周波数はNTSCとPALで異なります(NTSC:1.789MHz、PAL:1.662MHz)。音の周波数として設定する値は、CPUのクロック周波数から算出します。そのため、NTSCとPALでは設定する値が異なります。
各音階の周波数はこちらのサイトが参考になります。
<山田 泰司さんのページ>
https://www.aihara.co.jp/~taiji/browser-security/js/equal_temperament.html
APUに設定する値は以下の式で求めます。
const float CLOCK = 1789773.0f; // NTSCクロック周波数
const float FREQUENCY = 391.995f; // オクターブ4:ソ
int p = CLOCK / (FREQUENCY * 16) - 1;
if ( p > 2047 )p = 2047; // 設定できるのは11bitまで
int p_lo = p % 256; // 下位バイト
int p_hi = p / 256; // 上位バイト
実際に設定できる値は11bitですので、下位8bitと上位3bitに分けて、各音階のテーブルを生成します。PALの場合は上記のCLOCKの値を変えればOKです。
この記事が気に入ったらサポートをしてみませんか?