サウンド機能

このページは閉鎖された「すずめ愛好会」さんのページをサルベージして修正・改変したものです。
ほぼ無断転載なので、問題があるようでしたら削除します。


名前 NR10
アドレス FF10h
内容 サウンド1 スイープレジスタ(R/W) Bit0-6のみ読み出し可
Bit 6-4 - スイープ時間(n: 0-7)
n/128秒毎に新しい周波数を出力します
000: スイープなし
001: 7.8 ms (1/128Hz)
010: 15.6 ms (2/128Hz)
011: 23.4 ms (3/128Hz)
100: 31.3 ms (4/128Hz)
101: 39.1 ms (5/128Hz)
110: 46.9 ms (6/128Hz)
111: 54.7 ms (7/128Hz)
Bit 3 - 周波数変化 増加/減少
0: 周波数を上げる
1: 周波数を下げる
Bit 2-0 - 周波数変化量(n: 0-7)

前回の周波数と、n回右シフトした前回の周波数を
加算または減算した値が今回の周波数となります
X(t) = X(t-1) + (X(t-1) >> n) 上昇の時
X(t) = X(t-1) - (X(t-1) >> n) 下降の時
名前 NR11
アドレス FF11h
内容 サウンド1 長さ/波形(R/W) Bit6-7のみ読み出し可
Bit 7-6 - 波形パターン
Bits  Cyc%   0 1 2 3 4 5 6 7
00  : 12.5%  ________==______
01  : 25%    ________====____
10  : 50%    ____========____
11  : 75%    ========____====

= is High
_ is Low
Bit 5-0 - 音の長さ(t1: 0-63)
長さ = (64-t1)*(1/256)秒
名前 NR12
アドレス FF12h
内容 サウンド1 エンベロープ(R/W)
Bit 7-4 - 初期ボリューム
Bit 3 - エンベロープ 増加/減少
0: 減少
1: 増加
Bit 2-0 - エンベロープステップ時間(n: 0-7)
n/64秒毎に音量を1段階増減する
ただしn=0のときはエンベロープを使わない
名前 NR13
アドレス FF13h
内容 サウンド1 周波数下位(W)
11ビットの周波数の下位8ビット
名前 NR14
アドレス FF14h
内容 サウンド1 周波数上位/開始/カウンタ(R/W) Bit6のみ読み出し可
Bit 7 - 開始フラグ
セットするとサウンドを開始(orリスタート)する
Bit 6 - カウンタ/連続再生の選択
0 = NR11の長さデータにかかわらずサウンドを連続的に再生する
1 = NR11の長さデータによってセットされた時間の間サウンドを再生する
再生終了後、サウンド1 ONフラグ(NR52のビット0)をリセットする
Bit 2-0 - 11ビットの周波数の下位3ビット
NR13,NR14でセットされた周波数の値をxとすると
周波数 = 4194304/(32*(2048-x))Hz = 131072/(2048-x)Hz になる
∴再生できる周波数は64Hz〜131.1KHzとなります
名前 NR21
アドレス FF16h
内容 サウンド2 長さ/波形(R/W) Bit6-7のみ読み出し可
Bit 7-6 - 波形パターン
Bits  Cyc%   0 1 2 3 4 5 6 7
00  : 12.5%  ________==______
01  : 25%    ________====____
10  : 50%    ____========____
11  : 75%    ========____====

= is High
_ is Low
Bit 5-0 - 音の長さ(t1: 0-63)
長さ = (64-t1)*(1/256)秒
名前 NR22
アドレス FF17h
内容 サウンド2 エンベロープ(R/W)
Bit 7-4 - 初期ボリューム
Bit 3 - エンベロープ 増加/減少
0: 減少
1: 増加
Bit 2-0 - エンベロープステップ時間(n: 0-7)
n/64秒毎に音量を1段階増減する
ただしn=0のときはエンベロープを使わない
名前 NR23
アドレス FF18h
内容 サウンド2 周波数下位(W)
11ビットの周波数の下位8ビット
名前 NR24
アドレス FF19h
内容 サウンド2 周波数上位/開始/カウンタ(W) Bit6のみ読み出し可
Bit 7 - 開始フラグ
セットするとサウンドを開始(orリスタート)する
Bit 6 - カウンタ/連続再生の選択
0 = NR21の長さデータにかかわらずサウンドを連続的に再生する
1 = NR21の長さデータによってセットされた時間の間サウンドを再生する
再生終了後、サウンド2 ONフラグ(NR52のビット1)をリセットする
Bit 2-0 - 11ビットの周波数の下位3ビット
NR23,NR24でセットされた周波数の値をxとすると
周波数 = 4194304/(32*(2048-x))Hz = 131072/(2048-x)Hz になる
∴再生できる周波数は64Hz〜131.1KHzとなります
名前 NR30
アドレス FF1Ah
内容 サウンド3 ON/OFF(R/W) Bit7のみ読み出し可
Bit 7 - サウンド出力 ON/OFF
0: サウンド出力OFF
1: サウンド出力ON
名前 NR31
アドレス FF1Bh
内容 サウンド3 長さ(W)
Bit 7-0 - サウンドの長さ(t1: 0 - 255)
長さ = (256-t1)*(1/256)秒
名前 NR32
アドレス FF1Ch
内容 サウンド3 出力レベル(R/W) Bit5-6のみ読み出し可
Bit 6-5 - 出力レベル選択
00: ミュート
01: データをそのまま出力
10: データを1/2にして出力
11: データを1/4にして出力
名前 NR33
アドレス FF1Dh
内容 サウンド3 周波数下位(W)
11ビットの周波数の下位8ビット
名前 NR34
アドレス FF1Eh
内容 サウンド3 周波数上位/開始/カウンタ(R/W) Bit6のみ読み出し可
Bit 7 - 開始フラグ
セットするとサウンドを開始(orリスタート)する
Bit 6 - カウンタ/連続再生の選択
0 = NR31の長さデータにかかわらずサウンドを連続的に再生する
1 = NR31の長さデータによってセットされた時間の間サウンドを再生する
再生終了後、サウンド3 ONフラグ(NR52のビット2)をリセットする
Bit 2-0 - 11ビットの周波数の下位3ビット
NR33,NR34でセットされた周波数の値をxとすると
周波数 = 4194304/(64*(2048-x))Hz = 65536/(2048-x)Hz になる
波形RAM(FF30h-FF3Fh)は4bit*32の波形パターンで構成されていて、
上位4bitが先に再生されます
名前 NR41
アドレス FF20h
内容 サウンド4 長さ(R/W)
Bit 5-0 - 音の長さ (t1: 0-63)
長さ = (64-t1)*(1/256)秒
名前 NR42
アドレス FF21h
内容 サウンド4 エンベロープ(R/W)
Bit 7-4 - 初期ボリューム
Bit 3 - エンベロープ 増加/減少
0: 減少
1: 増加
Bit 2-0 - エンベロープステップ時間(n: 0-7)
n/64秒毎に音量を1段階増減する
ただしn=0のときはエンベロープを使わない
名前 NR43
アドレス FF22h
内容 サウンド4 周波数(R/W)
Bit 2-0 - 分周比 (r: 0-7)
ratio of:  0 _-_-_-_-_-_-_-_-_-_-_-_-_-_- 1048576 hz
           1 __--__--__--__--__--__--__--  524288 hz
           2 ___---___---___---___---___- ~370727.6 hz
           3 ____----____----____----____  262144 hz
           4 _____-----_____-----_____--- ~220435.95 hz
           5 ______------______------____ ~185363.8 hz
           6 _______-------_______------- ~155871.75 hz
           7 ________--------________----  131072 hz
分周比を r とすると、出力は 4194304 / 4 / (r+1) となる
これをbit4-7でシフトした周波数を出力する
Bit 3 - カウンタステップの選択
0: 15ステップ
1: 7ステップ

Linear Feedback Shift Register アルゴリズムで使用する
シフトレジスタ幅を選択する
Bit 7-4 - 周波数のシフト量 (s: 0-13)
s+1 だけ右シフトした周波数を出力する

ノイズ周波数 = (1048576 / (r+1)) >> (s+1)
∴再生できる周波数は8Hz〜131.1KHzとなります
名前 NR44
アドレス FF23h
内容 サウンド4 開始/カウンタ(R/W) Bit6のみ読み出し可
Bit 7 - 開始フラグ
セットするとサウンドを開始(orリスタート)する
Bit 6 - カウンタ/連続再生の選択
0 = NR41の長さデータにかかわらずサウンドを連続的に再生する
1 = NR41の長さデータによってセットされた時間の間サウンドを再生する
再生終了後、サウンド4 ONフラグ(NR52のビット3)をリセットする
名前 NR50
アドレス FF24h
内容 チャンネル制御/ON-OFF/ボリューム(R/W)
Vin端子からの音声入力のON/OFFとSO1/SO2のボリュームを設定する
Bit 7 - Vin->SO2 ON/OFF
0 : OFF
1 : ON
Bit 6-4 - SO2ボリューム
Bit 3 - Vin->SO1 ON/OFF
0 : OFF
1 : ON
Bit 2-0 - SO1ボリューム

SO1:右出力 SO2:左出力です
名前 NR51
アドレス FF25h
内容 各チャンネルの出力ON/OFF(R/W)
Bit 7 - サウンド4 → SO2
Bit 6 - サウンド3 → SO2
Bit 5 - サウンド2 → SO2
Bit 4 - サウンド1 → SO2
Bit 3 - サウンド4 → SO1
Bit 2 - サウンド3 → SO1
Bit 1 - サウンド2 → SO1
Bit 0 - サウンド1 → SO1
0 : OFF
1 : ON
SO1:右出力 SO2:左出力です
名前 NR52
アドレス FF26h
内容 全サウンドのON/OFF(R/W) bit7のみWrite可 Bit7,0-3のみ読み出し可
Bit 7 - 全サウンドのON/OFF
0: 全サウンド停止
1: 全サウンド駆動
Bit 3 - サウンド4再生フラグ
Bit 2 - サウンド3再生フラグ
Bit 1 - サウンド2再生フラグ
Bit 0 - サウンド1再生フラグ
各チャンネルのステータス
0 : サウンド停止中
1 : サウンド再生中