「BGM・効果音出力」の編集履歴(バックアップ)一覧に戻る

BGM・効果音出力 - (2012/03/06 (火) 09:16:58) のソース

#contents()

*kanade.hの作成
メモ帳に以下の内容を書き、kanade.hという名前でcc65/includeに保存します。
#highlight(c){{{
/////////////////////////////////////////////////////////////////////////////////
// 2010.12.03 ver 0.01
// 煮るなり焼くなりお好きにどうぞ。
// -----------------------------------------------------------------------------
// cc65@wiki
// http://www34.atwiki.jp/cc65/
/////////////////////////////////////////////////////////////////////////////////
#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:オン)