cc65であいかわらず、c言語でファミコンプログラミングしているTKOZです。
今回は、サウンドの音の出し方について質問します。
サウンドのドレミファソラシドの音を出力する方法が分かりません。
矩形波のチャンネル1でいいのですが、以下のページを参考にして作ってみたのですが、
何の音すら再生されません。
http://hp.vector.co.jp/authors/VA042397/nes/apu.html
http://hp.vector.co.jp/authors/VA042397/nes/ioport.html
ソースはこんな感じです。
void SoundProc(int freq)
{
int num=0;
*(char*)0x4015=0x00;
num=1790000/(freq<<5)-1;
num=num&0x00FF;
*(char*)0x4002=num;
*(char*)0x4015=0x01;
}
I/Oレジスタ0x4003の
bit7-3 再生時間
bit2-0 再生周波数上位3bit データ値
というのは、どうすれば設定できますでしょうか?
ファミコンプログラムを作っているのですが…
Re:ファミコンプログラムを作っているのですが…
例えば、再生時間をt、再生周波数をfとすると...
# ファミコンのプログラミングはほとんど忘れました。
unsigned char t; unsigned char f; ... *(unsigned char*)0x4003 = (t << 2) | (f & 3);でよいのでは?
# ファミコンのプログラミングはほとんど忘れました。
Re:ファミコンプログラムを作っているのですが…
先ほどの書き込みはネットカフェからのものです。
下のソースのようにしたのですが、音が全く鳴りません。
何故でしょうか?
下のソースのようにしたのですが、音が全く鳴りません。
何故でしょうか?
void SoundPlay(void) { int num; unsigned char t=0xF; *(char*)0x4015=00; num=1790000/(440*32)-1; num=num & 0x00FF; *(char*)0x4002=num; *(unsigned char*)0x4003 = (t << 2) | (440 & 3); *(char*)0x4003=num; *(char*)0x4015=01; }
Re:ファミコンプログラムを作っているのですが…
こうじゃないですか?
num=1790000/(440*32)-1;
*(char*)0x4001=0;//とりあえずクリア
*(char*)0x4002=(num&0xff);
*(unsigned char*)0x4003 = (t << 2) | ((num>>8) & 0x03);
>*(char*)0x4003=num;
いらないです。
num=1790000/(440*32)-1;
*(char*)0x4001=0;//とりあえずクリア
*(char*)0x4002=(num&0xff);
*(unsigned char*)0x4003 = (t << 2) | ((num>>8) & 0x03);
>*(char*)0x4003=num;
いらないです。
Re:ファミコンプログラムを作っているのですが…
http://gikofami.fc2web.com/nes/nes012.html
上記のページを参考に組んでみたした。
しかし、…メインループがおかしいのか、どうかは分かりませんが、
連続した音の再生は出来ませんでした。
時々、プツッって途切れるような音の鳴り方です。
というか、ほとんど音鳴りません。
上記のページを参考に組んでみたした。
しかし、…メインループがおかしいのか、どうかは分かりませんが、
連続した音の再生は出来ませんでした。
時々、プツッって途切れるような音の鳴り方です。
というか、ほとんど音鳴りません。
void SoundPlay(void) { int num; unsigned char t=0xF; *(char*)0x4015=0x01; *(char*)0x4000=0xBF; *(char*)0x4001=0xAB; num=1790000/(220>>5)-1; //*(unsigned char*)0x4003 = (t << 2) | ((num>>8) & 0x03); *(char*)0x4002=0xDC; *(char*)0x4003=0xF0; }
Re:ファミコンプログラムを作っているのですが…
ドレミファソラシドを鳴らしてみました
実機での確認は出来ないのでエミュでやりましたがVirtuaNESでは鳴ってくれました
6502はレジスタが8ビットしかないのでCの変数も8ビットのみでやったほうがいいと思います
スタックも少ないので引数のサイズも少ないほうがいいでしょうし
実機での確認は出来ないのでエミュでやりましたがVirtuaNESでは鳴ってくれました
6502はレジスタが8ビットしかないのでCの変数も8ビットのみでやったほうがいいと思います
スタックも少ないので引数のサイズも少ないほうがいいでしょうし
Re:ファミコンプログラムを作っているのですが…
今日は忙しかったので、返信が遅れました。
>toyoさん
ありがとうございます。
これで、なんとか自作の曲がサウンドで鳴らせそうです。
>toyoさん
ありがとうございます。
これで、なんとか自作の曲がサウンドで鳴らせそうです。