音源ドライバーの制御用変数

音源ドライバーの制御用変数です。
本音源ドライバーを用いたアプリケーションを開発する際に、 音源ドライバーの制御状態を知りたい時にご参照ください。
尚、音源ドライバーの制御用変数にアクセスするには、アセンブリ言語中にて以下の通り外部宣言することで可能です。

        .include        "nsd.inc"

パート毎のメンバー変数は、2Byte毎に配置しています。
xレジスタ等に、(トラック番号-1)×2の値を書くと、アクセスに便利です。

ヴァージョンアップにより制御変数の構造体の構成が変わる場合があるため、制御変数へのアクセスは以下表の変数名でアクセスの程、お願いいたします。
又、拡張音源用のメンバー変数は割愛します(拡張音源を使用しない場合は、拡張音源用のメンバー変数は構造体のメンバーに入りません)。

Segment "zeropage" に配置される変数

nsd_work_zp

Zeropageに置かれる制御用変数(構造体)です。
頻度に(1tick中で何度も)使用するため、アクセス速度の速いZeropage領域に配置しています。

変数の内容 (共通/Common)
変数名内容
__ptr 汎用変数(ポインター用)
尚、内容を保持する必要はありません。
ユーザーがこの領域を一時的な変数領域として使用して構いませんが、 本音源ドライバのライブラリ関数を呼んだ場合、内容は破壊される旨、ご留意ください。
__tmp 汎用変数(計算用)
尚、内容を保持する必要はありません。
ユーザーがこの領域を一時的な変数領域として使用して構いませんが、 本音源ドライバのライブラリ関数を呼んだ場合、内容は破壊される旨、ご留意ください。
channel 現在制御中のチャンネル
尚、内容を保持する必要はありません。
ユーザーがこの領域を一時的な変数領域として使用して構いませんが、 本音源ドライバのライブラリ関数を呼んだ場合、内容は破壊される旨、ご留意ください。
__flag D... .... : 再生制御無効
...J .... : 早送り中
.... PP.. : 効果音の優先度
.... ..S. : SE再生中
.... ...B : BGMが再生中
__Tempo テンポ(tコマンドの数値)
__Tempo_ctr テンポカウンタ

変数の内容 (パート毎/Each part)
__Sequence_ptr 演奏ポインタ
__Length_ctr 音長カウンタ
__Gate 現在の音符のゲートタイム
__Envelop_V エンベロープのホールドタイム用のカウンタ
iiii .... : 音色
.... vvvv : 音量
__Envelop_F エンベロープのホールドタイム用のカウンタ
nnnn .... : ノート
.... ffff : 音程

Segment "bss" に配置される変数

nsd_work

通常のRAM領域に置かれる制御用変数(構造体)です。
音源ドライバーだけでzeropageを占有できないので、通常のRAM領域に配置します。

変数の内容 (パート毎/Each part)
変数名内容
__chflag ..V. .... : VRC7:Sustain
...V .... : VRC7:KeyOn/Off制御
...S .... : SN5B:ハードウェアエンベロープ
.... FF.. : FDS :マスター音量
.... .V.. : VRC7:KeyOff時にハードウェアのKeyOffをするかどうか
.... ..KK : エンベロープ処理のフェーズ
__gatemode vvvv .... : リリース時の音色(R@コマンドの数値)
.... e... : 音色エンベロープのスイッチ
.... .s.. : サブルーチンから復帰
.... ..rr : ゲートモード(Rmコマンドの設定値)
__length 音長省略時の音長(lコマンドの設定値)
__tai スラー・タイ制御
__gate_q ゲートタイム(qコマンドの設定値)
__gate_u ゲートタイム(uコマンドの設定値)
__note 現在発音しているノートナンバー
__octave 現在のオクターブ(oコマンドの数値×12)
__detune_cent cent単位のディチューン(Dコマンドの数値)
__detune_fine レジスタ単位のディチューン(D%コマンドの数値)
__por_target ポルタメント制御用(目標値)
__por_depth ポルタメント制御用(一回の変化量)
__por_ctr ポルタメント制御用(カウンター)
__por_rate ポルタメント制御用(何フレームで変化するか?)
__por_now ポルタメント制御用(現在の変位)
__trans 移調(_コマンドの数値)
__trans_one 一回限りの移調(', "コマンド制御用)
__repeat_ctr リピートAのカウンタ
__repeat_ctr2 リピートBのカウンタ
__volume rrrr .... : リリース時の音量(Rvコマンドの数値)
.... vvvv : 音量(vコマンドの数値)
__env_vol_now 音量エンベロープの現在値
__env_freq_now 音程エンベロープの現在値
__env_note_now ノートエンベロープの現在値
__env_vol_ptr 音量エンベロープの推移制御用のポインタ
__env_voi_ptr 音色エンベロープの推移制御用のポインタ
__env_freq_ptr 音程エンベロープの推移制御用のポインタ
__env_note_ptr ノートエンベロープの推移制御用のポインタ
__env_volume 音量エンベロープ・テーブルのポインタ
__env_voice 音色エンベロープ・テーブルのポインタ
__env_frequency 周波数エンベロープ・テーブルのポインタ
__env_note ノートエンベロープ・テーブルのポインタ
__frequency 現在発音している音程(音程・ノートエンベロープ適用後)
__subroutine サブルーチンの戻りアドレス
__repeat2 リピートBでの次のジャンプ先アドレス
__dpcm_info ⊿PCM制御構造体のポインタ
__apu_voice_set1 APU ch1の音色(レジスタ書込みの為の論理演算用)
__apu_voice_set2 APU ch2の音色(レジスタ書込みの為の論理演算用)
__apu_tri_time APU ch3のリニアカウンター値
__apu_voice_set4 APU ch4の音色(レジスタ書込みの為の論理演算用)
__apu_voice_set1 SE ch1の音色(レジスタ書込みの為の論理演算用)
__apu_voice_set2 SE ch1の音色(レジスタ書込みの為の論理演算用)
__apu_frequency1 APU ch1の音程上位8bitの保存用(音程レジスタ上位8bit更新によるプチノイズ発生防止)。
__apu_frequency2 APU ch2の音程上位8bitの保存用(音程レジスタ上位8bit更新によるプチノイズ発生防止)。
__apu_frequency3 APU ch3の音程上位8bitの保存用(音程レジスタ上位8bit更新によるプチノイズ発生防止)。
__se_frequency SE ch1の音程上位8bitの保存用(音程レジスタ上位8bit更新によるプチノイズ発生防止)。
__sweep_ch1 APU ch1のsweepレジスタの現在値
__sweep_ch2 APU ch2のsweepレジスタの現在値