kanade.hの作成
メモ帳に以下の内容を書き、kanade.hという名前でcc65/includeに保存します。
/////////////////////////////////////////////////////////////////////////////////
// 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の設定
- flag2:DPCM制御レジスタ4の設定
- SetChannel:チャンネル設定
- flag:音声チャンネル制御レジスタの設定
- bit4:DPCMチャンネル(0:オフ, 1:オン)
- bit3:ノイズチャンネル(0:オフ, 1:オン)
- bit2:三角波チャンネル(0:オフ, 1:オン)
- bit1:矩形波2チャンネル(0:オフ, 1:オン)
- bit0:矩形波1チャンネル(0:オフ, 1:オン)
最終更新:2010年12月04日 13:07