◎ファンクション解説 __hcat_calc_workarea_size ワークエリアのサイズを計算する __hcat_init ドライバを初期化する __hcat_release ドライバを解放する __hcat_chain_hook 割り込みフックをチェーン/解除する (未実装) __hcat_get_workarea ワークエリアのアドレスを得る __hcat_set_waveform 波形データをセットする __hcat_set_ampenv 音量エンベロープをセットする __hcat_set_pchenv 音程エンベロープをセットする __hcat_assign_track スロットにトラックを割り当てる __hcat_set_score スコアデータをセットする __hcat_check_status 演奏状態を調べる __hcat_play 先頭から演奏する __hcat_continue 演奏を再開する __hcat_stop 演奏を停止する __hcat_enable_output 発音を許可する __hcat_change_speed 演奏スピードを変更する __hcat_change_mastervol マスターボリュームを変更する __hcat_start_cs コンダクト・シーケンスを開始する (未実装) __hcat_stop_cs コンダクト・シーケンスを停止する (未実装) __hcat_set_driver_mode ドライバの動作モードの設定 __hcat_calc_workarea_size { ワークエリアのサイズを計算する } 入力: [BP+ 6](w)=確保するスロット数 [BP+ 8](w)=確保するトラック数 出力: AX=ワークエリアのサイズ 動作: スロット数・トラック数から、ワークエリアのサイズを 計算します。 __hcat_init呼び出し前でも使用可能です。 (そうでないと意味がない) __hcat_init { ドライバを初期化する } 入力: [BP+ 6](d)=intvector_t型構造体へのfarポインタ [BP+10](d)=ワークエリア先頭へのfarポインタ(0:0ならIRAMから確保) [BP+14](w)=確保するスロット数 [BP+16](w)=確保するトラック数 [BP+18](w)=割り込み周波数 [BP+20](w)=ユーザープロセスのSRAMバンク番号 出力: AX=エラーコード(0:成功、負:失敗) 動作: ドライバが使用するワークエリアを初期化します。 ワークエリアの先頭はパラグラフ境界(16バイト境界)に 整列していなければなりません。 ワークエリアのアドレスが指定されていない場合は、 IRAMから自動的に確保します。(未テスト) トラック数には、全スロットで使用する合計数を指定します。 割り込みフックへの接続はユーザープロセス側に 任されています。__hcat_initがintvector_t型構造体に 必要なデータを設定するので、それをそのまま フックに登録してください。 __hcat_release { ドライバを解放する } 入力: なし 出力: AX=エラーコード(0:成功、負:失敗) 動作: ドライバを解放します。 このファンクションを呼ぶ前に、割り込みフックの解除を 行っておいてください。 __hcat_chain_hook { 割り込みフックをチェーン/解除する } 入力: [BP+ 6](d)=intvector_t型構造体へのfarポインタ 出力: AX=エラーコード(0:成功、負:失敗) 動作: 指定したルーチンをドライバの後ろにチェーンします。 毎割り込み時、ドライバの処理の後にそのルーチンが 呼び出されます。 NULLポインタを渡すと、チェーンを解除します。 __hcat_get_workarea { ワークエリアのアドレスを得る } 入力: なし 出力: DX:AX=ワークエリアの先頭アドレス(farポインタ) (エラー時はNULL(0000:0000)を返す) 動作: ドライバが使用しているワークエリアの先頭アドレス を得ます。 ワークエリアに対しては、原則として書き込みは禁止です。 ドライバ動作中にワークエリアを書き換えた場合、 何が起こっても知りません。 __hcat_set_waveform { 波形データをセットする } 入力: [BP+ 6](w)=波形データ番号 [BP+ 8](d)=波形データへのfarポインタ 出力: AX=エラーコード(0:成功、負:失敗) 動作: 波形データをセットします。 __hcat_set_ampenv { 音量エンベロープをセットする } 入力: [BP+ 6](w)=音量エンベロープ番号 [BP+ 8](d)=音量エンベロープへのfarポインタ 出力: AX=エラーコード(0:成功、負:失敗) 動作: 音量エンベロープをセットします。 __hcat_set_pchenv { 音程エンベロープをセットする } 入力: [BP+ 6](w)=音程エンベロープ番号 [BP+ 8](d)=音程エンベロープへのfarポインタ 出力: AX=エラーコード(0:成功、負:失敗) 動作: 音程エンベロープをセットします。 __hcat_assign_track { スロットにトラックを割り当てる } 入力: [BP+ 6](w)=スロット番号 [BP+ 8](w)=割り当てるトラック数 出力: AX=エラーコード(0:成功、負:失敗) 動作: スロットに指定した数だけトラックを割り当てます。 __hcat_set_scoreでスコアデータをセットするよりも前に トラックの割り当てを行わなければなりません。 一度割り当てを行ったスロットは、ドライバを解放しない限り 再割り当てを行うことはできません。 __hcat_set_score { スコアデータをセットする } 入力: [BP+ 6](w)=スロット番号 [BP+ 8](d)=スコアデータへのfarポインタ [BP+12](w)=優先度 [BP+14](w)=即時モード(0:データセットのみ、1:即時演奏) 出力: AX=エラーコード(0:成功、負:失敗) 動作: スコアデータをセットします。 即時モードに1を指定すると、すぐに演奏を開始します。(未テスト) __hcat_check_status { 演奏状態を調べる } 入力: [BP+ 6](w)=スロット番号 出力: AX=0:停止中、1:停止要求が出された、 2:演奏要求が出された、3:演奏中、負:エラー 動作: 指定した番号のスロットの状態を調べ、返します。 __hcat_play { 先頭から演奏する } 入力: [BP+ 6](w)=スロット番号 : [BP+ 8](w)=発音モード(0:禁止、1:許可) 出力: AX=エラーコード(0:成功、負:失敗) 動作: スコアデータを先頭から演奏開始します。 実際に演奏が始まるのは次の割り込みが入った時点からです。 発音モードには通常、1を指定します。0を指定すると、 演奏処理は行いますが実際に発音されません。 __hcat_continue { 演奏を再開する } 入力: [BP+ 6](w)=スロット番号 : [BP+ 8](w)=発音モード(0:禁止、1:許可) 出力: AX=エラーコード(0:成功、負:失敗) 動作: スコアデータを前回停止した位置から演奏再開します。 実際に演奏が始まるのは次の割り込みが入った時点からです。 まだ一度も演奏していない場合や、既にスコアの最後まで 演奏が終了している場合は、先頭から演奏します。 現在演奏中の場合は、そのまま演奏を続けます。 発音モードには通常、1を指定します。0を指定すると、 演奏処理は行いますが実際に発音されません。 __hcat_stop { 演奏を停止する } 入力: [BP+ 6](w)=スロット番号 出力: AX=エラーコード(0:成功、負:失敗) 動作: スコアの演奏を停止します。 実際に演奏が止まるのは次の割り込みが入った時点です。 __hcat_enable_output { 発音を許可する } 入力: [BP+ 6](w)=スロット番号 [BP+ 8](w)=トラック番号(bit0:トラック0、…) 出力: AX=エラーコード(0:成功、負:失敗) 動作: 指定したスロット/トラックの発音を許可します。 ただし、実際に発音されるかどうかは優先度に従って決定され ます。より高い優先度を占めるスロットが他にあれば、そちらが 発音されることになります。 同じ優先度で先に演奏しているスロットがあった場合、後から 発音許可したほうのスロットが優先されます。先に演奏していた スロットは、自動的に発音禁止状態になります。(演奏処理自体 は続きます。) __hcat_change_speed { 演奏スピードを変更する } 入力: [BP+ 6](w)=スロット番号 [BP+ 8](w)=スピード(標準16) 出力: AX=エラーコード(0:成功、負:失敗) 動作: 指定したスロットの演奏スピードを変更します。 __hcat_change_mastervol { マスターボリュームを変更する } 入力: [BP+ 6](w)=スロット番号 [BP+ 8](w)=トラック番号(bit0:トラック0、…) [BP+10](w)=マスターボリューム 出力: AX=エラーコード(0:成功、負:失敗) 動作: 指定したスロットのマスターボリュームを変更します。 トラック毎に指定できます。 __hcat_start_cs { コンダクト・シーケンスを開始する } 入力: [BP+ 6](d)=コンダクト・シーケンスデータへのfarポインタ 出力: AX=エラーコード(0:成功、負:失敗) 動作: コンダクト・シーケンスを開始します。 __hcat_stop_cs { コンダクト・シーケンスを停止する } 入力: なし 出力: AX=エラーコード(0:成功、負:失敗) 動作: コンダクト・シーケンスを停止します。 __hcat_set_driver_mode { ドライバの動作モードの設定 } 入力: [BP+ 6](w)=機能番号 [BP+ 8](w)=パラメータ 出力: AX=エラーコード(0:成功、負:失敗) 動作: サウンドドライバの動作モードを設定します。 現在は以下の機能が実装されています。 機能番号0: 内蔵スピーカの出力スケーリング設定 (パラメータ=0〜3)