CTRモードで初期化したDSカードI/FをリセットしないようにしてTWLカードを起動可能に。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20100611_RedLauncher_Remodel@2942 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
N1277 2010-07-23 04:18:20 +00:00
parent c03ff6828e
commit 27454334d1
12 changed files with 72 additions and 12 deletions

View File

@ -18,9 +18,6 @@
ifndef TWL_SYSMENU_COMMONDEFS_ ifndef TWL_SYSMENU_COMMONDEFS_
TWL_SYSMENU_COMMONDEFS_ = TRUE TWL_SYSMENU_COMMONDEFS_ = TRUE
SYSM_FOR_CTR = TRUE
SYSM_NO_LOAD = TRUE
ifdef SYSM_FOR_CTR ifdef SYSM_FOR_CTR
MACRO_FLAGS += -DSYSM_FOR_CTR MACRO_FLAGS += -DSYSM_FOR_CTR
ifdef SYSM_NO_LOAD ifdef SYSM_NO_LOAD

View File

@ -134,8 +134,10 @@ TwlSpMain(void)
} }
PMi_SetControl( PMIC_CTL_BKLT1 | PMIC_CTL_BKLT2 ); PMi_SetControl( PMIC_CTL_BKLT1 | PMIC_CTL_BKLT2 );
#ifndef SYSM_NO_LOAD
#ifdef INITIAL_KEYTABLE_PRELOAD #ifdef INITIAL_KEYTABLE_PRELOAD
HOTSW_CopyInitialKeyTable(); HOTSW_CopyInitialKeyTable();
#endif
#endif #endif
// OS <20>‰Šú‰» // OS <20>‰Šú‰»
@ -253,6 +255,8 @@ TwlSpMain(void)
BOOT_Init(); BOOT_Init();
#ifndef SYSM_NO_LOAD
// Šˆ<C5A0>ð}”²‹@”\<5C>‰Šú‰» // Šˆ<C5A0>ð}”²‹@”\<5C>‰Šú‰»
if( ( SYSM_GetLauncherParamBody()->v1.flags.isValid ) && if( ( SYSM_GetLauncherParamBody()->v1.flags.isValid ) &&
( SYSM_GetLauncherParamBody()->v1.flags.bootType != LAUNCHER_BOOTTYPE_ROM ) && ( SYSM_GetLauncherParamBody()->v1.flags.bootType != LAUNCHER_BOOTTYPE_ROM ) &&
@ -279,6 +283,8 @@ TwlSpMain(void)
HOTSW_Init(THREAD_PRIO_HOTSW); HOTSW_Init(THREAD_PRIO_HOTSW);
#endif // SYSM_NO_LOAD
while (TRUE) while (TRUE)
{ {
OS_Halt(); OS_Halt();

View File

@ -191,6 +191,7 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget*
// FSによってshared領域にコピーされたランチャー自身のマウントパスのクリア // FSによってshared領域にコピーされたランチャー自身のマウントパスのクリア
MI_CpuClearFast((char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, OS_MOUNT_PATH_LEN); MI_CpuClearFast((char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, OS_MOUNT_PATH_LEN);
#ifndef SYSM_NO_LOAD
// NAND/TMPアプリ用KeyTableの生成 // NAND/TMPアプリ用KeyTableの生成
if( ! SYSMi_GetWork()->flags.arm9.isCardBoot ) if( ! SYSMi_GetWork()->flags.arm9.isCardBoot )
{ {
@ -203,10 +204,14 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget*
HOTSWi_SetSecureSegmentBuffer(HOTSW_MODE1, addr, SECURE_AREA_SIZE); HOTSWi_SetSecureSegmentBuffer(HOTSW_MODE1, addr, SECURE_AREA_SIZE);
HOTSW_DecryptObjectFile( addr ); HOTSW_DecryptObjectFile( addr );
} }
#endif
// TWL/NTRモード判定 // TWL/NTRモード判定
if ( ! dh->s.platform_code || if ( ! dh->s.platform_code
(SYSM_IsRunOnDebugger() && ((SYSMRomEmuInfo*)HOTSW_GetRomEmulationBuffer())->isForceNTRMode) ) #ifndef SYSM_NO_LOAD
|| (SYSM_IsRunOnDebugger() && ((SYSMRomEmuInfo*)HOTSW_GetRomEmulationBuffer())->isForceNTRMode)
#endif
)
{ {
isNtrMode = TRUE; isNtrMode = TRUE;
} }

View File

@ -79,9 +79,11 @@ void BOOT_Ready( void )
ROM_Header *dh = (ROM_Header *)(SYSMi_GetWork()->romHeaderNTR); // DS互換ROMヘッダ非キャッシュ領域 ROM_Header *dh = (ROM_Header *)(SYSMi_GetWork()->romHeaderNTR); // DS互換ROMヘッダ非キャッシュ領域
// HOTSW終了処理待ち // HOTSW終了処理待ち
#ifndef SYSM_NO_LOAD
while( ! HOTSW_isFinalized() ) { while( ! HOTSW_isFinalized() ) {
OS_Sleep( 1 ); OS_Sleep( 1 );
} }
#endif
// リブート // リブート
REBOOTi_SetTwlRomHeaderAddr( th ); REBOOTi_SetTwlRomHeaderAddr( th );
@ -133,8 +135,11 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget*
(void)OS_ResetRequestIrqMask( (u32)~0 ); (void)OS_ResetRequestIrqMask( (u32)~0 );
// TWL/NTRモード判定 // TWL/NTRモード判定
if ( ! dh->s.platform_code || if ( ! dh->s.platform_code
(SYSM_IsRunOnDebugger() && ((SYSMRomEmuInfo*)HOTSW_GetRomEmulationBuffer())->isForceNTRMode) ) #ifndef SYSM_NO_LOAD
|| (SYSM_IsRunOnDebugger() && ((SYSMRomEmuInfo*)HOTSW_GetRomEmulationBuffer())->isForceNTRMode)
#endif
)
{ {
isNtrMode = TRUE; isNtrMode = TRUE;
} }

View File

@ -190,6 +190,8 @@ static void FSi_WramThread(void* arg)
result = FS_ReadFile( FSiWramWork.p_file, cmd->addr, cmd->length ); result = FS_ReadFile( FSiWramWork.p_file, cmd->addr, cmd->length );
//OS_TPrintf("%s: (0x%08X) %d msec\n", __func__, cmd->addr, (int)OS_TicksToMilliSeconds(OS_GetTick())); //OS_TPrintf("%s: (0x%08X) %d msec\n", __func__, cmd->addr, (int)OS_TicksToMilliSeconds(OS_GetTick()));
break; break;
#ifndef SYSM_NO_LOAD
case FS_WRAM_COMMAND_READ_CARD: case FS_WRAM_COMMAND_READ_CARD:
// <20>J<EFBFBD>[<5B>h<EFBFBD>Š<EFBFBD>[<5B>h // <20>J<EFBFBD>[<5B>h<EFBFBD>Š<EFBFBD>[<5B>h
if(!FSi_IsValidAddressForARM7(cmd->addr, (u32)cmd->length)) if(!FSi_IsValidAddressForARM7(cmd->addr, (u32)cmd->length))
@ -202,6 +204,8 @@ static void FSi_WramThread(void* arg)
result = (card_read_state == CARD_READ_SUCCESS) ? cmd->length : 0; result = (card_read_state == CARD_READ_SUCCESS) ? cmd->length : 0;
if((card_read_state != CARD_READ_SUCCESS)) ERRORLOG_Printf( "FSi_WramThread: read-card error:%d\n", card_read_state ); if((card_read_state != CARD_READ_SUCCESS)) ERRORLOG_Printf( "FSi_WramThread: read-card error:%d\n", card_read_state );
break; break;
#endif // SYSM_NO_LOAD
case FS_WRAM_COMMAND_WRITE: case FS_WRAM_COMMAND_WRITE:
result = FS_WriteFile( FSiWramWork.p_file, cmd->addr, cmd->length ); result = FS_WriteFile( FSiWramWork.p_file, cmd->addr, cmd->length );
//OS_TPrintf("%s: (0x%08X) %d msec\n", __func__, cmd->addr, (int)OS_TicksToMilliSeconds(OS_GetTick())); //OS_TPrintf("%s: (0x%08X) %d msec\n", __func__, cmd->addr, (int)OS_TicksToMilliSeconds(OS_GetTick()));

View File

@ -147,9 +147,11 @@ void SYSMi_SendKeysToARM7( void )
DC_FlushRange( (void *)HW_WRAM_0, sizeof(DeliverBROM9Key) ); DC_FlushRange( (void *)HW_WRAM_0, sizeof(DeliverBROM9Key) );
MI_SetWramBank(MI_WRAM_ARM7_ALL); MI_SetWramBank(MI_WRAM_ARM7_ALL);
#ifndef SYSM_NO_LOAD
#ifdef INITIAL_KEYTABLE_PRELOAD #ifdef INITIAL_KEYTABLE_PRELOAD
SYSMi_GetWork()->flags.hotsw.isKeyTableLoadReady = TRUE; SYSMi_GetWork()->flags.hotsw.isKeyTableLoadReady = TRUE;
#endif #endif
#endif
} }
@ -288,13 +290,15 @@ TitleProperty *SYSM_ReadParameters( void )
while( !SYSMi_GetWork()->flags.arm7.isARM9Start ) { while( !SYSMi_GetWork()->flags.arm7.isARM9Start ) {
SVC_WaitByLoop( 0x1000 ); SVC_WaitByLoop( 0x1000 );
} }
#ifndef SYSM_NO_LOAD
//#ifdef DEBUG_USED_CARD_SLOT_B_ //#ifdef DEBUG_USED_CARD_SLOT_B_
// ARM7のカードチェック完了を待つ // ARM7のカードチェック完了を待つ
while( !SYSMi_GetWork()->flags.hotsw.is1stCardChecked ) { while( !SYSMi_GetWork()->flags.hotsw.is1stCardChecked ) {
SVC_WaitByLoop( 0x1000 ); SVC_WaitByLoop( 0x1000 );
} }
//#endif //#endif
#endif // SYSM_NO_LOAD
//----------------------------------------------------- //-----------------------------------------------------
// ランチャーパラメータの判定 // ランチャーパラメータの判定

View File

@ -377,11 +377,16 @@ static BOOL PrepareDHTDatabase(void)
static BOOL WrapperFunc_ReadCardData(void* dest, s32 offset, s32 length, void* arg) static BOOL WrapperFunc_ReadCardData(void* dest, s32 offset, s32 length, void* arg)
{ {
#pragma unused(arg) #pragma unused(arg)
#ifndef SYSM_NO_LOAD
HOTSW_ReadCardData( (void *)offset, dest, (u32)length); HOTSW_ReadCardData( (void *)offset, dest, (u32)length);
#endif // SYSM_NO_LOAD
return TRUE; return TRUE;
} }
//================================================================================ //================================================================================
// for register SCFG_OP // for register SCFG_OP
//================================================================================ //================================================================================
@ -611,6 +616,8 @@ static void SYSMi_DHTPhase1Callback(const void* addr, const void* orig_addr, u32
DHT_CheckHashPhase1Update( &cba->ctx, addr, (s32)calc_len ); DHT_CheckHashPhase1Update( &cba->ctx, addr, (s32)calc_len );
} }
#ifndef SYSM_NO_LOAD
static void SYSMi_FinalizeHotSWAsync( TitleProperty *pBootTitle, ROM_Header *head ) static void SYSMi_FinalizeHotSWAsync( TitleProperty *pBootTitle, ROM_Header *head )
{ {
HotSwCardState card_state; HotSwCardState card_state;
@ -650,6 +657,8 @@ static void SYSMi_FinalizeHotSWAsync( TitleProperty *pBootTitle, ROM_Header *hea
HOTSW_FinalizeHotSWAsync( card_state ); HOTSW_FinalizeHotSWAsync( card_state );
} }
#endif // SYSM_NO_LOAD
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle ) static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
{ {
enum enum
@ -865,9 +874,13 @@ OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", sp_authcode,
// ヘッダ読み込み完了フラグを立てる // ヘッダ読み込み完了フラグを立てる
SYSM_SetHeaderLoadCompleted(TRUE); SYSM_SetHeaderLoadCompleted(TRUE);
#ifndef SYSM_NO_LOAD
// HOTSW終了処理有効化 // HOTSW終了処理有効化
SYSMi_FinalizeHotSWAsync( pBootTitle, (void*)SYSM_APP_ROM_HEADER_BUF ); SYSMi_FinalizeHotSWAsync( pBootTitle, (void*)SYSM_APP_ROM_HEADER_BUF );
#endif // SYSM_NO_LOAD
// 各領域を読み込む // 各領域を読み込む
source [region_arm9_ntr] = head->s.main_rom_offset; source [region_arm9_ntr] = head->s.main_rom_offset;
length [region_arm9_ntr] = head->s.main_size; length [region_arm9_ntr] = head->s.main_size;
@ -1126,12 +1139,16 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
#define STACK_SIZE 0xc00 #define STACK_SIZE 0xc00
static u64 stack[ STACK_SIZE / sizeof(u64) ]; static u64 stack[ STACK_SIZE / sizeof(u64) ];
#ifndef SYSM_NO_LOAD
HOTSW_InvalidHotSWAsync(); HOTSW_InvalidHotSWAsync();
// 値が変化するまでスリープして待つ。 // 値が変化するまでスリープして待つ。
while( HOTSW_isEnableHotSW() != FALSE ) { while( HOTSW_isEnableHotSW() != FALSE ) {
OS_Sleep( 2 ); OS_Sleep( 2 );
} }
#endif // SYSM_NO_LOAD
// DataOnlyなアプリはロードも起動もしない // DataOnlyなアプリはロードも起動もしない
if( pBootTitle->titleID & TITLE_ID_DATA_ONLY_FLAG_MASK ) if( pBootTitle->titleID & TITLE_ID_DATA_ONLY_FLAG_MASK )
{ {

View File

@ -148,14 +148,22 @@ BOOL SYSM_IsValidTSD( void )
// 有効なTWL/NTRカードが差さっているか // 有効なTWL/NTRカードが差さっているか
BOOL SYSM_IsExistCard( void ) BOOL SYSM_IsExistCard( void )
{ {
#ifdef SYSM_NO_LOAD
return TRUE;
#else // SYSM_NO_LOAD
return (BOOL)SYSMi_GetWork()->flags.hotsw.isExistCard; return (BOOL)SYSMi_GetWork()->flags.hotsw.isExistCard;
#endif SYSM_NO_LOAD
} }
// 検査用カードが差さっているか? // 検査用カードが差さっているか?
BOOL SYSM_IsInspectCard( void ) BOOL SYSM_IsInspectCard( void )
{ {
#ifdef SYSM_NO_LOAD
return FALSE;
#else // SYSM_NO_LOAD
return ( SYSM_IsExistCard() && SYSMi_GetWork()->flags.hotsw.isInspectCard ); return ( SYSM_IsExistCard() && SYSMi_GetWork()->flags.hotsw.isInspectCard );
#endif SYSM_NO_LOAD
} }

View File

@ -99,13 +99,17 @@ SYSMENU_LIBS = \
libboot$(TWL_LIBSUFFIX).a \ libboot$(TWL_LIBSUFFIX).a \
liberrorlog$(TWL_LIBSUFFIX).a \ liberrorlog$(TWL_LIBSUFFIX).a \
libds$(TWL_LIBSUFFIX).a \ libds$(TWL_LIBSUFFIX).a \
libhotsw$(TWL_LIBSUFFIX).a \
libdht$(TWL_LIBSUFFIX).a \ libdht$(TWL_LIBSUFFIX).a \
libreloc_info$(TWL_LIBSUFFIX).a \ libreloc_info$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a \ libnamut$(TWL_LIBSUFFIX).a \
libsharedfont_launcher$(TWL_LIBSUFFIX).a \ libsharedfont_launcher$(TWL_LIBSUFFIX).a \
WDS$(TWL_LIBSUFFIX).a WDS$(TWL_LIBSUFFIX).a
ifneq ($(SYSM_NO_LOAD),TRUE)
SYSMENU_LIBS += \
libhotsw$(TWL_LIBSUFFIX).a
endif
SDK_APPEND_LIBS = \ SDK_APPEND_LIBS = \
libes$(TWL_LIBSUFFIX).a \ libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \ libboc$(TWL_LIBSUFFIX).a \

View File

@ -18,6 +18,10 @@
ifneq ($(SYSM_UPDATER_RELEASE),TRUE) ifneq ($(SYSM_UPDATER_RELEASE),TRUE)
# for CTR
export SYSM_FOR_CTR = TRUE
export SYSM_NO_LOAD = TRUE
# COMPILE SWITCH ※最終ROM作成時は、全てFALSEにセットする。SUBDIRのビルド時にも影響するようexportで環境変数設定する。 # COMPILE SWITCH ※最終ROM作成時は、全てFALSEにセットする。SUBDIRのビルド時にも影響するようexportで環境変数設定する。
export SYSM_DO_NOT_SHOW_LAUNCHER = FALSE export SYSM_DO_NOT_SHOW_LAUNCHER = FALSE
export SYSM_DISABLE_WDS_SCAN = TRUE export SYSM_DISABLE_WDS_SCAN = TRUE

View File

@ -595,6 +595,8 @@ static TitleProperty *ProcessPads( TitleProperty *pTitleList )
} }
} }
#ifndef SYSM_NO_LOAD
// HOTSW許可・抑制テスト // HOTSW許可・抑制テスト
{ {
static BOOL hotswEnable = TRUE; static BOOL hotswEnable = TRUE;
@ -619,7 +621,9 @@ static TitleProperty *ProcessPads( TitleProperty *pTitleList )
PutStringUTF16( 0, 175, TXT_COLOR_RED, L"HotSw Disable" ); PutStringUTF16( 0, 175, TXT_COLOR_RED, L"HotSw Disable" );
} }
} }
#endif // SYSM_NO_LOAD
return ret; return ret;
} }

View File

@ -232,8 +232,10 @@ void TwlMain( void )
TP_Init(); TP_Init();
RTC_Init(); RTC_Init();
SND_Init();// sound init SND_Init();// sound init
#ifndef SYSM_NO_LOAD
#ifdef USE_WRAM_LOAD #ifdef USE_WRAM_LOAD
HOTSW_Init(); HOTSW_Init();
#endif
#endif #endif
//NAMの初期化 //NAMの初期化