📄 drv_mp3.c
字号:
/******************************************************************************/
/* [NAME] :Drv_MP3.c */
/* [OUTLINE]: */
/* [HISTORY]: */
/* [NOTE] :TAB=4 */
/******************************************************************************/
//#include <machine.h> /* Z80梡 */
#include "BU18703.h" /* CPU儗僕僗僞掕媊 */
#include "prototype.h"
#include "extern.h"
#include "mcal.h"
#include <string.h>
/*----------------------------------------------------------------------------*/
//偙偺僼傽僀儖偺僾儘僩僞僀僾
//void Common_Wait_1mS(void); //徣ROM 偙傟偱-77僶僀僩
//void DrvMP3_ReadFAT_engin_00(void);
//void DrvMP3_ReadFAT_set_InfoArea(void); //20050106 -ROM梡嫟捠張棟
//#if ROM // SDC 20050205
//UINT08 MP3Ctrl_WriteProc_WqokSkip(UINT08); //YTC00F
//#else
//void MP3Ctrl_WriteProc_WqokSkip( UINT08 ); //YTC00F
//#endif
//#if !ROM // SDC 20050205
//SINT16 song_parts;
//UINT08 flag_flagment; // 1:偱懕偒桳傝
//UINT32 sEnd;
//#endif
//CNVL bufferLBN; // SDC 20050121 No.xx4
//UINT08 scc_crt, crt_cnt; //
/*
#if TOOLCHIP // SDC 041227
void mp3_download( void )
{
// UINT16 counter;
//UINT16 counter1;
//static UINT08 romdatah;
//static UINT08 romdatal;
//static UINT08 flash[1024];
//弨旛
//
DrvDSP_BIOS_WriteRegMP3( 0x70, 0x01 ); //MP3 debug mode in
DrvDSP_BIOS_WriteReg( 0xB2, 0x00 ); //DSP DRAM=MP3's DRAM
DrvDSP_BIOS_WriteRegMP3( 0x72, 0x00 ); //
DrvDSP_BIOS_WriteRegMP3( 0x74, 0x3f ); //
DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 ); //
DrvDSP_BIOS_WriteRegMP3( 0x74, 0x20 ); //
DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 ); //
DrvDSP_BIOS_WriteRegMP3( 0x72, 0x04 ); //
DrvDSP_BIOS_WriteRegMP3( 0x75, 0x00 ); //
DrvDSP_BIOS_WriteRegMP3( 0x74, 0xB3 ); //
DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 ); //
DrvDSP_BIOS_WriteRegMP3( 0x74, 0xC0 ); //
DrvDSP_BIOS_WriteRegMP3( 0x78, 0xFF ); //
DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 ); //
DrvDSP_BIOS_WriteRegMP3( 0x78, 0x00 ); //
DrvDSP_BIOS_WriteRegMP3( 0x71, 0x03 ); //RETpRAM
}
#endif // SDC 041227
*/ //ad
//YTC006 20050105 Mr.Fujita+Mr.Doi's Idea ROOT崬傒俋俋俋僼僅儖僟懳嶔
//Sxxx FAT夝愅張棟
//2041218 4M/16M/64M DRAM懳墳丅
/*----------------------------------------------------------------------------*/
/* [NAME] :DrvMP3_ReadFAT */
/* [FUNCTION] : */
/* [RETURN] :void */
/* [PARAMETER]:void */
/* [HISTORY] : */
/* [NOTE] : */
/*----------------------------------------------------------------------------*/
/*
void DrvMP3_ReadFAT( void )
{
#if ROM // SDC 20050204
UINT32 dram_addr_iend;
SINT16 n; //
#endif
UINT08 fat_data[32];
if(( gu08_sts_ReadFAT != 99 ) && ( gu08_scc_ServoError == 2 ))
{
SCC_BF = gu08_sts_ReadFAT;
gu08_sts_ReadFAT = 99;
}
if(gu08_sts_ReadFAT >= 2)
{ //
if(gu16_Timer_ReadTOC == 0)
{ //timeout
gu08_sts_ReadFAT = 0; //FAT_F=0偺傑傑廔椆
mp3_stop_cmds();
}
}
switch(gu08_sts_ReadFAT)
{
case 1:
//YTC009
//check ROOT DIR
//弶婜愝掕乣夝愅梫媮
gu08_scc_ServoError = 1; // 僄儔乕専弌奐巒
//YTC00H gu16_Timer_ReadTOC = CONST_TIMER_READ_FAT; //FAT夝愅偵僞僀儉傾僂僩傪丅 //20050131
gu16_Timer_ReadTOC = CONST_TIMER_READ_FAT; //FAT夝愅偵僞僀儉傾僂僩傪丅 //YTC00H 20050131
if((gu08_kind_Disc & B00000001) != 0) //CDDA桳傝
{
gu16_Timer_ReadTOC = CONST_TIMER_READ_FAT_CD; //FAT夝愅偵僞僀儉傾僂僩傪丅 //YTC00H 20050131
}
DrvDSP_BIOS_WriteRegMP3( 0x40, 0x04 ); //YFLAG_DISABLE L偱YFLAG桳岠偵丅
DrvDSP_BIOS_WriteReg( 0xE0, 0x01 ); //DAcin=MP3
DrvDSP_BIOS_WriteRegMP3( 0x38, 0x05 ); // ECC帋峴夞悢=5
DrvDSP_BIOS_WriteRegMP3( 0x60, 0x00 ); // RCTEST_off
#if ROM // SDC 20050203
Common_Wait_1mS(); //
#endif
//9 adr.ul = gl_dram_send - 0x00010000; //DRAM偺偍怟愝掕 RCSEND僶僢僼傽儊儌儕僙僋僞廔椆傾僪儗僗偺愝掕
// DrvDSP_BIOS_WriteRegMP3_32(0x44,adr); // RCSEND愝掕
//
// mp3Ctl.WR.conn_mode = 0x05; // SYNC愙懕儌乕僪慖戰
//
// MP3Ctrl_Write_SetMode( 0x02 ); // WRITE宯 @CDROM
// MP3Ctrl_Read_SetMode( 0x0A ); // READ宯 @FAT
DrvMP3_ReadFAT_set_InfoArea(); //20050106 -ROM梡嫟捠張棟
#if ROM // SDC 20050203
DrvDSP_BIOS_WriteRegMP3( 0x20, 0x01 ); //step1 偼1dir-1file偱ROOT偩偗僠僃僢僋
Common_Wait_1mS(); //嵟戝僨傿儗僋僩儕悢 99 1
DrvDSP_BIOS_WriteRegMP3( 0x21, 0x00 );
Common_Wait_1mS();
DrvDSP_BIOS_WriteRegMP3( 0x22, 0x01 );
Common_Wait_1mS(); // 嵟戝僼傽僀儖悢
DrvDSP_BIOS_WriteRegMP3( 0x23, 0x00 );
Common_Wait_1mS(); //999(ODEN忋偺嵟戝) 1
#else
DrvDSP_BIOS_WriteRegMP3_32( 0x20, 0x00010001 );
#endif
// mp3Reg.rcrmd |= 0x80; // 俽倁俢桪愭 //YTC006 20050107
mp3Reg.rcrmd &= 0x7f; // PVD桪愭 //YTC009 20050111_23:15寛掕丅
DrvDSP_BIOS_WriteRegMP3( 0x30, mp3Reg.rcrmd );
#if ROM // SDC 20050203
Common_Wait_1mS();
#endif
// VD慖戰
//YTC00620050107 TEST mp3Reg.rcrmd &= 0x7F; // PVD桪愭
// mp3Reg.rcrmd |= 0x80; // 俽倁俢桪愭 //YTC006 20050107
//
// DrvDSP_BIOS_WriteRegMP3( 0x30, mp3Reg.rcrmd ); //YTC006 -ROM嫟捠張棟傊堏摦
// Common_Wait_1mS();
DrvDSP_BIOS_WriteRegMP3( 0x32, 'M' );
#if ROM // SDC 20050203
Common_Wait_1mS(); //M
#endif
DrvDSP_BIOS_WriteRegMP3( 0x33, 'P' );
#if ROM // SDC 20050203
Common_Wait_1mS(); //P
#endif
DrvDSP_BIOS_WriteRegMP3( 0x34, '3' );
#if ROM // SDC 20050203
Common_Wait_1mS(); //3
#endif
DrvDSP_BIOS_WriteRegMP3( 0x31, 0x81 );
#if ROM // SDC 20050203
Common_Wait_1mS(); //01斣偲偟偰桳岠丅
#endif
//YTC A2F 20050304 MP1/MP2/MP3 compatible
DrvDSP_BIOS_WriteRegMP3( 0x34, '2' );
// Common_Wait_1mS(); // //僐儅儞僪FIFO僴儞僪僔僃僀僋傪怣偠傞
DrvDSP_BIOS_WriteRegMP3( 0x31, 0x82 ); //
// Common_Wait_1mS(); //02斣偲偟偰桳岠丅 //
DrvDSP_BIOS_WriteRegMP3( 0x34, '1' ); //
// Common_Wait_1mS(); // //
DrvDSP_BIOS_WriteRegMP3( 0x31, 0x83 ); //
// Common_Wait_1mS(); //03斣偲偟偰桳岠丅 //
//<<<
gu08_sccd_ReadFAT = 1; //
gu08_sts_ReadFAT = 2; //
break;
#if ROM // SDC 20050203 *********************************************
case 2:
//夝愅姰椆懸偪乣寢壥嬦枴丄杮夝愅梫媮
DrvMP3_ReadFAT_engin();
if(gu08_sccd_ReadFAT == 0)
{ //夝愅侾廔椆
get_FAT_data( 1, fat_data ); //Infomation of ROOT DIR
DrvMP3_ReadFAT_set_InfoArea(); //-ROM 20050106
if ((fat_data[30]==0) && (fat_data[31]==0))
{ //ROOT 偵偼*.MP3僼傽僀儖柍偄
DrvDSP_BIOS_WriteRegMP3( 0x20, 0x64 ); //max=100
}
else
{ //ROOT 偵傕*.MP3僼傽僀儖桳傝
DrvDSP_BIOS_WriteRegMP3( 0x20, 0x63 ); //max=99
}
Common_Wait_1mS(); //嵟戝僨傿儗僋僩儕悢 99(root偵MP3桳) | 100(root偵俵俹俁柍)
DrvDSP_BIOS_WriteRegMP3( 0x21, 0x00 );
Common_Wait_1mS();
DrvDSP_BIOS_WriteRegMP3( 0x22, 0xE7 );
Common_Wait_1mS(); // 嵟戝僼傽僀儖悢
DrvDSP_BIOS_WriteRegMP3( 0x23, 0x03 );
Common_Wait_1mS(); //999(ODEN忋偺嵟戝)
gu08_sccd_ReadFAT = 1; //夝愅梫媮
gu08_sts_ReadFAT = 3; //
}
else if(gu08_sccd_ReadFAT == 0xff)
{ //BAD
gu08_sts_ReadFAT = 0;
}
break;
case 3:
//夝愅姰椆懸偪乣寢壥嬦枴
DrvMP3_ReadFAT_engin();
if(gu08_sccd_ReadFAT == 0)
{ //夝愅2廔椆
//惓忢廔椆帪偺張棟
// 1 DRAM偐傜僨乕僞傪庢傝崬傓
// 1.1 僀儞僼僅儊乕僔儑儞僄儕傾偺偍怟傾僪儗僗傪庢摼
dram_addr_iend = DrvDSP_BIOS_ReadRegMP3_32(0xEC); // adr.ul;
gl_buff_max = ( dram_addr_iend - 1L ); //僶僢僼傽乕儊儌儕乕椞堟偺偍怟傪嶼弌
DrvDSP_BIOS_WriteRegMP3_32(0x44,gl_buff_max); // RCSEND嵞愝掕
// 2.0 FAT 僉儍僢僔儏偺弶婜壔
for ( n = 0; n < FAT_CACHE_SIZE; n++ )
{
fat_cache[n].nIndex = -1;
}
// 偣偭偐偔偩偐傜丄俥俙俿夝愅寢壥傪昞帵
get_FAT_data( 0, fat_data );
// VOLUME
gu08_sts_UDFDISC=0;
if((fat_data[19] & B10000000)!=0)
{
gu08_sts_UDFDISC=1; //nUDF偱偡丅
}
// total DIRs
stInfoArea.hexTotalFolder = ( ( UINT16 ) ( fat_data[28] ) << 8 ) + ( UINT16 ) fat_data[29];
stInfoArea.hexTotalFile.uc.hi = fat_data[17]; //nUDF懳墳
stInfoArea.hexTotalFile.uc.lo = fat_data[18]; //
fat_f = 1; //俥俙俿夝愅惓忢廔椆
gu08_sts_ReadFAT = 0;
}
else if(gu08_sccd_ReadFAT == 0xff)
{ //BAD
gu08_sts_ReadFAT = 0;
}
break;
#else //***********************************************************
#if ROM
case 2: // 夝愅姰椆懸偪乣寢壥嬦枴丄杮夝愅梫媮
case 3: // 夝愅姰椆懸偪乣寢壥嬦枴
#else
default:
#endif
DrvMP3_ReadFAT_engin();
switch( gu08_sccd_ReadFAT )
{
case 0:
if( gu08_sts_ReadFAT == 2 )
{ // 夝愅侾廔椆
get_FAT_data( 1, fat_data ); //Infomation of ROOT DIR
DrvMP3_ReadFAT_set_InfoArea(); //-ROM 20050106
gu32Work.l = 0x03E70063; // ROOT 偵傕 *.MP3 僼傽僀儖桳傝 max = 99
#if LCD_DM //[dyna-DM]
if( !( fat_data[30] | fat_data[31] ))
#else
if( !( fat_data[DIR_MP3_FILES0] | fat_data[DIR_MP3_FILES1] ))
#endif
gu32Work.b.ll = 0x64; // ROOT 偵偼 *.MP3 僼傽僀儖柍偄 max = 100
DrvDSP_BIOS_WriteRegMP3_32( 0x20, gu32Work.l ); // 嵟戝僨傿儗僋僩儕悢丄嵟戝僼傽僀儖悢愝掕
gu08_sccd_ReadFAT = 1; //夝愅梫媮
gu08_sts_ReadFAT = 3; //
}else
{ // 夝愅俀廔椆
//惓忢廔椆帪偺張棟
// 1 DRAM偐傜僨乕僞傪庢傝崬傓
// 1.1 僀儞僼僅儊乕僔儑儞僄儕傾偺偍怟傾僪儗僗傪庢摼
gl_buff_max = DrvDSP_BIOS_ReadRegMP3_32( 0xEC );
DrvDSP_BIOS_WriteRegMP3_32( 0x44, --gl_buff_max ); // RCSEND嵞愝掕
#if !ROM // SDC 20050205
// SEND 寁嶼
sEnd = gl_buff_max / 1182L; // gl_buff_max 偺抣偑寛傑偭偨帪偵寁嶼偡傞
sEnd *= 1182L;
#endif
#if ROM // SDC 20050205
// 2.0 FAT 僉儍僢僔儏偺弶婜壔
for ( n = 0; n < FAT_CACHE_SIZE; n++ )
{
fat_cache[n].nIndex = -1;
}
#endif
// 偣偭偐偔偩偐傜丄俥俙俿夝愅寢壥傪昞帵
get_FAT_data( 0, fat_data );
// VOLUME
#if LCD_DM //[dyna-DM]
gu08_sts_UDFDISC = fat_data[19] & B10000000;
#else
gu08_sts_UDFDISC = fat_data[DISC_FRAGMENT_FRAG] & B10000000;
#endif
// total DIRs
#if LCD_DM //[dyna-DM]
stInfoArea.hexTotalFolder = ( ( UINT16 ) ( fat_data[28] ) << 8 ) + ( UINT16 ) fat_data[29];
stInfoArea.hexTotalFile.uc.hi = fat_data[17]; //nUDF懳墳
stInfoArea.hexTotalFile.uc.lo = fat_data[18]; //
#else
stInfoArea.hexTotalFolder = ( ( UINT16 ) ( fat_data[DISC_DIR_NUMBER0] ) << 8 ) +
( UINT16 ) fat_data[DISC_DIR_NUMBER1];
stInfoArea.hexTotalFile.uc.hi = fat_data[DISC_DEFRAGMENT_FILES0]; //nUDF懳墳
stInfoArea.hexTotalFile.uc.lo = fat_data[DISC_DEFRAGMENT_FILES1]; //
#endif
fat_f = 1; //俥俙俿夝愅惓忢廔椆
gu08_sts_ReadFAT = 0;
}
break;
case 0xff: // BAD
gu08_sts_ReadFAT = 0;
}
break;
#endif //***********************************************************
case 99: // 僄儔乕儕僇僶儕乕姰椆懸偪
if( gu08_scc_ServoError == 0 )
{ // 儕僇僶儕乕張棟廔椆
if(gu08_sts_Error==0)
{
gu08_scc_ServoError = 1; // 僄儔乕専弌梫媮
gu08_sts_ReadFAT = SCC_BF; // 尦偺忬懺傊
}
else
{ //暅婣晄擻
gu08_sts_ReadFAT = 0;
//YTC008 20050110 屇傃弌偟懁偱傕摨條偺張棟偟偰偄傞丅
//YTC008 stInfoArea.Command[CMD_READ_FAT][CMD_RESPONSE] = CMD_RES_COMPLETE;
//YTC008 CDCtrl_ExecCommand[CMD_READ_FAT] = CDCtrl_Nop;
//YTC008 gu08_kind_Disc = NO_DISC; // 僨傿僗僋柍偟
}
}
break;
}
}
*/
/*----------------------------------------------------------------------------*/
/* [NAME] :DrvMP3_ReadFAT_engin */
/* [FUNCTION] : */
/* [RETURN] :void */
/* [PARAMETER]:void */
/* [HISTORY] : */
/* [NOTE] : */
/*----------------------------------------------------------------------------*/
/*
void DrvMP3_ReadFAT_engin()
{
static SINT16 total_try;
#if ROM // SDC 20050203
static SINT32 last_atime;
UINT08 tmp_fc1;
#endif
// CNVL atime;
switch(gu08_sccd_ReadFAT)
{
case 1:
// WRITE摦嶌愝掕
// mp3Ctl.WR.begin_sector = gl_track_begin + 10L; //巄掕(+16L偱張棟偟偨偄丄梫専徹)
mp3Ctl.WR.begin_sector = gl_track_begin + 6L; //巄掕(+16L偱張棟偟偨偄丄梫専徹)
mp3Ctl.WR.end_sector = 0;
mp3Ctl.WR.nSect = 32; // 32僙僋僞偩偗WRITE 偡傞
mp3Ctl.WR.threshold = 0x3FFFFF; //YTC002
// READ摦嶌愝掕
total_try = 0;
MP3Ctrl_Write_Start( ); // MP3Ctrl_WriteProc()奐巒
gu08_sccd_ReadFAT = 2;
break;
case 2: // 棴傔崬傒拞
// WRITE掆巭偺妋擣
if( MP3Ctrl_Write_GetStatus( ) == 0x81 )
{ // WRITE 掆巭偟偨
DrvDSP_BIOS_WriteRegMP3( 0x01, 0x80 | mp3Ctl.RD.mode ); //READ start without AMUTE
gu08_sccd_ReadFAT = 3;
}
break;
case 3:
#if ROM // SDC 20050203
if( !gu08_sts_Subq_valid ) //柍偄偲僟儊偩偭偨
{
break;
}
// READ掆巭偺妋擣
if( !( DrvDSP_BIOS_ReadRegMP3( 0xC2 ) & 0x20 ) )
#else
if( !( DrvDSP_BIOS_ReadRegMP3( 0xC2 ) & 0x20 ) && gu08_sts_Subq_valid )
#endif
{ //俥俙俿夝愅姰椆偭丅
Common_Wait_1mS();
#if ROM // SDC 20050203
tmp_fc1 = DrvDSP_BIOS_ReadRegMP3( 0xC1 );
switch ( tmp_fc1 & 0xBF )
#else
switch( DrvDSP_BIOS_ReadRegMP3( 0xC1 ) & 0xBF )
#endif
{
case 0x80: // 惓忢廔椆
#if ROM // SDC 20050203 儅僗僋偟偰傞
case 0xC0: // 惓忢廔椆乮僄儔乕偁傝乯
#endif
//惓忢廔椆偺昞帵
MP3Ctrl_Write_Reset( ); // WRITE 僋儕傾
gu08_sccd_ReadFAT = 0;
break;
case 0xA0: // DR媡弴
// Nero懳墳 // Next LBN傪撉傓
#if ROM // SDC 20050203
last_atime = DrvDSP_BIOS_ReadRegMP3_32(0xF0) + 150L - 6L; //Sxxx僗僩儕乕儉戝僘儗懳嶔
mp3Ctl.WR.wqok = last_atime;
#else
mp3Ctl.WR.wqok = DrvDSP_BIOS_ReadRegMP3_32( 0xF0 ) + 150L - 6L;
#endif
DrvMP3_ReadFAT_engin_00();
// mp3Ctl.WR.nSect = 32;
// MP3Ctrl_Write_Restart( );
// gu08_sccd_ReadFAT = 2; //->loop
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -