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_
TWL_SYSMENU_COMMONDEFS_ = TRUE
SYSM_FOR_CTR = TRUE
SYSM_NO_LOAD = TRUE
ifdef SYSM_FOR_CTR
MACRO_FLAGS += -DSYSM_FOR_CTR
ifdef SYSM_NO_LOAD

View File

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

View File

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

View File

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

View File

@ -190,6 +190,8 @@ static void FSi_WramThread(void* arg)
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()));
break;
#ifndef SYSM_NO_LOAD
case FS_WRAM_COMMAND_READ_CARD:
// <20>J<EFBFBD>[<5B>h<EFBFBD>Š<EFBFBD>[<5B>h
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;
if((card_read_state != CARD_READ_SUCCESS)) ERRORLOG_Printf( "FSi_WramThread: read-card error:%d\n", card_read_state );
break;
#endif // SYSM_NO_LOAD
case FS_WRAM_COMMAND_WRITE:
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()));

View File

@ -147,9 +147,11 @@ void SYSMi_SendKeysToARM7( void )
DC_FlushRange( (void *)HW_WRAM_0, sizeof(DeliverBROM9Key) );
MI_SetWramBank(MI_WRAM_ARM7_ALL);
#ifndef SYSM_NO_LOAD
#ifdef INITIAL_KEYTABLE_PRELOAD
SYSMi_GetWork()->flags.hotsw.isKeyTableLoadReady = TRUE;
#endif
#endif
}
@ -288,13 +290,15 @@ TitleProperty *SYSM_ReadParameters( void )
while( !SYSMi_GetWork()->flags.arm7.isARM9Start ) {
SVC_WaitByLoop( 0x1000 );
}
#ifndef SYSM_NO_LOAD
//#ifdef DEBUG_USED_CARD_SLOT_B_
// ARM7のカードチェック完了を待つ
while( !SYSMi_GetWork()->flags.hotsw.is1stCardChecked ) {
SVC_WaitByLoop( 0x1000 );
}
//#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)
{
#pragma unused(arg)
#ifndef SYSM_NO_LOAD
HOTSW_ReadCardData( (void *)offset, dest, (u32)length);
#endif // SYSM_NO_LOAD
return TRUE;
}
//================================================================================
// 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 );
}
#ifndef SYSM_NO_LOAD
static void SYSMi_FinalizeHotSWAsync( TitleProperty *pBootTitle, ROM_Header *head )
{
HotSwCardState card_state;
@ -650,6 +657,8 @@ static void SYSMi_FinalizeHotSWAsync( TitleProperty *pBootTitle, ROM_Header *hea
HOTSW_FinalizeHotSWAsync( card_state );
}
#endif // SYSM_NO_LOAD
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
{
enum
@ -865,9 +874,13 @@ OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", sp_authcode,
// ヘッダ読み込み完了フラグを立てる
SYSM_SetHeaderLoadCompleted(TRUE);
#ifndef SYSM_NO_LOAD
// HOTSW終了処理有効化
SYSMi_FinalizeHotSWAsync( pBootTitle, (void*)SYSM_APP_ROM_HEADER_BUF );
#endif // SYSM_NO_LOAD
// 各領域を読み込む
source [region_arm9_ntr] = head->s.main_rom_offset;
length [region_arm9_ntr] = head->s.main_size;
@ -1126,12 +1139,16 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
#define STACK_SIZE 0xc00
static u64 stack[ STACK_SIZE / sizeof(u64) ];
#ifndef SYSM_NO_LOAD
HOTSW_InvalidHotSWAsync();
// 値が変化するまでスリープして待つ。
while( HOTSW_isEnableHotSW() != FALSE ) {
OS_Sleep( 2 );
}
#endif // SYSM_NO_LOAD
// DataOnlyなアプリはロードも起動もしない
if( pBootTitle->titleID & TITLE_ID_DATA_ONLY_FLAG_MASK )
{

View File

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

View File

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

View File

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

View File

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

View File

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