📄 drv_dsp_gotomsf.c
字号:
#include "drv_DSP_GotoMSF.h"
//YTC00E 20050119 -ROM
void GotoMSF_SetRetry(void);
//#define RETRY_1ST_LIMIT 0x04
//#define RETRY_2ND_LIMIT 0x14 // H偺1偼丄Target偺尭嶼検
#define RETRY_LIMIT 0x04 // 埵抲偩偟偺儕僩儔僀夞悢
////////////////////////////////////////////////////////////////////////////////
static UINT32 mu32_TargetFrame; // YTC00B 20050114
static UINT08 mu08_RetryCounter; // YTC00E 2005019
// CLV Speed 1.20m/s OUT
//const UINT08 Tbl_LONG_JUMP_INT[9] = { 3, 2, 2, 2, 1, 1, 1, 1, 1 };
//const UINT08 Tbl_LONG_JUMP_FLOAT[9] = { 52, 81, 41, 14, 94, 79, 67, 58, 49 };
// CLV Speed 1.20m/s MIDLE
const UINT08 Tbl_LONG_JUMP_INT[9] = { 3, 2, 2, 2, 1, 1, 1, 1, 1 };
const UINT08 Tbl_LONG_JUMP_FLOAT[9] = { 18, 63, 29, 05, 88, 74, 63, 54, 46 };
// CLV Speed 1.20m/s IN
//const UINT08 Tbl_LONG_JUMP_INT[9] = { 2, 2, 2, 1, 1, 1, 1, 1, 1 };
//const UINT08 Tbl_LONG_JUMP_FLOAT[9] = { 86, 44, 16, 96, 81, 68, 58, 50, 43 };
/*------------------------------------------------------------------------------
Jumpe Width Selecter Table
------------------------------------------------------------------------------*/
//// 0 1 4 10 30 80 128 (Tracks)
// { 0, 10, 40, 99, 295, 788, 1262 }, // 0min
// { 0, 13, 50, 124, 372, 992, 1589 }, // 10min
// { 0, 15, 58, 145, 435, 1160, 1858 }, // 20min
// { 0, 17, 66, 164, 490, 1307, 2093 }, // 30min
// { 0, 18, 72, 180, 540, 1439, 2305 }, // 40min
// { 0, 20, 78, 195, 585, 1560, 2498 }, // 50min
// { 0, 21, 84, 209, 627, 1672, 2677 }, // 60min
// { 0, 23, 89, 222, 666, 1777, 2845 }, // 70min
// { 0, 24, 94, 235, 704, 1877, 3004 }, // 80min
// { 0, 25, 99, 247, 739, 1971, 3155 } // 90min
//const UINT16 TBL_JUDGE_JUMP[9][6] =
//{
////Size 0 1 4 10 30 80 (Track)
// { 0, 13, 50, 124, 372, 992 }, // 0min (10min)
// { 0, 15, 58, 145, 435, 1160 }, // 10min (20min)
// { 0, 17, 66, 164, 490, 1307 }, // 20min (30min)
// { 0, 18, 72, 180, 540, 1439 }, // 30min (40min)
// { 0, 20, 78, 195, 585, 1560 }, // 40min (50min)
// { 0, 21, 84, 209, 627, 1672 }, // 50min (60min)
// { 0, 23, 89, 222, 666, 1777 }, // 60min (70min)
// { 0, 24, 94, 235, 704, 1877 }, // 70min (80min)
// { 0, 25, 99, 247, 739, 1971 } // 80min (90min)
//};
// 30tr or 80tr, using next zone's parameters
const UINT16 TBL_JUDGE_JUMP[9][6] =
{
//Size 0 1 4 10 30 80 (Track)
{ 0, 10, 40, 99, 372, 992 }, // 0min
{ 0, 13, 50, 124, 435, 1160 }, // 10min
{ 0, 15, 58, 145, 490, 1307 }, // 20min
{ 0, 17, 66, 164, 540, 1439 }, // 30min
{ 0, 18, 72, 180, 585, 1560 }, // 40min
{ 0, 20, 78, 195, 627, 1672 }, // 50min
{ 0, 21, 84, 209, 666, 1777 }, // 60min
{ 0, 23, 89, 222, 704, 1877 }, // 70min
{ 0, 24, 94, 235, 739, 1971 } // 80min
};
////////////////////////////////////////////////////////////////////////////////
/*==============================================================================
Goto MSF ( Move to Target ATime )
==============================================================================*/
/*------------------------------------------------------------------------------
[NAME] :GotoMSF
[FUNCTION] :
[RETURN] :UINT08
[PARAMETER]:void
[HISTORY] :
[NOTE] :
------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------
Function: DrvDSP_SelectTrackJump
Return: JUMP_VECTOR
+ UINT08 u08_Direction ( Jump Direction )
+ JUMP_FF: Move to Out
+ JUMP_FR: Move to In
+ UINT08 u08_Size ( Jump Width )
+ 0: Disable Jump
+ 1: 1track
+ 2: 4track
+ 3: 10track
+ 4: 30track
+ 5: 80track
+ 6: Sled Jump
+ UINT08 u08_Long ( Long Jump Width )
Arguments: MSF* pmsf_PresentPost
MSF* pmsf_Destination
[NOTE] :Call from "void DrvDSP_Skip(void)" only //S001 <-USO.
--------------------------------------------------------------------------------*/
// Target == ATIME
UINT08 GotoMSF(void)
{
// UINT08 i;
UINT32 mu32_Distance;
UINT08 u08_Zone;
// UINT08 u08_RestMin;
JUMP_VECTOR JV;
static UINT32 last_atime;
switch( gu08_GotoMsfSC )
{
case 0x01:
mu08_RetryCounter =0; // YTC003 20041230
mu32_TargetFrame =gu32_val_TargetFrame; // YTC00B 20050114
case 0x11:
// DrvDSP_BIOS_ECC_Mute(); //傾僋僙僗張棟拞偼嫮惂俤俠俠 MUTE 嬤偄彨棃偟偭偐傝捈偡偙偲丅1008
// DrvDSP_BIOS_UpGain();
gu08_before_Direction = 0xFF; // 慜夞僕儍儞僾曽岦僋儕傾
gu08_GotoMsfSC = 0x02;
// mu08_RetryCounter =0; // YTC003 20041230
case 0x02:
// Check Lag ===========================================================
#if ROM // SDC 20050206
if( DrvDSP_BIOS_ReadBusy( ) == LOW )
#else
if( !DrvDSP_BIOS_ReadBusy() )
#endif
{
return gu08_GotoMsfSC;
}
if( gu08_sts_Subq_valid != VALID )
{
return gu08_GotoMsfSC;
}
// if( stSubq_bcd.tno == LEAD_IN ) //Sxxx MULTI-SESSION
#if 0
if(( stSubq_bcd.tno == LEAD_IN ) &&( gu08_multisession == 0 ))
{
gu08_req_Jump = JUMP_FF | JUMP_10;
return gu08_GotoMsfSC;
}
else if(( stSubq_bcd.tno == LEAD_IN ) &&( gu32_frame_atime > 360000 ))
{
gu08_req_Jump = JUMP_FF | JUMP_10;
return gu08_GotoMsfSC;
}
#endif
#if 0
if(stSubq_bcd.tno == LEAD_IN)
{ //INDEX 00
if(gu08_multisession == 0)
{ //
gu08_req_Jump = JUMP_FF | JUMP_10;
return gu08_GotoMsfSC;
}
else
{ // MULTI-SESSION | CCCD
if((gu08_multisession & 0x80)!=0)
{ //CCCD偲巚傢傟傞
gu08_multisession &= 0x7f; //
gu08_req_Jump = JUMP_FF | JUMP_10;
return gu08_GotoMsfSC;
}
else
{ //婯奿捠傝偺MULTI-SESSION
if(gu32_frame_atime > 360000)
{
gu08_req_Jump = JUMP_FF | JUMP_10;
return gu08_GotoMsfSC;
}
}
}
}
#endif
//YTC002 20041226
if((stSubq_bcd.ctrl_addr & 0x0F ) != 0x01 )
{
return gu08_GotoMsfSC; //-> 帪娫忣曬偱偼側偄subQ丅
}
DrvDSP_BIOS_UpGain(); //subQ庢傟偰偐傜俧up
if(stSubq_bcd.tno == LEAD_IN)
{
#if 0 // SDC 20041215
if( gu08_before_Direction == 0xFF )
{
// gu08_req_Jump = JUMP_FF | JUMP_10;
gu08_req_Jump = JUMP_FF | JUMP_04;
return gu08_GotoMsfSC;
}
else if(gu08_before_Direction == JUMP_FR)
#else
if( gu08_before_Direction == JUMP_FR )
#endif
{
//YTC002 20041226
gu08_req_Jump = JUMP_FR | JUMP_10;
#if ROM // SDC 20050206
if(DrvDSP_BIOS_ReadInner() == LOW)
#else
if( !DrvDSP_BIOS_ReadInner() )
#endif
{
gu08_req_Jump = JUMP_FF | JUMP_10; //LEAD IN亄FR-4偱僀儞僫乕偵偝傢偭偨傜丄奜偵岦偗傞丅
gu08_before_Direction = JUMP_FF; //偙傟偱丄侾st僙僢僔儑儞偺LEAD in偲敾抐偡傞丅
} //偙傟偱丄TNO_00偱傕帺怣傪帩偭偰旘傋傞偺偱丄亇侾侽僕儍儞僾偵栠偡丅
return gu08_GotoMsfSC;
}
else
{
gu08_req_Jump = JUMP_FF | JUMP_10;
// gu08_req_Jump = JUMP_FF | JUMP_04;
return gu08_GotoMsfSC;
}
}
//YTC003 倴偙偺僐儊儞僩崱偲側偭偰偼僂僜丅
// 偙傟傪捠傝敳偗傞偺偼丄TNO!=0偲丄俀屄栚TNO==00
// if( stSubq_bcd.tno == LEAD_OUT )
// {
// gu08_req_Jump = JUMP_FR | JUMP_30;
// return gu08_GotoMsfSC;
// }
// Judge Direction -----------------------------------------------------
//// if( gu32_val_TargetFrame >= gu32_frame_atime )
// if( gu32_val_TargetFrame > gu32_frame_atime ) // Sxxx ==側傜亅jump
if( mu32_TargetFrame > gu32_frame_atime ) // Sxxx ==側傜亅jump // YTC00B 20050114
{
// pmsf_Destination > pmsf_PresentPost
mu32_Distance =mu32_TargetFrame -gu32_frame_atime; // YTC00B 20050114
JV.u08_Direction =JUMP_FF;
}
else
{
// pmsf_Destination <= pmsf_PresentPost
mu32_Distance =gu32_frame_atime -mu32_TargetFrame; // YTC00B 20050114
JV.u08_Direction =JUMP_FR;
}
if( gu08_before_Direction == 0xFF )
{
// At begining, direction is not changed
gu08_before_Direction =JV.u08_Direction;
}
// Select Jump Size ----------------------------------------------------
if( mu32_Distance > 4500 )
{
// Over 60sec ( 4500frame ) - - - - - - - - - - - - - - - - - - - -
JV.u08_Size =JUMP_LONG;
}
else
{
// Less 60sec - - - - - - - - - - - - - - - - - - - - - - - - - - -
// u08_Zone =stSubq_hex.min /10; // Zone (Divided 10min) //Sxxx
u08_Zone =stSubq_hex.amin /10; // Zone (Divided 10min)
for( gu08_i=5; gu08_i>0; gu08_i-- ) // from 4 to 0
{
if( (UINT16)mu32_Distance > TBL_JUDGE_JUMP[u08_Zone][gu08_i] )
{
break;
}
}
JV.u08_Size =gu08_i;
}
// Resize Jump ---------------------------------------------------------
// ResizeJump();
if( JV.u08_Direction != gu08_before_Direction )
{
// Turned Direction - - - - - - - - - - - - - - - - - - - - - - - -
if( JV.u08_Size >= JUMP_04 ) //YTC002 20041225
{
JV.u08_Size--;
}
//YTC002 20041225
// if( JV.u08_Size >= JUMP_04 )
// {
// JV.u08_Size--;
// if(JV.u08_Size==7) //YTC001 20041224 JUMP偺僥乕僽儖弴彉曄峏偺曗惓丅LONG->80
// {
// JV.u08_Size=5;
// }
// }
}
if( JV.u08_Size == JUMP_LONG )
{
SetLongJump( &JV );
// JV.u08_Size =JUMP_80; // Disnable LongJump
}
//Sxxx 儅儖僠僙僢僔儑儞旕懳墳偺堊堦帪嶍彍
#if 0
// Resize 80tr -----------------------------------------------------
if( JV.u08_Direction == JUMP_FF )
{
u08_RestMin = stInfoArea.hexTocA2[0] -stSubq_hex.amin;
if( u08_RestMin < 2 )
{
// Less 2 min until Lead Out
if( JV.u08_Size == JUMP_LONG )
{
JV.u08_Size =JUMP_80;
}
}
if( u08_RestMin < 1 )
{
// Less 1 min until Lead Out
JV.u08_Size =JUMP_30;
}
}
else //if( JV.u08_Direction == JUMP_FR )
{
if( stSubq_hex.amin < 2 )
{
// Inside 2 min from Start
if( JV.u08_Size == JUMP_LONG )
{
JV.u08_Size =JUMP_80;
}
}
if( stSubq_hex.amin < 1 )
{
// Inside 1 min from Start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -