Example #1
0
void PSG_SetRegister(const unsigned int id, const uint32 value)
{
 

 if(name == "Select")
  PSG_Write(0x00, V);
 else if(name == "GBalance")
  PSG_Write(0x01, V);
 else if(name == "LFOFreq")
 {
  PSG_Write(0x08, V);
 }
 else if(name == "LFOCtrl")
  PSG_Write(0x09, V);
 else if(!strncmp(name.c_str(), "CH", 2))
 {
  unsigned int psg_sel_save = select;
  int ch = name[2] - '0';
  char moomoo[64];
  strncpy(moomoo, name.c_str() + 3, 63);

  PSG_Write(0x00, ch);

  if(!strcmp(moomoo, "Freq"))
  {
   PSG_Write(0x02, V);
   PSG_Write(0x03, V >> 8);
  }
Example #2
0
/**
 * mdp_host_reg_set_all_psg(): Set all PSG registers.
 * @param reg_struct Pointer to mdp_reg_psg_t struct to get the registers from.
 * @return MDP error code.
 */
static int mdp_host_reg_set_all_psg(void *reg_struct)
{
	mdp_reg_psg_t *reg_psg = (mdp_reg_psg_t*)reg_struct;
	
	int i;
	for (i = 0; i < 8; i++)
	{
		PSG_Write(0x80 | (i << 4) | (reg_psg->regs[i] & 0x0F));
		PSG_Write((reg_psg->regs[i] >> 4) & 0x3F);
	}
	
	return MDP_ERR_OK;
}
Example #3
0
void c6280_w(UINT8 ChipID, offs_t offset, UINT8 data)
{
	c6280_state* info = &C6280Data[ChipID];
	switch(EMU_CORE)
	{
#ifdef ENABLE_ALL_CORES
	case EC_MAME:
		c6280m_w(info->chip, offset, data);
		break;
#endif
	case EC_OOTAKE:
		PSG_Write(info->chip, offset, data);
		break;
	}
	
	return;
}
Example #4
0
void c6280_w(void *_info, offs_t offset, UINT8 data)
{
	c6280_state* info = (c6280_state *)_info;
	switch(info->EMU_CORE)
	{
#ifdef ENABLE_ALL_CORES
	case EC_MAME:
		c6280m_w(info->chip, offset, data);
		break;
#endif
	case EC_OOTAKE:
		PSG_Write(info->chip, offset, data);
		break;
	}
	
	return;
}
Example #5
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;
}