⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drv_dsp_gotomsf.c

📁 ROHM 公司BU9432:application:应用范围
💻 C
📖 第 1 页 / 共 2 页
字号:
				JV.u08_Size =JUMP_30;
			}
		}
#endif

		// Check Near Target ---------------------------------------------------
//Sxxx SAHAI METHOD step1
		if( JV.u08_Size == JUMP_NOP )
		{	//嵎暘偼亇侾僩儔僢僋埲撪(梿慁峫椂崬傒)
			if( JV.u08_Direction == JUMP_FR )
			{	//
				JV.u08_Size =JUMP_01;
			}
			else //if( JV.u08_Direction == JUMP_FF )
			{	//
				if((mu32_TargetFrame - gu32_frame_atime) < 4)	// YTC00B 20050114
				{	//嬤偡偓
					JV.u08_Direction =JUMP_FR;
					JV.u08_Size =JUMP_01;
				}
			}
		}

//Sxxx SAHAI METHOD step2
		if( JV.u08_Size == JUMP_NOP )
		{	//忋婰偺曗惓偐偗偰傕僕儍儞僾暆侽側傜丄僕儍儞僾張棟廔傢傝丅捠夁懸偪傊
// YTC002 20041229
//			if( mu08_RetryCounter == 0xFF )
//			{
//				// 偁偒傜傔偺偨傔偺嵟屻偺僕儍儞僾廔椆
//				gu08_GotoMsfSC =0x0A;
//				gu08_intr_SubsyqMark =0;
//				break;
//			}
			if( (mu08_RetryCounter & 0xF0) == 0x30 )
			{
				// YTC002 20041229
				mu32_TargetFrame--;		// Target -3 -> -4	// YTC00B 20050114
				gu08_GotoMsfSC =0x0A;
				break;
			}

			DrvDSP_BIOS_DownGain();			
			gu08_req_Jump = 0x00;			
			last_atime = gu32_frame_atime;	
			gu08_GotoMsfSC =0x09;			//捠夁懸偪傊

//			if( mu08_RetryCounter & 0xF0 )
//			{
//					gu08_GotoMsfSC++;			// 0x09->0x0A
//			}
		}
		else
		{
			gu08_before_Direction = JV.u08_Direction;
//			gu08_before_Size      = JV.u08_Size;
			gu08_val_LongJump     = JV.u08_Long;
			gu08_req_Jump         = JV.u08_Direction | JV.u08_Size;
		}


#if 0	//KONISHI METHOD
		if( JV.u08_Size == JUMP_NOP )
		{
			if( JV.u08_Direction == JUMP_FR )
			{
				// Less disstance is under 1tr,
				JV.u08_Size =JUMP_01;
//				if( (gu32_frame_atime-mu32_TargetFrame) > (TBL_JUDGE_JUMP[u08_Zone][1]-6) )	// YTC00B 20050114
//				{
//					// Very very close!  Back 1tr & wait.
//					gu08_GotoMsfSC =0x09;
//				}
			}
			else //if( JV.u08_Direction == JUMP_FF )
			{
				if( (mu32_TargetFrame-gu32_frame_atime) > 3 )	// YTC00B 20050114
				{
					// Less disstance is under 3frame ( too close ),
					// back 1tr & wait.
					JV.u08_Direction =JUMP_FR;
					JV.u08_Size =JUMP_01;
					gu08_GotoMsfSC =0x09;
				}
			}
		}
		else if( JV.u08_Size == JUMP_01 )
		{
			if( JV.u08_Direction == JUMP_FF )
			{
				// Near target. Stop Jump!
				JV.u08_Size =JUMP_NOP;
				gu08_GotoMsfSC =0x09;
			}
		}

		// Store Jump Parameters -----------------------------------------------
		gu08_before_Direction = JV.u08_Direction;
//		gu08_before_Size      = JV.u08_Size;
		gu08_val_LongJump     = JV.u08_Long;
		gu08_req_Jump         = JV.u08_Direction | JV.u08_Size;
#endif

		break;

//	捠夁懸偪丅懳嶔娒偄丅
//	帪娫忣曬偱偼側偄僙僋僞側傜偳偆偡傞丠丂偨傑偨傑撉傔側偄応強偩偭偨傜偳偆偡傞丠
//  偝偼偄埬傪堏怉偟傛偆丅
	case 0x09:
		if( gu08_sts_Subq_valid == VALID )
		{

			if(stSubq_bcd.tno == LEAD_IN)				// YTC00E 20050119
			{											// YTC00E 20050119
				GotoMSF_SetRetry();		//Retry			// YTC00E 20050119
			}

			if( gu32_frame_atime == mu32_TargetFrame )	// YTC00B 20050114
			{
				// Just on Target !
				gu08_GotoMsfSC =0x00;		// Finish !!
				if( mu08_RetryCounter & 0xF0 )
				{
					gu08_GotoMsfSC =0x0B;			// SUBQ捠夁懸偪傊
					gu08_intr_SubsyqMark =0;		// Reset SubSyncCounter
				}
				break;								// 擮偺偨傔	// YTC003 20041230
			}
			else if( gu32_frame_atime > mu32_TargetFrame )	// YTC00B 20050114
			{
				//捠夁偟偰偟傑偭偨丅
				GotoMSF_SetRetry();		//Retry			// YTC00E 20050119
//YTC00E 20050119
//				mu08_RetryCounter++;
////			gu08_GotoMsfSC=0x01;	//Retry	// YTC003 20041230
//				gu08_GotoMsfSC=0x11;	//Retry	// YTC003 20041230
			}
			else if( gu32_frame_atime < last_atime )
			{
				//栠偭偰傞傛
				GotoMSF_SetRetry();		//Retry			// YTC00E 20050119
//YTC00E 20050119
//				mu08_RetryCounter++;
////			gu08_GotoMsfSC=0x01;	//Retry	// YTC003 20041230
//				gu08_GotoMsfSC=0x11;	//Retry	// YTC003 20041230
			}

			// 壗夞偟偔偠偭偨丠
//			if( mu08_RetryCounter == RETRY_1ST_LIMIT )	// YTC002 20041229
//YTC00F	if( (mu08_RetryCounter & 0x0F) == 0x04 )	// YTC00F 20050126
			if( (mu08_RetryCounter & 0x0F) == 0x02 )	//  偁偒傜傔傛偔丅
			{
				// 婯掕夞悢偺儕僩儔僀偱栚昗偵摓払偱偒側偄応崌偺張棟傪弨旛

				mu32_TargetFrame--;		// 僞乕僎僢僩傪1Frame庤慜偵尭嶼	// YTC00B 20050114
											// 奐巒嬋偼昁偢INDEX00偑偁傞偲怣偠傞

				// 僞乕僎僢僩偺堏摦検傪忋埵偵婰榐偟丄僇僂儞僞亅傪弶婜壔
// YTC002 20041229 >>>
//				mu08_RetryCounter =0x10;
//				gu08_GotoMsfSC=0x01;	// Retry
				mu08_RetryCounter &=0xF0;	// Init Counter
				mu08_RetryCounter +=0x10;	// Target Offset
//				gu08_GotoMsfSC=0x01;		// Retry	// YTC003 20041230
				gu08_GotoMsfSC=0x11;		// Retry	// YTC003 20041230
// <<<
			}
			last_atime = gu32_frame_atime;	// Backup Latest ATime(UNIT:Frame)
		}
		break;
/* YTC002 20041229
	case 0x0A:
		// 婯掕夞悢偺儕僩儔僀偱栚昗偵摓払偱偒側偄応崌偺張棟
		// Target偑尭嶼偝傟偰偄傞
		if( gu32_frame_atime == mu32_TargetFrame )	// YTC00B 20050114
		{
			gu08_GotoMsfSC++;				// 0x0A->0x0B   SUB SYNC懸偪傊堏峴
		}
		else if( gu32_frame_atime > mu32_TargetFrame )	// YTC00B 20050114
		{
			//捠夁偟偰偟傑偭偨丅
			mu08_RetryCounter++;
			gu08_GotoMsfSC=0x01;	//Retry 
		}
		else if( gu32_frame_atime < last_atime )
		{
			//栠偭偰傞傛
			mu08_RetryCounter++;
			gu08_GotoMsfSC=0x01;	//Retry 
		}

		// 壗夞偟偔偠偭偨丠
		if( mu08_RetryCounter == RETRY_2ND_LIMIT )
		{
//			gu08_GotoMsfSC =0xFF;			// Give Up
			// 忋埵傪2偲偟偰庤慜偺僞乕僎僢僩傕専弌偱偒側偐偭偨偙偲傪婰榐婰榐偟
			// 僇僂儞僞亅傪傪0xFF偲偟丄拝抧晄擻偩偭偨偙偲傪婰榐
			mu08_RetryCounter =0xFF;
			gu08_GotoMsfSC=0x01;	//Retry
		}

		last_atime = gu32_frame_atime;		// Backup Latest ATime(UNIT:Frame)
		break;
*/
	// // YTC002 20041229
	case 0x0A:
		if( gu08_sts_Subq_valid == VALID )
		{
			if( gu32_frame_atime >= mu32_TargetFrame )	// Target -4	// YTC00B 20050114
			{
				gu08_GotoMsfSC =0x00;			// Finish乮徚嬌揑乯
			}
		}
		break;

	// YTC002 20041229
	case 0x0B:
		// 壖偺栚昗捠夁屻丄SUB SYNC専弌傪帩偭偰摓払偲偡傞
/*
		if( gu08_intr_SubsyqMark != 0 )
		{
			// SUB SYNC妱傝崬傒傪専弌
			gu08_GotoMsfSC =0x00;			// 栚昗摓払
		}
*/
//		if( gu08_intr_SubsyqMark == (mu08_RetryCounter>>4) )
//		{
//			gu08_GotoMsfSC=0x00;	// Finish
//		}
//		else if( gu08_intr_SubsyqMark > (mu08_RetryCounter>>4) )
//		{
//			gu08_GotoMsfSC=0x00;	// Error 昁偢SUB SYNC偼偁傞偐傜丄偁傝偊側偄丠
//		}
		if( gu08_intr_SubsyqMark >= (mu08_RetryCounter>>4) )
		{
			gu08_GotoMsfSC=0x00;	// Finish
		}
		break;
	}

	return gu08_GotoMsfSC;
}


//YTC00E 20050119 -ROM
void GotoMSF_SetRetry()
{							//YTC00E 20050119
	mu08_RetryCounter++;	//
	gu08_GotoMsfSC=0x11;	//
}


/*--------------------------------------------------------------------------------
	Function:	SetLongJump
	Return:		JUMP_VECTOR
					+ UINT08 u08_Direction	( Jump Direction )
						+ JUMP_FF: Move to Out
						+ JUMP_FR: Move to In
					+ UINT08 u08_Size		( Jump Size )
						+ 6: Long jump
					+ UINT08 u08_Long		( Long jump parameter )
						+ 0    : Disable Lomg Jump
						+ 1-255: Sled Jump Parameter
	Arguments:	UINT08 stSubq_hex.amin		( Min of Start Post)
				UINT08 u08_DestinationMin	( Min of Distination )
--------------------------------------------------------------------------------*/
JUMP_VECTOR SetLongJump( JUMP_VECTOR* pJV )
{

	UINT08 u08_OutPos;
	UINT08 u08_InPos;
	UINT08 u08_InPosH;
	UINT08 u08_InPosL;
	UINT08 u08_Temp;
	UINT08 u08_SumTrackFloat;
	UINT08	u08_DestinationMin;
	UINT16	u16_LessFrame;

//	JV.u08_Size =JUMP_LONG;


	// Calc Distination Min H
// YTC00B 20050114 >>>
	if     ( gu32_val_TargetFrame >= 360000 ){	u08_DestinationMin =80;	u16_LessFrame =(UINT16)(gu32_val_TargetFrame -360000); }
	else if( gu32_val_TargetFrame >= 315000 ){	u08_DestinationMin =70;	u16_LessFrame =(UINT16)(gu32_val_TargetFrame -315000); }
	else if( gu32_val_TargetFrame >= 270000 ){	u08_DestinationMin =60;	u16_LessFrame =(UINT16)(gu32_val_TargetFrame -270000); }
	else if( gu32_val_TargetFrame >= 225000 ){	u08_DestinationMin =50;	u16_LessFrame =(UINT16)(gu32_val_TargetFrame -225000); }
	else if( gu32_val_TargetFrame >= 180000 ){	u08_DestinationMin =40;	u16_LessFrame =(UINT16)(gu32_val_TargetFrame -180000); }
	else if( gu32_val_TargetFrame >= 135000 ){	u08_DestinationMin =30;	u16_LessFrame =(UINT16)(gu32_val_TargetFrame -135000); }
	else if( gu32_val_TargetFrame >=  90000 ){	u08_DestinationMin =20;	u16_LessFrame =(UINT16)(gu32_val_TargetFrame - 90000); }
	else if( gu32_val_TargetFrame >=  45000 ){	u08_DestinationMin =10;	u16_LessFrame =(UINT16)(gu32_val_TargetFrame - 45000); }
	else									 {	u08_DestinationMin = 0;	u16_LessFrame =(UINT16)gu32_val_TargetFrame;           }
// <<<
	// Calc Distination Min L
	if     ( u16_LessFrame >= 40500 )	u08_DestinationMin +=9;
	else if( u16_LessFrame >= 36000 )	u08_DestinationMin +=8;
	else if( u16_LessFrame >= 31500 )	u08_DestinationMin +=7;
	else if( u16_LessFrame >= 27000 )	u08_DestinationMin +=6;
	else if( u16_LessFrame >= 22500 )	u08_DestinationMin +=5;
	else if( u16_LessFrame >= 18000 )	u08_DestinationMin +=4;
	else if( u16_LessFrame >= 13500 )	u08_DestinationMin +=3;
	else if( u16_LessFrame >=  9000 )	u08_DestinationMin +=2;
	else if( u16_LessFrame >=  4500 )	u08_DestinationMin +=1;
	else							 	u08_DestinationMin +=0;


	if( u08_DestinationMin > stSubq_hex.amin )
	{
		// Move to Out
		u08_OutPos =u08_DestinationMin;
		u08_InPos =stSubq_hex.amin;
//		pJV->u08_Direction =JUMP_FF;
	}
	else
	{
		// Move to In
		u08_OutPos =stSubq_hex.amin;
		u08_InPos =u08_DestinationMin;
//		pJV->u08_Direction =JUMP_FR;
	}

	u08_SumTrackFloat =0;
	pJV->u08_Long =0;

	// always calculate from inside
	while( u08_OutPos > u08_InPos )
	{
		u08_InPosH =u08_InPos/10;
		u08_InPosL =u08_InPos%10;
		u08_Temp =u08_OutPos - u08_InPos;

		if( u08_Temp < 10 )
		{
			// 3rd. Last less 10 track
			pJV->u08_Long       +=Tbl_LONG_JUMP_INT[u08_InPosH] *u08_Temp;
			u08_SumTrackFloat +=Tbl_LONG_JUMP_FLOAT[u08_InPosH] *u08_Temp;
			break;
		}
		else if( u08_InPosL == 0 )
		{
			// 2nd. Midle 10 track step
			pJV->u08_Long       +=Tbl_LONG_JUMP_INT[u08_InPosH] *10;
			u08_SumTrackFloat +=Tbl_LONG_JUMP_FLOAT[u08_InPosH] *10;
			u08_InPos +=10;
		}
		else
		{
			// 1st.
			u08_Temp =10-u08_InPosL;

			pJV->u08_Long       +=Tbl_LONG_JUMP_INT[u08_InPosH] *u08_Temp;
			u08_SumTrackFloat +=Tbl_LONG_JUMP_FLOAT[u08_InPosH] *u08_Temp;
			u08_InPos +=u08_Temp;
		}
	}

	pJV->u08_Long +=u08_SumTrackFloat/100;
	return *pJV;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -