Ejemplo n.º 1
0
void ZeldaUCode::HandleMail(u32 mail)
{
	if (IsLightVersion())
		HandleMail_LightVersion(mail);
	else if (IsSMSVersion())
		HandleMail_SMSVersion(mail);
	else
		HandleMail_NormalVersion(mail);
}
Ejemplo n.º 2
0
void CUCode_Zelda::HandleMail(u32 _uMail)
{
	if (IsLightVersion())
		HandleMail_LightVersion(_uMail);
	else if (IsSMSVersion())
		HandleMail_SMSVersion(_uMail);
	else
		HandleMail_NormalVersion(_uMail);
}
Ejemplo n.º 3
0
void ZeldaUCode::Update()
{
	if (!IsLightVersion())
	{
		if (m_mail_handler.GetNextMail() == DSP_FRAME_END)
			DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
	}

	if (NeedsResumeMail())
	{
		m_mail_handler.PushMail(DSP_RESUME);
		DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
	}
}
Ejemplo n.º 4
0
ZeldaUCode::ZeldaUCode(DSPHLE *dsphle, u32 crc)
	: UCodeInterface(dsphle, crc),
	  m_sync_in_progress(false),
	  m_max_voice(0),
	  m_num_sync_mail(0),
	  m_num_voices(0),
	  m_sync_cmd_pending(false),
	  m_current_voice(0),
	  m_current_buffer(0),
	  m_num_buffers(0),
	  m_voice_pbs_addr(0),
	  m_unk_table_addr(0),
	  m_reverb_pbs_addr(0),
	  m_right_buffers_addr(0),
	  m_left_buffers_addr(0),
	  m_pos(0),
	  m_dma_base_addr(0),
	  m_num_steps(0),
	  m_list_in_progress(false),
	  m_step(0),
	  m_read_offset(0),
	  m_mail_state(WaitForMail),
	  m_num_pbs(0),
	  m_pb_address(0),
	  m_pb_address2(0)
{
	DEBUG_LOG(DSPHLE, "UCode_Zelda - add boot mails for handshake");

	if (IsLightVersion())
	{
		DEBUG_LOG(DSPHLE, "Luigi Stylee!");
		m_mail_handler.PushMail(0x88881111);
	}
	else
	{
		m_mail_handler.PushMail(DSP_INIT);
		DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
		m_mail_handler.PushMail(0xF3551111); // handshake
	}

	m_voice_buffer = new s32[256 * 1024];
	m_resample_buffer = new s16[256 * 1024];
	m_left_buffer = new s32[256 * 1024];
	m_right_buffer = new s32[256 * 1024];

	memset(m_buffer, 0, sizeof(m_buffer));
	memset(m_sync_flags, 0, sizeof(m_sync_flags));
	memset(m_afc_coef_table, 0, sizeof(m_afc_coef_table));
	memset(m_pb_mask, 0, sizeof(m_pb_mask));
}
Ejemplo n.º 5
0
void CUCode_Zelda::Update(int cycles)
{
	if (!IsLightVersion())
	{
		if (m_rMailHandler.GetNextMail() == DSP_FRAME_END)
			DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
	}

	if (NeedsResumeMail())
	{
		m_rMailHandler.PushMail(DSP_RESUME);
		DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
	}
}
Ejemplo n.º 6
0
CUCode_Zelda::CUCode_Zelda(DSPHLE *dsp_hle, u32 _CRC)
	: 
	IUCode(dsp_hle, _CRC),

	m_bSyncInProgress(false),
	m_MaxVoice(0),

	m_NumSyncMail(0),

	m_NumVoices(0),

	m_bSyncCmdPending(false),
	m_CurVoice(0),
	m_CurBuffer(0),
	m_NumBuffers(0),

	m_VoicePBsAddr(0),
	m_UnkTableAddr(0),
	m_ReverbPBsAddr(0),

	m_RightBuffersAddr(0),
	m_LeftBuffersAddr(0),
	m_pos(0),

	m_DMABaseAddr(0),

	m_numSteps(0),
	m_bListInProgress(false),
	m_step(0),

	m_readOffset(0),

	m_MailState(WaitForMail),

	m_NumPBs(0),
	m_PBAddress(0),
	m_PBAddress2(0)
{
	DEBUG_LOG(DSPHLE, "UCode_Zelda - add boot mails for handshake");

	if (IsLightVersion())
	{
		NOTICE_LOG(DSPHLE, "Luigi Stylee!");
		m_rMailHandler.PushMail(0x88881111);	
	}
	else
	{
		m_rMailHandler.PushMail(DSP_INIT);
		DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
		m_rMailHandler.PushMail(0xF3551111); // handshake
	}

	m_VoiceBuffer = new s32[256 * 1024];
	m_ResampleBuffer = new s16[256 * 1024];
	m_LeftBuffer = new s32[256 * 1024];
	m_RightBuffer = new s32[256 * 1024];

	memset(m_Buffer, 0, sizeof(m_Buffer));
	memset(m_SyncFlags, 0, sizeof(m_SyncFlags));
	memset(m_AFCCoefTable, 0, sizeof(m_AFCCoefTable));
	memset(m_PBMask, 0, sizeof(m_PBMask));
}