mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
Launcher:アプリのヘッダは一時的にカードROMヘッダのバッファに上書きで読み込み、最終的にbootAPIの中で配置するように変更
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@927 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
cc46c7c758
commit
556f2dac5e
@ -105,9 +105,25 @@ void BOOT_Init( void )
|
||||
BOOL BOOT_WaitStart( void )
|
||||
{
|
||||
if( (reg_PXI_MAINPINTF & 0x000f ) == 0x000f ) {
|
||||
ROM_Header *th = (ROM_Header *)HW_TWL_ROM_HEADER_BUF; // TWL拡張ROMヘッダ(DSアプリには無い)
|
||||
ROM_Header *dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
|
||||
ROM_Header *th; // TWL拡張ROMヘッダ(DSアプリには無い)
|
||||
ROM_Header *dh; // DS互換ROMヘッダ
|
||||
BOOL isNtrMode;
|
||||
// ヘッダ情報再配置
|
||||
if( SYSM_GetCardRomHeader()->platform_code & PLATFORM_CODE_FLAG_TWL )
|
||||
{
|
||||
// TWL-ROMヘッダ情報の再配置
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BUF, (void *)HW_TWL_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE );
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
}else {
|
||||
// NTRモード
|
||||
// TWL-ROMヘッダ情報の再配置
|
||||
// ランチャーのROMヘッダが残っている非コピー領域もクリア
|
||||
MI_CpuClearFast( (void *)HW_TWL_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE );
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BUF, (void *)HW_TWL_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
}
|
||||
th = (ROM_Header *)HW_TWL_ROM_HEADER_BUF; // TWL拡張ROMヘッダ(DSアプリには無い)
|
||||
dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
|
||||
|
||||
(void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。
|
||||
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
|
||||
|
||||
@ -59,8 +59,8 @@ static void ie_subphandler( void )
|
||||
// ブート準備をして、ARM7からの通知を待つ。
|
||||
void BOOT_Ready( void )
|
||||
{
|
||||
ROM_Header *th = (ROM_Header *)HW_TWL_ROM_HEADER_BUF; // TWL拡張ROMヘッダ(DSアプリには無い)
|
||||
ROM_Header *dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
|
||||
ROM_Header *th; // TWL拡張ROMヘッダ(DSアプリには無い)
|
||||
ROM_Header *dh; // DS互換ROMヘッダ
|
||||
BOOL isNtrMode;
|
||||
int i;
|
||||
|
||||
@ -84,6 +84,10 @@ void BOOT_Ready( void )
|
||||
// ※もうFIFOはクリア済みなので、使わない。
|
||||
// ARM7からの通知待ち
|
||||
OS_WaitIrq( 1, OS_IE_SUBP );
|
||||
|
||||
// 同期後にヘッダ取得
|
||||
th = (ROM_Header *)HW_TWL_ROM_HEADER_BUF; // TWL拡張ROMヘッダ(DSアプリには無い)
|
||||
dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
|
||||
|
||||
OS_TPrintf( "INTR SUBP passed!!\n" );
|
||||
// 割り込みをクリアして最終ブートシーケンスへ。
|
||||
|
||||
@ -437,7 +437,7 @@ OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", &s_authcode,
|
||||
// 各領域を読み込む
|
||||
source [region_header ] = 0x00000000;
|
||||
length [region_header ] = HW_TWL_ROM_HEADER_BUF_SIZE;
|
||||
destaddr[region_header ] = HW_TWL_ROM_HEADER_BUF;
|
||||
destaddr[region_header ] = SYSM_CARD_ROM_HEADER_BUF;
|
||||
|
||||
source [region_arm9_ntr] = head->s.main_rom_offset;
|
||||
length [region_arm9_ntr] = head->s.main_size;
|
||||
@ -501,9 +501,6 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
||||
(void)FS_CloseFile(file);
|
||||
|
||||
}
|
||||
|
||||
// ROMヘッダバッファをコピー
|
||||
MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
|
||||
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
||||
}
|
||||
@ -574,16 +571,6 @@ static void SYSMi_Relocate( void )
|
||||
dest = (u32 *)SYSMi_GetWork()->romRelocateInfo[ARM9_LTD_STATIC].src;
|
||||
}
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_TWL_SECURE_BUF, dest, size );
|
||||
// TWL-ROMヘッダ情報の再配置
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BUF, (void *)HW_TWL_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE );
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
}else {
|
||||
// NTRモード
|
||||
// TWL-ROMヘッダ情報の再配置
|
||||
// ランチャーのROMヘッダが残っている非コピー領域もクリア
|
||||
MI_CpuClearFast( (void *)HW_TWL_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE );
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BUF, (void *)HW_TWL_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
}
|
||||
}
|
||||
|
||||
@ -603,7 +590,7 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle )
|
||||
OSTick start,prev;
|
||||
start = OS_GetTick();
|
||||
|
||||
head = ( ROM_Header *)HW_TWL_ROM_HEADER_BUF;
|
||||
head = ( ROM_Header *)SYSM_CARD_ROM_HEADER_BUF;
|
||||
|
||||
// NANDアプリの場合、NAM_CheckTitleLaunchRights()を呼んでチェック
|
||||
if( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_NAND )
|
||||
@ -793,7 +780,7 @@ static AuthResult SYSMi_AuthenticateNTRDownloadAppHeader( TitleProperty *pBootTi
|
||||
OSTick start;
|
||||
start = OS_GetTick();
|
||||
|
||||
head = ( ROM_Header *)HW_TWL_ROM_HEADER_BUF;
|
||||
head = ( ROM_Header *)SYSM_CARD_ROM_HEADER_BUF;
|
||||
|
||||
// 署名処理
|
||||
{
|
||||
@ -871,7 +858,7 @@ static AuthResult SYSMi_AuthenticateNTRDownloadAppHeader( TitleProperty *pBootTi
|
||||
// ヘッダ認証
|
||||
static AuthResult SYSMi_AuthenticateHeader( TitleProperty *pBootTitle)
|
||||
{
|
||||
ROM_Header_Short *hs = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
|
||||
ROM_Header_Short *hs = ( ROM_Header_Short *)SYSM_CARD_ROM_HEADER_BUF;
|
||||
// [TODO:]認証結果はどこかワークに保存しておく
|
||||
if( hs->platform_code & PLATFORM_CODE_FLAG_TWL )
|
||||
{
|
||||
@ -958,8 +945,8 @@ static void SYSMi_AuthenticateTitleThreadFunc( TitleProperty *pBootTitle )
|
||||
// BOOTTYPE_MEMORYでNTRモードのFSありでブートすると、旧NitroSDKでビルドされたアプリの場合、
|
||||
// ROMアーカイブにカードが割り当てられて、FSで関係ないカードにアクセスにいってしまうので、それを防止する。
|
||||
if( ( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_MEMORY ) &&
|
||||
( ( (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->platform_code ) == 0 ) &&
|
||||
( ( (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->fat_size ) > 0 )
|
||||
( ( (( ROM_Header_Short *)SYSM_CARD_ROM_HEADER_BUF)->platform_code ) == 0 ) &&
|
||||
( ( (( ROM_Header_Short *)SYSM_CARD_ROM_HEADER_BUF)->fat_size ) > 0 )
|
||||
) {
|
||||
s_authResult = AUTH_RESULT_TITLE_BOOTTYPE_ERROR;
|
||||
return;
|
||||
@ -1021,7 +1008,7 @@ static void SYSMi_makeTitleIdList( TitleProperty *pTitleList )
|
||||
// リストに入れるようになっているが
|
||||
// ブート不可タイトルについても対応する必要あり?(特にセキュアアプリの場合)
|
||||
OSTitleIDList *list = ( OSTitleIDList * )HW_OS_TITLE_ID_LIST;
|
||||
ROM_Header_Short *hs = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
|
||||
ROM_Header_Short *hs = ( ROM_Header_Short *)SYSM_CARD_ROM_HEADER_BUF;
|
||||
int l;
|
||||
u8 count = 0;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user