mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
バナーリード時のバナーチェックをTWLバナーに対応させる。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@605 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
14dadacc65
commit
0720894cba
@ -27,7 +27,7 @@ typedef struct BannerCheckParam {
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
// function's prototype-------------------------------------------------------
|
||||
static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner );
|
||||
static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner );
|
||||
|
||||
// global variable-------------------------------------------------------------
|
||||
// static variable-------------------------------------------------------------
|
||||
@ -43,8 +43,20 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner );
|
||||
// カードバナーリード(※NTR-IPL2仕様)
|
||||
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
|
||||
{
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
// ※スロットAからのリードなら問題ないが、スロットBからは直接読めないので
|
||||
#pragma unused(bannerOffset)
|
||||
BOOL isRead;
|
||||
if( SYSMi_GetWork()->flags.common.isValidCardBanner ) {
|
||||
DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 );
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) );
|
||||
}
|
||||
isRead = SYSMi_CheckBannerFile( pBanner );
|
||||
|
||||
if( !isRead ) {
|
||||
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
|
||||
}
|
||||
return isRead;
|
||||
/*
|
||||
// ※カードライブラリでは、スロットAからのリードなら問題ないが、スロットBからは読めないのでとりあえず使わない
|
||||
BOOL isRead;
|
||||
u16 id = (u16)OS_GetLockID();
|
||||
|
||||
@ -55,25 +67,18 @@ BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
|
||||
CARD_UnlockRom( id );
|
||||
OS_ReleaseLockID( id );
|
||||
|
||||
isRead = SYSMi_CheckBannerFile( (NTRBannerFile *)pBanner );
|
||||
isRead = SYSMi_CheckBannerFile( (TWLBannerFile *)pBanner );
|
||||
|
||||
if( !isRead ) {
|
||||
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
|
||||
}
|
||||
return isRead;
|
||||
#else
|
||||
#pragma unused(bannerOffset)
|
||||
if( SYSMi_GetWork()->flags.common.isValidCardBanner ) {
|
||||
DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 );
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) );
|
||||
}
|
||||
return (BOOL)SYSMi_GetWork()->flags.common.isValidCardBanner;
|
||||
#endif
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
// バナーデータの正誤チェック
|
||||
static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner )
|
||||
static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner )
|
||||
{
|
||||
int i;
|
||||
BOOL retval = TRUE;
|
||||
@ -82,6 +87,7 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner )
|
||||
BannerCheckParam bannerCheckList[ BANNER_VER_NTR_MAX ];
|
||||
BannerCheckParam *pChk = &bannerCheckList[ 0 ];
|
||||
|
||||
// NTR互換部分は標準でチェック
|
||||
bannerCheckList[ 0 ].pSrc = (u8 *)&( pBanner->v1 );
|
||||
bannerCheckList[ 0 ].size = sizeof( BannerFileV1 );
|
||||
bannerCheckList[ 1 ].pSrc = (u8 *)&( pBanner->v2 );
|
||||
@ -102,6 +108,12 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner )
|
||||
pChk++;
|
||||
}
|
||||
|
||||
// TWLバナーなら、バナーアニメ部もチェック
|
||||
if( pBanner->h.platform == BANNER_PLATFORM_TWL ) {
|
||||
if( pBanner->h.crc16_anime != SVC_GetCRC16( 0xffff, &pBanner->anime, sizeof(BannerAnime) ) ) {
|
||||
retval = FALSE;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
@ -58,6 +58,10 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
||||
{
|
||||
BOOL retval = FALSE;
|
||||
|
||||
// [TODO:] ROMヘッダの platform_code がNTR,TWL-HYB,TWL-LTD以外のもの
|
||||
// region_codeが本体情報と違うもの
|
||||
// の場合は、正常に認識できないタイトルであることを示す。
|
||||
|
||||
if( SYSMi_GetWork()->flags.common.isCardStateChanged ) {
|
||||
|
||||
MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) );
|
||||
@ -66,9 +70,16 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
||||
if( SYSM_IsExistCard() ) {
|
||||
u16 id = (u16)OS_GetLockID();
|
||||
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
|
||||
|
||||
// ROMヘッダのリード
|
||||
DC_InvalidateRange( (void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE ); // キャッシュケア
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BAK, (void *)SYSM_CARD_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE ); // ROMヘッダコピー
|
||||
SYSMi_GetWork()->cardHeaderCrc16 = SYSMi_GetWork()->cardHeaderCrc16; // ROMヘッダCRCコピー
|
||||
|
||||
// バナーデータのリード
|
||||
SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ CARD_BANNER_INDEX ] );
|
||||
pTitleList_Card->pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
|
||||
|
||||
SYSMi_GetWork()->flags.common.isCardStateChanged = FALSE; // カード情報更新フラグを落とす
|
||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
|
||||
OS_ReleaseLockID( id );
|
||||
@ -77,14 +88,6 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
||||
pTitleList_Card->flags.isAppLoadCompleted = TRUE;
|
||||
pTitleList_Card->flags.isAppRelocate = TRUE;
|
||||
pTitleList_Card->pBanner = NULL;
|
||||
|
||||
// バナーデータのリード
|
||||
if( SYSM_GetCardRomHeader()->banner_offset &&
|
||||
SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ CARD_BANNER_INDEX ] ) ) {
|
||||
pTitleList_Card->pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
|
||||
}else {
|
||||
MI_CpuClearFast( &s_bannerBuf[ CARD_BANNER_INDEX ], sizeof(TWLBannerFile) );
|
||||
}
|
||||
}
|
||||
|
||||
retval = TRUE;
|
||||
@ -179,6 +182,7 @@ static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst )
|
||||
// ファイルパスを取得
|
||||
if(readLen != NAM_OK){
|
||||
OS_TPrintf("NAM_GetTitleBootContentPath failed %lld,%d\n", titleID, readLen );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ファイルオープン
|
||||
@ -589,7 +593,7 @@ AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle )
|
||||
}
|
||||
|
||||
// ※ROMヘッダ認証
|
||||
|
||||
// [TODO:] NANDアプリの場合、pBootTitle->titleIDとROMヘッダのtitleIDの一致確認を必ずする。
|
||||
|
||||
// マウント情報の登録
|
||||
SYSMi_SetBootAppMountInfo( pBootTitle );
|
||||
|
||||
@ -422,7 +422,9 @@ int TP_CalibrationMain( void )
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// TWL設定データファイルへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)LCFG_WriteTWLSettings();
|
||||
if( !LCFG_WriteTWLSettings() ) {
|
||||
OS_TPrintf( "TWL settings write failed.\n" );
|
||||
}
|
||||
|
||||
ReturnMenu();
|
||||
return 0;
|
||||
|
||||
@ -323,7 +323,9 @@ int SelectCountryMain( void )
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// TWL設定データファイルへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)LCFG_WriteTWLSettings();
|
||||
if( !LCFG_WriteTWLSettings() ) {
|
||||
OS_TPrintf( "TWL settings write failed.\n" );
|
||||
}
|
||||
|
||||
MachineSettingInit();
|
||||
return 0;
|
||||
|
||||
@ -181,7 +181,9 @@ int SelectLanguageMain( void )
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// TWL設定データファイルへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)LCFG_WriteTWLSettings();
|
||||
if( !LCFG_WriteTWLSettings() ) {
|
||||
OS_TPrintf( "TWL settings write failed.\n" );
|
||||
}
|
||||
|
||||
MachineSettingInit();
|
||||
return 0;
|
||||
|
||||
@ -432,7 +432,9 @@ static void PushKeys( u16 code, NameOrComment noc )
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// TWL設定データファイルへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み
|
||||
if( !LCFG_WriteTWLSettings() ) {
|
||||
OS_TPrintf( "TWL settings write failed.\n" );
|
||||
}
|
||||
// セーブ後にキャンセル処理と合流
|
||||
case CANCEL_BUTTON_:
|
||||
SetOwnerInfoInit();
|
||||
@ -768,7 +770,9 @@ static int SetBirthdayMain( void )
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// TWL設定データファイルへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み
|
||||
if( !LCFG_WriteTWLSettings() ) {
|
||||
OS_TPrintf( "TWL settings write failed.\n" );
|
||||
}
|
||||
SetOwnerInfoInit();
|
||||
g_pNowProcess = SetOwnerInfoMain;
|
||||
return 0;
|
||||
@ -889,7 +893,9 @@ static int SetUserColorMain( void )
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// TWL設定データファイルへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み
|
||||
if( !LCFG_WriteTWLSettings() ) {
|
||||
OS_TPrintf( "TWL settings write failed.\n" );
|
||||
}
|
||||
SetOwnerInfoInit();
|
||||
g_pNowProcess = SetOwnerInfoMain;
|
||||
return 0;
|
||||
|
||||
@ -383,7 +383,9 @@ static int InputRtcDateTimeMain( void )
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// TWL設定データファイルへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)LCFG_WriteTWLSettings();
|
||||
if( !LCFG_WriteTWLSettings() ) {
|
||||
OS_TPrintf( "TWL settings write failed.\n" );
|
||||
}
|
||||
|
||||
// 上画面の表示更新
|
||||
GetAndDrawRTCData( &g_rtcDraw, TRUE );
|
||||
@ -549,5 +551,7 @@ void ClearRTC( void )
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// TWL設定データファイルへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)LCFG_WriteTWLSettings();
|
||||
if( !LCFG_WriteTWLSettings() ) {
|
||||
OS_TPrintf( "TWL settings write failed.\n" );
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user