From 34a35c476c0ed75f5db5a685c949c3fdd7281cda Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Mon, 14 Jul 2008 04:22:19 +0000 Subject: [PATCH] =?UTF-8?q?=E3=82=A2=E3=83=97=E3=83=AA=E8=B5=B7=E5=8B=95?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=AB=E3=82=BB=E3=83=BC=E3=83=96=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AA=E3=81=A9=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=82=AB=E3=83=90=E3=83=AA=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=20=E3=83=A9=E3=83=B3=E3=83=81=E3=83=A3=E3=83=BC?= =?UTF-8?q?=E3=81=AE=E3=82=A2=E3=83=97=E3=83=AA=E8=B5=B7=E5=8B=95=E6=99=82?= =?UTF-8?q?=E3=83=95=E3=82=A7=E3=83=BC=E3=83=89=E3=82=A2=E3=82=A6=E3=83=88?= =?UTF-8?q?=E6=99=82=E9=96=93=E3=81=8C=E9=95=B7=E3=81=99=E3=81=8E=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=81=A7=E7=9F=AD=E7=B8=AE=EF=BC=88=E7=B4=842?= =?UTF-8?q?=E7=A7=92->=E7=B4=841=E7=A7=92=EF=BC=89?= 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@1868 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/title.c | 86 +++++++++++++++++++ .../Launcher/ARM9/src/launcher.c | 26 +++--- 2 files changed, 102 insertions(+), 10 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 792654a2..af9c38b6 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "internal_api.h" #include "fs_wram.h" @@ -61,6 +62,8 @@ #define SYSM_TITLE_MESSAGE_ARRAY_MAX 1 +#define SIZE_16KB ( 16 * 1024 ) + typedef struct MbAuthCode { char magic_code[2]; // マジックナンバー @@ -1546,6 +1549,86 @@ BOOL SYSM_IsAuthenticateTitleFinished( void ) return OS_IsThreadTerminated( &s_auth_thread ); } +// アプリ起動に必要なセーブファイルやSharedファイルのリカバリ +static char *s_strResult[] = { + "Target file exists and file size matched.", + "File size didn't match. Changing size succeeded.", + "Target file didn't exist. Creating file and setting size succeeded.", + "ERROR: File Recovery Failed." +}; +static void SYSMi_FileRecovery( TitleProperty *pBootTitle ) +{ + ROM_Header_Short *hs = ( ROM_Header_Short *)SYSM_APP_ROM_HEADER_BUF; + char path[2][ FS_ENTRY_LONGNAME_MAX ]; + UTL_RecoveryStatus stat; + + // TWL非対応のときは不要なのでreturn + if ( !(hs->platform_code & PLATFORM_CODE_FLAG_TWL) ) + { + return; + } + + // NANDアプリのときだけ + if ( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_NAND ) + { + // get savedata_path + s32 result = NAM_GetTitleSaveFilePath( path[ 0 ], path[ 1 ], hs->titleID ); + + // pub_save + if( result == NAM_OK && hs->public_save_data_size != 0 ) + { + stat = UTL_RecoveryFile( path[0], hs->public_save_data_size ); + OS_TPrintf("pub_save recovery result : %s \n", s_strResult[stat]); + } + + // prv_save + if( result == NAM_OK && hs->private_save_data_size != 0 ) + { + stat = UTL_RecoveryFile( path[1], hs->private_save_data_size ); + OS_TPrintf("prv_save recovery result : %s \n", s_strResult[stat]); + } + + // sub_banner + if( hs->exFlags.availableSubBannerFile && NAM_GetTitleBannerFilePath( path[0], hs->titleID ) == NAM_OK ) + { + stat = UTL_RecoveryFile( path[0], SIZE_16KB ); + OS_TPrintf("sub_banner recovery result : %s \n", s_strResult[stat]); + } + } + + // shared2 (size+1) * 16kb + if( hs->shared2_file0_size != 0 ) + { + stat = UTL_RecoveryFile( "nand:/shared2/0000", (u32)( hs->shared2_file0_size + 1 ) * SIZE_16KB ); + OS_TPrintf("shared2_0 recovery result : %s \n", s_strResult[stat]); + } + if( hs->shared2_file1_size != 0 ) + { + stat = UTL_RecoveryFile( "nand:/shared2/0001", (u32)( hs->shared2_file1_size + 1 ) * SIZE_16KB ); + OS_TPrintf("shared2_1 recovery result : %s \n", s_strResult[stat]); + } + if( hs->shared2_file2_size != 0 ) + { + stat = UTL_RecoveryFile( "nand:/shared2/0002", (u32)( hs->shared2_file2_size + 1 ) * SIZE_16KB ); + OS_TPrintf("shared2_2 recovery result : %s \n", s_strResult[stat]); + } + if( hs->shared2_file3_size != 0 ) + { + stat = UTL_RecoveryFile( "nand:/shared2/0003", (u32)( hs->shared2_file3_size + 1 ) * SIZE_16KB ); + OS_TPrintf("shared2_3 recovery result : %s \n", s_strResult[stat]); + } + if( hs->shared2_file4_size != 0 ) + { + stat = UTL_RecoveryFile( "nand:/shared2/0004", (u32)( hs->shared2_file4_size + 1 ) * SIZE_16KB ); + OS_TPrintf("shared2_4 recovery result : %s \n", s_strResult[stat]); + } + if( hs->shared2_file5_size != 0 ) + { + stat = UTL_RecoveryFile( "nand:/shared2/0005", (u32)( hs->shared2_file5_size + 1 ) * SIZE_16KB ); + OS_TPrintf("shared2_5 recovery result : %s \n", s_strResult[stat]); + } +} + // ロード済みの指定タイトルの認証とブートを行う // SYSM_GetNandTitleListまたはSYSM_GetNandTitleListMakerInfoのどちらかをSYSM_TryToBootTitle前に呼ぶ必要あり void SYSM_TryToBootTitle( TitleProperty *pBootTitle ) @@ -1583,6 +1666,9 @@ void SYSM_TryToBootTitle( TitleProperty *pBootTitle ) // ブート種別仮セット SYSMi_GetWork()->appBootType = s_launcherToOSBootType[ pBootTitle->flags.bootType ]; + // ブート時ファイルリカバリ処理 + SYSMi_FileRecovery( pBootTitle ); + // タイトルIDリストの作成 SYSMi_makeTitleIdList(); diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index 65df4f7d..f9d5a113 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -66,9 +66,9 @@ // フェードアウト関係 #define FADE_COUNT_PER_ALPHA ((FADE_COUNT_MAX - FADE_START) / ALPHA_MAX) -#define FADE_COUNT_MAX 124 +#define FADE_COUNT_MAX 62 #define ALPHA_MAX 31 -#define FADE_START 62 +#define FADE_START 31 // extern data------------------------------------------ @@ -351,7 +351,7 @@ static void BannerDraw(int selected, TitleProperty *titleprop) } if(fadecount < (FADE_COUNT_MAX - FADE_START)) { - fadecount += 2; + fadecount += 1; G2_ChangeBlendAlpha( ALPHA_MAX-((fadecount)/FADE_COUNT_PER_ALPHA), (fadecount)/FADE_COUNT_PER_ALPHA ); } } @@ -425,14 +425,20 @@ BOOL LauncherFadeout( TitleProperty *pTitleList ) { MtxFx22 mtx; static double wa; - double s = cos(wa*3); - if( s!=0 ) mtx._00 = (fx32)((s_selected_banner_size/s) * (1.0 + wa)); - else mtx._00 = 0x8fff; - mtx._01 = 0; - mtx._10 = 0; - mtx._11 = (fx32)(s_selected_banner_size * (1.0 + wa)); + double s = sin(wa*2.2); + double c = cos(wa*2.2); + mtx._00 = (fx32)((s_selected_banner_size*c) * (1.0 + wa)); + mtx._01 = (fx32)((s_selected_banner_size*s) * (1.0 + wa)); + mtx._10 = (fx32)((s_selected_banner_size*-s) * (1.0 + wa)); + mtx._11 = (fx32)((s_selected_banner_size*c) * (1.0 + wa)); + + //if( c!=0 ) mtx._00 = (fx32)((s_selected_banner_size/c) * (1.0 + wa)); + //else mtx._00 = 0x8fff; + //mtx._01 = 0; + //mtx._10 = 0; + //mtx._11 = (fx32)(s_selected_banner_size * (1.0 + wa)); G2_SetOBJAffine((GXOamAffine *)(&banner_oam_attr[0]), &mtx); - wa += 0.0333333333333; + wa += 0.1; } // OAMをVRAMへロード