音源ドライバーの制御用変数です。
本音源ドライバーを用いたアプリケーションを開発する際に、
音源ドライバーの制御状態を知りたい時にご参照ください。
尚、音源ドライバーの制御用変数にアクセスするには、アセンブリ言語中にて以下の通り外部宣言することで可能です。
.include "nsd.inc"
配列変数で記載されるメンバー変数は、構造体定義内容の通り2Byte毎に配置しています。
xレジスタ等に、(トラック番号−1)×2の値を書くと、アクセスに便利です。
尚、ヴァージョンアップにより、制御変数の構造体の構成が変わる場合がある旨、ご理解の程、宜しくお願い致します。
又、拡張音源用のメンバー変数は割愛します(拡張音源を使用しない場合は、拡張音源用のメンバー変数は構造体のメンバーに入りません)。
Zeropageに置かれる制御用変数(構造体)です。
頻度に(1tick中で何度も)使用するため、アクセス速度の速いZeropage領域に配置しています。
変数名 | 内容 |
---|---|
__ptr | 汎用変数(ポインター用) 尚、内容を保持する必要はありません。 ユーザーがこの領域を一時的な変数領域として使用して構いませんが、 本音源ドライバのライブラリ関数を呼んだ場合、内容は破壊される旨、ご留意ください。 |
__tmp | 汎用変数(計算用) 尚、内容を保持する必要はありません。 ユーザーがこの領域を一時的な変数領域として使用して構いませんが、 本音源ドライバのライブラリ関数を呼んだ場合、内容は破壊される旨、ご留意ください。 |
channel | 現在制御中のチャンネル 尚、内容を保持する必要はありません。 ユーザーがこの領域を一時的な変数領域として使用して構いませんが、 本音源ドライバのライブラリ関数を呼んだ場合、内容は破壊される旨、ご留意ください。 |
__flag | 音源ドライバ全体のフラグ |
__Tempo | テンポ(tコマンドの数値) |
__Tempo_ctr | テンポカウンタ |
__Sequence_ptr | 演奏ポインタ |
__Length_ctr | 音長カウンタ |
__Gate | 現在の音符のゲートタイム |
__Envelop_V | 音色・音量エンベロープのホールドタイム用のカウンタ |
__Envelop_F | 音程・ノートエンベロープのホールドタイム用のカウンタ |
以下は、実際の構造体定義です。
typedef struct NSD_work_zp {
int _ptr;
int _tmp;
char channel;
int Sequence_ptr[n];
struct NSD_Length_Cnt {
char counter;
char gate;
} Length[n];
struct NSD_Envelop {
char V;
char F;
} Envelop[n];
} nsd_work_zp;
メモリ節約のため、一部の変数(__flag, __Tempo, __Tempo_ctr)は、 三角波トラック、凾oCMのトラックでは使われない領域を使用します。
メンバー名 | 変数名 | ch1 | ch2 | ch3 | ch4 | ch5 |
---|---|---|---|---|---|---|
_ptr | __ptr | |||||
_tmp | __tmp | |||||
channel | __channel | |||||
Sequence_ptr[n] | __Sequence_ptr | |||||
NSD_Length[n]_Cnt.counter | __Length_ctr | |||||
NSD_Length[n]_Cnt.gate | __Gate | |||||
NSD_Envelop[n].V | __Envelop_V | __flag | __Tempo_ctr | |||
NSD_Envelop[n].F | __Envelop_F | __Tempo |
通常のRAM領域に置かれる制御用変数(構造体)です。
音源ドライバーだけでzeropageを占有できないので、通常のRAM領域に配置します。
変数名 | 内容 |
---|---|
__chflag | チャンネル毎のフラグ |
__gatemode | .... ..rr : ゲートモード(Rmコマンドの設定値) .... e... : 音色エンベロープのスイッチ vvvv .... : リリース時の音色(R@コマンドの数値) |
__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 | 音量(v, Rvコマンドの数値) |
__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 | 儕CM制御構造体のポインタ |
__apu_voice_set1 | APU ch1の音色(レジスタ書込みの為の論理演算用) |
__apu_voice_set2 | APU ch2の音色(レジスタ書込みの為の論理演算用) |
__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レジスタの現在値 |
typedef struct NSD_work {
struct NSD_Flag {
char flag;
char gatemode;
} Flag[n];
struct NSD_length {
char length;
char tai;
} Length[n];
struct NSD_gatetime {
char q;
char u;
} Gatetime[n];
struct NSD_note {
char note;
char octave;
} Note[n];
struct NSD_Detune {
char cent;
char fine;
} Detune[n];
struct NSD_Por_Lv {
char target;
char depth;
} Por_Lv[n];
struct NSD_Por_Co {
char count;
char rate;
} Por_Co[n];
int Por_now[n];
struct NSD_Trans{
char trans;
char onetime;
} Trans[n];
struct NSD_Repeat{
char count1;
char count2;
} Repeat[n];
struct NSD_volume{
char volume;
char volume_env;
} Volume[n];
struct NSD_Env_F_Now{
char Frequency;
char Note;
} Env_F_Now[n];
struct NSD_Env_V_Ptr{
char Volume;
char Voice;
} Env_V_Ptr[n];
struct NSD_Env_F_Ptr{
char Frequency;
char Note;
} Env_F_Ptr[n];
int Envelop_Volume[n];
int Envelop_Voice[n];
int Envelop_Freq[n];
int Envelop_Note[n];
int Frequency[n];
int SubRoutine[n];
int Repeat2[n];
} nsd_work;
メモリ節約のため、一部の変数は、三角波トラック、凾oCMのトラックでは使われない領域を使用します。
メンバー名 | 変数名 | ch1 | ch2 | ch3 | ch4 | ch5 |
---|---|---|---|---|---|---|
Flag[n].flag | __chflag | |||||
Flag[n].gatemode | __gatemode | |||||
Length[n].length | __length | |||||
Length[n].tai | __tai | |||||
Gatetime[n].q | __gate_q | |||||
Gatetime[n].u | __gate_u | |||||
Note[n].note | __note | |||||
Note[n].octave | __octave | |||||
Detune[n].cent | __detune_cent | |||||
Detune[n].fine | __detune_fine | |||||
Por_Lv[n].target | __por_target | __apu_frequency1 | ||||
Por_Lv[n].depth | __por_depth | __apu_frequency2 | ||||
Por_Co[n].count | __por_ctr | __apu_frequency3 | ||||
Por_Co[n].rate | __por_rate | __se_frequency | ||||
Por_now[n] | __por_now | __mmc5_frequency1 __mmc5_frequency2 |
||||
Trans[n].trans | __trans | |||||
Trans[n].onetime | __trans_one | |||||
Repeat[n].count1 | __repeat_ctr | |||||
Repeat[n].count2 | __repeat_ctr2 | |||||
Volume[n].volume | __volume | __sweep_ch1 | ||||
Volume[n].volume_env | __env_vol_now | __sweep_ch2 | ||||
Env_F_Now[n].Frequency | __env_freq_now | |||||
Env_F_Now[n].Note | __env_note_now | |||||
Env_V_Ptr[n].Volume | __env_vol_ptr | __dpcm_info (LSB) | ||||
Env_V_Ptr[n].Voice | __env_voi_ptr | __dpcm_info (MSB) | ||||
Env_F_Ptr[n].Frequency | __env_freq_ptr | __se_voice_set1 | ||||
Env_F_Ptr[n].Note | __env_note_ptr | __se_voice_set2 | ||||
Envelop_Volume[n] | __env_volume | __apu_voice_set1 __apu_voice_set2 |
||||
Envelop_Voice[n] | __env_voice | __apu_voice_set4 | ||||
Envelop_Freq[n] | __env_frequency | __mmc5_voice_set1 __mmc5_voice_set2 |
||||
Envelop_Note[n] | __env_note | __vrc6_voice_set1 __vrc6_voice_set2 |
||||
Frequency[n] | __frequency | |||||
SubRoutine[n] | __subroutine | |||||
Repeat2[n] | __repeat2 |