diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index 0315c254..ccd04af1 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -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が一杯で送信できない状態で無限ループに入ってしまう。 diff --git a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c index 67f4bc81..c61b928b 100644 --- a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c @@ -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" ); // 割り込みをクリアして最終ブートシーケンスへ。 diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 4306dda6..9454a8f5 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -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;