「ファミコンソフトの作り方/BGM・効果音出力」の編集履歴(バックアップ)一覧はこちら

ファミコンソフトの作り方/BGM・効果音出力」(2010/12/04 (土) 13:07:53) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#contents() *kanade.hの作成 メモ帳に以下の内容を書き、kanade.hという名前でcc65/includeに保存します。 #highlight(c){{{ ///////////////////////////////////////////////////////////////////////////////// // 2010.12.03 ver 0.01 // 企画で使うなり個人で使うなり似るなり焼くなりお好きにどうぞ。 // ----------------------------------------------------------------------------- // なん実企画部 // http://www37.atwiki.jp/kikakubu4/ ///////////////////////////////////////////////////////////////////////////////// #define REGIST_SQ1_A (unsigned char*)0x4000 #define REGIST_SQ1_B (unsigned char*)0x4001 #define REGIST_SQ1_C (unsigned char*)0x4002 #define REGIST_SQ1_D (unsigned char*)0x4003 #define REGIST_SQ2_A (unsigned char*)0x4004 #define REGIST_SQ2_B (unsigned char*)0x4005 #define REGIST_SQ2_C (unsigned char*)0x4006 #define REGIST_SQ2_D (unsigned char*)0x4007 #define REGIST_TRI_A (unsigned char*)0x4008 #define REGIST_TRI_B (unsigned char*)0x400A #define REGIST_TRI_C (unsigned char*)0x400B #define REGIST_NOISE_A (unsigned char*)0x400C #define REGIST_NOISE_B (unsigned char*)0x400E #define REGIST_NOISE_C (unsigned char*)0x400F #define REGIST_DPCM_A (unsigned char*)0x4010 #define REGIST_DPCM_B (unsigned char*)0x4011 #define REGIST_DPCM_C (unsigned char*)0x4012 #define REGIST_DPCM_D (unsigned char*)0x4013 #define REGIST_CHANNEL (unsigned char*)0x4015 //矩形波設定 void SetSquare(unsigned char no,unsigned char flag1,unsigned char flag2) { if (no == 0) { *REGIST_SQ1_A = flag1; *REGIST_SQ1_B = flag2; } else { *REGIST_SQ2_A = flag1; *REGIST_SQ2_B = flag2; } } //矩形波再生 void PlaySquare(unsigned char no,unsigned char time,unsigned int val) { unsigned char hi,lo,tim; tim = time << 3; hi = (val >> 8) & 0x07; lo = val & 0xff; if (no == 0) { *REGIST_SQ1_C = lo; *REGIST_SQ1_D = tim | hi; } else { *REGIST_SQ2_C = lo; *REGIST_SQ2_D = tim | hi; } } //三角波設定 void SetTriangle(unsigned char flag) { *REGIST_TRI_A = flag; } //三角波再生 void PlayTriangle(unsigned char time,unsigned int val) { unsigned char hi,lo,tim; tim = time << 3; hi = (val >> 8) & 0x07; lo = val & 0xff; *REGIST_TRI_B = lo; *REGIST_TRI_C = tim | hi; } //ノイズ設定 void SetNoise(unsigned char flag) { *REGIST_NOISE_A = flag; } //ノイズ再生 void PlayNoise(unsigned char flag,unsigned char time) { *REGIST_NOISE_B = flag; *REGIST_NOISE_C = time << 3; } //PCM設定 void SetDpcm(unsigned char flag1,unsigned char flag2) { *REGIST_DPCM_A = flag1; *REGIST_DPCM_B = flag2; } //PCM再生 void PlayDpcm(unsigned char flag1,unsigned char flag2) { *REGIST_DPCM_C = flag1; *REGIST_DPCM_D = flag2; } //チャンネル設定 void SetChannel(unsigned char flag) { *REGIST_CHANNEL = flag; } }}} *kanade.hの解説 -SetSquare:矩形波の設定。 --no:使用するチャンネル(0,1) --flag1:矩形波制御レジスタ1の設定。 ---bit7,6:Duty Cycle(00:87.5%, 01:75.0% 10:50.0%, 11:25.0%) ---bit5:演奏時間カウンタ(0:オフ, 1:オン) ---bit4:音響選択(0:音響可変, 1:音響固定) ---bit3,0:ボリューム --flag2:矩形波制御レジスタ2の設定 ---bit7:周波数変化(0:固定, 1:可変) ---bit6,4:周波数変化速度(データ値) ---bit3:周波数の変化方法(0:増加, 1:減少) ---bit2-0:周波数範囲値(データ値) --PlaySquare:短形波の演奏。 --no:使用するチャンネル --time:演奏時間(0~31) --val:音色(1790000[CPUのクロック周波数] / ((音色[?hz=再生したい周波数、「ラ」なら440hz] * 32)) -SetTriangle:三角波の設定。 --flag:三角波制御レジスタの設定 ---bit7:演奏時間カウンタ(0:オフ, 1:オン) ---bit6-0:長さ -PlayTriangle:三角波の演奏 --time:演奏時間(0~31) --val:音色(多分 1790000[CPUのクロック周波数] / ((音色[?hz=再生したい周波数] * 64)) -SetNoise:ノイズの設定。 --flag:ノイズ制御レジスタの設定 ---bit5:演奏カウンタ(0:オフ, 1:オン) ---bit4:音響(0:音響可変, 1:音響固定) ---bit3-0:ボリューム -PlayNoise:ノイズの演奏 --flag:ノイズ乱数レジスタ ---bit7:乱数のタイプ ---bit3-0:サンプルレート --time:演奏時間(0~31) -SetDpcm:PCMの設定 --flag1:DPCM制御レジスタ1の設定 ---bit3-0:サンプルレートビット数 ---bit7-0:ボリューム --flag2:DPCM制御レジスタ2の設定 -PlayDpcm:PCMの演奏 --flag1:DPCM制御レジスタ3の設定 ---bit7-0:テーブルアドレス --flag2:DPCM制御レジスタ4の設定 ---bit7-0:テーブルバイトサイズ -SetChannel:チャンネル設定 --flag:音声チャンネル制御レジスタの設定 ---bit4:DPCMチャンネル(0:オフ, 1:オン) ---bit3:ノイズチャンネル(0:オフ, 1:オン) ---bit2:三角波チャンネル(0:オフ, 1:オン) ---bit1:矩形波2チャンネル(0:オフ, 1:オン) ---bit0:矩形波1チャンネル(0:オフ, 1:オン)
#contents() *kanade.hの作成 メモ帳に以下の内容を書き、kanade.hという名前でcc65/includeに保存します。 #highlight(c){{{ ///////////////////////////////////////////////////////////////////////////////// // 2010.12.03 ver 0.01 // 企画で使うなり個人で使うなり似るなり焼くなりお好きにどうぞ。 // ----------------------------------------------------------------------------- // なん実企画部 // http://www37.atwiki.jp/kikakubu4/ ///////////////////////////////////////////////////////////////////////////////// #define REGIST_SQ1_A (unsigned char*)0x4000 #define REGIST_SQ1_B (unsigned char*)0x4001 #define REGIST_SQ1_C (unsigned char*)0x4002 #define REGIST_SQ1_D (unsigned char*)0x4003 #define REGIST_SQ2_A (unsigned char*)0x4004 #define REGIST_SQ2_B (unsigned char*)0x4005 #define REGIST_SQ2_C (unsigned char*)0x4006 #define REGIST_SQ2_D (unsigned char*)0x4007 #define REGIST_TRI_A (unsigned char*)0x4008 #define REGIST_TRI_B (unsigned char*)0x400A #define REGIST_TRI_C (unsigned char*)0x400B #define REGIST_NOISE_A (unsigned char*)0x400C #define REGIST_NOISE_B (unsigned char*)0x400E #define REGIST_NOISE_C (unsigned char*)0x400F #define REGIST_DPCM_A (unsigned char*)0x4010 #define REGIST_DPCM_B (unsigned char*)0x4011 #define REGIST_DPCM_C (unsigned char*)0x4012 #define REGIST_DPCM_D (unsigned char*)0x4013 #define REGIST_CHANNEL (unsigned char*)0x4015 //矩形波設定 void SetSquare(unsigned char no,unsigned char flag1,unsigned char flag2) { if (no == 0) { *REGIST_SQ1_A = flag1; *REGIST_SQ1_B = flag2; } else { *REGIST_SQ2_A = flag1; *REGIST_SQ2_B = flag2; } } //矩形波再生 void PlaySquare(unsigned char no,unsigned int val,unsigned char time) { unsigned char hi,lo,tim; tim = time << 3; hi = (val >> 8) & 0x07; lo = val & 0xff; if (no == 0) { *REGIST_SQ1_C = lo; *REGIST_SQ1_D = tim | hi; } else { *REGIST_SQ2_C = lo; *REGIST_SQ2_D = tim | hi; } } //三角波設定 void SetTriangle(unsigned char flag) { *REGIST_TRI_A = flag; } //三角波再生 void PlayTriangle(unsigned int val,unsigned char time) { unsigned char hi,lo,tim; tim = time << 3; hi = (val >> 8) & 0x07; lo = val & 0xff; *REGIST_TRI_B = lo; *REGIST_TRI_C = tim | hi; } //ノイズ設定 void SetNoise(unsigned char flag) { *REGIST_NOISE_A = flag; } //ノイズ再生 void PlayNoise(unsigned char flag,unsigned char time) { *REGIST_NOISE_B = flag; *REGIST_NOISE_C = time << 3; } //PCM設定 void SetDpcm(unsigned char flag1,unsigned char flag2) { *REGIST_DPCM_A = flag1; *REGIST_DPCM_B = flag2; } //PCM再生 void PlayDpcm(unsigned char flag1,unsigned char flag2) { *REGIST_DPCM_C = flag1; *REGIST_DPCM_D = flag2; } //チャンネル設定 void SetChannel(unsigned char flag) { *REGIST_CHANNEL = flag; } }}} *kanade.hの解説 -SetSquare:矩形波の設定。 --no:使用するチャンネル(0,1) --flag1:矩形波制御レジスタ1の設定。 ---bit7,6:Duty Cycle(00:87.5%, 01:75.0% 10:50.0%, 11:25.0%) ---bit5:演奏時間カウンタ(0:オフ, 1:オン) ---bit4:音響選択(0:音響可変, 1:音響固定) ---bit3,0:ボリューム --flag2:矩形波制御レジスタ2の設定 ---bit7:周波数変化(0:固定, 1:可変) ---bit6,4:周波数変化速度(データ値) ---bit3:周波数の変化方法(0:増加, 1:減少) ---bit2-0:周波数範囲値(データ値) --PlaySquare:短形波の演奏。 --no:使用するチャンネル --time:演奏時間(0~31) --val:音色(1790000[CPUのクロック周波数] / ((音色[?hz=再生したい周波数、「ラ」なら440hz] * 32)) -SetTriangle:三角波の設定。 --flag:三角波制御レジスタの設定 ---bit7:演奏時間カウンタ(0:オフ, 1:オン) ---bit6-0:長さ -PlayTriangle:三角波の演奏 --time:演奏時間(0~31) --val:音色(多分 1790000[CPUのクロック周波数] / ((音色[?hz=再生したい周波数] * 64)) -SetNoise:ノイズの設定。 --flag:ノイズ制御レジスタの設定 ---bit5:演奏カウンタ(0:オフ, 1:オン) ---bit4:音響(0:音響可変, 1:音響固定) ---bit3-0:ボリューム -PlayNoise:ノイズの演奏 --flag:ノイズ乱数レジスタ ---bit7:乱数のタイプ ---bit3-0:サンプルレート --time:演奏時間(0~31) -SetDpcm:PCMの設定 --flag1:DPCM制御レジスタ1の設定 ---bit3-0:サンプルレートビット数 ---bit7-0:ボリューム --flag2:DPCM制御レジスタ2の設定 -PlayDpcm:PCMの演奏 --flag1:DPCM制御レジスタ3の設定 ---bit7-0:テーブルアドレス --flag2:DPCM制御レジスタ4の設定 ---bit7-0:テーブルバイトサイズ -SetChannel:チャンネル設定 --flag:音声チャンネル制御レジスタの設定 ---bit4:DPCMチャンネル(0:オフ, 1:オン) ---bit3:ノイズチャンネル(0:オフ, 1:オン) ---bit2:三角波チャンネル(0:オフ, 1:オン) ---bit1:矩形波2チャンネル(0:オフ, 1:オン) ---bit0:矩形波1チャンネル(0:オフ, 1:オン)

表示オプション

横に並べて表示:
変化行の前後のみ表示: