Ejemplo n.º 1
0
//static STREAM_UPDATE( ym2612_stream_update )
void ym2612_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples)
{
	//ym2612_state *info = (ym2612_state *)param;
	ym2612_state *info = &YM2612Data[ChipID];
#ifdef ENABLE_ALL_CORES
	int i;
#endif
	
	switch(EMU_CORE)
	{
	case EC_MAME:
		ym2612_update_one(info->chip, outputs, samples);
		break;
#ifdef ENABLE_ALL_CORES
	case EC_GENS:
		YM2612_ClearBuffer(GensBuf, samples);
		YM2612_Update(info->chip, GensBuf, samples);
		YM2612_DacAndTimers_Update(info->chip, GensBuf, samples);
		for (i = 0x00; i < samples; i ++)
		{
			outputs[0x00][i] = (stream_sample_t)GensBuf[0x00][i];
			outputs[0x01][i] = (stream_sample_t)GensBuf[0x01][i];
		}
		break;
#endif
	}
}
Ejemplo n.º 2
0
/* update request from fm.c */
void ym2612_update_request(void *param)
{
	ym2612_state *info = (ym2612_state *)param;
	//stream_update(info->stream);
	
	switch(EMU_CORE)
	{
	case EC_MAME:
		ym2612_update_one(info->chip, DUMMYBUF, 0);
		break;
#ifdef ENABLE_ALL_CORES
	case EC_GENS:
		YM2612_Update(info->chip, DUMMYBUF, 0);
		YM2612_DacAndTimers_Update(info->chip, DUMMYBUF, 0);
		break;
#endif
	}
}
Ejemplo n.º 3
0
unsigned char *GYM_Next(unsigned char *gym_start, unsigned char *gym_pos, unsigned int gym_size, unsigned int gym_loop)
{
	unsigned char c, c2;

    unsigned char dac_data[1600];

	int *buf[2];
	int dacMax = 0, i = 0;

	int oldPos = 0;
	double curPos = 0;
	double dacSize;
	int step;
	int *dacBuf[2];
	int retCode = 1;

	YM_Buf[0] = PSG_Buf[0] = buf[0] = Seg_L;
	YM_Buf[1] = PSG_Buf[1] = buf[1] = Seg_R;

	YM_Len = PSG_Len = 0;

	memset(dac_data, 0, sizeof(dac_data));

	if (!gym_pos)
	{
		return 0;
	}

	if ((unsigned int)(gym_pos - gym_start) >= gym_size)
	{
		if (gym_loop)
		{
			gym_pos = jump_gym_time_pos(gym_start, gym_size, gym_loop - 1);
		}
		else
		{
			return 0;
		}
	}
	
	do
	{
		c = *gym_pos++;

		switch(c)
		{
			case 0:
				if (YM2612_Enable)
				{
					// if dacMax is zero, dacSize will be NaN - so what, we won't
					// be using it in that case anyway :p
					dacSize = (double)Seg_Lenght / dacMax;

					for (i = 0; i < dacMax; i++)
					{
						oldPos = (int)curPos;

						YM2612_Write(0, 0x2A);
						YM2612_Write(1, dac_data[i]);

						if (i == dacMax - 1)
						{
							step = Seg_Lenght - oldPos;
						}
						else
						{
							curPos += dacSize;
							step = (int)curPos - oldPos;
						}

						dacBuf[0] = buf[0] + (int)oldPos;
						dacBuf[1] = buf[1] + (int)oldPos;

						YM2612_DacAndTimers_Update(dacBuf, step);
					}

					YM2612_Update(buf, Seg_Lenght);
				}
				if (PSG_Enable)
				{
					if (PSG_Improv)
					{
						PSG_Update_SIN(buf, Seg_Lenght);
					}
					else
					{
						PSG_Update(buf, Seg_Lenght);
					}
				}
				break;

			case 1:
				c2 = *gym_pos++;

				if (c2 == 0x2A)
				{
					c2 = *gym_pos++;
					dac_data[dacMax++] = c2;
				}
				else
				{
					YM2612_Write(0, c2);
					c2 = *gym_pos++;
					YM2612_Write(1, c2);
				}
				break;

			case 2:
				c2 = *gym_pos++;
				YM2612_Write(2, c2);

				c2 = *gym_pos++;
				YM2612_Write(3, c2);
				break;

			case 3:
				c2 = *gym_pos++;
				PSG_Write(c2);
				break;
		}

	} while (c);

	return gym_pos;
}