mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・ルートのMakefileおよびMakefile.sysmenuで、TwlIPLツリーのビルドに必要な他ツリーのコードもビルドするよう変更。
・ショートカット起動や検査カードチェックもSYSM_ReadParameters内でチェックするよう変更。 ・本体設定データが無効だった時の初期値において、バックライト輝度をMAXにする。 ・ランチャーでのブートパラメータ処理を変更。 ・ランチャーでのフェードアウト処理とロード処理の判定を調整。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@231 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
fe36760a82
commit
a9dbe9301a
10
Makefile
10
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
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 ];
|
||||
|
||||
@ -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 );
|
||||
|
||||
@ -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)'
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void LogoInit( void );
|
||||
extern int LogoMain( void );
|
||||
extern void SetLogoEnable( BOOL enable );
|
||||
extern BOOL IsLogoEnable( void );
|
||||
|
||||
@ -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の実装
|
||||
|
||||
@ -33,7 +33,7 @@ extern "C" {
|
||||
// function----------------------------------------------------------
|
||||
void LauncherInit( TitleProperty *pTitleList );
|
||||
|
||||
void LauncherLoading( TitleProperty *pTitleList );
|
||||
BOOL LauncherFadeout( TitleProperty *pTitleList );
|
||||
TitleProperty *LauncherMain( TitleProperty *pTitleList );
|
||||
|
||||
|
||||
|
||||
@ -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; // 「ブート内容未定」でリターン
|
||||
}
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// 割り込み処理
|
||||
// ============================================================================
|
||||
|
||||
Binary file not shown.
@ -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 // バックライト輝度上限(ハード的な制約は上限のみ)
|
||||
|
||||
// 言語コード
|
||||
// 欧州と北米の表示テキストの違いは、リージョンと言語コードを併せて判断
|
||||
|
||||
@ -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 ); // タッチパネルキャリブレーション
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user