「ファミコンソフトの作り方/BGM・効果音出力」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
#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:オン)