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-----------------------------------------------------------------
|
// extern data-----------------------------------------------------------------
|
||||||
// function's prototype-------------------------------------------------------
|
// function's prototype-------------------------------------------------------
|
||||||
static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner );
|
static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner );
|
||||||
|
|
||||||
// global variable-------------------------------------------------------------
|
// global variable-------------------------------------------------------------
|
||||||
// static variable-------------------------------------------------------------
|
// static variable-------------------------------------------------------------
|
||||||
@ -43,8 +43,20 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner );
|
|||||||
// カードバナーリード(※NTR-IPL2仕様)
|
// カードバナーリード(※NTR-IPL2仕様)
|
||||||
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
|
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
|
||||||
{
|
{
|
||||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
#pragma unused(bannerOffset)
|
||||||
// ※スロットAからのリードなら問題ないが、スロットBからは直接読めないので
|
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;
|
BOOL isRead;
|
||||||
u16 id = (u16)OS_GetLockID();
|
u16 id = (u16)OS_GetLockID();
|
||||||
|
|
||||||
@ -55,25 +67,18 @@ BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
|
|||||||
CARD_UnlockRom( id );
|
CARD_UnlockRom( id );
|
||||||
OS_ReleaseLockID( id );
|
OS_ReleaseLockID( id );
|
||||||
|
|
||||||
isRead = SYSMi_CheckBannerFile( (NTRBannerFile *)pBanner );
|
isRead = SYSMi_CheckBannerFile( (TWLBannerFile *)pBanner );
|
||||||
|
|
||||||
if( !isRead ) {
|
if( !isRead ) {
|
||||||
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
|
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
|
||||||
}
|
}
|
||||||
return isRead;
|
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;
|
int i;
|
||||||
BOOL retval = TRUE;
|
BOOL retval = TRUE;
|
||||||
@ -82,6 +87,7 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner )
|
|||||||
BannerCheckParam bannerCheckList[ BANNER_VER_NTR_MAX ];
|
BannerCheckParam bannerCheckList[ BANNER_VER_NTR_MAX ];
|
||||||
BannerCheckParam *pChk = &bannerCheckList[ 0 ];
|
BannerCheckParam *pChk = &bannerCheckList[ 0 ];
|
||||||
|
|
||||||
|
// NTR互換部分は標準でチェック
|
||||||
bannerCheckList[ 0 ].pSrc = (u8 *)&( pBanner->v1 );
|
bannerCheckList[ 0 ].pSrc = (u8 *)&( pBanner->v1 );
|
||||||
bannerCheckList[ 0 ].size = sizeof( BannerFileV1 );
|
bannerCheckList[ 0 ].size = sizeof( BannerFileV1 );
|
||||||
bannerCheckList[ 1 ].pSrc = (u8 *)&( pBanner->v2 );
|
bannerCheckList[ 1 ].pSrc = (u8 *)&( pBanner->v2 );
|
||||||
@ -102,6 +108,12 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner )
|
|||||||
pChk++;
|
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;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -58,6 +58,10 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
|||||||
{
|
{
|
||||||
BOOL retval = FALSE;
|
BOOL retval = FALSE;
|
||||||
|
|
||||||
|
// [TODO:] ROMヘッダの platform_code がNTR,TWL-HYB,TWL-LTD以外のもの
|
||||||
|
// region_codeが本体情報と違うもの
|
||||||
|
// の場合は、正常に認識できないタイトルであることを示す。
|
||||||
|
|
||||||
if( SYSMi_GetWork()->flags.common.isCardStateChanged ) {
|
if( SYSMi_GetWork()->flags.common.isCardStateChanged ) {
|
||||||
|
|
||||||
MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) );
|
MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) );
|
||||||
@ -66,9 +70,16 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
|||||||
if( SYSM_IsExistCard() ) {
|
if( SYSM_IsExistCard() ) {
|
||||||
u16 id = (u16)OS_GetLockID();
|
u16 id = (u16)OS_GetLockID();
|
||||||
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
|
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
|
||||||
|
|
||||||
|
// ROMヘッダのリード
|
||||||
DC_InvalidateRange( (void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE ); // キャッシュケア
|
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ヘッダコピー
|
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_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; // カード情報更新フラグを落とす
|
SYSMi_GetWork()->flags.common.isCardStateChanged = FALSE; // カード情報更新フラグを落とす
|
||||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
|
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
|
||||||
OS_ReleaseLockID( id );
|
OS_ReleaseLockID( id );
|
||||||
@ -77,14 +88,6 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
|||||||
pTitleList_Card->flags.isAppLoadCompleted = TRUE;
|
pTitleList_Card->flags.isAppLoadCompleted = TRUE;
|
||||||
pTitleList_Card->flags.isAppRelocate = TRUE;
|
pTitleList_Card->flags.isAppRelocate = TRUE;
|
||||||
pTitleList_Card->pBanner = NULL;
|
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;
|
retval = TRUE;
|
||||||
@ -179,6 +182,7 @@ static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst )
|
|||||||
// ファイルパスを取得
|
// ファイルパスを取得
|
||||||
if(readLen != NAM_OK){
|
if(readLen != NAM_OK){
|
||||||
OS_TPrintf("NAM_GetTitleBootContentPath failed %lld,%d\n", titleID, readLen );
|
OS_TPrintf("NAM_GetTitleBootContentPath failed %lld,%d\n", titleID, readLen );
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ファイルオープン
|
// ファイルオープン
|
||||||
@ -589,7 +593,7 @@ AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ※ROMヘッダ認証
|
// ※ROMヘッダ認証
|
||||||
|
// [TODO:] NANDアプリの場合、pBootTitle->titleIDとROMヘッダのtitleIDの一致確認を必ずする。
|
||||||
|
|
||||||
// マウント情報の登録
|
// マウント情報の登録
|
||||||
SYSMi_SetBootAppMountInfo( pBootTitle );
|
SYSMi_SetBootAppMountInfo( pBootTitle );
|
||||||
|
|||||||
@ -422,7 +422,9 @@ int TP_CalibrationMain( void )
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// TWL設定データファイルへの書き込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)LCFG_WriteTWLSettings();
|
if( !LCFG_WriteTWLSettings() ) {
|
||||||
|
OS_TPrintf( "TWL settings write failed.\n" );
|
||||||
|
}
|
||||||
|
|
||||||
ReturnMenu();
|
ReturnMenu();
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -323,7 +323,9 @@ int SelectCountryMain( void )
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// TWL設定データファイルへの書き込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)LCFG_WriteTWLSettings();
|
if( !LCFG_WriteTWLSettings() ) {
|
||||||
|
OS_TPrintf( "TWL settings write failed.\n" );
|
||||||
|
}
|
||||||
|
|
||||||
MachineSettingInit();
|
MachineSettingInit();
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -181,7 +181,9 @@ int SelectLanguageMain( void )
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// TWL設定データファイルへの書き込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)LCFG_WriteTWLSettings();
|
if( !LCFG_WriteTWLSettings() ) {
|
||||||
|
OS_TPrintf( "TWL settings write failed.\n" );
|
||||||
|
}
|
||||||
|
|
||||||
MachineSettingInit();
|
MachineSettingInit();
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -432,7 +432,9 @@ static void PushKeys( u16 code, NameOrComment noc )
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// TWL設定データファイルへの書き込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み
|
if( !LCFG_WriteTWLSettings() ) {
|
||||||
|
OS_TPrintf( "TWL settings write failed.\n" );
|
||||||
|
}
|
||||||
// セーブ後にキャンセル処理と合流
|
// セーブ後にキャンセル処理と合流
|
||||||
case CANCEL_BUTTON_:
|
case CANCEL_BUTTON_:
|
||||||
SetOwnerInfoInit();
|
SetOwnerInfoInit();
|
||||||
@ -768,7 +770,9 @@ static int SetBirthdayMain( void )
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// TWL設定データファイルへの書き込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み
|
if( !LCFG_WriteTWLSettings() ) {
|
||||||
|
OS_TPrintf( "TWL settings write failed.\n" );
|
||||||
|
}
|
||||||
SetOwnerInfoInit();
|
SetOwnerInfoInit();
|
||||||
g_pNowProcess = SetOwnerInfoMain;
|
g_pNowProcess = SetOwnerInfoMain;
|
||||||
return 0;
|
return 0;
|
||||||
@ -889,7 +893,9 @@ static int SetUserColorMain( void )
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// TWL設定データファイルへの書き込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み
|
if( !LCFG_WriteTWLSettings() ) {
|
||||||
|
OS_TPrintf( "TWL settings write failed.\n" );
|
||||||
|
}
|
||||||
SetOwnerInfoInit();
|
SetOwnerInfoInit();
|
||||||
g_pNowProcess = SetOwnerInfoMain;
|
g_pNowProcess = SetOwnerInfoMain;
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -383,7 +383,9 @@ static int InputRtcDateTimeMain( void )
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// TWL設定データファイルへの書き込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)LCFG_WriteTWLSettings();
|
if( !LCFG_WriteTWLSettings() ) {
|
||||||
|
OS_TPrintf( "TWL settings write failed.\n" );
|
||||||
|
}
|
||||||
|
|
||||||
// 上画面の表示更新
|
// 上画面の表示更新
|
||||||
GetAndDrawRTCData( &g_rtcDraw, TRUE );
|
GetAndDrawRTCData( &g_rtcDraw, TRUE );
|
||||||
@ -549,5 +551,7 @@ void ClearRTC( void )
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// 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