Exemplo n.º 1
0
static int test_fcm(uint8 *data, char *t, int s)
{
	int start = 0;
	int j;

	PW_REQUEST_DATA(s, 37 + 8 * 31);

	/* "FC-M" : ID of FC-M packer */
	if (data[0] != 'F' || data[1] != 'C' || data[2] != '-' ||
		data[3] != 'M')
		return -1;

	/* test 1 */
	if (data[start + 4] != 0x01)
		return -1;

	/* test 2 */
	if (data[start + 5] != 0x00)
		return -1;

	/* test 3 */
	for (j = 0; j < 31; j++) {
		if (data[start + 37 + 8 * j] > 0x40)
			return -1;
	}

	pw_read_title(data + 10, t, 20);
	return 0;
}
Exemplo n.º 2
0
static int test_hrt(const uint8 *data, char *t, int s)
{
	int i;

	PW_REQUEST_DATA(s, 1084);

	if (readmem32b(data + 1080) != MAGIC4('H','R','T','!'))
		return -1;

	for (i = 0; i < 31; i++) {
		const uint8 *d = data + 20 + i * 30;

		/* test finetune */
		if (d[24] > 0x0f)
			return -1;

		/* test volume */
		if (d[25] > 0x40)
			return -1;
	}

	pw_read_title(data, t, 20);

	return 0;
}
Exemplo n.º 3
0
static int test_pru2(uint8 *data, char *t, int s)
{
	int k;

	PW_REQUEST_DATA(s, 12 + 31 * 8);

	if (readmem32b(data) != 0x534e5421)
		return -1;

#if 0
	/* check sample address */
	j = (data[i + 4] << 24) + (data[i + 5] << 16) + (data[i + 6] << 8) +
		data[i + 7];

	PW_REQUEST_DATA (s, j);
#endif

	/* test volumes */
	for (k = 0; k < 31; k++) {
		if (data[11 + k * 8] > 0x40)
			return -1;
	}

	/* test finetunes */
	for (k = 0; k < 31; k++) {
		if (data[10 + k * 8] > 0x0F)
			return -1;
	}

	pw_read_title(NULL, t, 0);
	
	return 0;
}
Exemplo n.º 4
0
static int test_ksm (uint8 *data, char *t, int s)
{
	int j, k, l;
	int start = 0;

	PW_REQUEST_DATA(s, 1536);

	if (data[start] != 'M' || data[start + 1] != '.')
		return -1;

	/* test "a" */
	if (data[start + 15] != 'a')
		return -1;

	/* test volumes */
	for (k = 0; k < 15; k++) {
		if (data[start + 54 + k * 32] > 0x40)
			return -1;
	}


	/* test tracks data */
	/* first, get the highest track number .. */
	j = 0;
	for (k = 0; k < 1024; k++) {
		if (data[start + k + 512] == 0xFF)
			break;
		if (data[start + k + 512] > j)
			j = data[start + k + 512];
	}

	if (k == 1024)
		return -1;

	if (j == 0)
		return -1;

	PW_REQUEST_DATA(s, start + 1536 + j * 192 + 63 * 3);

	/* so, now, j is the highest track number (first is 00h !!) */
	/* real test on tracks data starts now */
	for (k = 0; k <= j; k++) {
		for (l = 0; l < 64; l++) {
			if (data[start + 1536 + k * 192 + l * 3] > 0x24)
				return -1;
		}
	}

	/* j is still the highest track number */

	pw_read_title(data + 2, t, 13);

	return 0;
}
Exemplo n.º 5
0
static int test_pha(const uint8 *data, char *t, int s)
{
	int i;
	int ptr, ssize;

	PW_REQUEST_DATA(s, 451 + 128 * 4);

	if (data[10] != 0x03 || data[11] != 0xc0)
		return -1;

	/* test #2 (volumes,sample addresses and whole sample size) */
	ssize = 0;
	for (i = 0; i < 31; i++) {
		const uint8 *d = data + i * 14;

		/* sample size */
		ssize += readmem16b(d) << 1;

		if (d[3] > 0x40)
			return -1;

		/* loop start */
		if ((readmem16b(d + 4) << 1) > ssize)
			return -1;

		/* address of sample data */
		if (readmem32b(d + 8) < 0x3c0)
			return -1;
	}

	if (ssize <= 2 || ssize > 31 * 65535)
		return -1;

	/* test #3 (addresses of pattern in file ... ptk_tableible ?) */
	/* l is the whole sample size */
	/* ssize is used here as a variable ... set to 0 afterward */

	for (i = 0; i < 128; i++) {
		ptr = readmem32b(data + 448 + i * 4);

		if (ptr + 2 - 960 < ssize)
			return -1;
	}

	pw_read_title(NULL, t, 0);

	return 0;
}
Exemplo n.º 6
0
static int test_skyt(const uint8 *data, char *t, int s)
{
	int i;

	PW_REQUEST_DATA(s, 8 * 31 + 12);

	/* test 2 */
	for (i = 0; i < 31; i++) {
		if (data[8 * i + 4] > 0x40)
			return -1;
	}

	if (readmem32b(data + 256) != MAGIC4('S','K','Y','T'))
		return -1;

	pw_read_title(NULL, t, 0);

	return 0;
}
Exemplo n.º 7
0
static int test_pru1(uint8 *data, char *t, int s)
{
	PW_REQUEST_DATA(s, 1084);

	if (readmem32b(data + 1080) != 0x534e542e)	/* "SNT." */
		return -1;

	/* test 2 */
	if (data[951] != 0x7f)
		return -1;

	/* test 3 */
	if (data[950] > 0x7f)
		return -1;

	pw_read_title(data, t, 20);

	return 0;
}
Exemplo n.º 8
0
static int test_mp_id(uint8 *data, char *t, int s)
{
	int j, l, k;
	int start = 0;

	/* "TRK1" Module Protector */
	if (readmem32b(data) != MAGIC_TRK1)
		return -1;

	/* test #1 */
	for (j = 0; j < 31; j++) {
		if (data[start + 6 + 8 * j] > 0x0f)
			return -1;
	}

	/* test #2 */
	l = data[start + 252];
	if (l > 0x7f || l == 0x00)
		return -1;

	/* test #4 */
	k = 0;
	for (j = 0; j < 128; j++) {
		if (data[start + 254 + j] > k)
			k = data[start + 254 + j];
		if (data[start + 254 + j] > 0x7f)
			return -1;
	}
	k++;

	/* test #5  ptk notes .. gosh ! (testing all patterns !) */
	/* k contains the number of pattern saved */
	for (j = 0; j < (256 * k); j++) {
		l = data[start + 382 + j * 4];
		if (l > 19)
			return -1;
	}

	pw_read_title(NULL, t, 0);

	return 0;
}
Exemplo n.º 9
0
static int test_fuzz (uint8 *data, char *t, int s)
{
	int j, k;
	int start = 0, ssize = 0;

	if (readmem32b(data) != MAGIC4('M','1','.','0'))
		return -1;

	/* test finetune */
	for (k = 0; k < 31; k++) {
		if (data[start + 72 + k * 68] > 0x0f)
			return -1;
	}

	/* test volumes */
	for (k = 0; k < 31; k++) {
		if (data[start + 73 + k * 68] > 0x40)
			return -1;
	}

	/* test sample sizes */
	for (k = 0; k < 31; k++) {
		j = readmem16b(data + start + k * 68 + 66);
		if (j > 0x8000)
			return -1;
		ssize += j * 2;
	}

	/* test size of pattern list */
	if (data[start + 2114] == 0x00)
		return -1;

	pw_read_title(NULL, t, 0);

	return 0;
}
Exemplo n.º 10
0
static int test_pp21(uint8 *data, char *t, int s)
{
	int i;
	int ssize, tsize, npat, max_ref;

	ssize = 0;
	for (i = 0; i < 31; i++) {
		uint8 *d = data + i * 8;
		int len = readmem16b(d) << 1;
		int start = readmem16b(d + 4) << 1;

		ssize += len;

		/* finetune > 0x0f ? */
		if (d[2] > 0x0f)
			return -1;

		/* loop start > size ? */
		if (start > len)
			return -1;
	}

	if (ssize <= 2)
		return -1;

	/* test #3   about size of pattern list */
	npat = data[248];
	if (npat == 0 || npat > 127)
		return -1;

	/* get the highest track value */
	tsize = 0;
	for (i = 0; i < 512; i++) {
		int trk = data[250 + i];
		if (trk > tsize)
			tsize = trk;
	}

	tsize++;
	tsize <<= 6;

	/* test #4  track data value > $4000 ? */
	max_ref = 0;
	for (i = 0; i < tsize; i++) {
		int ref = readmem16b(data + i * 2 + 762);

		if (ref > 0x4000)
			return -1;

		if (ref > max_ref)
			max_ref = ref;

	}

	/* test #5  reference table size *4 ? */
	if (readmem32b(data + (tsize << 1) + 762) != (max_ref + 1) * 4)
		return -1;

	pw_read_title(NULL, t, 0);

	return 0;
}
Exemplo n.º 11
0
static int test_mp_noid(uint8 *data, char *t, int s)
{
	int start, ssize;
	int j, k, l, m, n;

	start = 0;

#if 0
	if (i < 3) {
		Test = BAD;
		return;
	}
#endif

	/* test #2 */
	l = 0;
	for (j = 0; j < 31; j++) {
		int x = start + 8 * j;

		k = readmem16b(data + x) * 2;		/* size */
		m = readmem16b(data + x + 4) * 2;	/* loop start */
		n = readmem16b(data + x + 6) * 2;	/* loop size */
		l += k;

		/* finetune > 0x0f ? */
		if (data[x + 2] > 0x0f)
			return -1;

		/* loop start+replen > size ? */
		if (n != 2 && (m + n) > k)
			return -1;

		/* loop size > size ? */
		if (n > (k + 2))
			return -1;

		/* loop start != 0 and loop size = 0 */
		if (m != 0 && n <= 2)
			return -1;

		/* when size!=0  loopsize==0 ? */
		if (k != 0 && n == 0)
			return -1;
	}

	if (l <= 2)
		return -1;

	/* test #3 */
	l = data[start + 248];
	if (l > 0x7f || l == 0x00)
		return -1;

	/* test #4 */
	/* l contains the size of the pattern list */
	k = 0;
	for (j = 0; j < 128; j++) {
		if (data[start + 250 + j] > k)
			k = data[start + 250 + j];
		if (data[start + 250 + j] > 0x7f)
			return -1;
		if (j > l + 3) {
			if (data[start + 250 + j] != 0x00)
				return -1;
		}
	}
	k++;

	/* test #5  ptk notes .. gosh ! (testing all patterns !) */
	/* k contains the number of pattern saved */
	for (j = 0; j < (256 * k); j++) {
		int x = start + j * 4;

		l = data[x + 378];
		if (l > 19 && l != 74)		/* MadeInCroatia has l == 74 */
			return -1;

		ssize = data[x + 378] & 0x0f;
		ssize *= 256;
		ssize += data[x + 379];

		if (ssize > 0 && ssize < 0x71)
			return -1;
	}

	/* test #6  (loopStart+LoopSize > Sample ? ) */
	for (j = 0; j < 31; j++) {
		int x = start + j * 8;

		k = readmem16b(data + x) * 2;
		l = (readmem16b(data + x + 4) + readmem16b(data + x + 6)) * 2;

		if (l > (k + 2))
			return -1;
	}

	pw_read_title(NULL, t, 0);

	return 0;
}
Exemplo n.º 12
0
static int test_eu (uint8 *data, char *t, int s)
{
	int j, k, l, m, n, o;
	int start = 0;

	PW_REQUEST_DATA (s, 1084);

	/* test 2 */
	j = data[start + 950];
	if (j == 0 || j > 127)
		return -1;

	/* test #3  finetunes & volumes */
	for (k = 0; k < 31; k++) {
		o = (data[start + 42 + k * 30] << 8) +
			data[start + 43 + k * 30];
		m = (data[start + 46 + k * 30] << 8) +
			data[start + 47 + k * 30];
		n = (data[start + 48 + k * 30] << 8) +
			data[start + 49 + k * 30];
		o *= 2;
		m *= 2;
		n *= 2;
		if (o > 0xffff || m > 0xffff || n > 0xffff)
			return -1;

		if ((m + n) > (o + 2))
			return -1;

		if (data[start + 44 + k * 30] > 0x0f ||
			data[start + 45 + k * 30] > 0x40)
			return -1;
	}


	/* test 4 */
	l = (data[start + 1080] << 24) + (data[start + 1081] << 16)
		+ (data[start + 1082] << 8) + data[start + 1083];

#if 0
	if ((l + start) > in_size)
		return -1;
#endif

	if (l < 1084)
		return -1;

	m = 0;
	/* pattern list */
	for (k = 0; k < j; k++) {
		n = data[start + 952 + k];
		if (n > m)
			m = n;
		if (n > 127)
			return -1;
	}
	k += 2;		/* to be sure .. */

	while (k != 128) {
		if (data[start + 952 + k] != 0)
			return -1;
		k += 1;
	}
	m += 1;
	/* m is the highest pattern number */


	/* test #5 */
	/* j is still the size if the pattern table */
	/* l is still the address of the sample data */
	/* m is the highest pattern number */
	n = 0;
	j = 999999L;

	PW_REQUEST_DATA (s, start + (m * 4) * 2 + 1085);

	for (k = 0; k < (m * 4); k++) {
		o = (data[start + k * 2 + 1084] << 8) +
			data[start + k * 2 + 1085];
		if (o > l || o < 1084)
			return -1;
		if (o > n)
			n = o;
		if (o < j)
			j = o;
	}
	/* o is the highest track address */
	/* j is the lowest track address */

	/* test track datas */
	/* last track wont be tested ... */
	for (k = j; k < o; k++) {
		if ((data[start + k] & 0xC0) == 0xC0)
			continue;
		if ((data[start + k] & 0xC0) == 0x80) {
			k += 2;
			continue;
		}
		if ((data[start + k] & 0xC0) == 0x40) {
			if ((data[start + k] & 0x3F) == 0x00 &&
				data[start + k + 1] == 0x00)
				return -1;
			k += 1;
			continue;
		}
		if ((data[start + k] & 0xC0) == 0x00) {
			if (data[start + k] > 0x13)
				return -1;
			k += 3;
			continue;
		}
	}

	pw_read_title(data, t, 20);

	return 0;
}
Exemplo n.º 13
0
Arquivo: tdd.c Projeto: Nlcke/gideros
static int test_tdd(uint8 *data, char *t, int s)
{
	int i;
	int ssize, psize, pdata_ofs;

	PW_REQUEST_DATA(s, 564);

	/* test #2 (volumes,sample addresses and whole sample size) */
	ssize = 0;
	for (i = 0; i < 31; i++) {
		uint8 *d = data + i * 14;
		int addr = readmem32b(d + 130);	/* sample address */
		int size = readmem16b(d + 134);	/* sample size */
		int sadr = readmem32b(d + 138);	/* loop start address */
		int lsiz = readmem16b(d + 142);	/* loop size (replen) */

		/* volume > 40h ? */
		if (d[137] > 0x40)
			return -1;

		/* loop start addy < sampl addy ? */
		if (sadr < addr)
			return -1;

		/* addy < 564 ? */
		if (addr < 564 || sadr < 564)
			return -1;

		/* loop start > size ? */
		if (sadr - addr > size)
			return -1;

		/* loop start+replen > size ? */
		if (sadr - addr + lsiz > size + 2)
			return -1;

		ssize += size;
	}

	if (ssize <= 2 || ssize > 31 * 65535)
		return -1;

#if 0
	/* test #3 (addresses of pattern in file ... ptk_tableible ?) */
	/* ssize is the whole sample size :) */
	if ((ssize + 564) > in_size) {
		Test = BAD;
		return;
	}
#endif

	/* test size of pattern list */
	if (data[0] == 0 || data[0] > 0x7f)
		return -1;

	/* test pattern list */
	psize = 0;
	for (i = 0; i < 128; i++) {
		int pat = data[i + 2];
		if (pat > 0x7f)
			return -1;
		if (pat > psize)
			psize = pat;
	}
	psize++;
	psize <<= 10;

	/* test end of pattern list */
	for (i = data[0] + 2; i < 128; i++) {
		if (data[i + 2] != 0)
			return -1;
	}

#if 0
	/* test if not out of file range */
	if ((ssize + 564 + k) > in_size)
		return -1;
#endif

	/* ssize is the whole sample data size */
	/* test pattern data now ... */
	pdata_ofs = 564 + ssize;

	PW_REQUEST_DATA(s, 564 + ssize + psize);

	for (i = 0; i < psize; i += 4) {
		uint8 *d = data + pdata_ofs + i;

		/* sample number > 31 ? */
		if (d[0] > 0x1f)
			return -1;

		/* note > 0x48 (36*2) */
		if (d[1] > 0x48 || (d[1] & 0x01) == 0x01)
			return -1;

		/* fx=C and fxtArg > 64 ? */
		if ((d[2] & 0x0f) == 0x0c && d[3] > 0x40)
			return -1;

		/* fx=D and fxtArg > 64 ? */
		if ((d[2] & 0x0f) == 0x0d && d[3] > 0x40)
			return -1;

		/* fx=B and fxtArg > 127 ? */
		if ((d[2] & 0x0f) == 0x0b)
			return -1;
	}

	pw_read_title(NULL, t, 0);

	return -1;
}