📄 initial.c
字号:
//StatusInfo.bDiscNumber=1; //--CoCo1.21, remove it because no one use it.
// ** TCH0.38; begin...
if ( __wDiscType & BOOK_DVD )
StatusInfo.bPBCMode= __bNVPlayMode;
else
StatusInfo.bPBCMode= __btPBC; //PBC on/off
// ** TCH0.38; end...
if (__wDiscType&BOOK_VCD)
StatusInfo.wTotalTracks=__wTrackEnd-1; //total tracks
else
StatusInfo.wTotalTracks=__wTrackEnd; //total tracks
{
/* --CoCo1.21, remove it because no one use it.
BYTE bMin,bSec;
__dwTemp= UTL_SectorstoMSF ( __dwTimeDiscEnd- __dwTimeDiscBegin );
bMin= MSF_MINUTE ( __dwTemp );
bSec= MSF_SECOND ( __dwTemp );
StatusInfo.wTotalTime=MAKEWORD(bSec,bMin); //total time(bMM:bSEC)
*/
}
StatusInfo.bSetProgram=FALSE; //program on/off
//StatusInfo.bProgram=__btProgram; //program on/off //--CoCo1.21, remove it because no one use it.
//StatusInfo.bAudioChannel=__bModeChannel; //audio channel status //--CoCo1.21, remove it.
StatusInfo.bPlayingMode=MSG_STOP; //playing mode
//StatusInfo.bMute=__btMute; //mute status //--CoCo1.21, remove it because no one use it.
//StatusInfo.bKaraokeLevel=(2*NORMALKEY_OFFSET)+1; //--CoCo1.21, remove it because no one use it.
//StatusInfo.bRepeat=__bRepeat; //repeat track/disc/all disc/off //--CoCo1.21, remove it because no one use it.
//StatusInfo.bRepeatAB=__bRepeatAB; //repeat AtoB(on/off) //--CoCo1.21, remove it because no one use it.
//StatusInfo.bRandom=__btRandom; //random on/off //--CoCo1.21, remove it because no one use it.
// DVD_102pMicky, remove __bTVMode, replace with SetupInfo.bTVSystem
StatusInfo.bTVMODE=__SetupInfo.bTVSystem;
StatusInfo.bOsdDisplay=__bDisplay; //osd display on/off
//alex1.23,20040218 combine gototime, search,bookmark, remove gcShowStatus.bSetTime in _INITIAL_gcShowStatus function
//StatusInfo.bSetTime=__btGoToTime;
StatusInfo.bStill=FALSE;
StatusInfo.wCurrentTime=NULL;
//StatusInfo.bOpen= __btDriveOpen; //--CoCo1.21, remove it because no one use it.
StatusInfo.wCurrentTrack=0;
// LLY.104, keep vocal mode: ON/ OFF/ LL/ RR.
// ** TCH1.54; Remove it as don't use it. StatusInfo.bVocal=__bVocal;
StatusInfo.bPowerDown=__btPowerDown;
// LLY.022
//StatusInfo.bMP3Mode=FALSE; //--CoCo1.21, remove it because no one use it.
// LLY.036
StatusInfo.bSetSearch=__bSearchMode; // search mode on/off
StatusInfo.bSearch=FALSE;
//DVD018, volume bar error
/* --CoCo1.21, remove it
StatusInfo.bVolume=(BYTE)(__wVolAudio/VOLUME_GAP);
if ( __wVolAudio % VOLUME_GAP)
StatusInfo.bVolume++;
*/
/*--CoCo1.21, remove it
StatusInfo.bVolumeLevel=(VOLUME_MAX-VOLUME_MIN)/VOLUME_GAP;
if ((VOLUME_MAX-VOLUME_MIN)%VOLUME_GAP)
StatusInfo.bVolumeLevel++;
// LLY.277a, let it same as the max volume control bar NO if it larger than it
if(StatusInfo.bVolumeLevel>MAX_VOLCTL_BAR)
StatusInfo.bVolumeLevel=MAX_VOLCTL_BAR;
StatusInfo.bKey= __cKeyShift+NORMALKEY_OFFSET;
*/
//StatusInfo.bEcho=__bEchoLevel; //--CoCo1.21, remove it because no one use it.
//StatusInfo.bEchoLevel=ECHO_LEVEL; //--CoCo1.21, remove it because no one use it.
//StatusInfo.bSurround=__bSurround; //--CoCo1.21, remove it because no one use it.
__bpDataPointer=(BYTE *)(&StatusInfo);
// LLY.172q, it's only "TRUE" or "FALSE" flag to communicate with OSD/ PANEL mode (ARM error)
//OSD_Output ( MSG_STOPWAIT, (WORD)&StatusInfo, 0 );
OSD_Output ( MSG_STOPWAIT, TRUE, 0 );
if (bFlag)
//PANEL_Output ( MSG_STOPWAIT, (WORD)&StatusInfo);
PANEL_Output ( MSG_STOPWAIT, TRUE);
}
// *********************************************************************
// Function : _CheckUpgradeCD
// Description : Check if the CD contains the file "dvdfull.bin". If so and file size correct, proceed to Flash mode (Will call W99AV_WriteFlash).
// Arguments : None
// Return : FLASH_FAIL_NO_ERROR : No Error detected
// FLASH_FAIL_NO_DISC : No disc found
// FLASH_FAIL_INVALID_DISC : Can't find "dvdfull.bin" in disc
// FLASH_FAIL_USER_ABORT : User choose to abort to upgrade
// FLASH_FAIL_PASSWORD : The password user input is incorrect
// Side Effect :
// *********************************************************************
// Chuan 172 2002/02/22: This function have major change. Now Don't use include method
BYTE _CheckUpgradeCD(void)
{
#ifdef SUPPORT_AUTO_UPGRADE
//#define DUMP_INFO
// DWORD __dwFileLoc, __dwFileLen; Chuan 278 2002/10/09: Use __dwTimeBegin and __dwTimeEnd instead
// BYTE __bFailStage = FLASH_FAIL_NO_ERROR; Chuan 278 2002/10/08: Use _bINITIALTemp instead.
BYTE *pbBuf; // Chuan 172r2 2002/04/03: Store the file name
extern BYTE _bCDROMDecodingMode ;
extern BYTE DATA _bIdex;
// malloc ENTRY_MAX_LEN+1 size to store the file name
pbBuf = __bPool+ __wPoolOffset;
__wPoolOffset+=(WORD)(ENTRY_MAX_LEN+1);
// Chuan 273, The same as MP3 Module.
// when specify Initial code bank,
// other bank modules can't access the codes.
// so, put in variable array
pbBuf[0]='\0';
// ** TCH1.73; begin... Fix the potential problem: ROOT has many files. <ex> one MP3 title has 182 songs.
/// if (!CD_ParserDirectory ((char*)pbBuf, NULL)) // ** TCH1.73;
//alex2.31,use CT_strcpy to replace strcpy to reduce code size
CT_strcpy ( pbBuf+ 2, "BIN" );
if (!CD_ParserDirectory ((char*)pbBuf, (char*)(pbBuf+2) )) // ** TCH1.73;
// ** TCH1.73; end...
{
_bINITIALTemp = FLASH_FAIL_OTHER_DISC ;
goto EXIT ;
}
#ifdef CHECKSUM_CHECK
// Chuan0.87-2th, Get CheckSUM Value
_bIdex = 0;
while (1)
{
if ( CD_GetEntrybyIndex (_bIdex++, pbBuf ) == FILE_FLAG_NONE )
{
#ifdef SUPPORT_PRINTF
printf ("Not found !\n") ;
#endif
_bINITIALTemp = FLASH_FAIL_OTHER_DISC ;
goto EXIT ;
}
pbBuf[0x0c]=0 ;
//alex2.31, use CT_strcmp to replace strcmy to reduce code size
//if (!CT_strcmp(pbBuf, "CHECKSUM.BIN"))
if (!CT_strcmp(pbBuf, CT_strcpy(__bMsgString,"CHECKSUM.BIN"))) //LJY2.32
//if (!strcmp(pbBuf,"CHECKSUM.BIN"))
{
// Chuan 172 2002/02/22: Find FLASH.BIN and then get location and length
CD_GetEntryInfo ( ENTRY_INFO_LOCATION, & __dwTimeBegin );
CD_GetEntryInfo ( ENTRY_INFO_DATALENGTH, & __dwTimeEnd ); // Chuan 278 2002/10/21: Keep the size of Flash.bin
break ;
}
}
__dwSectorCDROMBegin=__dwSectorCDROMEnd=NULL; // Chuan 172r 2002/03/29: Must do cdrom decoding.
if (!UTL_ReadSectors (__dwTimeBegin, (BYTE)__dwTimeEnd, _bCDROMDecodingMode))
{
_bINITIALTemp = FLASH_FAIL_CDROMDECODE;
goto ERROR;
}
W99AV_ReadDRAMData((ECCBASE_REALCDROM+((__wDiscType & CDROM_XA)?CDXA_START:CDROM_START)/4+4),&_dwINITIALTemp); // Chuan0.87, _dwINITIALTemp keep the checksum value
#endif
// Chuan 172 2002/02/22: Try to find FLASH.BIN
_bIdex = 0;
while (1)
{
if ( CD_GetEntrybyIndex (_bIdex++, pbBuf ) == FILE_FLAG_NONE )
{
#ifdef SUPPORT_PRINTF
printf ("Not found !\n") ;
#endif
_bINITIALTemp = FLASH_FAIL_OTHER_DISC ;
goto EXIT ;
}
pbBuf [0x9] = 0 ;
//alex1.25 20040419, if USE CTMAN to combine, the write flash procedure change as CTMAN.BIN
//---------------------------------------------------------------------//
#ifdef SUPPORT_DVD_T
//alex2.31, use CT_strcmp to replace strcmy to reduce code size
// if ( ! CT_strcmp ( pbBuf, "CTMAN.BIN") )
if (!CT_strcmp(pbBuf, CT_strcpy(__bMsgString,"CTMAN.BIN"))) //LJY2.32
#else //#ifdef SUPPORT_DVD_T
//alex2.31, use CT_strcmp to replace strcmy to reduce code size
// if ( ! CT_strcmp ( pbBuf, "FLASH.BIN") )
if (!CT_strcmp(pbBuf, CT_strcpy(__bMsgString,"FLASH.BIN"))) //LJY2.32
#endif //#ifdef SUPPORT_DVD_T
//---------------------------------------------------------------------//
{
// Chuan 172 2002/02/22: Find FLASH.BIN and then get location and length
CD_GetEntryInfo ( ENTRY_INFO_LOCATION, & __dwTimeBegin );
CD_GetEntryInfo ( ENTRY_INFO_DATALENGTH, & __dwTimeEnd ); // Chuan 278 2002/10/21: Keep the size of Flash.bin
break ;
}
}
// Chuan 172 2002/02/22: Set border color and disable frame.
OSD_OUTPUT_MACRO ( MSG_STOPWAIT, FALSE, 0 );
HAL_SetBorderColor(HAL_COLOR_BLACK);
HAL_Display(HAL_DISPLAY_VIDEO, FALSE);
OSD_OUTPUT_MACRO(MSG_OSDAPP, OSD_APPMODE_AUTOUPGRADE, 0xFF); // Chuan 172r 2002/03/15: Now prepare OSD information.
// Chuan 172 2002/02/22: Show prepare message
OSD_OUTPUT_MACRO(MSG_AUTOUPGRADE,AUTOUPGRADE_PREPARE,0xff);
__dwSectorCDROMBegin=__dwSectorCDROMEnd=NULL; // Chuan 172r 2002/03/29: Must do cdrom decoding.
if (!UTL_ReadSectors (__dwTimeBegin, (BYTE)__dwTimeEnd + 1, _bCDROMDecodingMode))
{
_bINITIALTemp = FLASH_FAIL_CDROMDECODE;
goto ERROR;
}
// Chuan 172r 2002/03/15: Move DRAM(0x4800) to DRAM(0x65000)
// Chuan 277 2002/09/11: Use DRAM COPY API.
__dwW99AV_SrcDRAM = __dwW99AVECCBASE;
__dwW99AV_DestDRAM = W99AV_FLASH_DRAMADDR; // Chuan0.86, Rename the Name
W99AV_DRAMCopy(__dwTimeEnd*588);
//alex1.23,20040218,donwload flash.bin from dram (only for debug)
/**********************************************************************/
#ifdef SUPPORT_CHECKSUM_DOWNLOAD
//_CC_DumpDRAM(char* strFile, DWORD dwStart, DWORD dwEnd); // LLY.046OSD
_CC_DumpDRAM("flash.cm2", __dwW99AV_SrcDRAM,__dwW99AV_SrcDRAM+__dwTimeEnd*588);
_CC_DumpDRAM("flash.cm1", __dwW99AV_DestDRAM,__dwW99AV_DestDRAM+__dwTimeEnd*588);
#endif //#define SUPPORT_DOWNLOAD_WINDVD_FOR_AUTOUPGRADE
/**********************************************************************/
// Chuan 172 2002/02/22: Try to find DVDFULL.BIN or LOGO.BIN
_bIdex = 0;
while (1)
{
if ( CD_GetEntrybyIndex (_bIdex++, pbBuf ) == FILE_FLAG_NONE )
{
#ifdef SUPPORT_PRINTF
printf ("Not found !\n") ;
#endif
_bINITIALTemp = FLASH_FAIL_INVALID_DISC ;
goto ERROR ;
}
// Specify the desired binary code filename
// Notice: must set the correspond index by "end of string" flag
pbBuf [0xa] = 0 ;
//alex2.31, use CT_strcmp to replace strcmy to reduce code size
// if ( ! CT_strcmp ( pbBuf, "DVD908.BIN") ) // Chuan0.87b-2th, Rename.
if (!CT_strcmp(pbBuf, CT_strcpy(__bMsgString,"DVD908.BIN"))) //LJY2.32
{
_bINITIALTemp = FLASH_AUTO_UPGRADE ;
break ;
}
}
// Chuan 172 2002/02/22: Find FLASH.BIN and then get location and length
CD_GetEntryInfo ( ENTRY_INFO_LOCATION, & __dwTimeBegin );
CD_GetEntryInfo ( ENTRY_INFO_DATALENGTH, & __dwTimeEnd );
if (_bINITIALTemp == FLASH_AUTO_UPGRADE)
{
// Alex1.25 , add 16M flash for CTMAN,
//---------------------------------------------------------------//
// 4M -> 0x100 , 8M -> 0x200 , 16M -> 0x400
// if ((__dwTimeEnd != 0x100)&&(__dwTimeEnd != 0x200) )
if ((__dwTimeEnd != 0x100)&&(__dwTimeEnd != 0x200) &&(__dwTimeEnd != 0x400) )
//---------------------------------------------------------------//
{
_bINITIALTemp = FLASH_FAIL_INVALID_DISC ;
goto ERROR ;
}
}
#ifdef AUTO_UPGRADE_CONFIRM
// Chuan 172 2002/02/22: Show confirm message
OSD_OUTPUT_MACRO(MSG_AUTOUPGRADE,AUTOUPGRADE_CHECK,0xff);
#ifdef SYSTEM_8051
while (1)
{
// Chuan 277 2002/09/09: update the progress count for system hang control
__dwProgressCount = __dwCountSystem;
if (__bISRKey == KEY_N2)
{
_bINITIALTemp = FLASH_FAIL_USER_ABORT ;
// Chuan 172 2002/02/22: Show abort message
OSD_OUTPUT_MACRO(MSG_AUTOUPGRADE,AUTOUPGRADE_ABORT,0xff);
goto ERROR ;
}
else if (__bISRKey == KEY_N1)
break ;
}
#else //#ifdef SYSTEM_8051
printf ("Ready to burn ? 1=yes/others=no\n") ;
_bIdex = getche () ;
if (_bIdex != '1')
{
_bINITIALTemp = FLASH_FAIL_USER_ABORT ;
OSD_OUTPUT_MACRO(MSG_AUTOUPGRADE,AUTOUPGRADE_ABORT,0xff);
goto ERROR ;
}
#endif //#ifdef SYSTEM_8051
#endif //#ifdef USER_OPERATION
GDI_FILL_RECT(135, 280, 510, 310, OSDND_PALETTE_ENTRY_BACKGROUND);
__dwW99AV_SrcDRAM = __dwW99AVECCBASE;
//alex2.30-2,20040701,use bigger Region
for(_bIdex=0;_bIdex<(__dwTimeEnd/0x10);_bIdex++)
{
#ifdef NO_RISC_DRAMCOPY
// Chuan 278 2002/10/21: 5 sec w/RISC command, 70 sec w/o RISC command. So need update the progress count for system hang control when w/o RISC command
__dwProgressCount = __dwCountSystem;
#endif
if (!UTL_ReadSectors (__dwTimeBegin+16*_bIdex, 16, _bCDROMDecodingMode)) // CDROM_DECODE_SECTOR_AMOUNT sector once.
{
_bINITIALTemp = FLASH_FAIL_CDROMDECODE;
goto ERROR;
}
//Alex1.25,20040408,change the legnth 80-> 35 for 16M
GDI_FILL_RECT( 230, 285, 6*(_bIdex)+230, 305, OSDND_PALETTE_ENTRY_BOTTOM_STRING);
__dwW99AV_DestDRAM = W99AV_UPGRADE_DRAMADDR+9408L*_bIdex;
W99AV_DRAMCopy(9408L); // 588*128
//Alex1.23,20040218,fix checksum error
//only show one time , mark second tims
//GDI_FILL_RECT((80*_bIdex*(3-__bTemp)+220), 285, (80*_bIdex*(3-__bTemp)+260), 305, OSDND_PALETTE_ENTRY_BOTTOM_STRING);
//GDI_FILL_RECT((80*_bIdex+220), 285, (80*_bIdex+260), 305, OSDND_PALETTE_ENTRY_BOTTOM_STRING);
}
#ifdef CHECKSUM_CHECK
// Chuan0.87-2th Start CheckSUM Verify.
OSD_OUTPUT_MACRO(MSG_AUTOUPGRADE,AUTOUPGRADE_CHECKSUM,0xff);
//__dwTimeNow = W99AV_CheckSum((WORD)__dwTimeEnd); // LJY1.21, Chuan1.11, pass # of sectors into function
//alex1.24a,add parameter to compare , if not the same, use single read checksum.
__dwTimeNow = W99AV_CheckSum((WORD)__dwTimeEnd,(WORD)_dwINITIALTemp);
GDI_SetTextColor(TEXT_FG_COLOR, OSDND_PALETTE_ENTRY_BOTTOM_STRING);
GDI_OUTPUT_NUMBERHEX(350, 280, (WORD)__dwTimeNow); // Chuan1.00-2, Display Hex Number
GDI_SetTextColor(TEXT_FG_COLOR, OSDND_PALETTE_ENTRY_UPPER_RIGHT_STRING);
#if defined( SUPPORT_PRINTF) || defined(SERIAL_DEBUG)
printf("\nCHECKSUM = [%x -> %x]",(WORD)_dwINITIALTemp,(WORD)__dwTimeNow);
#endif
if((_dwINITIALTemp&0x0ffff)!=(__dwTimeNow&0x0ffff))
{
_bINITIALTemp = FLASH_FAIL_CHECKSUM;
goto ERROR;
}
#endif
SERVO_OpenTray () ;
UTL_DelayTime((WORD)COUNT_5_SEC, FALSE); // Chuan0.8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -