From 41ea467863acf907a8604e96f9de75637618b8e0 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Thu, 8 Jan 2009 04:09:32 +0000 Subject: [PATCH] =?UTF-8?q?=E3=81=A1=E3=82=87=E3=81=A3=E3=81=A8=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=80=82=E6=99=AE=E9=80=9A=E3=81=AB=E8=B5=B7=E5=8B=95?= =?UTF-8?q?=E3=81=A7=E3=82=AB=E3=83=BC=E3=83=89=E3=82=9232MB=E3=81=B6?= =?UTF-8?q?=E3=82=93=E8=AA=AD=E3=82=93=E3=81=A7SD=E3=81=AB=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E3=80=82Y=E6=8A=BC=E3=81=97=E3=81=AA=E3=81=8C?= =?UTF-8?q?=E3=82=89=E8=B5=B7=E5=8B=95=E3=81=A74MB=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E3=82=922=E5=9B=9E=E3=80=81B=E6=8A=BC=E3=81=97=E3=81=AA?= =?UTF-8?q?=E3=81=8C=E3=82=89=E8=B5=B7=E5=8B=95=E3=81=A7SD=E3=81=B8?= =?UTF-8?q?=E3=81=AE=E4=BF=9D=E5=AD=98=E7=84=A1=E3=81=97?= 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/branches/20081113_launcher_save_app_to_sd@2731 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/title.c | 85 ++++++++++++++----- .../Launcher/ARM9/src/launcher.c | 8 ++ .../sysmenu/sysmenu_lib/common/sysmenu_api.h | 1 + 3 files changed, 72 insertions(+), 22 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index f2a3b794..a6661181 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -124,7 +124,10 @@ static DHTFile *dht = NULL; static const u8* hash0 = NULL; static const u8* hash1 = NULL; -static u8 tempcardbuf[4096]; // カード読み込み用バッファ +static u8 tempcardbuf[4096] ATTRIBUTE_ALIGN(32); // カード読み込み用バッファ + +static u8 mode_save_to_sd = 2; // SDへカード内容をセーブするモード + // 0:しない 1:4MBを2回 2:32MB // const data------------------------------------------------------------------ static const OSBootType s_launcherToOSBootType[ LAUNCHER_BOOTTYPE_MAX ] = { @@ -526,6 +529,11 @@ static void SYSMi_FinalizeHotSWAsync( TitleProperty *pBootTitle, ROM_Header *hea HOTSW_FinalizeHotSWAsync( card_state ); } +void SYSM_SetMode_Save_To_Sd(u8 mode) +{ + mode_save_to_sd = mode; +} + static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle ) { enum @@ -863,52 +871,85 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len); int loop; CardDataReadState card_read_state; FSFile dest; + char filename[64]; + + STD_TSNPrintf( filename, 64, "sdmc:/%c%c%c%c_HEADER.dat", head->s.game_code[0],head->s.game_code[1],head->s.game_code[2],head->s.game_code[3] ); FS_InitFile( &dest ); - (void)FS_CreateFile("sdmc:/header.dat", FS_PERMIT_W | FS_PERMIT_R); - FS_OpenFileEx( &dest, "sdmc:/header.dat", FS_FILEMODE_W ); + (void)FS_CreateFile(filename, FS_PERMIT_W | FS_PERMIT_R); + FS_OpenFileEx( &dest, filename, FS_FILEMODE_W ); FS_WriteFile( &dest, (void*)SYSM_APP_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE ); FS_CloseFile( &dest ); + STD_TSNPrintf( filename, 64, "sdmc:/%c%c%c%c_ARM9FLX.dat", head->s.game_code[0],head->s.game_code[1],head->s.game_code[2],head->s.game_code[3] ); FS_InitFile( &dest ); - (void)FS_CreateFile("sdmc:/arm9flx.dat", FS_PERMIT_W | FS_PERMIT_R); - FS_OpenFileEx( &dest, "sdmc:/arm9flx.dat", FS_FILEMODE_W ); + (void)FS_CreateFile(filename, FS_PERMIT_W | FS_PERMIT_R); + FS_OpenFileEx( &dest, filename, FS_FILEMODE_W ); FS_WriteFile( &dest, (void *)destaddr[region_arm9_ntr], length[region_arm9_ntr] ); FS_CloseFile( &dest ); + STD_TSNPrintf( filename, 64, "sdmc:/%c%c%c%c_ARM7FLX.dat", head->s.game_code[0],head->s.game_code[1],head->s.game_code[2],head->s.game_code[3] ); FS_InitFile( &dest ); - (void)FS_CreateFile("sdmc:/arm7flx.dat", FS_PERMIT_W | FS_PERMIT_R); - FS_OpenFileEx( &dest, "sdmc:/arm7flx.dat", FS_FILEMODE_W ); + (void)FS_CreateFile(filename, FS_PERMIT_W | FS_PERMIT_R); + FS_OpenFileEx( &dest, filename, FS_FILEMODE_W ); FS_WriteFile( &dest, (void *)destaddr[region_arm7_ntr], length[region_arm7_ntr] ); FS_CloseFile( &dest ); if( isTwlApp ) { + STD_TSNPrintf( filename, 64, "sdmc:/%c%c%c%c_ARM9LTD.dat", head->s.game_code[0],head->s.game_code[1],head->s.game_code[2],head->s.game_code[3] ); FS_InitFile( &dest ); - (void)FS_CreateFile("sdmc:/arm9ltd.dat", FS_PERMIT_W | FS_PERMIT_R); - FS_OpenFileEx( &dest, "sdmc:/arm9ltd.dat", FS_FILEMODE_W ); + (void)FS_CreateFile(filename, FS_PERMIT_W | FS_PERMIT_R); + FS_OpenFileEx( &dest, filename, FS_FILEMODE_W ); FS_WriteFile( &dest, (void *)destaddr[region_arm9_twl], length[region_arm9_twl] ); FS_CloseFile( &dest ); + STD_TSNPrintf( filename, 64, "sdmc:/%c%c%c%c_ARM7LTD.dat", head->s.game_code[0],head->s.game_code[1],head->s.game_code[2],head->s.game_code[3] ); FS_InitFile( &dest ); - (void)FS_CreateFile("sdmc:/arm7ltd.dat", FS_PERMIT_W | FS_PERMIT_R); - FS_OpenFileEx( &dest, "sdmc:/arm7ltd.dat", FS_FILEMODE_W ); + (void)FS_CreateFile(filename, FS_PERMIT_W | FS_PERMIT_R); + FS_OpenFileEx( &dest, filename, FS_FILEMODE_W ); FS_WriteFile( &dest, (void *)destaddr[region_arm7_twl], length[region_arm7_twl] ); FS_CloseFile( &dest ); } // カードの中身がんばって吐いてもらおう - FS_InitFile( &dest ); - (void)FS_CreateFile("sdmc:/card256Mbit.dat", FS_PERMIT_W | FS_PERMIT_R); - FS_OpenFileEx( &dest, "sdmc:/card256Mbit.dat", FS_FILEMODE_W ); - for( loop=0; loop<8*1024; loop++) + if( mode_save_to_sd != 0 ) { - DC_InvalidateRange( (void*)tempcardbuf, 4096 ); - card_read_state = HOTSW_ReadCardData( (void *)(loop*4096), (void *)tempcardbuf, 4096); - if((card_read_state != CARD_READ_SUCCESS)) break; - FS_WriteFile( &dest, (void *)tempcardbuf, 4096 ); - UTL_SetBacklightBrightness( loop%5 ); - } - FS_CloseFile( &dest ); + int readsize = (mode_save_to_sd==1 ? 32 : 256); + STD_TSNPrintf( filename, 64, "sdmc:/%c%c%c%c_CARD%dMbit.dat", head->s.game_code[0],head->s.game_code[1],head->s.game_code[2],head->s.game_code[3],readsize ); + FS_InitFile( &dest ); + (void)FS_CreateFile(filename, FS_PERMIT_W | FS_PERMIT_R); + if(FS_OpenFileEx( &dest, filename, FS_FILEMODE_W )) + { + readsize = readsize / 32; + for( loop=0; loops.game_code[0],head->s.game_code[1],head->s.game_code[2],head->s.game_code[3] ); + FS_InitFile( &dest ); + (void)FS_CreateFile(filename, FS_PERMIT_W | FS_PERMIT_R); + if(FS_OpenFileEx( &dest, filename, FS_FILEMODE_W )) + { + for( loop=0; loop<1*1024; loop++) + { + DC_InvalidateRange( (void*)tempcardbuf, 4096 ); + card_read_state = HOTSW_ReadCardData( (void *)(loop*4096), (void *)tempcardbuf, 4096); + if((card_read_state != CARD_READ_SUCCESS)) break; + FS_WriteFile( &dest, (void *)tempcardbuf, 4096 ); + if(loop%10==0) UTL_SetBacklightBrightness( (loop/10)%5 ); + } + FS_CloseFile( &dest ); + } + } } } diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index 29ca2e37..78178135 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -586,6 +586,14 @@ static TitleProperty *ProcessPads( TitleProperty *pTitleList ) if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐 if( pTitleList[selected].flags.isValid ) { + if( ( pad.cont & PAD_BUTTON_Y ) ) + { + SYSM_SetMode_Save_To_Sd( 1 ); // savetosdモード1(4MB*2) + } + if( ( pad.cont & PAD_BUTTON_B ) ) + { + SYSM_SetMode_Save_To_Sd( 0 ); // savetosdモード0(保存しない) + } //PlayStream(&strm, filename); ret = &pTitleList[selected]; // ブートするアプリのindex番号とTitleIDを本体設定に保存する。(実際の保存は、SYSMライブラリがブート時に行います。) diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_api.h b/include/sysmenu/sysmenu_lib/common/sysmenu_api.h index 5c408ac0..4a6afbcf 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_api.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_api.h @@ -117,6 +117,7 @@ extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // Nintendo extern void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_2D形式でロード(pTempBufferには0x700bytes必要) extern void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_1D形式でロード(同上) +extern void SYSM_SetMode_Save_To_Sd( u8 mode ); #endif