ページ 11

自作ファミコンソフトとcc65でのΔPCMの再生について

Posted: 2011年5月10日(火) 21:45
by KEYONN_
こんばんわ。TKOZです。
ファミコンプログラムにハマッております。
BGの書き換え方が大体分かってきたのですが、横スクロールとか、縦スクロールになると
難しく感じてしまいます。

ところで、面白半分でふざけて録音したwavファイルをcc65で(startup.asm内で)読み込んで
再生しようとふと思いました。
ところが、上手く再生されません。

具体的には、自分が「メタルスラッグ」と発音したのですが、ノイズが乗ってしまい、
「ピーィィガーァァ・・・ベェエアタグ」みたいな感じになってしまいます。
ファミコンのDPCMはそんなに悪い音質なのでしょうか?
確かに8ビットから>>1して7ビットPCMにするのですが、そこまで悪くなるとは思えません。

ソース一式をアップロードするので、どこがマズいのか教えて欲しいです。

あと、
一応、5つのwavファイルを入れようとしたのですが、cc65でのバンク切り替えと、
読み込み方が分からないので、metalslug.wavしか読み込んでないです。

あと、とある有名掲示板のゲーム開発技術板のファミコンスレッドでPCM再生のアセンブリソース
を公開していた人がいたので、参考にさせていただきました。

Re: 自作ファミコンソフトとcc65でのΔPCMの再生について

Posted: 2011年5月11日(水) 00:58
by softya(ソフト屋)
ファミコンで組んだことは無いので気になるところを指摘しておきます。

どうみてもiが初期化されていない。

コード:

void SetUpPCM()
{
	int i;

	*buffer=*(char*)0xc000;
	
	buffer[i]>>=1;
	
	*(char*)0x4011=*(buffer+0);
	
	
}
DPCMのレジスタ0x4010~0x04013の内0x4011しか初期化していないのでは?
あと*(char*)0x4011=*(buffer+0);もアドレスを入れていない気が。
NES研究所によるとN x 0x40 + 0xC000のNを入れるが正しいようです。

Re: 自作ファミコンソフトとcc65でのΔPCMの再生について

Posted: 2011年5月11日(水) 06:38
by たかぎ
0xc000番地を更新しようとしていますが、その領域はROMでは?
(少なくとも本物のファミコンではそうです)
もうひとついうと、本物のファミコンでは、ROM領域にMMCのレジスタがアサインされていることが多く(カセットの基板構成によります)、ここに書き込むと、バンク切り替えなどが起こります。
TKOZ さんが書きました:横スクロールとか、縦スクロールになると
難しく感じてしまいます。
本物のファミコンでは、縦スクロールと横スクロールの切り替えは、カセット基板上のショートランドで切り替えるのが基本です。
MMCを使う場合は、そのレジスタを設定することで切り替えられたりします。
お使いの環境ではどうなんですかね?

Re: 自作ファミコンソフトとcc65でのΔPCMの再生について

Posted: 2011年5月12日(木) 18:59
by KEYONN_
TKOZです。返信が遅れてすみません。
cc65でのΔPCMの実装例が下のURLに書いてあります。
http://www37.atwiki.jp/kikakubu4/pages/62.html#library

他にも横スクロール、縦スクロールなどの実装例が載っていますが、
あくまで参考例にとどまっており、実際にはソースを改造しなければいかないようです。

これを参考に作ってみる予定です。

Re: 自作ファミコンソフトとcc65でのΔPCMの再生について

Posted: 2011年5月13日(金) 00:37
by softya(ソフト屋)
PCMの例は、リンク先のこちらでしか見つかりませんでした。
http://www.geocities.jp/kz_s6502/nesdemo/index.html
こちらのPCMのコードを見る限り、6502のアセンブラには詳しくないですがΔPCMのレジスタはちゃんと設定しているようです。

なので、
1.ちゃんとアセンブラのコードを解析して移植されたほうが良いと思います。
2.WAVデータはちゃんとROMの所定のアドレスに組み込まれるようにリンカ・スクリプトを調整する必要があります。
3.少なくともC言語としても不適当なのでコードを見なおしてください。

Re: 自作ファミコンソフトとcc65でのΔPCMの再生について

Posted: 2011年5月16日(月) 22:34
by KEYONN_
TKOZです。なんとか再生することが出来ました。
ポインタの基本からやり直す事で、なんとかI/Oレジスタに書き込んでいろいろな録音した音を
再生できるようになりました。
今は、そのソフトを作っている最中です。しかし、音質が悪いですね。