2009年08月27日


広告


NP2 for PSPでPC-98起動音を鳴るようにする

NP2 for PSPの公式サイトの掲示板にて、NP2 for PSPの最新ソースをいただけないか頼んでみたところ、ありがたいことにお返事をいただけました。

そして、v0.34の作成を依頼されました...

なんでも、v0.33までは、音源関係の小数演算を全て整数に変換して行っていたということです。最新の開発環境では小数演算もできると思うので、整数に変換したものを元の小数演算に戻してほしい、ということです。

soundディレクトリあたりをざっと見てみると、確かに#ifdef PSPされた箇所にそれっぽいところが何箇所も見られます。
たとえば、sound/opngenc.cを見ると、以下の様な小数演算を整数演算に直しているところや、

#define EG_STEP (96.0 / EVC_ENT) // dB step
#ifdef PSP
#define SC(db) (SINT32)((db * (3 * EVC_ENT / 96) * (1 << ENV_BITS)) + EC_DECAY)
#else
#define SC(db) (SINT32)((db) * ((3.0 / EG_STEP) * (1 << ENV_BITS))) + EC_DECAY
#endif

ここら辺には、あらかじめ作成された数値テーブルが埋め込まれています。

#ifdef PSP
// OPNGENX86がdefineされた場合の処理は未対応
static SINT32 psp_envtable[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,

:

static SINT32 psp_sintable[] = {
0, 50, 100, 150, 201, 251, 301, 351,
402, 452, 502, 552, 603, 653, 703, 753,
803, 854, 904, 954, 1004, 1054, 1104, 1155,
1205, 1255, 1305, 1355, 1405, 1455, 1505, 1555,


上記の数値テーブルを作成するのが、psp/psp/mk_n2p_data.cですね。これはmain()関数をもつ、独立したアプリケーションで、これで小数演算をPCなどであらかじめ行っておいて、NP2 for PSP本体にテーブルごと埋め込んでいたんですね。
NP2 for PSPのプログラムの方は、きれいに#ifdef PSPされているので、この部分を全てはずして元に戻せば大丈夫そう。

で、やってみた。音がなんか変。というかかなり変。きれいに鳴っていたFM音源がそもそもノイズだらけになって聞けたものではなかった。

で、ソースを調べていて原因が分かりました。
psp/psp/psplib.cにこんなコードが残っていました。


//浮動小数点関係は無効
:
//#ifndef PSPDEV
sin() {}
pow() {}
//#endif


sin()とかpow()とかダミー関数で中身が空っぽ。ダミーだこりゃ。
これを消して、sdkが用意している数値ライブラリをリンクするようにMakefileを修正します。LIBSの行に-lmを追加しました。

LIBS = -lpspgu -lpsppower -lpspaudiolib -lpspaudio -lm


おっけー。うまくいきました。FM音源のノイジーも元に戻って、待望の「ぴぽっ」も鳴るようになりました。
後ほど、NP2 for PSP Ver0.34 リリースします。




posted by ひっそりぃ at 2009/08/27 16:43 | Comment(0) | TrackBack(0) | NP2 for PSP | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。