本サウンドドライバーは、6502用C言語/アセンブリ言語開発環境のオブジェクトライブラリ`*.lib'として開発しています。
ユーザーアプリケーションからは、ライブラリ中の関数を呼ぶことにより、本サウンドドライバーを制御することが可能です。
ドライバー本体からは、cc65の付属のライブラリ`nes.lib'内の関数を一切呼び出しておらず、C言語用の領域にもアクセスしておりません。
従い、別の開発環境で記述されたコードから呼び出しても動作するとは思いますが、
その際は、ライブラリのフォーマットが、cc65のものと互換性を持っている必要があります。
以下に記載のライブラリ関数について、関数呼出規約は全て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. 未実装 |
関数の一番右の引数はレジスターで渡されます。
cc65では、一番右の引数以外は、ソフトウェアスタック(zeropage内の変数spによりC言語で制御される)に格納されますが、
本サウンドドライバーではライブラリ関数の引数は必ず1つ以内とし、ソフトウェアスタックの使用を避けております。
これにより、cc65に付属のランタイムライブラリ`nes.lib'をリンクしないでも、動作する設計となっています。
戻り値はレジスターに格納されます。
戻り値がない場合は、レジスターの値は不定となります。
yレジスターの値は常に不定です。
アセンブリ言語から呼び出す場合は、シンボル名にアンダーバー('_')を追加して下さい。
たとえば、アセンブリ言語からnsd_main(void)
を呼び出す場合は、jsr _nsd_main
と記述します。