$4008はリニアカウンターの設定をするレジスタです。音を鳴らす長さを設定します。
lda #%1111111 ; カウンタ使用・長さ sta $4008 ; 三角波チャンネル制御レジスタビット7が1だとリニアカウンターを使用し、ビット6~0の数値が大きいほど長く鳴らします。 ビット7を0にすると、後で設定する長さのほうの影響だけを受けます。
$400Aと$400Bで周波数を設定します。
lda #%00000100 ; 周波数(下位8ビット) sta $400A ; 三角波チャンネル1周波数レジスタ1 lda #%11111011 ; 再生時間・周波数(上位3ビット) sta $400B ; 三角波チャンネル1周波数レジスタ2見ての通り、矩形波の周波数レジスタ$4002,$4003と全く同じです。三角波レジスタは以上3つです。単調な音しか出せません。
$400Cでは音の減衰を設定します。
lda #%11101111 ; 未使用・長さ無効・減衰無効・減衰率 sta $400C ; ノイズ制御レジスタ矩形波の$4000に似てますが、ビット7~6は未使用です。
次の$400E,$400Fではタイプ、波長、長さを指定します。
lda #%00000100 ; 乱数タイプ・未使用・波長 sta $400E ; ノイズ周波数レジスタ1 lda #%11111011 ; 再生時間・未使用 sta $400F ; ノイズ周波数レジスタ2$400Eの7ビット目は乱数タイプを選択します。0が32kbitで1が93kbitです。$400Eのビット3~0で周波数を選択します。 $4000Fのビット7~3で音の長さを指定します。
ノイズの乱数タイプや周波数については私もよくわからないんですが、適当な値を色々入れてみると、望みの音が得られると思います。 ファミコンエミュでちょっとプログラム作ってみたいくらいなら、そういうノリでも結構いけると思います。次のサンプルを実行してみてください。
次はスタックを説明しようと思います。
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||