mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ISデバッガタスクのNANDアプリデバッグ対応の仕様を再び調整しました。 ImportJumpをその仕様に合わせて更新しました。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1184 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
5081912251
commit
29341dc9dd
@ -38,7 +38,6 @@ typedef struct _ImportJumpSetting
|
||||
u32 clearSaveBannerFile:1; // セーブバナーファイルをクリアする(デフォルトOFF)
|
||||
u32 importTad:1; // パスで指定されたTADファイルをインポートするか(TADの更新有無に依存)
|
||||
u32 rsv :28; // 予約
|
||||
u64 bootTitleID; // タイトルID
|
||||
u32 tadRomOffset; // TADをロードしたエミュレーションROMオフセット
|
||||
u32 tadLength; // TADファイルの長さ
|
||||
} ImportJump;
|
||||
|
||||
@ -34,7 +34,7 @@ extern "C" {
|
||||
ЉЦђ”’и‹`
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
BOOL kamiImportTad(void);
|
||||
BOOL kamiImportTad(NAMTitleId* pTitleID);
|
||||
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
@ -69,23 +69,16 @@ static void UpdateNandBoxCount( void );
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
BOOL kamiImportTad(void)
|
||||
BOOL kamiImportTad(NAMTitleId* pTitleID)
|
||||
{
|
||||
NAMTadInfo tadInfo;
|
||||
NAMTitleInfo titleInfo;
|
||||
NAMTitleInfo titleInfoTmp;
|
||||
OSThread thread;
|
||||
s32 nam_result;
|
||||
FSFile file;
|
||||
|
||||
// TADファイルが更新されていないためインポート処理をスキップする
|
||||
if (GetImportJumpSetting()->importTad == 0)
|
||||
{
|
||||
// しかしNandInitializerによって消去されている可能性もあるので確認する
|
||||
if (NAM_ReadTitleInfo(&titleInfo, GetImportJumpSetting()->bootTitleID) == NAM_OK)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
char savePublicPath[FS_ENTRY_LONGNAME_MAX];
|
||||
char savePrivatePath[FS_ENTRY_LONGNAME_MAX];
|
||||
char subBannerPath[FS_ENTRY_LONGNAME_MAX];
|
||||
|
||||
// ファイル初期化
|
||||
FS_InitFile(&file);
|
||||
@ -104,6 +97,9 @@ BOOL kamiImportTad(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// titleIDを保存しておく
|
||||
*pTitleID = tadInfo.titleInfo.titleId;
|
||||
|
||||
// Data Only なら失敗
|
||||
if (tadInfo.titleInfo.titleId & TITLE_ID_DATA_ONLY_FLAG_MASK)
|
||||
{
|
||||
@ -119,34 +115,91 @@ BOOL kamiImportTad(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// インポート開始フラグを立てる
|
||||
sNowImport = TRUE;
|
||||
|
||||
// 進捗スレッド作成
|
||||
spStack = OS_Alloc(THREAD_STACK_SIZE);
|
||||
MI_CpuClear8(spStack, THREAD_STACK_SIZE);
|
||||
OS_CreateThread(&thread, ProgressThread, NULL,
|
||||
(void*)((u32)spStack + THREAD_STACK_SIZE), THREAD_STACK_SIZE, OS_GetCurrentThread()->priority - 1);
|
||||
OS_SetThreadDestructor( &thread, Destructor );
|
||||
OS_WakeupThreadDirect(&thread);
|
||||
|
||||
// Import開始
|
||||
nam_result = NAM_ImportTadWithFile( &file );
|
||||
|
||||
// 進捗スレッドの自力終了を待つ
|
||||
while (sNowImport){};
|
||||
|
||||
if ( nam_result == NAM_OK )
|
||||
// TADファイルが更新されている場合に限りインポート処理を行う
|
||||
// NandInitializerによって消去されている可能性もあるので確認する
|
||||
if (GetImportJumpSetting()->importTad == 1 || NAM_ReadTitleInfo(&titleInfoTmp, tadInfo.titleInfo.titleId) != NAM_OK)
|
||||
{
|
||||
// InstalledSoftBoxCount, FreeSoftBoxCount の値を現在のNANDの状態に合わせて更新します。
|
||||
UpdateNandBoxCount();
|
||||
return TRUE;
|
||||
// インポート開始フラグを立てる
|
||||
sNowImport = TRUE;
|
||||
|
||||
// 進捗スレッド作成
|
||||
spStack = OS_Alloc(THREAD_STACK_SIZE);
|
||||
MI_CpuClear8(spStack, THREAD_STACK_SIZE);
|
||||
OS_CreateThread(&thread, ProgressThread, NULL,
|
||||
(void*)((u32)spStack + THREAD_STACK_SIZE), THREAD_STACK_SIZE, OS_GetCurrentThread()->priority - 1);
|
||||
OS_SetThreadDestructor( &thread, Destructor );
|
||||
OS_WakeupThreadDirect(&thread);
|
||||
|
||||
// Import開始
|
||||
nam_result = NAM_ImportTadWithFile( &file );
|
||||
|
||||
// 進捗スレッドの自力終了を待つ
|
||||
while (sNowImport){};
|
||||
|
||||
if ( nam_result == NAM_OK )
|
||||
{
|
||||
// InstalledSoftBoxCount, FreeSoftBoxCount の値を現在のNANDの状態に合わせて更新します。
|
||||
UpdateNandBoxCount();
|
||||
}
|
||||
else
|
||||
{
|
||||
OS_Warning(" Fail! : NAM Result Code = 0x%x\n", nam_result);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
// セーブデータクリア処理
|
||||
if (GetImportJumpSetting()->clearPublicSaveData || GetImportJumpSetting()->clearPrivateSaveData)
|
||||
{
|
||||
OS_Warning(" Fail! : NAM Result Code = 0x%x\n", nam_result);
|
||||
return FALSE;
|
||||
// セーブファイルパス取得
|
||||
if ( NAM_GetTitleSaveFilePath(savePublicPath, savePrivatePath, tadInfo.titleInfo.titleId) != NAM_OK )
|
||||
{
|
||||
OS_Warning(" Fail! NAM_GetTitleSaveFilePath\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// publicセーブデータFFクリア&フォーマット
|
||||
if (GetImportJumpSetting()->clearPublicSaveData && tadInfo.titleInfo.publicSaveSize > 0)
|
||||
{
|
||||
if (NAMUTi_ClearSavedataPublic(savePublicPath, tadInfo.titleInfo.titleId) == FALSE)
|
||||
{
|
||||
OS_Warning(" Fail! NAMUTi_ClearSavedataPublic\n");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// privateセーブデータFFクリア&フォーマット
|
||||
if (GetImportJumpSetting()->clearPrivateSaveData && tadInfo.titleInfo.privateSaveSize > 0)
|
||||
{
|
||||
if (NAMUTi_ClearSavedataPublic(savePrivatePath, tadInfo.titleInfo.titleId) == FALSE)
|
||||
{
|
||||
OS_Warning(" Fail! NAMUTi_ClearSavedataPrivate\n");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// サブバナークリア処理
|
||||
if (GetImportJumpSetting()->clearSaveBannerFile)
|
||||
{
|
||||
// サブバナーパス取得
|
||||
if ( NAM_GetTitleBannerFilePath(subBannerPath, tadInfo.titleInfo.titleId) != NAM_OK )
|
||||
{
|
||||
OS_Warning(" Fail! NAM_GetTitleBannerFilePath\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// サブバナー破壊
|
||||
{
|
||||
if (NAMUTi_DestroySubBanner(subBannerPath) == FALSE)
|
||||
{
|
||||
OS_Warning(" Fail! NAMUTi_DestroySubBanner\n");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void Destructor(void* /*arg*/)
|
||||
|
||||
@ -53,6 +53,8 @@ extern void FS_MountHostIO(const char *basepath);
|
||||
void
|
||||
TwlMain()
|
||||
{
|
||||
NAMTitleId titleID;
|
||||
|
||||
// OS_Initより前に実行する
|
||||
{
|
||||
// SRLの後方に配置したTADファイルにアクセス可能にするために
|
||||
@ -131,10 +133,10 @@ TwlMain()
|
||||
}
|
||||
|
||||
// TADのインポート開始
|
||||
if (kamiImportTad())
|
||||
if (kamiImportTad(&titleID))
|
||||
{
|
||||
// インポートに成功したならアプリジャンプ
|
||||
OS_DoApplicationJump( GetImportJumpSetting()->bootTitleID, OS_APP_JUMP_NORMAL );
|
||||
OS_DoApplicationJump( titleID, OS_APP_JUMP_NORMAL );
|
||||
}
|
||||
|
||||
// アプリジャンプに成功したならここへは到達しない
|
||||
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user