diff --git a/Makefile b/Makefile index be8c7060..cbea149c 100644 --- a/Makefile +++ b/Makefile @@ -20,8 +20,16 @@ include $(TWLIPL_ROOT)/build/buildtools/commondefs #---------------------------------------------------------------------------- +export TWL_ARCHGEN = ALL -SUBDIRS = build +SUBDIRS = $(TWLSDK_ROOT)/add-ins/NitroWireless \ + $(TWLSDK_ROOT)/build/libraries/ese \ + $(TWLSDK_ROOT)/build/libraries/nam \ + $(TWLSDK_ROOT)/build/libraries/reboot \ + $(TWLSDK_ROOT)/build/libraries/aes \ + $(TWLSDK_ROOT)/build/components/racoon.TWL \ + $(TWLSYSTEM_ROOT) \ + build #---------------------------------------------------------------------------- diff --git a/Makefile.sysmenu b/Makefile.sysmenu index 59f6ec12..a4cdf36b 100644 --- a/Makefile.sysmenu +++ b/Makefile.sysmenu @@ -12,16 +12,24 @@ # in whole or in part, without the prior written consent of Nintendo. # # $Date:: $ -# $Rev:$ -# $Author:$ +# $Rev$ +# $Author$ #---------------------------------------------------------------------------- include $(TWLIPL_ROOT)/build/buildtools/commondefs #---------------------------------------------------------------------------- +export TWL_ARCHGEN = ALL SUBDIRS = \ + $(TWLSDK_ROOT)/add-ins/NitroWireless \ + $(TWLSDK_ROOT)/build/libraries/ese \ + $(TWLSDK_ROOT)/build/libraries/nam \ + $(TWLSDK_ROOT)/build/libraries/reboot \ + $(TWLSDK_ROOT)/build/libraries/aes \ + $(TWLSDK_ROOT)/build/components/racoon.TWL \ + $(TWLSYSTEM_ROOT) \ build/libraries_sysmenu\ build/components \ build/systemmenu_RED diff --git a/build/libraries_sysmenu/settings/ARM9/src/TWLSettings.c b/build/libraries_sysmenu/settings/ARM9/src/TWLSettings.c index 690e0dd7..0acfb55e 100644 --- a/build/libraries_sysmenu/settings/ARM9/src/TWLSettings.c +++ b/build/libraries_sysmenu/settings/ARM9/src/TWLSettings.c @@ -339,6 +339,7 @@ static void TSDi_ClearSettings( TWLSettingsData *pTSD ) MI_CpuClearFast( pTSD, sizeof(TWLSettingsData) ); // 初期値が0以外のもの pTSD->region = TWL_DEFAULT_REGION; // リージョンは本体設定データからなくなる予定 + pTSD->backLightBrightness = TWL_BACKLIGHT_LEVEL_MAX; pTSD->owner.birthday.month = 1; pTSD->owner.birthday.day = 1; pTSD->valid_language_bitmap = s_validLangBitmapList[ pTSD->region ]; diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index af3b0975..7d17e7ba 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -33,6 +33,7 @@ extern void SYSM_SetMountInfo( NAMTitleId titleID ); // extern void SYSM_SetBootSRLPath( NAMTitleId titleID ); // SRL起動パスのセット // function's prototype------------------------------------------------------- +static TitleProperty *SYSMi_CheckShortcutBoot( void ); static BOOL SYSMi_IsDebuggerBannerViewMode( void ); static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle ); static void SYSMi_WriteAdjustRTC( void ); @@ -53,6 +54,8 @@ SYSM_work *pSysm; // #endif // static variable------------------------------------------------------------- +static OSThread thread; + static BOOL s_isBanner = FALSE; static NTRBannerFile s_bannerBuf; @@ -109,32 +112,45 @@ void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ) // ============================================================================ // パラメータリード -void SYSM_ReadParameters( void ) +TitleProperty *SYSM_ReadParameters( void ) { + TitleProperty *pBootTitle = NULL; + // ARM7のリセットパラメータ取得が完了するのを待つ while( !SYSMi_GetWork()->isARM9Start ) { SVC_WaitByLoop( 0x1000 ); } - // リセットパラメータの判定 - if( SYSM_GetResetParamBody()->v1.flags.isLogoSkip && - SYSMi_IsDebuggerBannerViewMode() ) { - SYSM_SetLogoDemoSkip( TRUE ); + //----------------------------------------------------- + // リセットパラメータの判定(リセットパラメータが有効かどうかは、ARM7でやってくれている) + //----------------------------------------------------- + { + if( SYSM_GetResetParamBody()->v1.flags.isLogoSkip || // ロゴデモスキップ? + SYSMi_IsDebuggerBannerViewMode() ) { + SYSM_SetLogoDemoSkip( TRUE ); + } + + if( SYSM_GetResetParamBody()->v1.bootTitleID ) { // アプリ直接起動の指定があったらロゴデモを飛ばして指定アプリ起動 + pBootTitle = (TitleProperty *)&SYSM_GetResetParamBody()->v1; + } } -#if 0 - // アプリロード済みで再配置要求があるなら、再配置処理 - if( SYSM_GetResetParamBody()->v1.flags.isAppLoadCompleted && - SYSM_GetResetParamBody()->v1.flags.reqAppRelocate ) { - // 再配置処理 + //----------------------------------------------------- + // 量産工程用ショートカットキー or + // 検査カード起動 + //----------------------------------------------------- + if( pBootTitle == NULL ) { + pBootTitle = SYSMi_CheckShortcutBoot(); } -#endif + //----------------------------------------------------- // 本体設定データのリード + //----------------------------------------------------- if( SYSM_ReadTWLSettingsFile() ) { // NANDからTWL本体設定データをリード SYSM_SetBackLightBrightness( (u8)TSD_GetBacklightBrightness() ); // 読み出したTWL本体設定データをもとにバックライト輝度設定 SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。 } + // SYSM_ReadHWInfo(); // NANDからHW情報をリード SYSMi_WriteAdjustRTC(); // RTCクロック補正値をセット。 SYSMi_CheckRTC(); @@ -146,7 +162,52 @@ void SYSM_ReadParameters( void ) //NAMの初期化 //NAM_Init(AllocForNAM,FreeForNAM); + + return pBootTitle; +} + +// ショートカット起動のチェック +static TitleProperty *SYSMi_CheckShortcutBoot( void ) +{ +#if 0 // ※未実装 + static TitleProperty s_bootTitle; + + MI_CpuClear8( &s_bootTitle, sizoef(TitleProperty) ); + + //----------------------------------------------------- + // 量産工程用ショートカットキー or + // 検査カード起動 + //----------------------------------------------------- + if( SYSM_IsInspectCard() || + ( SYSM_IsExistCard() && + ( ( PAD_Read() & PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) == + PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) ) + ) { + if( SYSM_GetCardTitleProperty( &s_bootTitle ) ) { // ※未実装 + s_bootTitle.flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす + s_bootTitle.flags.isLogoSkip = TRUE; // ロゴデモを飛ばす + SYSM_SetLogoDemoSkip( TRUE ); + return &s_bootTitle; + } + } + + //----------------------------------------------------- + // TWL設定データ未入力時の初回起動シーケンス起動 + //----------------------------------------------------- +#ifdef ENABLE_INITIAL_SETTINGS_ + if( !TSD_IsSetTP() || + !TSD_IsSetLanguage() || + !TSD_IsSetDateTime() || + !TSD_IsSetUserColor() || + !TSD_IsSetNickname() ) { + s_bootTitle.titleID = TITLE_ID_MACHINE_SETTINGS; + return &s_bootTitle; + } +#endif // ENABLE_INITIAL_SETTINGS_ + +#endif // 0 + return NULL; // 「ブート内容未定」でリターン } @@ -298,8 +359,6 @@ void SYSM_SetLogoDemoSkip( BOOL skip ) // ロゴデモスキップか? BOOL SYSM_IsLogoDemoSkip( void ) { - // ※システムアプリからのハードリセットによるロゴデモ飛ばしも判定に入れる。 - return SYSMi_GetWork()->isLogoSkip; } @@ -367,8 +426,6 @@ BOOL SYSM_IsValidTSD( void ) // // ============================================================================ -static BOOL s_load_success = FALSE; - static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle ) { enum { @@ -493,36 +550,53 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len); // ROMヘッダバッファをコピー MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); - s_load_success = TRUE; + SYSMi_GetWork()->isLoadSucceeded = TRUE; } -// スタック用 -#define THREAD_PRIO 17 -#define STACK_SIZE 5120 // 適当 -static OSThread thread; -static u64 stack[ STACK_SIZE / sizeof(u64) ]; // 指定タイトルを別スレッドでロード開始する void SYSM_StartLoadTitle( TitleProperty *pBootTitle ) { - s_load_success = FALSE; - OS_InitThread(); - OS_CreateThread( &thread, (void (*)(void *))SYSMi_LoadTitleThreadFunc, (void*)pBootTitle, stack+STACK_SIZE/sizeof(u64), STACK_SIZE,THREAD_PRIO ); - OS_WakeupThreadDirect( &thread ); +#define THREAD_PRIO 17 +#define STACK_SIZE 5120 // 適当 + static u64 stack[ STACK_SIZE / sizeof(u64) ]; + + // アプリ未ロード状態なら、ロード開始 + if( !pBootTitle->flags.isAppLoadCompleted ) { + SYSMi_GetWork()->isLoadSucceeded = FALSE; + OS_InitThread(); + OS_CreateThread( &thread, (void (*)(void *))SYSMi_LoadTitleThreadFunc, (void*)pBootTitle, stack+STACK_SIZE/sizeof(u64), STACK_SIZE,THREAD_PRIO ); + OS_WakeupThreadDirect( &thread ); + }else if( pBootTitle->flags.isAppRelocate ) { + // アプリロード済みで、再配置要求ありなら、再配置 + // ※再配置処理 + // SYSMi_Relocate(); + SYSMi_GetWork()->isLoadSucceeded = TRUE; + } } + +// アプリロード済み? BOOL SYSM_IsLoadTitleFinished( void ) { + if( SYSM_GetResetParamBody()->v1.flags.isAppLoadCompleted ) { + return TRUE; + } return OS_IsThreadTerminated( &thread ); } + // ロード済みの指定タイトルの認証とブートを行う AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ) { - // ロード成功しているか - if(s_load_success == FALSE) + // ロード中 + if( !SYSM_IsLoadTitleFinished() ) { + return AUTH_RESULT_PROCESSING; + } + // ロード成功? + if( SYSMi_GetWork()->isLoadSucceeded == FALSE ) { - return AUTH_RESULT_TITLE_POINTER_ERROR; + return AUTH_RESULT_TITLE_LOAD_FAILED; } // パラメータチェック if( !SYSMi_CheckTitlePointer( pBootTitle ) ) { @@ -534,7 +608,11 @@ AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ) return AUTH_RESULT_ENTRY_ADDRESS_ERROR; } #endif - + + + // ※ROMヘッダ認証 + + // マウント情報の登録 SYSM_SetMountInfo ( pBootTitle->titleID ); SYSM_SetBootSRLPath( pBootTitle->titleID ); @@ -544,18 +622,18 @@ AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ) return AUTH_RESULT_SUCCEEDED; } +#if 0 // 指定タイトルの認証&ロード ※1フレームじゃ終わらん。 // もしかすると使わないかも -AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle ) +void SYSM_LoadAndAuthenticateTitleThread( TitleProperty *pBootTitle ) { - // 指定タイトルのロード - SYSM_StartLoadTitle( pBootTitle ); - + SYSMi_LoadTitleThreadFunc( pBootTitle ); OS_JoinThread(&thread); // 認証 return SYSM_AuthenticateTitle( pBootTitle ); } +#endif // ============================================================================ @@ -567,7 +645,7 @@ AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle ) // バックライト輝度調整 void SYSM_SetBackLightBrightness( u8 brightness ) { - if( brightness > BACKLIGHT_LEVEL_MAX ) { + if( brightness > TWL_BACKLIGHT_LEVEL_MAX ) { OS_Panic( "Backlight brightness over : %d\n", brightness ); } ( void )PMi_WriteRegister( 0x20, (u16)brightness ); diff --git a/build/systemMenu_RED/Launcher/ARM9/Makefile b/build/systemMenu_RED/Launcher/ARM9/Makefile index 556b1203..23266e7b 100644 --- a/build/systemMenu_RED/Launcher/ARM9/Makefile +++ b/build/systemMenu_RED/Launcher/ARM9/Makefile @@ -56,7 +56,7 @@ LLIBRARIES += libnam$(TWL_LIBSUFFIX).a \ ADDRESS_DTCM = 0x0e000000 DEFAULT_COMP_ARM7 = hyena -DEFAULT_MAKEROM_ARM7_BASE = $(TWLIPL_ROOT)/components/$(DEFAULT_COMP_ARM7)/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) +DEFAULT_MAKEROM_ARM7_BASE = $(SYSMENU_ROOT)/components/$(DEFAULT_COMP_ARM7)/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) MAKEROM_FLAGS += -F -DTITLEID_LO='$(TITLEID_LO)' diff --git a/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.c b/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.c index 2426ed88..a93a280b 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.c @@ -25,7 +25,6 @@ // ロゴ表示ステータス構造体 typedef struct LogoStatus { s32 state; - BOOL enable; s32 value_A; s32 value_B; s32 mainCounter; @@ -37,12 +36,16 @@ extern void LoadLogoData( void ); // function's prototype----------------------------------------------- // static variables--------------------------------------------------- -static LogoStatus s_logo = { 0, TRUE, 0, 0, 0 }; +static LogoStatus s_logo = { 0, 0, 0, 0 }; // const data--------------------------------------------------------- -static void LogoInit( void ) +void LogoInit( void ) { + if( SYSM_IsLogoDemoSkip() ) { + return; + } + // 画面OFF GX_DispOff(); GXS_DispOff(); @@ -62,6 +65,8 @@ static void LogoInit( void ) // ロゴデータロード LoadLogoData(); + s_logo.state = 1; + s_logo.mainCounter = 0; s_logo.value_A = 0; s_logo.value_B = 16; G2_ChangeBlendAlpha( s_logo.value_A, s_logo.value_B ); @@ -74,18 +79,11 @@ static void LogoInit( void ) // ロゴメイン int LogoMain() { - if( !IsLogoEnable() ) { + if( SYSM_IsLogoDemoSkip() ) { return 1; } switch( s_logo.state ) { - case 0: // 初期設定 - LogoInit(); - - s_logo.mainCounter = 0; - s_logo.state++; - break; - case 1: // Nintendoロゴフェードイン if( s_logo.mainCounter++ < 16 ){ // Nintendoロゴ 表示 G2_ChangeBlendAlpha( ++s_logo.value_A, --s_logo.value_B ); @@ -118,15 +116,3 @@ int LogoMain() return 0; } - -// ロゴ表示をOFFにする。 -void SetLogoEnable( BOOL enable ) -{ - s_logo.enable = enable; -} - -// ロゴ表示状態取得 -BOOL IsLogoEnable(void) -{ - return s_logo.enable; -} diff --git a/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.h b/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.h index 3923a334..4e68c2e8 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.h +++ b/build/systemMenu_RED/Launcher/ARM9/src/Logo/logoDemo.h @@ -24,6 +24,7 @@ extern "C" { #endif +extern void LogoInit( void ); extern int LogoMain( void ); extern void SetLogoEnable( BOOL enable ); extern BOOL IsLogoEnable( void ); diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index 6f02f61f..4d38499b 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -255,6 +255,8 @@ void LauncherInit( TitleProperty *pTitleList ) { #pragma unused( pTitleList ) + InitBG(); // BG初期化 + GX_DispOff(); GXS_DispOff(); @@ -294,8 +296,8 @@ void LauncherInit( TitleProperty *pTitleList ) static int selected = 0; -// ROMのローディング中 -void LauncherLoading( TitleProperty *pTitleList ) +// ROMのローディング中のランチャーフェードアウト +BOOL LauncherFadeout( TitleProperty *pTitleList ) { static int fadecount = 0; @@ -330,7 +332,12 @@ void LauncherLoading( TitleProperty *pTitleList ) // これだと124フレームでフェードアウト終わる G2_ChangeBlendAlpha( fadecount/4, 31-(fadecount/4) ); - if(fadecount < 124) fadecount++; + if(fadecount < 124) { + fadecount++; + return FALSE; + }else { + return TRUE; + } } // LauncherMainのSelectSomethingByTPで使うSelectSomethingFuncの実装 diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.h b/build/systemMenu_RED/Launcher/ARM9/src/launcher.h index 4b9d2719..6f586e71 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.h +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.h @@ -33,7 +33,7 @@ extern "C" { // function---------------------------------------------------------- void LauncherInit( TitleProperty *pTitleList ); -void LauncherLoading( TitleProperty *pTitleList ); +BOOL LauncherFadeout( TitleProperty *pTitleList ); TitleProperty *LauncherMain( TitleProperty *pTitleList ); diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index 685a1b90..82fde044 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -25,7 +25,6 @@ // define data----------------------------------------------------------------- // function's prototype------------------------------------------------------- -static TitleProperty *CheckShortcutBoot( TitleProperty *pTitleList ); static void INTR_VBlank( void ); // global variable------------------------------------------------------------- @@ -38,7 +37,7 @@ static void INTR_VBlank( void ); void TwlMain( void ) { enum { - START = 0, + LOGODEMO_INIT = 0, LOGODEMO = 1, LAUNCHER_INIT = 2, LAUNCHER = 3, @@ -48,15 +47,17 @@ void TwlMain( void ) BOOT = 7, STOP = 8 }; - u32 state = START; + u32 state = LOGODEMO_INIT; TitleProperty *pBootTitle = NULL; TitleProperty pTitleList[ LAUNCHER_TITLE_LIST_NUM ]; + OSTick start, end = 0; // システムメニュー初期化---------- SYSM_Init( Alloc, Free ); // OS_Initの前でコール。 // OS初期化------------------------ OS_Init(); + OS_InitTick(); PM_Init(); (void)OS_EnableIrq(); @@ -77,39 +78,35 @@ void TwlMain( void ) InitAllocator(); // ※SYSM_Init以外のSYSMライブラリ関数を呼ぶ前に // Alloc, Freeで登録したメモリアロケータを初期化してください。 // 各種パラメータの取得------------ - SYSM_ReadParameters(); // 本体設定データ等のリード - (void)SYSM_GetNandTitleList( pTitleList, LAUNCHER_TITLE_LIST_NUM ); // NANDアプリリストの取得(内蔵アプリはpTitleList[1]から格納される) - (void)SYSM_GetCardTitleList( pTitleList ); // カードアプリリストの取得(カードアプリはpTitleList[0]に格納される) + pBootTitle = SYSM_ReadParameters(); // 本体設定データ、リセットパラメータ、 + // 初回起動シーケンス判定、 + // 検査用オート起動カード判定、量産ライン用キーショートカット起動判定等のリード - // リセットパラメータ&ショートカットチェック---------- - if( SYSM_GetResetParamBody()->v1.bootTitleID ) { // アプリ直接起動の指定があったらロゴデモを飛ばして指定アプリ起動 - pBootTitle = (TitleProperty *)&SYSM_GetResetParamBody()->v1; - }else { - pBootTitle = CheckShortcutBoot( pTitleList ); + // 「ダイレクトブートでない」なら、NAND & カードアプリリスト取得 + if( !pBootTitle ) { + (void)SYSM_GetNandTitleList( pTitleList, LAUNCHER_TITLE_LIST_NUM ); // NANDアプリリストの取得(内蔵アプリはpTitleList[1]から格納される) + (void)SYSM_GetCardTitleList( pTitleList ); // カードアプリリストの取得(カードアプリはpTitleList[0]に格納される) } - // ダイレクトブートでロゴデモスキップでない時、各種リソースのロード------------ - if( !( pBootTitle && !pBootTitle->flags.isLogoSkip ) ) { + // 「ダイレクトブートでない」もしくは + // 「ダイレクトブートだが、ロゴデモ表示」の時、各種リソースのロード------------ + if( !pBootTitle || + ( pBootTitle && !SYSM_IsLogoDemoSkip() ) ) { // FS_ReadContentFile( ContentID ); // タイトル内リソースファイルのリード // FS_ReadSharedContentFile( ContentID ); // 共有コンテントファイルのリード } // 開始ステートの判定-------------- + if( pBootTitle ) { - // ダイレクト起動タイトルの指定があるなら、ロゴ、ランチャーを飛ばして起動 - if( pBootTitle->flags.isAppLoadCompleted ) { - // ロード済み状態なら、直接認証へ - state = AUTHENTICATE; - }else { - // さもなくば、ロード開始 - state = LOAD_START; - } + // ダイレクトブートなら、ロゴ、ランチャーを飛ばしてロード開始 + state = LOAD_START; }else if( SYSM_IsLogoDemoSkip() ) { - // リセットパラメータでロゴデモスキップが指定されていたら、ランチャー起動 + // ロゴデモスキップが指定されていたら、ランチャー起動 state = LAUNCHER_INIT; }else { // 何もないなら、ロゴデモ起動 - state = START; + state = LOGODEMO_INIT; } // メインループ-------------------- @@ -120,7 +117,8 @@ void TwlMain( void ) ReadTP(); // TP入力の取得 switch( state ) { - case START: + case LOGODEMO_INIT: + LogoInit(); state = LOGODEMO; break; case LOGODEMO: @@ -129,7 +127,6 @@ void TwlMain( void ) } break; case LAUNCHER_INIT: - InitBG(); // BG初期化 LauncherInit( pTitleList ); state = LAUNCHER; break; @@ -142,20 +139,25 @@ void TwlMain( void ) case LOAD_START: SYSM_StartLoadTitle( pBootTitle ); state = LOADING; + + start = OS_GetTick(); + break; case LOADING: - LauncherLoading( pTitleList ); - if( SYSM_IsLoadTitleFinished() ) - { - GX_DispOff(); - GXS_DispOff(); + if( LauncherFadeout( pTitleList ) && + SYSM_IsLoadTitleFinished() ) { state = AUTHENTICATE; } + + if( ( end == 0 ) && + SYSM_IsLoadTitleFinished() ) { + end = OS_GetTick(); + OS_TPrintf( "Load Time : %dms\n", OS_TicksToMilliSeconds( end - start ) ); + } break; case AUTHENTICATE: switch ( SYSM_AuthenticateTitle( pBootTitle ) ) { // アプリ認証&ブート 成功時:never return - case AUTH_PROCESSING: - break; + case AUTH_RESULT_TITLE_LOAD_FAILED: case AUTH_RESULT_TITLE_POINTER_ERROR: case AUTH_RESULT_AUTHENTICATE_FAILED: case AUTH_RESULT_ENTRY_ADDRESS_ERROR: @@ -173,48 +175,6 @@ void TwlMain( void ) } -// ショートカット起動のチェック -static TitleProperty *CheckShortcutBoot( TitleProperty *pTitleList ) -{ -#if 0 // ※未実装 - TitleProperty *pTgt; - - ReadKeyPad(); // キー入力の取得 - - //----------------------------------------------------- - // TWL設定データ未入力時の初回起動シーケンス起動 - //----------------------------------------------------- -#ifdef ENABLE_INITIAL_SETTINGS_ - if( !TSD_IsSetTP() || - !TSD_IsSetLanguage() || - !TSD_IsSetDateTime() || - !TSD_IsSetUserColor() || - !TSD_IsSetNickname() ) { - return SYSM_GetTitleProperty( TITLE_ID_MACHINE_SETTINGS, pTitleList ); // ※未実装 - } -#endif // ENABLE_INITIAL_SETTINGS_ - - //----------------------------------------------------- - // 量産工程用ショートカットキー or - // 検査カード起動 - //----------------------------------------------------- - if( ( SYSM_IsExistCard() && - ( ( pad.cont & PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) == PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) ) || - SYSM_IsInspectCard() ) { - pTgt = SYSM_GetTitleProperty(); // ※未実装 - if( pTgt ) { - pTgt->flags.isLogoSkip = TRUE; // ロゴデモを飛ばす - pTgt->flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす - } - return pTgt; - } -#else -#pragma unused(pTitleList) -#endif // 0 - return NULL; // 「ブート内容未定」でリターン -} - - // ============================================================================ // 割り込み処理 // ============================================================================ diff --git a/doc/TWL_SystemMenu繝。繝「繝ェ繝槭ャ繝.vsd b/doc/TWL_SystemMenu繝。繝「繝ェ繝槭ャ繝.vsd index c7e19280..5cf4e88f 100644 Binary files a/doc/TWL_SystemMenu繝。繝「繝ェ繝槭ャ繝.vsd and b/doc/TWL_SystemMenu繝。繝「繝ェ繝槭ャ繝.vsd differ diff --git a/include/sysmenu/settings/common/TWLSettings.h b/include/sysmenu/settings/common/TWLSettings.h index 261f855d..46dffc8f 100644 --- a/include/sysmenu/settings/common/TWLSettings.h +++ b/include/sysmenu/settings/common/TWLSettings.h @@ -39,7 +39,7 @@ extern "C" { #define TWL_COMMENT_BUFFERSIZE ( ( TWL_COMMENT_LENGTH + 1 ) * 2 ) // コメントバッファサイズ #define TWL_FAVORITE_COLOR_MAX_NUM NTR_FAVORITE_COLOR_MAX_NUM // 好きな色の最大数 #define TSD_TEMP_BUFFER_SIZE ( sizeof(TSDStore) * 2 ) // TSD_ReadTWLSettingsで必要なTempBufferサイズ - +#define TWL_BACKLIGHT_LEVEL_MAX 22 // バックライト輝度上限(ハード的な制約は上限のみ) // 言語コード // 欧州と北米の表示テキストの違いは、リージョンと言語コードを併せて判断 diff --git a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h index 6cb32739..2cbc7eb8 100644 --- a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h +++ b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h @@ -36,11 +36,10 @@ extern "C" { //#define ENABLE_INITIAL_SETTINGS_ #endif // SDK_FINALROM -#define BACKLIGHT_LEVEL_MAX 22 // バックライト輝度上限(ハード的な制約は上限のみ) #define CARD_SLOT_NUM 1 // カードスロット数 #define LAUNCHER_TITLE_LIST_NUM 40 // ランチャーのタイトルリスト数 -#define TITLE_ID_MACHINE_SETTINGS 0x000100014d534554 // 本体設定のタイトルID +#define TITLE_ID_MACHINE_SETTINGS 0x000100015445534d // 本体設定のタイトルID #define PAD_PRODUCTION_SHORTCUT_CARD_BOOT ( PAD_BUTTON_A | PAD_BUTTON_B \ | PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R ) @@ -61,11 +60,12 @@ typedef struct TitleProperty { // // アプリ認証結果 typedef enum AuthResult { - AUTH_PROCESSING = 0, - AUTH_RESULT_SUCCEEDED = 1, - AUTH_RESULT_TITLE_POINTER_ERROR = 2, - AUTH_RESULT_AUTHENTICATE_FAILED = 3, - AUTH_RESULT_ENTRY_ADDRESS_ERROR = 4 + AUTH_RESULT_SUCCEEDED = 0, + AUTH_RESULT_PROCESSING = 1, + AUTH_RESULT_TITLE_LOAD_FAILED = 2, + AUTH_RESULT_TITLE_POINTER_ERROR = 3, + AUTH_RESULT_AUTHENTICATE_FAILED = 4, + AUTH_RESULT_ENTRY_ADDRESS_ERROR = 5 }AuthResult; @@ -78,7 +78,7 @@ extern void (*SYSM_Free)( void *ptr ); // // 初期化 extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); // 初期化。OS_Initの前のへんでコールしてください。 extern void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ); // SYSM_initで設定した場合は必要なし。 -extern void SYSM_ReadParameters( void ); // 本体設定データ、リセットパラメータなどを取得 +extern TitleProperty *SYSM_ReadParameters( void ); // 本体設定データ、リセットパラメータなどを取得 // アプリ情報取得 extern int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ); // カードアプリタイトルリストの取得 @@ -88,7 +88,6 @@ extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size ); / extern void SYSM_StartLoadTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドでロード開始 extern BOOL SYSM_IsLoadTitleFinished( void ); // SYSM_StartLoadTitleで起動したスレッドが終了したかどうかを確認 extern AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを認証してブート -extern AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyをロード&認証してブート // 成功時は、never return. // デバイス制御 extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h index 4a49bb7f..4d741788 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h @@ -34,13 +34,18 @@ extern "C" { #define CLONE_BOOT_MODE 1 #define OTHER_BOOT_MODE 2 +// NAMTitleIDをHiLoに分割してアクセスする場合に使用 +typedef struct TitleID_HiLo { + u8 Lo[ 4 ]; + u32 Hi; +}TitleID_HiLo; // リセットパラメータ フラグ typedef struct BootFlags { u16 isLogoSkip : 1; // ロゴデモスキップ要求 u16 isInitialShortcutSkip : 1; // 初回起動シーケンススキップ要求 u16 isAppLoadCompleted : 1; // アプリロード済みを示す - u16 reqAppRelocate : 1; // アプリ再配置要求 + u16 isAppRelocate : 1; // アプリ再配置要求 u16 rsv : 12; }BootFlags; @@ -84,7 +89,8 @@ typedef struct SYSM_work { vu16 isLogoSkip :1; // ロゴデモスキップ vu16 isOnDebugger :1; // デバッガ動作か? vu16 isExistCard :1; // 有効なNTR/TWLカードが存在するか? - vu16 rsv :9; + vu16 isLoadSucceeded :1; + vu16 rsv :8; u16 cardHeaderCrc16; // システムメニューで計算したROMヘッダCRC16 int cloneBootMode; ResetParam resetParam;