/*************************************************************************
*	TG300 DRUM SETUP
*************************************************************************/

int		Tg300drumBlockOfs[16] = 
{
	0x10000,0x20000,0x30000,0x40000,0x50000,0x60000,0x70000,0x80000,
	0x90000,0x00000,0xA0000,0xB0000,0xC0000,0xD0000,0xE0000,0xF0000
};

/*************************************************************************
*	DRUM SETUP PARAMETER
*-------------------------------------------------------------------------
*	exTG300_drumSetup(part,note,pitch,fine,leve,pan,rev,cho,var,
*					freq,reso,grp,kasn,rxnn,rxoff,atak,dc1,dc2)
*
*		part	…	1 〜 16
*		note	…	27 〜 88
*
*		pitch	…	0 〜 127
*		fine	…	-64 〜 63
*		level	…	0〜127
*		pan		…	rnd,-63〜63
*		rev		…	0〜127
*		cho		…	0〜127
*		var		…	0〜127
*		freq	…	0〜127
*		reso	…	0〜127
*		grp		…	0〜127
*		kasn	…	0,1
*		rxOn	…	0,1
*		rxOff	…	0,1
*		atak	…	0〜127
*		dc1		…	0〜127
*		dc2		…	0〜127
*************************************************************************/

int		exTG300_drumSetup( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
{
	char	dat[20];
	int		part, note;
	int		pitch, fine, level, grp, pan, rev, cho, kasn;
	int		rxOff, rxOn, freq, reso, atak, dc1, dc2, var;

	if ( argc != 18 )
	{
_ERR:	MM_setErrMsg(sqr,"TG300 \"DRUM SETUP PARAMETER\" error!");
		return(ERR);
	}
	if ( (part = tg300_getPart(argv[0])) < 0 )
		goto _ERR;
	note = atoi(argv[1]);
	if ( note < 0x1B || note > 0x58 )
		goto _ERR;
	pitch  = atoi(argv[ 2]);
	fine   = atoi(argv[ 3]) + 0x40;
	level  = atoi(argv[ 4]);
	if ( strcmpi( argv[ 5],"rnd") == 0 )
		pan  = 0;
	else
		pan = atoi(argv[ 5]) + 0x40;
	rev    = atoi(argv[ 6]);
	cho    = atoi(argv[ 7]);
	var    = atoi(argv[ 8]);
	freq   = atoi(argv[ 9]);
	reso   = atoi(argv[10]);
	grp    = atoi(argv[11]);
	kasn   = atoi(argv[12]);
	rxOn   = atoi(argv[13]);
	rxOff  = atoi(argv[14]);
	atak   = atoi(argv[15]);
	dc1    = atoi(argv[16]);
	dc2    = atoi(argv[17]);

	dat[ 0] = pitch;
	dat[ 1] = fine;
	dat[ 2] = level;
	dat[ 3] = grp;
	dat[ 4] = pan;
	dat[ 5] = rev;
	dat[ 6] = cho;
	dat[ 7] = kasn;
	dat[ 8] = rxOff;
	dat[ 9] = rxOn;
	dat[10] = freq;
	dat[11] = reso;
	dat[12] = atak;
	dat[13] = dc2;
	dat[14] = dc1;
	dat[15] = var;
	return tg300_genMML( sqr, bufSiz, buf, 0x100000+Tg300drumBlockOfs[part]+(note<<8), 16, dat );
}
