📄 drv_mp3.c
字号:
//Sxxx 偙偙偵崅怣棅壔張棟昁梫丅俶夞儕僩儔僀偟偰丄彂偒崬傒巒傑傜側偐偭偨傜丄偦偺僙僋僞幪偰傞丅
//YTC004 20050103 夞悢傪惂尷偡傞丅
if(++u08_MP3_wr_retry > MP3_WR_RETRY_MAX)
{
u08_MP3_wr_retry = 0; //
gu32_val_TargetFrame++; //偙偺僙僋僞幪偰偰丄師偺僙僋僞偐傜挋傔巒傔傞
//YTC00F debug_direct_count++; //
}
break;
}
mp3Ctl.WR.sts = 6;
#if ID3TAG // SDC 20050213
if( mp3Ctl.PLAY[gu08_num_Slot].flgs & BIT_ID3V2_END )
#endif
gu08_sts_DISPLAY = 1; // 昞帵 enable // SDC 20050121
break;
#if ROM // SDC 20050205
case 6: // 幚峴拞乮儊僀儞張棟乯
if( gu08_sts_Subq_valid )
{
gi_timer_mp3 = 2; //2ms*2
mp3Ctl.WR.sts = 7;
}
break;
#endif
case 7: // RSSNC棫偪忋偑傝妋擣
if( !( DrvDSP_BIOS_ReadRegMP3( 0x97 ) & 0x01 ) )
{ //
break; //-> CDROM SYNC HEADER枹
}
// v.丂SYNC HEADER 棃
mp3Ctl.WR.sts = 8;
// break;
// Fall Through
case 8: // 掆巭妋擣偲Valid敪峴
ctmp_rsacf = DrvDSP_BIOS_ReadRegMP3( 0xC2 );
if( !( ctmp_rsacf & 0x40 ))
{ // RSECC 棫偪壓傝妋擣
mp3Ctl.WR.sts = 9; // -> 彂崬巭傑偭偨
break;
}
if( ctmp_rsacf & 0x04 ) // C3ECC 幚峴拞丠
break;
mp3Ctl.WR.wqok = gu32_frame_atime; //尰嵼埵抲傪曐懚
DrvDSP_BIOS_WriteRegMP3( 0x0C, 0x01 ); // Valid敪峴
//YTC004 20050103
u08_MP3_wr_retry=0; //YTC004 20050103 惓偟偔彂偒崬傔偨丅
// 1僙僋僞WR捠抦
mp3Ctl.WR.info = 0x01; // 1sect WR
#if ROM // SDC 20050205
if( !mp3Ctl.WR.end_sector )
{
//
mp3Ctl.WR.nSect--;
if( mp3Ctl.WR.nSect <= 0 )
{
DrvDSP_BIOS_WriteRegMP3( 0x00, mp3Ctl.WR.mode ); // Write掆巭
MP3Ctrl_WriteProc_finish(); //
break;
}
}
else
{ //偦偺嬋偺嵟屻傑偱棴傔崬傫偩丅
if( mp3Ctl.WR.wqok > mp3Ctl.WR.end_sector )
{
DrvDSP_BIOS_WriteRegMP3( 0x00, mp3Ctl.WR.mode ); // Write掆巭
MP3Ctrl_WriteProc_finish(); //
break;
}
}
#else
if( !mp3Ctl.WR.end_sector )
mp3Ctl.WR.nSect--;
MP3Ctrl_checkWriteStop();
if( mp3Ctl.WR.sts != 20 )
#endif
mp3Ctl.WR.sts = 6;
break;
case 9: // WRITE 掆巭忬懺専弌
mp3Ctl.WR.info = DrvDSP_BIOS_ReadRegMP3( 0xC0 );
if( mp3Ctl.WR.info & 0x7f )
{ // WRITE 掆巭
if( mp3Ctl.WR.info & 0x02 )
{
mp3Ctl.WR.sts = 30; // 僷儚乕僙乕僽張棟傊
break;
}
if( stSubq_bcd.tno == 0xAA )
{
#if ROM // SDC 20050205
MP3Ctrl_WriteProc_finish(); //
#else
MP3Ctrl_Write_Stop();
#endif
break;
}
// 掆巭忦審偺妋擣
#if ROM // SDC 20050205
if( !mp3Ctl.WR.end_sector )
{
if( mp3Ctl.WR.nSect <= 0 )
{
#if ROM // SDC 20050205
MP3Ctrl_WriteProc_finish(); //
#else
MP3Ctrl_Write_Stop();
#endif
// Write掆巭偺捠抦
//mp3Ctl.WR.info = 0x81;
//mp3Ctl.WR.sts = 20; // 掆巭拞傊
break;
}
}
else
{
if( mp3Ctl.WR.wqok > mp3Ctl.WR.end_sector )
{
#if ROM // SDC 20050205
MP3Ctrl_WriteProc_finish(); //
#else
MP3Ctrl_Write_Stop();
#endif
// Write掆巭偺捠抦
//mp3Ctl.WR.info = 0x81;
//mp3Ctl.WR.sts = 20;
break;
}
}
#else
MP3Ctrl_checkWriteStop();
if( mp3Ctl.WR.sts == 20 )
break;
#endif
#if ID3TAG // SDC 20050202
if( mp3Ctl.WR.end_sector && !( mp3Ctl.PLAY[gu08_num_Slot].flgs & BIT_ID3V2_END ))
{ // 僞僌彂崬拞偵巭傑偭偨傜
#if ROM // SDC 20050205
if( ++u08_MP3_wr_retry > MP3_WR_RETRY_MAX )
{ // 儕僩儔僀廔椆
if( mp3Ctl.PLAY[gu08_num_Slot].flgs & BIT_ID3V1_END )
mp3Ctl.PLAY[gu08_num_Slot].flgs |= BIT_ID3V2_END;
else mp3Ctl.PLAY[gu08_num_Slot].flgs |= BIT_ID3V1_END;
MP3Ctrl_WR_Reset(); // Write / Read clear
ID3TagRetry = 0;
mp3Ctl.PLAY[gu08_num_Slot].sts = 1; // 僞僌柍偟偲偟偰師傊
break;
}
#else
MP3Ctrl_ID3Retry( &mp3Ctl.PLAY[gu08_num_Slot] );
if( !ID3TagRetry )
break;
#endif
DrvDSP_BIOS_WriteRegMP3( 0x00, 0x40 | mp3Ctl.WR.mode );
MP3Ctrl_StartSet(); // write 僋儕傾偟偰棴傔捈偟
break;
}
#endif
//YTC004 20050103
if( gu32_val_TargetFrame != u32_last_BAD_Frame)
{
u32_last_BAD_Frame = gu32_val_TargetFrame;
}
else
{
if(++u08_MP3_wr_retry > MP3_WR_RETRY_MAX)
{
u08_MP3_wr_retry = 0; // SDC 050117
mp3Ctl.WR.wqok++; //壗夞傕僄儔乕弌傞僙僋僞側傜幪偰偰師傊
}
}
gu32_val_TargetFrame = mp3Ctl.WR.wqok - 1; //
// gu32_val_TargetFrame = mp3Ctl.WR.wqok;
gu08_GotoMsfSC =1; //
// mp3Ctl.WR.sts = 11; // 埵抲弌偟
mp3Ctl.WR.sts = 12; // 埵抲弌偟
}
break;
case 10: // 巆検妋擣拞
gi_timer_mp3 = 9; //2ms*9 //昿斏偵巆検僠僃僢僋偟側偄偟偔傒
mp3Ctl.WR.sts = 11;
break;
case 11:
if( get_mp3reg_zanryo( ) < (UINT32)mp3Ctl.WR.threshold ) // SDC 20050125
{ // 鑷抣傛傝巆検彮側偐偭偨傜愙懕奐巒
gu32_val_TargetFrame = mp3Ctl.WR.wqok - 1; // 愙懕埵抲偼侾屄庤慜
gu08_GotoMsfSC =1; //崅懍両
mp3Ctl.WR.sts = 12; // 愙懕埵抲弌偟傊
}
else
{
mp3Ctl.WR.sts = 10;
}
break;
#if ROM // SDC 20050205
case 12: // 埵抲弌偟拞
switch(gu08_GotoMsfSC)
{
case 0:
gi_timer_mp3 = 3; //2ms*3
mp3Ctl.WR.sts = 13;
break;
case 0x0A:
if(MP3Ctrl_WriteProc_WqokSkip(4) != 0)
{
break; //->SKIP偟偨傜丄偙偺嬋偺廔傢傝傪墇偊偨丒棴傔崬傒廔椆
}
mp3Ctl.WR.sts = 11; //->偪傚偭偲幪偰偰儕僩儔僀
break;
}
break;
#endif
case 13: // 愙懕奐巒
DrvDSP_BIOS_WriteRegMP3( 0x02, 0x85 ); // SYNC connect
gi_timer_mp3 = 1; // Set Timer(1.75ms*1)
mp3Ctl.WR.sts = 14;
break;
#if ROM // SDC 20050205
case 14:
if( gu08_sts_Subq_valid )
{
gi_timer_mp3 = 2;
mp3Ctl.WR.sts = 15;
}
break;
#endif
case 15: // 愙懕姰椆懸偪
if( gu08_sts_Subq_valid )
{
#if 0 // SDC 041227 FLAG6摍偱巭傑偭偨傜偙偙偱柍尷儖乕僾
if( DrvDSP_BIOS_ReadRegMP3( 0xC2 ) & 0x40 )
#else
if( !(DrvDSP_BIOS_ReadRegMP3( 0xC2 ) & 0x80) )
#endif // SDC 041227
{ // 僨乕僞棴傔崬傒奐巒偟偨偐
mp3Ctl.WR.sts = 6; //-> 偙偙傕崅怣棅惈壔張棟傎偟偄丅 棴傔崬傒奐巒偟側偄傛偆側傜丄偙偺僙僋僞幪偰偰丄師偺僙僋僞偵SYNC愙懕丅
#if ERR_DETECT // SDC 20041219
#if ID3TAG // SDC 20050213
if( mp3Ctl.PLAY[gu08_num_Slot].flgs & BIT_ID3V2_END )
#endif
gu08_sts_DISPLAY = 1; // 昞帵 enable
#endif
if(gu32_val_TargetFrame > gu32_frame_atime )
{ //偺傝偙偊偰偮側偑偭偨丅丂VALID懪偮慜偵幪偰偰丄偮側偖
//僉僘摍偱丄僩儔僢僋傪忔傝墇偊偰丄庤慜偺僙僋僞偵宷偄偩丅偙偆側傞偲摨偠応強傪嵞惗偟偰偟傑偆偺偱丄VALID懪偮慜偵幪偰偰偟傑偆丅
DrvDSP_BIOS_WriteRegMP3( 0x00, 0x02 ); // WRITE Stop敪峴
#if ROM // SDC 20050205
if(MP3Ctrl_WriteProc_WqokSkip(20) != 0) //偙偺帪偼堦廃暘埲忋幪偰傞
{
break; //->SKIP偟偨傜丄偙偺嬋偺廔傢傝傪墇偊偨丒棴傔崬傒廔椆埖偄
}
mp3Ctl.WR.sts = 11; //->愙懕傊
#else
mp3Ctl.WR.sts = 12;
MP3Ctrl_WriteProc_WqokSkip( 20 );
#endif
}
#if ROM // SDC 20050205
break;
#endif
}
}
break;
case 20: // 掆巭拞
if(gu08_GotoMsfSC == 0) //pause
{ //
gu08_GotoMsfSC=1; //
} //
break;
case 30: //儊儌儕乕僼儖偵傛傞僷儚乕僙乕僽 奐巒
//YTC00G 20050130
gu08_sts_Jump = //YTC00G 僕儍儞僾張棟拞側傜丄拞巭丅
gu08_req_Jump = //0; //C111丄8040傪敪峴偝傟傞偲崲傞丅
#if ERR_DETECT // SDC 20041222
gu08_scc_ServoError = 0; // 僷儚乕僙乕僽拞偼僄儔乕専弌偟側偄
#endif
DrvDSP_PowerSave_on1();
mp3Ctl.WR.sts = 31; //
break;
case 31:
gi_timer_mp3 = 9; // 2ms*9 //昿斏偵巆検僠僃僢僋偟側偄偟偔傒
//18mS屻丄傑偨偙偙乮俁侾斣乯傊栠偭偰偔傞丅
if( get_mp3reg_zanryo( ) < 0X18000 ) //18000/100000=偺偙傝15亾 俁俀俉俲俛俹俽亄俥俥僒乕僠拞偺僷儚乕僙乕僽偐傜偺暅婣偵懴偊傞偙偲丅
//偪側傒偵丄係乛侾俇乛俇係俵倐倝倲嫟捠偱偄偄偲巚偆丅
{ // 鑷抣傛傝巆検彮側偐偭偨傜僒乕儃暅婣奐巒
mp3Ctl.WR.sts = 32; // 愙懕埵抲弌偟傊
gi_timer_mp3 = 0; //師偺弰夞偱俁俀斣偵峴偔傛偆偵丅
}
break;
case 32:
DrvDSP_PowerSave_off1();
mp3Ctl.WR.sts = 33; //倃侾倂傑偱側偺偱丄廟傝崬傒偼堦抜奒偺傒丅
break;
case 33: //
if(DrvDSP_PowerSave_off3() != 0)
{ //帪娫宱夁 ,僼僅乕僇僗僒乕僠梫媮
mp3Ctl.WR.sts = 34; //
}
break;
case 34: //
if(gu08_scc_FocusSearch==0)
{
DrvDSP_BIOS_WriteReg(0x83,0x21); //CLVservo.limit=2/8
DrvDSP_BIOS_Tracking_On();
// DrvDSP_BIOS_WriteReg( 0x62, 0x09 ); //20041117僐儗偑側偄偲僟儊丅 // YTC_20041228
DrvDSP_BIOS_Clv_On( );
if( gu08_sts_PowerSave > 1 ) // SDC 20050123
{
mp3Ctl.WR.sts = 2; //撉弌拞偵NG僙僋僞偑偁偭偰丄嵞棴崬丅
//YTC00F }else mp3Ctl.WR.sts = 10; //捠忢暅婣乣愙懕丅
}
else
{
mp3Ctl.WR.sts = 10; //儊儌儕乕僼儖偵傛傞捠忢暅婣乣愙懕丅
if(mp3Ctl.PLAY[0].sts == 6)
{
mp3Ctl.WR.sts = 20; //嬋棴傔廔傢傝偵傛傞僷儚乕僙乕僽偺暅婣
}
}
gu08_sts_PowerSave = 0; //偙偺帪揰傪傕偭偰丄僷儚乕僙乕僽夝彍埖偄
// SDC 20050123 mp3Ctl.WR.sts = 10; //->埲壓捠忢僐僱僋僩.DYNA曽幃偵崌棳丅
//僼僅乕僇僗崌徟偵幐攕偟偰偄偨応崌偼丄僒乕儃僄儔乕張棟偵棳傟崬傓丅
#if ERR_DETECT // SDC 20041222
gu08_scc_ServoError = 1; // 僄儔乕専弌嵞奐
DrvDSP_CheckError_SetTimerSUBQ_Start( );
#endif
}
break;
}
return;
}
*/
// =-------------------------------------------------------
// 彂崬惂屼丒巕儖乕僠儞
// =-------------------------------------------------------
/*
#if ROM // SDC 20050205
void MP3Ctrl_WriteProc_finish(void)
{
// 巜掕嬋傪嵟屻傑偱棴傔崬傫偩丅
// Write掆巭偺捠抦
mp3Ctl.WR.info = 0x81;
mp3Ctl.WR.sts = 20; // 掆巭拞傊
}
#endif
//YTC00F 20050126
#if ROM // SDC 20050205
UINT08 MP3Ctrl_WriteProc_WqokSkip(UINT08 u08_SkipSectors)
#else
void MP3Ctrl_WriteProc_WqokSkip( UINT08 u08_SkipSectors )
#endif
{
mp3Ctl.WR.wqok += u08_SkipSectors; //
if( mp3Ctl.WR.wqok > mp3Ctl.WR.end_sector )
{ //SKIP偟偨傜丄偦偺嬋偺廔傢傝傪墇偊偨丅棴傔崬傒廔椆埖偄丅
mp3Ctl.WR.info = 0x01; // 1sect WR偟偨偙偲偵丅
#if ROM // SDC 20050205
MP3Ctrl_WriteProc_finish();
return(1);
#else
MP3Ctrl_Write_Stop();
#endif
}
gu32_val_TargetFrame = mp3Ctl.WR.wqok ; //
gu08_GotoMsfSC =1; //
#if ROM // SDC 20050205
return(0);
#endif
}
*/
//YTC002 20041226 softmute
// ODEN偑撉傒弌偟奐巒傪庴偗庢偭偰偐傜DAC儈儏乕僩奐偔 //YTC 悢mS偺偙偲側偺偱僜僼僩儈儏乕僩偵塭嬁偟側偝偘丅
// =-------------------------------------------------------
// 俵俹俁嵞惗惂屼丒僜僼僩儈儏乕僩夝彍
// =-------------------------------------------------------
/*
void MP3Ctrl_ctrl_mute()
{
if(gu08_scc_MP3muteOn != 0) //僜僼僩儈儏乕僩僆儞梫媮棃偰偄傞
{
if(gu08_timer_mp3mute==0)
{
DrvDSP_BIOS_WriteRegMP3( 0x01, 0x02 ); //READ STOP
gu08_scc_MP3muteOn = 0;
DrvDSP_BIOS_AMute_On();
}
}
}
*/
// YTC002 20041226
// =-------------------------------------------------------
// MP3Ctrl_SoftmuteOn
// =-------------------------------------------------------
/*
void MP3Ctrl_SoftmuteOn()
{
gu08_sts_decodeMP3 = 0; //decode幚峴拞僼儔僌僆僼
DrvDSP_BIOS_DACMute_On( ); //DSP.E310 softmute start
gu08_timer_mp3mute = (24/2); //僞僀儅乕僙僢僩
gu08_scc_MP3muteOn = 1; //
}
*/
//#if ID3TAG // SDC 20050202
//#if DEBUG
//UINT32 lbnhani[2][2], lbnbuff[2][5];
//#endif
// =-------------------------------------------------------
// 嬋嵞惗惂屼
// =-------------------------------------------------------
/*
void MP3Ctrl_ID3_cehckLBN( struct _mp3play *play )
{
//CNVL adr;
//UINT08 i;
#if DEBUG
lbnhani[(play->flgs>>1)&0x01][0] = mp3Ctl.WR.begin_sector;
lbnhani[(play->flgs>>1)&0x01][1] = mp3Ctl.WR.end_sector;
#endif
for( gu08_i = 0; ( mp3Ctl.WR.begin_sector + gu08_i ) <= mp3Ctl.WR.end_sector; gu08_i++ )
{
// gu32Work.l = getDramLBN( gu08_i );
if( gu32Work.b.hh != 0xff )
gu32Work.l += 150L;
#if DEBUG
lbnbuff[(play->flgs>>1)&0x01][gu08_i] = gu32Work.l;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -