diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c b/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c index a32b138d..deec7cc7 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c @@ -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; } diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 2e8c8875..1d99f002 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -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 ); diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c b/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c index 97ba1d8b..dabd6b58 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c @@ -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; diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/selectCountry.c b/build/systemMenu_RED/MachineSettings/ARM9/src/selectCountry.c index 349fe159..9d2f29aa 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/selectCountry.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/selectCountry.c @@ -323,7 +323,9 @@ int SelectCountryMain( void ) // :::::::::::::::::::::::::::::::::::::::::::::: // TWL設定データファイルへの書き込み // :::::::::::::::::::::::::::::::::::::::::::::: - (void)LCFG_WriteTWLSettings(); + if( !LCFG_WriteTWLSettings() ) { + OS_TPrintf( "TWL settings write failed.\n" ); + } MachineSettingInit(); return 0; diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c b/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c index 1f32c442..41c43d2a 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c @@ -181,7 +181,9 @@ int SelectLanguageMain( void ) // :::::::::::::::::::::::::::::::::::::::::::::: // TWL設定データファイルへの書き込み // :::::::::::::::::::::::::::::::::::::::::::::: - (void)LCFG_WriteTWLSettings(); + if( !LCFG_WriteTWLSettings() ) { + OS_TPrintf( "TWL settings write failed.\n" ); + } MachineSettingInit(); return 0; diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/setOwnerInfo.c b/build/systemMenu_RED/MachineSettings/ARM9/src/setOwnerInfo.c index 66a5eb47..661cf886 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/setOwnerInfo.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/setOwnerInfo.c @@ -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; diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c b/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c index 270ef72b..2c090348 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c @@ -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" ); + } } diff --git a/docs/TWLBanner.xls b/docs/TWLBanner.xls index 0ddbe23a..6192457e 100644 Binary files a/docs/TWLBanner.xls and b/docs/TWLBanner.xls differ