From bab56841b20ddfb17aa51e6c2022251816aef142 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Wed, 19 Mar 2008 02:01:11 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=83=81=E3=83=A3=E3=83=BC?= =?UTF-8?q?=E3=81=8B=E3=82=89=E3=81=AETWL=E3=82=A2=E3=83=97=E3=83=AA?= =?UTF-8?q?=E3=83=96=E3=83=BC=E3=83=88=E5=89=8D=E3=81=AB=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E3=83=88=E3=83=ABID=E3=83=AA=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E7=94=9F=E6=88=90=E3=80=81=E6=A0=BC=E7=B4=8D=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@909 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/title.c | 133 +++++++++++++++++- build/systemMenu_RED/Launcher/ARM9/src/main.c | 2 +- .../sysmenu/sysmenu_lib/common/sysmenu_api.h | 3 +- 3 files changed, 134 insertions(+), 4 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 600cfb07..8d9ab4d6 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -56,6 +56,7 @@ static void SYSMi_EnableHotSW( BOOL enable ); static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle ); static void SYSMi_Relocate( void ); static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle ); +static void SYSMi_makeTitleIdList( TitleProperty *pTitleList ); // global variable------------------------------------------------------------- // static variable------------------------------------------------------------- @@ -260,6 +261,8 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum ) // 最終リストに対して、カードアプリ部分を除いた部分をクリア MI_CpuClearFast( &pTitleList_Nand[ 1 ], sizeof(TitleProperty) * ( listNum - 1 ) ); + listNum--; // カードのぶん引いておく + listNum = ( validNum < listNum ) ? validNum : listNum; for(l=0;lboot_type = s_launcherToOSBootType[ pBootTitle->flags.bootType ]; + // タイトルIDリストの作成 + SYSMi_makeTitleIdList( pTitleList ); + BOOT_Ready(); // never return. return AUTH_RESULT_SUCCEEDED; } +// タイトルIDリストの作成 +static void SYSMi_makeTitleIdList( TitleProperty *pTitleList ) +{ + // [TODO:]現在ランチャーで表示できるタイトル(ブート可能タイトル)のみ + // リストに入れるようになっているが + // ブート不可タイトルについても対応する必要あり?(特にセキュアアプリの場合) + OSTitleIDList *list = ( OSTitleIDList * )HW_OS_TITLE_ID_LIST; + ROM_Header_Short *hs = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF; + int l; + u8 count = 0; + + // とりあえずゼロクリア + MI_CpuClear8( (void *)HW_OS_TITLE_ID_LIST, HW_OS_TITLE_ID_LIST_SIZE ); + + // これから起動するアプリがTWLアプリでない + if( !hs->platform_code ) + { + return; + } +/* + // ランチャーで作成したリストを使わないバージョン + NAMTitleId *pTitleIDList = NULL; + s32 getNum; + + // インストールされているタイトルの取得 + getNum = NAM_GetNumTitles(); + pTitleIDList = SYSM_Alloc( sizeof(NAMTitleId) * getNum ); // Free忘れず + (void)NAM_GetTitleList( pTitleIDList, (u32)getNum ); +*/ + for(l=0;lmaker_code[m] != pe_hs->maker_code[m]) + { + same_maker_code = FALSE; + } + } + // セキュアアプリの場合か、メーカーコードが同じ場合は + if( (hs->titleID & TITLE_ID_HI_SECURE_FLAG_MASK) || + ( same_maker_code ) ) + { + // リストに追加 + list->TitleID[count] = pTitleList[l].titleID; + // sameMakerFlagをON + list->sameMakerFlag[count/8] |= (u8)(0x1 << (count%8)); + // Prv,Pubそれぞれセーブデータがあるか見て、存在すればフラグON + if(pe_hs->public_save_data_size != 0) + { + list->publicFlag[count/8] |= (u8)(0x1 << (count%8)); + } + if(pe_hs->private_save_data_size != 0) + { + list->privateFlag[count/8] |= (u8)(0x1 << (count%8)); + } + } + + // ジャンプ可能ならば + if( pe_hs->permit_landing_normal_jump ) + { + // リストに追加してジャンプ可能フラグON + list->TitleID[count] = pTitleList[l].titleID; + list->appJumpFlag[count/8] |= (u8)(0x1 << (count%8)); + } + + // ここまでのうちに、list->TitleID[count]が編集されていたらcountインクリメント + if( list->TitleID[count] != NULL ) + { + count++; + } + } + list->num = count; +} + #if 0 // 指定タイトルの認証&ロード ※1フレームじゃ終わらん。 diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index 7c228201..5de393a4 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -282,7 +282,7 @@ void TwlMain( void ) if( ( direct_boot || ( !direct_boot && LauncherFadeout( s_titleList ) ) ) && SYSM_IsAuthenticateTitleFinished() ) { - switch ( SYSM_TryToBootTitle( pBootTitle ) ) { // アプリ認証結果取得orブート 成功時:never return + switch ( SYSM_TryToBootTitle( pBootTitle, s_titleList ) ) { // アプリ認証結果取得orブート 成功時:never return case AUTH_RESULT_TITLE_LOAD_FAILED: case AUTH_RESULT_TITLE_POINTER_ERROR: case AUTH_RESULT_AUTHENTICATE_FAILED: diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_api.h b/include/sysmenu/sysmenu_lib/common/sysmenu_api.h index bce6d7ed..06514055 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_api.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_api.h @@ -104,7 +104,8 @@ extern void SYSM_StartLoadTitle( TitleProperty *pBootTitle ); // extern BOOL SYSM_IsLoadTitleFinished( void ); // SYSM_StartLoadTitleで起動したスレッドが終了したかどうかを確認 extern void SYSM_StartAuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドで検証開始 extern BOOL SYSM_IsAuthenticateTitleFinished( void ); // SYSM_StartAuthenticateTitleで起動したスレッドが終了したかどうかを確認 -extern AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyをブート +extern AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle, TitleProperty *pTitleList ); + // pBootTitleで指定したタイトルをブート // 成功時は、never return. // デバイス制御 extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション