NSDL(NES Sound Driver Library)

サウンドドライバー(nsd.lib)

本サウンドドライバーは、6502用C言語/アセンブリ言語開発環境のオブジェクトライブラリ`*.lib'として開発しています。
ユーザーアプリケーションからは、ライブラリ中の関数を呼ぶことにより、本サウンドドライバーを制御することが可能です。

ドライバー本体からは、cc65の付属のライブラリ`nes.lib'内の関数を一切呼び出しておらず、C言語用の領域にもアクセスしておりません。
従い、別の開発環境で記述されたコードから呼び出しても動作するとは思いますが、 その際は、ライブラリのフォーマットが、cc65のものと互換性を持っている必要があります。

関数リファレンス(Function reference)

以下に記載のライブラリ関数について、関数呼出規約は全てcc65の __fastcall__ となります。

ライブラリ関数一覧

return value Function name Contents
void nsd_main(void) Driver main routine. Please call by one V-blank.
void nsd_init(void) Initraize the driver.
void nsd_set_dpcm(nsd_dpcm* dpcm) Set the dpcm information. 未実装
void nsd_play_bgm(void *bgm) Start the BGM.
void nsd_stop_bgm(void) Stop the BGM.
void nsd_play_se(void *se) Start the SE. 未実装
void nsd_stop_se(void) Stop the SE. 未実装

関数呼出規約 __fastcall__ について(About the calling conversion __fastcall__ )

引数(Inputs)

関数の一番右の引数はレジスターで渡されます。

1 byte value
a register
2 byte value
a (LSB) and x (MSB) register

cc65では、一番右の引数以外は、ソフトウェアスタック(zeropage内の変数spによりC言語で制御される)に格納されますが、 本サウンドドライバーではライブラリ関数の引数は必ず1つ以内とし、ソフトウェアスタックの使用を避けております。
これにより、cc65に付属のランタイムライブラリ`nes.lib'をリンクしないでも、動作する設計となっています。

戻り値(Outputs)

戻り値はレジスターに格納されます。
戻り値がない場合は、レジスターの値は不定となります。
yレジスターの値は常に不定です。

1 byte value
a register
2 byte value
a (LSB) and x (MSB) register

関数のシンボル名(Function symbol name)

アセンブリ言語から呼び出す場合は、シンボル名にアンダーバー('_')を追加して下さい。
たとえば、アセンブリ言語からnsd_main(void)を呼び出す場合は、jsr _nsd_mainと記述します。