ファミコン開発: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です。

この記事が気に入ったらサポートをしてみませんか?