音源ドライバーの制御用変数です。
本音源ドライバーを用いたアプリケーションを開発する際に、
音源ドライバーの制御状態を知りたい時にご参照ください。
尚、音源ドライバーの制御用変数にアクセスするには、アセンブリ言語中にて以下の通り外部宣言することで可能です。
.include "nsd.inc"
配列変数で記載されるメンバー変数は、構造体定義内容の通り2Byte毎に配置しています。
xレジスタ等に、(トラック番号−1)×2の値を書くと、アクセスに便利です。
尚、ヴァージョンアップにより、制御変数の構造体の構成が変わる場合がある旨、ご理解の程、宜しくお願い致します。
又、拡張音源用のメンバー変数は割愛します(拡張音源を使用しない場合は、拡張音源用のメンバー変数は構造体のメンバーに入りません)。
Zeropageに置かれる制御用変数(構造体)です。
頻度に(1tick中で何度も)使用するため、アクセス速度の速いZeropage領域に配置しています。
typedef struct NSD_work_zp {
int _ptr;
int _tmp;
char channel;
char flag;
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;
メンバー名 | 別名 | 内容 |
---|---|---|
_ptr | __ptr | 汎用変数(ポインター用) 尚、内容を保持する必要はありません。 ユーザーがこの領域を一時的な変数領域として使用して構いませんが、 本音源ドライバのライブラリ関数を呼んだ場合、内容は破壊される旨、ご留意ください。 |
_tmp | __tmp | 汎用変数(計算用) 尚、内容を保持する必要はありません。 ユーザーがこの領域を一時的な変数領域として使用して構いませんが、 本音源ドライバのライブラリ関数を呼んだ場合、内容は破壊される旨、ご留意ください。 |
channel | __channel | 現在制御中のチャンネル 尚、内容を保持する必要はありません。 ユーザーがこの領域を一時的な変数領域として使用して構いませんが、 本音源ドライバのライブラリ関数を呼んだ場合、内容は破壊される旨、ご留意ください。 |
flag | __flag | 音源ドライバ全体のフラグ |
Sequence_ptr[n] | __Sequence_ptr | 演奏ポインタ |
Length[n].counter | __Length_ctr | 音長カウンタ |
Length[n].gate | __Gate | 現在の音符のゲートタイム |
Envelop[n].V | __Envelop_V __Tempo __Tempo_ctr |
音色・音量エンベロープのホールドタイム用のカウンタ 但し、TR3(三角波)はテンポ(tコマンドの数値)、 TR5(儕CM)はテンポカウンタとして利用 |
Envelop[n].F | __Envelop_F | 音程・ノートエンベロープのホールドタイム用のカウンタ |
通常のRAM領域に置かれる制御用変数(構造体)です。
音源ドライバーだけでzeropageを占有できないので、通常のRAM領域に配置します。
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_voice{
char voice;
char voice_set;
} Voice[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;
メンバー名 | 別名 | 内容 |
---|---|---|
Flag[n].flag | __chflag | チャンネル毎のフラグ |
Flag[n].gatemode | __gatemode | .... ..rr : ゲートモード(Rmコマンドの設定値) .... e... : 音色エンベロープのスイッチ vvvv .... : リリース時の音色(R@コマンドの数値) |
Length[n].length | __length | 音長省略時の音長(lコマンドの設定値) |
Length[n].tai | __tai | スラー・タイ制御 |
Gatetime[n].q | __gate_q | ゲートタイム(qコマンドの設定値) |
Gatetime[n].u | __gate_u | ゲートタイム(uコマンドの設定値) |
Note[n].note | __note | 現在発音しているノートナンバー |
Note[n].octave | __octave | 現在のオクターブ(oコマンドの数値×12) |
Detune[n].cent | __detune_cent | cent単位のディチューン(Dコマンドの数値) |
Detune[n].fine | __detune_fine | レジスタ単位のディチューン(D%コマンドの数値) |
Por_Lv[n].target | __por_target __apu_frequency1 |
ポルタメント制御用(目標値) 但し、TR5(儕CM)はAPU ch1の音程上位8bitの保存用に使う (音程レジスタ上位8bit更新によるプチノイズ発生防止)。 |
Por_Lv[n].depth | __por_depth __apu_frequency2 |
ポルタメント制御用(一回の変化量) 但し、TR5(儕CM)はAPU ch2の音程上位8bitの保存用に使う (音程レジスタ上位8bit更新によるプチノイズ発生防止)。 |
Por_Co[n].count | __por_ctr __apu_frequency3 |
ポルタメント制御用(カウンター) 但し、TR5(儕CM)はAPU ch3の音程上位8bitの保存用に使う (音程レジスタ上位8bit更新によるプチノイズ発生防止)。 |
Por_Co[n].rate | __por_rate __se_frequency |
ポルタメント制御用(何フレームで変化するか?) 但し、TR5(儕CM)はSE ch1の音程上位8bitの保存用に使う (音程レジスタ上位8bit更新によるプチノイズ発生防止)。 |
Por_now[n] | __por_now | ポルタメント制御用(現在の変位) |
Trans[n].trans | __trans | 移調(_コマンドの数値) |
Trans[n].onetime | __trans_one | 一回限りの移調(', "コマンド制御用) |
Repeat[n].count1 | __repeat_ctr | リピートAのカウンタ |
Repeat[n].count2 | __repeat_ctr2 | リピートBのカウンタ |
Volume[n].volume | __volume | 音量(v, Rvコマンドの数値) |
Volume[n].volume_env | __env_vol_now __sweep_ch1 __sweep_ch2 |
音量エンベロープの現在値 但し、TR3(三角波)はAPU ch1のsweepレジスタの現在値、 TR5(儕CM)はAPU ch2のsweepレジスタの現在値として使用。 |
Voice[n].voice | __voice | 音色(R@コマンドの数値) ※移動のため廃止 |
Voice[n].voice_set | __voice_set | 現在発音している音色(音色エンベロープ適用後)※移動し廃止予定 |
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 |
音量エンベロープの推移制御用のポインタ 但し、TR5(儕CM)は、儕CM制御構造体のポインタとして使用する。 |
Env_V_Ptr[n].Voice | __env_voi_ptr | 音色エンベロープの推移制御用のポインタ 但し、TR5(儕CM)は、儕CM制御構造体のポインタとして使用する。 |
Env_F_Ptr[n].Frequency | __env_freq_ptr | 音程エンベロープの推移制御用のポインタ |
Env_F_Ptr[n].Note | __env_note_ptr | ノートエンベロープの推移制御用のポインタ |
Envelop_Volume[n] | __env_volume | 音量エンベロープ・テーブルのポインタ |
Envelop_Voice[n] | __env_voice | 音色エンベロープ・テーブルのポインタ |
Envelop_Freq[n] | __env_frequency | 周波数エンベロープ・テーブルのポインタ |
Envelop_Note[n] | __env_note | ノートエンベロープ・テーブルのポインタ |
Frequency[n] | __frequency | 現在発音している音程(音程・ノートエンベロープ適用後) |
SubRoutine[n] | __subroutine | サブルーチンの戻りアドレス |
Repeat2[n] | __repeat2 | リピートBでの次のジャンプ先アドレス |