mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ESによってtmpフォルダがクリアされるので、暫定対応。
・SDK4397以降のlauncherParam.hヘッダが必要 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@759 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
3e2878f456
commit
914441f42d
@ -133,7 +133,7 @@ static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LAUNCHER_BOOTTYPE_TEMP:
|
case LAUNCHER_BOOTTYPE_TEMP:
|
||||||
STD_TSNPrintf( path, 31, "nand:/tmp/%.16llx.srl", titleID );
|
STD_TSNPrintf( path, FS_ENTRY_LONGNAME_MAX, OS_TMP_APP_PATH, titleID );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
path[ 0 ] = 0;
|
path[ 0 ] = 0;
|
||||||
|
|||||||
@ -24,7 +24,8 @@
|
|||||||
// define data-----------------------------------------------------------------
|
// define data-----------------------------------------------------------------
|
||||||
#define CARD_BANNER_INDEX ( LAUNCHER_TITLE_LIST_NUM - 1 )
|
#define CARD_BANNER_INDEX ( LAUNCHER_TITLE_LIST_NUM - 1 )
|
||||||
|
|
||||||
#define SYSTEM_APP_KEY_OFFSET 1 // ファームから送られてくるキーのためのオフセット
|
#define SYSTEM_APP_KEY_OFFSET 1 // ファームから送られてくるSYSTEMアプリキーのためのオフセット
|
||||||
|
#define LAUNCHER_KEY_OFFSET 0 // ファームから送られてくるLauncherキーのためのオフセット
|
||||||
#define ROM_HEADER_HASH_OFFSET (0x10) // 署名からROMヘッダハッシュを取り出すためのオフセット
|
#define ROM_HEADER_HASH_OFFSET (0x10) // 署名からROMヘッダハッシュを取り出すためのオフセット
|
||||||
|
|
||||||
#define SIGN_HEAP_ADDR 0x023c0000 // 署名計算のためのヒープ領域開始アドレス
|
#define SIGN_HEAP_ADDR 0x023c0000 // 署名計算のためのヒープ領域開始アドレス
|
||||||
@ -382,13 +383,14 @@ static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
|
|||||||
break;
|
break;
|
||||||
case LAUNCHER_BOOTTYPE_TEMP:
|
case LAUNCHER_BOOTTYPE_TEMP:
|
||||||
// tmpフォルダ
|
// tmpフォルダ
|
||||||
STD_TSNPrintf( path, 31, "nand:/tmp/%.16llx.srl", pBootTitle->titleID );
|
STD_TSNPrintf( path, 256, OS_TMP_APP_PATH, pBootTitle->titleID );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// unknown
|
// unknown
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FS_InitFile( file );
|
||||||
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
|
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
|
||||||
|
|
||||||
if( ! bSuccess )
|
if( ! bSuccess )
|
||||||
@ -699,17 +701,39 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle )
|
|||||||
|
|
||||||
prev = OS_GetTick();
|
prev = OS_GetTick();
|
||||||
prop = ((u16 *)&(pBootTitle->titleID))[2];
|
prop = ((u16 *)&(pBootTitle->titleID))[2];
|
||||||
prop = (u16)(prop & 0x1); // prop = 0:UserApp 1:SystemApp 2:ShopApp?
|
prop = (u16)(prop & 0x3); // prop = 0:UserApp 1:SystemApp 2:ShopApp?
|
||||||
keynum = (u8)( prop == 0 ? 2 : (prop == 1 ? 0 : 1) );// keynum = 0:SystemApp 1:ShopApp 2:UserApp
|
keynum = (u8)( prop == 0 ? 2 : (prop == 1 ? 0 : 1) );// keynum = 0:SystemApp 1:ShopApp 2:UserApp
|
||||||
// アプリ種別とボンディングオプションによって使う鍵を分ける
|
// アプリ種別とボンディングオプションによって使う鍵を分ける
|
||||||
if( SCFG_GetBondingOption() == 0 ) {
|
// #define LNC_PDTKEY_DBG
|
||||||
|
#ifdef LNC_PDTKEY_DBG
|
||||||
|
{
|
||||||
|
// 製品版鍵デバグ用コード
|
||||||
|
u8 *gamecode = (u8 *)&(pBootTitle->titleID);
|
||||||
// 製品版鍵取得
|
// 製品版鍵取得
|
||||||
key = ((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->rsa_pubkey[SYSTEM_APP_KEY_OFFSET + keynum];
|
key = ((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->rsa_pubkey[SYSTEM_APP_KEY_OFFSET + keynum];
|
||||||
|
b_dev = TRUE; // 開発版のスルーフラグ
|
||||||
|
// 製品版のLauncherは専用の鍵を使う。開発版は今のところSystemAppの鍵で代用
|
||||||
|
if( gamecode[3] == 'L' && gamecode[2] == 'N' && gamecode[1] == 'C' )
|
||||||
|
{
|
||||||
|
key = ((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->rsa_pubkey[LAUNCHER_KEY_OFFSET];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if( SCFG_GetBondingOption() == 0 ) {
|
||||||
|
u8 *gamecode = (u8 *)&(pBootTitle->titleID);
|
||||||
|
// 製品版鍵取得
|
||||||
|
key = ((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->rsa_pubkey[SYSTEM_APP_KEY_OFFSET + keynum];
|
||||||
|
// 製品版のLauncherは専用の鍵を使う。開発版は今のところSystemAppの鍵で代用
|
||||||
|
if( gamecode[3] == 'L' && gamecode[2] == 'N' && gamecode[1] == 'C' )
|
||||||
|
{
|
||||||
|
key = ((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->rsa_pubkey[LAUNCHER_KEY_OFFSET];
|
||||||
|
}
|
||||||
}else {
|
}else {
|
||||||
// 開発版
|
// 開発版
|
||||||
key = g_devPubKey[keynum];
|
key = g_devPubKey[keynum];
|
||||||
b_dev = TRUE;
|
b_dev = TRUE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
// 署名を鍵で復号
|
// 署名を鍵で復号
|
||||||
MI_CpuClear8( buf, 0x80 );
|
MI_CpuClear8( buf, 0x80 );
|
||||||
SVC_InitSignHeap( &con, (void *)SIGN_HEAP_ADDR, SIGN_HEAP_SIZE );// ヒープの初期化
|
SVC_InitSignHeap( &con, (void *)SIGN_HEAP_ADDR, SIGN_HEAP_SIZE );// ヒープの初期化
|
||||||
|
|||||||
@ -741,13 +741,57 @@ static void DrawScrollBar( TitleProperty *pTitleList )
|
|||||||
TitleProperty *LauncherMain( TitleProperty *pTitleList )
|
TitleProperty *LauncherMain( TitleProperty *pTitleList )
|
||||||
{
|
{
|
||||||
TitleProperty *ret = NULL;
|
TitleProperty *ret = NULL;
|
||||||
|
|
||||||
|
//#define DBGLP
|
||||||
|
#ifdef DBGLP
|
||||||
|
typedef struct NandFirmResetParameter {
|
||||||
|
u8 isHotStart :1;
|
||||||
|
u8 isResetSW :1;
|
||||||
|
u8 rsv :5;
|
||||||
|
u8 isValid :1;
|
||||||
|
}NandFirmResetParameter;
|
||||||
|
{
|
||||||
|
static BOOL a=FALSE;
|
||||||
|
if( pad.cont & PAD_BUTTON_Y )
|
||||||
|
{
|
||||||
|
u8 *p = (u8 *)SYSMi_GetLauncherParamAddr();
|
||||||
|
int l;
|
||||||
|
if( a )
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
|
||||||
|
for(l=0;l<16;l++)
|
||||||
|
PrintfSJIS( 0, l*12, TXT_COLOR_RED, "%.02x%.02x%.02x%.02x %.02x%.02x%.02x%.02x",
|
||||||
|
*(p+l*8), *(p+1+l*8), *(p+2+l*8), *(p+3+l*8), *(p+4+l*8), *(p+5+l*8), *(p+6+l*8), *(p+7+l*8) );
|
||||||
|
a=TRUE;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if( a ){
|
||||||
|
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
|
||||||
|
a=FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PrintfSJIS( 1, 12, TXT_COLOR_RED,
|
||||||
|
"ValidLParam:%d\n", SYSMi_GetWork()->flags.common.isValidLauncherParam );
|
||||||
|
#define OSi_GetNandFirmResetParam() ( (NandFirmResetParameter *)HW_NAND_FIRM_HOTSTART_FLAG )
|
||||||
|
PrintfSJIS( 1, 24, TXT_COLOR_RED,
|
||||||
|
"HotStartFlag:%d\n", OSi_GetNandFirmResetParam()->isHotStart );
|
||||||
|
PrintfSJIS( 1, 36, TXT_COLOR_RED,
|
||||||
|
"ResetSWFlag:%d\n", OSi_GetNandFirmResetParam()->isResetSW );
|
||||||
|
PrintfSJIS( 1, 48, TXT_COLOR_RED,
|
||||||
|
"LParamCRC16:%.04x\n", SVC_GetCRC16( 65535, &SYSMi_GetLauncherParamAddr()->body, SYSMi_GetLauncherParamAddr()->header.bodyLength ) );
|
||||||
|
PrintfSJIS( 1, 60, TXT_COLOR_RED,
|
||||||
|
"NandFirmResetParam:%.01x\n", *(u8 *)(OSi_GetNandFirmResetParam()) );
|
||||||
|
PrintfSJIS( 1, 72, TXT_COLOR_RED,
|
||||||
|
"McuVersion:%d\n", SYSMi_GetMcuVersion() );
|
||||||
|
#endif
|
||||||
|
|
||||||
// キー及びタッチ制御
|
// キー及びタッチ制御
|
||||||
ret = ProcessPads( pTitleList );
|
ret = ProcessPads( pTitleList );
|
||||||
MoveByScrollBar();
|
MoveByScrollBar();
|
||||||
|
|
||||||
// 描画関係
|
// 描画関係
|
||||||
|
|
||||||
PollBackLightBrightness();
|
PollBackLightBrightness();
|
||||||
|
|
||||||
DrawScrollBar( pTitleList );
|
DrawScrollBar( pTitleList );
|
||||||
|
|||||||
@ -308,34 +308,18 @@ static void INTR_VBlank(void)
|
|||||||
// nandのtmpディレクトリの中身を消す
|
// nandのtmpディレクトリの中身を消す
|
||||||
static void deleteTmp()
|
static void deleteTmp()
|
||||||
{
|
{
|
||||||
FSFile dir;
|
if( FS_DeleteFile( OS_TMP_APP_PATH ) )
|
||||||
FSDirectoryEntryInfo info;
|
{
|
||||||
FS_InitFile(&dir);
|
OS_TPrintf( "deleteTmp: deleted File '%s' \n", OS_TMP_APP_PATH );
|
||||||
if(!FS_OpenDirectory(&dir, "nand:/tmp", FS_FILEMODE_R | FS_FILEMODE_W))
|
}else
|
||||||
{
|
{
|
||||||
OS_TPrintf( "ERROR deleteTmp: open nand:/tmp failed!\n" );
|
FSResult res = FS_GetArchiveResultCode("nand");
|
||||||
return;
|
if( FS_RESULT_SUCCESS == res )
|
||||||
}
|
{
|
||||||
while(FS_ReadDirectory(&dir, &info))
|
OS_TPrintf( "deleteTmp: File '%s' not exists.\n", OS_TMP_APP_PATH );
|
||||||
{
|
}else
|
||||||
if(info.attributes & FS_ATTRIBUTE_IS_DIRECTORY)
|
{
|
||||||
{
|
OS_TPrintf( "deleteTmp: delete File '%s' failed. Error code = %d.\n", OS_TMP_APP_PATH, res );
|
||||||
//ディレクトリは今のところ削除しない
|
}
|
||||||
}else
|
}
|
||||||
{
|
|
||||||
//ファイルは今のところsrlのみ削除
|
|
||||||
char buf[512];
|
|
||||||
u32 end = info.longname_length;
|
|
||||||
if( (info.longname[end-1]=='l' || info.longname[end-1]=='L') &&
|
|
||||||
(info.longname[end-2]=='r' || info.longname[end-2]=='R') &&
|
|
||||||
(info.longname[end-3]=='s' || info.longname[end-3]=='S') &&
|
|
||||||
(info.longname[end-4]=='.') )
|
|
||||||
{
|
|
||||||
STD_TSNPrintf( buf, 512, "nand:/tmp/%s",info.longname);
|
|
||||||
FS_DeleteFile( buf );
|
|
||||||
OS_TPrintf( "deleteTmp: deleted File '%s' \n", buf );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FS_CloseDirectory(&dir);
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user