mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ソース整理中。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@170 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
aa112334d7
commit
8e85753fb1
@ -77,7 +77,7 @@ BOOL SYSM_IsCardPulledOut(void)
|
|||||||
case CARD_DETECTING:
|
case CARD_DETECTING:
|
||||||
if (SYSMi_IsCardDataReady()) {
|
if (SYSMi_IsCardDataReady()) {
|
||||||
u32 cardID = *(vu32 *)REG_CARD_DATA;
|
u32 cardID = *(vu32 *)REG_CARD_DATA;
|
||||||
if ( ( cardID != GetSYSMWork()->nCardID ) &&
|
if ( ( cardID != SYSM_GetWork()->nCardID ) &&
|
||||||
SYSM_IsExistCard() )
|
SYSM_IsExistCard() )
|
||||||
{
|
{
|
||||||
cpw.detectPullOut = TRUE;
|
cpw.detectPullOut = TRUE;
|
||||||
|
|||||||
@ -36,9 +36,8 @@ typedef struct BannerCheckParam {
|
|||||||
// function's prototype-------------------------------------------------------
|
// function's prototype-------------------------------------------------------
|
||||||
static BOOL SYSMi_IsDebuggerBannerViewMode( void );
|
static BOOL SYSMi_IsDebuggerBannerViewMode( void );
|
||||||
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle );
|
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle );
|
||||||
|
|
||||||
static void SYSMi_WriteAdjustRTC( void );
|
static void SYSMi_WriteAdjustRTC( void );
|
||||||
static int SYSMi_ExistCard( void );
|
static int SYSMi_IsValidCard( void );
|
||||||
static void SYSMi_ReadCardBannerFile( void );
|
static void SYSMi_ReadCardBannerFile( void );
|
||||||
static BOOL SYSMi_CheckEntryAddress( void );
|
static BOOL SYSMi_CheckEntryAddress( void );
|
||||||
static void SYSMi_CheckCardCloneBoot( void );
|
static void SYSMi_CheckCardCloneBoot( void );
|
||||||
@ -55,9 +54,9 @@ NitroConfigData *ncdp; //
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// static variable-------------------------------------------------------------
|
// static variable-------------------------------------------------------------
|
||||||
static BOOL s_isBanner = FALSE;
|
static BOOL s_isBanner = FALSE;
|
||||||
static NTRBannerFile s_bannerBuf;
|
static NTRBannerFile s_bannerBuf;
|
||||||
static NAMTitleId old_titleIdArray[ LAUNCHER_TITLE_LIST_NUM ];
|
static NAMTitleId old_titleIdArray[ LAUNCHER_TITLE_LIST_NUM ];
|
||||||
|
|
||||||
// const data------------------------------------------------------------------
|
// const data------------------------------------------------------------------
|
||||||
|
|
||||||
@ -70,17 +69,32 @@ static BannerCheckParam s_bannerCheckList[ NTR_BNR_VER_MAX ] = {
|
|||||||
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// function's description
|
//
|
||||||
|
// 初期化
|
||||||
|
//
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
static void * AllocForNAM(unsigned long size)
|
// SystemMenuの初期化
|
||||||
|
void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
||||||
{
|
{
|
||||||
return OS_AllocFromHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, size );
|
#ifdef __SYSM_DEBUG
|
||||||
}
|
pSysm = SYSM_GetWork();
|
||||||
|
ncdp = GetTSD();
|
||||||
static void FreeForNAM(void *p)
|
#endif /* __SYSM_DEBUG */
|
||||||
{
|
|
||||||
OS_FreeToHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, p);
|
// ARM7コンポーネント用プロテクションユニット領域変更
|
||||||
|
OS_SetProtectionRegion( 2, 0x02280000, 512KB );
|
||||||
|
|
||||||
|
// ARM9用ブートコード配置のため、アリーナHi位置を下げる
|
||||||
|
OS_SetMainArenaHi( (void *)0x02e7fc00 );
|
||||||
|
|
||||||
|
SYSM_SetAllocFunc( pAlloc, pFree );
|
||||||
|
|
||||||
|
// WRAM設定はいる?
|
||||||
|
// MI_SetMainMemoryPriority(MI_PROCESSOR_ARM7);
|
||||||
|
// MI_SetWramBank(MI_WRAM_ARM7_ALL);
|
||||||
|
|
||||||
|
SVC_CpuClearFast(0x0000, (u16 *)SYSM_GetWork(), sizeof(SYSM_work)); // SYSMワークのクリア
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -92,36 +106,23 @@ void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// SystemMenuの初期化
|
// ============================================================================
|
||||||
void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
//
|
||||||
{
|
// 情報取得
|
||||||
#ifdef __SYSM_DEBUG
|
//
|
||||||
pSysm = GetSYSMWork();
|
// ============================================================================
|
||||||
ncdp = GetTSD();
|
|
||||||
#endif /* __SYSM_DEBUG */
|
|
||||||
|
|
||||||
OS_SetMainArenaHi( (void *)0x02e7fc00 );
|
|
||||||
|
|
||||||
TP_Init();
|
// パラメータリード
|
||||||
RTC_Init();
|
void SYSM_ReadParameters( void )
|
||||||
|
{
|
||||||
SYSM_SetAllocFunc( pAlloc, pFree );
|
|
||||||
|
|
||||||
// WRAM設定はいる?
|
|
||||||
// MI_SetMainMemoryPriority(MI_PROCESSOR_ARM7);
|
|
||||||
// MI_SetWramBank(MI_WRAM_ARM7_ALL);
|
|
||||||
|
|
||||||
SVC_CpuClearFast(0x0000, (u16 *)GetSYSMWork(), sizeof(SYSM_work)); // SYSMワークのクリア
|
|
||||||
|
|
||||||
|
|
||||||
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
|
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
|
||||||
|
|
||||||
|
if( SYSM_ReadTWLSettingsFile() ) { // NANDからTWL本体設定データをリード
|
||||||
|
SYSM_SetBackLightBrightness( (u8)TSD_GetBacklightBrightness() ); // 読み出したTWL本体設定データをもとにバックライト輝度設定
|
||||||
|
SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。
|
||||||
|
}
|
||||||
// SYSM_ReadHWInfo(); // NANDからHW情報をリード
|
// SYSM_ReadHWInfo(); // NANDからHW情報をリード
|
||||||
SYSM_ReadTWLSettingsFile(); // NANDからTWL本体設定データをリード
|
SYSMi_WriteAdjustRTC(); // RTCクロック補正値をセット。
|
||||||
|
|
||||||
SYSM_SetBackLightBrightness(); // 読み出したTWL本体設定データをもとにバックライト輝度設定
|
|
||||||
SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。
|
|
||||||
SYSMi_WriteAdjustRTC(); // 読み出したTWL本体設定データをもとにRTCクロック補正値をセット。
|
|
||||||
SYSMi_CheckRTC();
|
SYSMi_CheckRTC();
|
||||||
|
|
||||||
SYSM_VerifyAndRecoveryNTRSettings(); // NTR設定データを読み出して、TWL設定データとベリファイし、必要ならリカバリ
|
SYSM_VerifyAndRecoveryNTRSettings(); // NTR設定データを読み出して、TWL設定データとベリファイし、必要ならリカバリ
|
||||||
@ -275,6 +276,43 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ロゴデモスキップか?
|
||||||
|
BOOL SYSM_IsLogoDemoSkip( void )
|
||||||
|
{
|
||||||
|
// ※システムアプリからのハードリセットによるロゴデモ飛ばしも判定に入れる。
|
||||||
|
|
||||||
|
return SYSMi_IsDebuggerBannerViewMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ISデバッガのバナービューモード起動かどうか?
|
||||||
|
static BOOL SYSMi_IsDebuggerBannerViewMode( void )
|
||||||
|
{
|
||||||
|
#ifdef __IS_DEBUGGER_BUILD
|
||||||
|
return ( SYSM_GetWork()->isOnDebugger &&
|
||||||
|
SYSMi_IsValidCard() &&
|
||||||
|
SYSM_GetCardRomHeader()->dbgRomSize == 0 ) ? TRUE : FALSE;
|
||||||
|
#else
|
||||||
|
return FALSE;
|
||||||
|
#endif // __IS_DEBUGGER_BUILD
|
||||||
|
}
|
||||||
|
|
||||||
|
// 有効なTWL/NTRカードが差さっているか?
|
||||||
|
BOOL SYSM_IsExistCard( void )
|
||||||
|
{
|
||||||
|
return SYSM_GetWork()->isExistCard;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 検査用カードが差さっているか?
|
||||||
|
BOOL SYSM_IsInspectCard( void )
|
||||||
|
{
|
||||||
|
return ( SYSM_IsExistCard() && SYSM_GetCardRomHeader()->inspect_card );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 指定タイトルがブート可能なポインタかチェック
|
// 指定タイトルがブート可能なポインタかチェック
|
||||||
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle )
|
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle )
|
||||||
{
|
{
|
||||||
@ -283,18 +321,32 @@ static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle )
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum
|
|
||||||
|
// TPリード可能状態か?
|
||||||
|
BOOL SYSM_IsTPReadable( void )
|
||||||
{
|
{
|
||||||
region_header,
|
return TRUE;
|
||||||
region_arm9_ntr,
|
}
|
||||||
region_arm7_ntr,
|
|
||||||
region_arm9_twl,
|
|
||||||
region_arm7_twl,
|
// ============================================================================
|
||||||
region_max
|
//
|
||||||
};
|
// アプリ起動
|
||||||
|
//
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
// 指定タイトルの認証&ロード ※1フレームじゃ終わらん。
|
// 指定タイトルの認証&ロード ※1フレームじゃ終わらん。
|
||||||
AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle )
|
AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle )
|
||||||
{
|
{
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
region_header,
|
||||||
|
region_arm9_ntr,
|
||||||
|
region_arm7_ntr,
|
||||||
|
region_arm9_twl,
|
||||||
|
region_arm7_twl,
|
||||||
|
region_max
|
||||||
|
};
|
||||||
// メインメモリのクリア
|
// メインメモリのクリア
|
||||||
// DSダウンロードプレイの時は、ROMヘッダを退避する
|
// DSダウンロードプレイの時は、ROMヘッダを退避する
|
||||||
// アプリロード
|
// アプリロード
|
||||||
@ -429,86 +481,18 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// TPリード可能かどうかを調べる。
|
|
||||||
BOOL SYSM_IsTPReadable( void )
|
|
||||||
{
|
|
||||||
if( SYSM_GetBootFlag() & BFLG_BOOT_DECIDED ) return FALSE;
|
|
||||||
else return TRUE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// サブルーチン
|
//
|
||||||
|
// デバイス制御
|
||||||
|
//
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
// ロゴデモスキップか?
|
// バックライト輝度調整
|
||||||
BOOL SYSM_IsLogoDemoSkip( void )
|
void SYSM_SetBackLightBrightness( u8 brightness )
|
||||||
{
|
{
|
||||||
// ※システムアプリからのハードリセットによるロゴデモ飛ばしも判定に入れる。
|
TSD_SetBacklightBrightness( brightness );
|
||||||
|
( void )PMi_WriteRegister( 4, (u16)brightness );
|
||||||
return SYSMi_IsDebuggerBannerViewMode();
|
SYSM_WriteTWLSettingsFile();
|
||||||
}
|
|
||||||
|
|
||||||
// ISデバッガのバナービューモード起動かどうか?
|
|
||||||
static BOOL SYSMi_IsDebuggerBannerViewMode( void )
|
|
||||||
{
|
|
||||||
#ifdef __IS_DEBUGGER_BUILD
|
|
||||||
return ( GetSYSMWork()->isOnDebugger &&
|
|
||||||
SYSMi_ExistCard() &&
|
|
||||||
SYSM_GetCardRomHeader()->dbgRomSize == 0 ) ? TRUE : FALSE;
|
|
||||||
#else
|
|
||||||
return FALSE;
|
|
||||||
#endif // __IS_DEBUGGER_BUILD
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// バナーファイルの読み込みの実体
|
|
||||||
static void SYSMi_ReadCardBannerFile( void )
|
|
||||||
{
|
|
||||||
s32 lockCardID;
|
|
||||||
NTRBannerFile *pBanner = &s_bannerBuf;
|
|
||||||
|
|
||||||
if( ( !SYSMi_ExistCard() ) || ( *(void** )BANNER_ROM_OFFSET == NULL ) ) {
|
|
||||||
s_isBanner = FALSE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ROMカードからのバナーデータのリード
|
|
||||||
if ( ( lockCardID = OS_GetLockID() ) > 0 ) {
|
|
||||||
( void )OS_LockCard( (u16 )lockCardID );
|
|
||||||
DC_FlushRange( pBanner, sizeof(NTRBannerFile) );
|
|
||||||
SYSM_ReadCard(*(void** )BANNER_ROM_OFFSET, pBanner, sizeof(NTRBannerFile) );
|
|
||||||
( void )OS_UnLockCard( (u16 )lockCardID );
|
|
||||||
OS_ReleaseLockID( (u16 )lockCardID );
|
|
||||||
}
|
|
||||||
|
|
||||||
// バナーデータの正誤チェック
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
u16 calc_crc = 0xffff;
|
|
||||||
u16 *hd_crcp = (u16 *)&pBanner->h.crc16_v1;
|
|
||||||
BannerCheckParam *chkp = &s_bannerCheckList[ 0 ];
|
|
||||||
|
|
||||||
s_isBanner = TRUE;
|
|
||||||
|
|
||||||
for( i = 0; i < NTR_BNR_VER_MAX; i++ ) {
|
|
||||||
if( i < pBanner->h.version ) {
|
|
||||||
calc_crc = SVC_GetCRC16( calc_crc, chkp->srcp, chkp->size );
|
|
||||||
if( calc_crc != *hd_crcp++ ) {
|
|
||||||
s_isBanner = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
MI_CpuClear16( chkp->srcp, chkp->size );
|
|
||||||
}
|
|
||||||
chkp++;
|
|
||||||
}
|
|
||||||
if( !s_isBanner ) {
|
|
||||||
MI_CpuClear16( &s_bannerBuf, sizeof(NTRBannerFile) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -550,11 +534,87 @@ static void SYSMi_WriteAdjustRTC( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
//
|
||||||
|
// バナー
|
||||||
|
//
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// バナーファイルの読み込みの実体
|
||||||
|
static void SYSMi_ReadCardBannerFile( void )
|
||||||
|
{
|
||||||
|
s32 lockCardID;
|
||||||
|
NTRBannerFile *pBanner = &s_bannerBuf;
|
||||||
|
|
||||||
|
if( ( !SYSMi_IsValidCard() ) || ( *(void** )BANNER_ROM_OFFSET == NULL ) ) {
|
||||||
|
s_isBanner = FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ROMカードからのバナーデータのリード
|
||||||
|
if ( ( lockCardID = OS_GetLockID() ) > 0 ) {
|
||||||
|
( void )OS_LockCard( (u16 )lockCardID );
|
||||||
|
DC_FlushRange( pBanner, sizeof(NTRBannerFile) );
|
||||||
|
SYSM_ReadCard(*(void** )BANNER_ROM_OFFSET, pBanner, sizeof(NTRBannerFile) );
|
||||||
|
( void )OS_UnLockCard( (u16 )lockCardID );
|
||||||
|
OS_ReleaseLockID( (u16 )lockCardID );
|
||||||
|
}
|
||||||
|
|
||||||
|
// バナーデータの正誤チェック
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
u16 calc_crc = 0xffff;
|
||||||
|
u16 *hd_crcp = (u16 *)&pBanner->h.crc16_v1;
|
||||||
|
BannerCheckParam *chkp = &s_bannerCheckList[ 0 ];
|
||||||
|
|
||||||
|
s_isBanner = TRUE;
|
||||||
|
|
||||||
|
for( i = 0; i < NTR_BNR_VER_MAX; i++ ) {
|
||||||
|
if( i < pBanner->h.version ) {
|
||||||
|
calc_crc = SVC_GetCRC16( calc_crc, chkp->srcp, chkp->size );
|
||||||
|
if( calc_crc != *hd_crcp++ ) {
|
||||||
|
s_isBanner = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
MI_CpuClear16( chkp->srcp, chkp->size );
|
||||||
|
}
|
||||||
|
chkp++;
|
||||||
|
}
|
||||||
|
if( !s_isBanner ) {
|
||||||
|
MI_CpuClear16( &s_bannerBuf, sizeof(NTRBannerFile) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//======================================================================
|
||||||
|
//
|
||||||
|
// 各種チェック
|
||||||
|
//
|
||||||
|
//======================================================================
|
||||||
|
|
||||||
|
// 有効なTWLカードが差さっているか?
|
||||||
|
BOOL SYSM_IsTWLCard( void );
|
||||||
|
BOOL SYSM_IsTWLCard( void )
|
||||||
|
{
|
||||||
|
return ( SYSM_IsExistCard() && ( SYSM_GetCardRomHeader()->platform_code & PLATFORM_ID_FLAG_TWL ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 有効なNTRカードが差さっているか?
|
||||||
|
BOOL SYSM_IsNTRCard( void );
|
||||||
|
BOOL SYSM_IsNTRCard( void )
|
||||||
|
{
|
||||||
|
return ( SYSM_IsExistCard() && ( SYSM_GetCardRomHeader()->platform_code == PLATFORM_CODE_NTR ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// NTR,TWLカード存在チェック 「リターン 1:カード認識 0:カードなし」
|
// NTR,TWLカード存在チェック 「リターン 1:カード認識 0:カードなし」
|
||||||
static int SYSMi_ExistCard( void )
|
static int SYSMi_IsValidCard( void )
|
||||||
{
|
{
|
||||||
if( ( SYSM_GetCardRomHeader()->nintendo_logo_crc16 == 0xcf56 ) &&
|
if( ( SYSM_GetCardRomHeader()->nintendo_logo_crc16 == 0xcf56 ) &&
|
||||||
( SYSM_GetCardRomHeader()->header_crc16 == GetSYSMWork()->cardHeaderCrc16) ) {
|
( SYSM_GetCardRomHeader()->header_crc16 == SYSM_GetWork()->cardHeaderCrc16 ) ) {
|
||||||
return TRUE; // NTR,TWLカードあり(NintendoロゴCRC、カードヘッダCRCが正しい場合)
|
return TRUE; // NTR,TWLカードあり(NintendoロゴCRC、カードヘッダCRCが正しい場合)
|
||||||
// ※Nintendoロゴデータのチェックは、特許の都合上、ロゴ表示ルーチン起動後に行います。
|
// ※Nintendoロゴデータのチェックは、特許の都合上、ロゴ表示ルーチン起動後に行います。
|
||||||
}else {
|
}else {
|
||||||
@ -562,43 +622,19 @@ static int SYSMi_ExistCard( void )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// スリープモードへの遷移
|
|
||||||
void SYSM_GoSleepMode( void )
|
|
||||||
{
|
|
||||||
#ifndef __IS_DEBUGGER_BUILD // デバッガ用ビルド時はスリープしない。
|
|
||||||
PM_GoSleepMode( (PMWakeUpTrigger)( (PAD_DetectFold() ? PM_TRIGGER_COVER_OPEN : 0) | PM_TRIGGER_RTC_ALARM ),
|
|
||||||
0,
|
|
||||||
0 );
|
|
||||||
#endif /* __IS_DEBUGGER_BUILD */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// バックライト輝度調整
|
|
||||||
void SYSM_SetBackLightBrightness( void )
|
|
||||||
{
|
|
||||||
( void )PMi_WriteRegister( 4, (u16)TSD_GetBacklightBrightness() );
|
|
||||||
( void )PM_SetBackLight( PM_LCD_ALL, PM_BACKLIGHT_ON );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//======================================================================
|
|
||||||
// 各種チェック
|
|
||||||
//======================================================================
|
|
||||||
|
|
||||||
// エントリアドレスの正当性チェック
|
// エントリアドレスの正当性チェック
|
||||||
static BOOL SYSMi_CheckEntryAddress( void )
|
static BOOL SYSMi_CheckEntryAddress( void )
|
||||||
{
|
{
|
||||||
// エントリアドレスがROM内登録エリアかAGBカートリッジエリアなら、無限ループに入る。
|
// エントリアドレスがROM内登録エリアかAGBカートリッジエリアなら、無限ループに入る。
|
||||||
if( !( ( (u32)SYSM_GetCardRomHeader()->main_entry_address >= HW_MAIN_MEM )
|
if( !( ( (u32)SYSM_GetCardRomHeader()->main_entry_address >= HW_MAIN_MEM ) &&
|
||||||
&& ( (u32)SYSM_GetCardRomHeader()->main_entry_address < SYSM_ARM9_MMEM_ENTRY_ADDR_LIMIT ) )
|
( (u32)SYSM_GetCardRomHeader()->main_entry_address < SYSM_ARM9_MMEM_ENTRY_ADDR_LIMIT )
|
||||||
|| !( ( ( (u32)SYSM_GetCardRomHeader()->sub_entry_address >= HW_MAIN_MEM )
|
) ||
|
||||||
&& ( (u32)SYSM_GetCardRomHeader()->sub_entry_address < SYSM_ARM7_LOAD_MMEM_LAST_ADDR ) )
|
!( ( ( (u32)SYSM_GetCardRomHeader()->sub_entry_address >= HW_MAIN_MEM ) &&
|
||||||
|| ( ( (u32)SYSM_GetCardRomHeader()->sub_entry_address >= HW_WRAM )
|
( (u32)SYSM_GetCardRomHeader()->sub_entry_address < SYSM_ARM7_LOAD_MMEM_LAST_ADDR ) ) ||
|
||||||
&& ( (u32)SYSM_GetCardRomHeader()->sub_entry_address < SYSM_ARM7_LOAD_WRAM_LAST_ADDR ) ) ) )
|
( ( (u32)SYSM_GetCardRomHeader()->sub_entry_address >= HW_WRAM ) &&
|
||||||
{
|
( (u32)SYSM_GetCardRomHeader()->sub_entry_address < SYSM_ARM7_LOAD_WRAM_LAST_ADDR ) )
|
||||||
|
)
|
||||||
|
) {
|
||||||
OS_TPrintf("entry address invalid.\n");
|
OS_TPrintf("entry address invalid.\n");
|
||||||
#ifdef __DEBUG_SECURITY_CODE
|
#ifdef __DEBUG_SECURITY_CODE
|
||||||
DispSingleColorScreen( SCREEN_YELLOW );
|
DispSingleColorScreen( SCREEN_YELLOW );
|
||||||
@ -618,7 +654,7 @@ static void SYSMi_CheckCardCloneBoot( void )
|
|||||||
u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000;
|
u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000;
|
||||||
u32 file_offset = total_rom_size & 0xFFFFFE00;
|
u32 file_offset = total_rom_size & 0xFFFFFE00;
|
||||||
|
|
||||||
if( !SYSMi_ExistCard() ) {
|
if( !SYSMi_IsValidCard() ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -632,9 +668,9 @@ static void SYSMi_CheckCardCloneBoot( void )
|
|||||||
|
|
||||||
buffp += total_rom_size & 0x000001FF;
|
buffp += total_rom_size & 0x000001FF;
|
||||||
if( *buffp++ == 'a' && *buffp == 'c' ) {
|
if( *buffp++ == 'a' && *buffp == 'c' ) {
|
||||||
GetSYSMWork()->CloneBootMode = cloneBootMode;
|
SYSM_GetWork()->cloneBootMode = CLONE_BOOT_MODE;
|
||||||
}else {
|
}else {
|
||||||
GetSYSMWork()->CloneBootMode = OTHER_BOOT_MODE;
|
SYSM_GetWork()->cloneBootMode = OTHER_BOOT_MODE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -650,7 +686,8 @@ static void SYSMi_CheckRTC( void )
|
|||||||
if( !SYSM_CheckRTCDate( &date ) ||
|
if( !SYSM_CheckRTCDate( &date ) ||
|
||||||
!SYSM_CheckRTCTime( &time )
|
!SYSM_CheckRTCTime( &time )
|
||||||
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
|
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
|
||||||
|| ( GetSYSMWork()->rtcStatus & 0x01 )
|
||
|
||||||
|
( SYSM_GetWork()->rtcStatus & 0x01 )
|
||||||
#endif
|
#endif
|
||||||
) { // RTCの異常を検出したら、rtc入力フラグ&rtcOffsetを0にしてNVRAMに書き込み。
|
) { // RTCの異常を検出したら、rtc入力フラグ&rtcOffsetを0にしてNVRAMに書き込み。
|
||||||
OS_TPrintf("\"RTC reset\" or \"Illegal RTC data\" detect!\n");
|
OS_TPrintf("\"RTC reset\" or \"Illegal RTC data\" detect!\n");
|
||||||
@ -662,10 +699,6 @@ static void SYSMi_CheckRTC( void )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL SYSM_IsExistCard( void )
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//======================================================================
|
//======================================================================
|
||||||
// デバッグ
|
// デバッグ
|
||||||
|
|||||||
@ -853,9 +853,9 @@ static void CallbackChild_MB( u32 status, void *arg )
|
|||||||
|
|
||||||
case MB_COMM_CSTATE_BOOT_READY: // ブート準備完了
|
case MB_COMM_CSTATE_BOOT_READY: // ブート準備完了
|
||||||
OS_Printf("CB: boot ready.\n");
|
OS_Printf("CB: boot ready.\n");
|
||||||
// GetSYSMWork()->mb_flag = 1;
|
// SYSM_GetWork()->mb_flag = 1;
|
||||||
// GetSYSMWork()->mb_ggid = *(u32 *)( MB_GetBeaconRecvStatus()->list[ pCwork->connectTargetNo ].bssDesc.gameInfo.ggid );
|
// SYSM_GetWork()->mb_ggid = *(u32 *)( MB_GetBeaconRecvStatus()->list[ pCwork->connectTargetNo ].bssDesc.gameInfo.ggid );
|
||||||
// GetSYSMWork()->mb_ggid = MB_GetBeaconRecvStatus()->list[ pCwork->connectTargetNo ].gameInfo.ggid;
|
// SYSM_GetWork()->mb_ggid = MB_GetBeaconRecvStatus()->list[ pCwork->connectTargetNo ].gameInfo.ggid;
|
||||||
(void)SetPrgNextSeqQue( PSEQ_BOOT_READY );
|
(void)SetPrgNextSeqQue( PSEQ_BOOT_READY );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -55,7 +55,7 @@ void TwlMain( void )
|
|||||||
TitleProperty pTitleList[ LAUNCHER_TITLE_LIST_NUM ];
|
TitleProperty pTitleList[ LAUNCHER_TITLE_LIST_NUM ];
|
||||||
|
|
||||||
// システムメニュー初期化----------
|
// システムメニュー初期化----------
|
||||||
// SYSM_Init( Alloc, Free ); // OS_Initの前でコール。
|
SYSM_Init( Alloc, Free ); // OS_Initの前でコール。
|
||||||
|
|
||||||
// OS初期化------------------------
|
// OS初期化------------------------
|
||||||
OS_Init();
|
OS_Init();
|
||||||
@ -77,9 +77,7 @@ void TwlMain( void )
|
|||||||
InitAllocator( &g_allocator );
|
InitAllocator( &g_allocator );
|
||||||
CMN_InitFileSystem( &g_allocator );
|
CMN_InitFileSystem( &g_allocator );
|
||||||
|
|
||||||
|
SYSM_ReadParameters();
|
||||||
SYSM_Init( Alloc, Free ); // OS_Initの前でコール。
|
|
||||||
// SYSM_ReadParameters();
|
|
||||||
|
|
||||||
// リセットパラメータの取得--------
|
// リセットパラメータの取得--------
|
||||||
if( SYSM_GetResetParam()->flags.isLogoSkip ) {
|
if( SYSM_GetResetParam()->flags.isLogoSkip ) {
|
||||||
|
|||||||
@ -408,7 +408,7 @@ int TP_CalibrationMain( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( ( pad.trg & PAD_BUTTON_A ) || tp_ok ) {
|
if( ( pad.trg & PAD_BUTTON_A ) || tp_ok ) {
|
||||||
GetSYSMWork()->isValidTSD = 0;
|
SYSM_GetWork()->isValidTSD = 0;
|
||||||
|
|
||||||
s_pTPC->calibTemp.data.raw_x1 = s_pTPC->sample[0].x;
|
s_pTPC->calibTemp.data.raw_x1 = s_pTPC->sample[0].x;
|
||||||
s_pTPC->calibTemp.data.raw_y1 = s_pTPC->sample[0].y;
|
s_pTPC->calibTemp.data.raw_y1 = s_pTPC->sample[0].y;
|
||||||
|
|||||||
@ -80,7 +80,7 @@ void SelectLanguageInit( void )
|
|||||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Select language." );
|
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Select language." );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( GetSYSMWork()->isValidTSD ) ||
|
if( ( SYSM_GetWork()->isValidTSD ) ||
|
||||||
( TSD_GetLanguage() >= TWL_LANG_CODE_MAX ) ) {
|
( TSD_GetLanguage() >= TWL_LANG_CODE_MAX ) ) {
|
||||||
s_langCode = TWL_LANG_ENGLISH;
|
s_langCode = TWL_LANG_ENGLISH;
|
||||||
}else {
|
}else {
|
||||||
@ -128,7 +128,7 @@ int SelectLanguageMain( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( ( pad.trg & PAD_BUTTON_A ) || tp_select ) { // メニュー項目への分岐
|
if( ( pad.trg & PAD_BUTTON_A ) || tp_select ) { // メニュー項目への分岐
|
||||||
GetSYSMWork()->isValidTSD = 0;
|
SYSM_GetWork()->isValidTSD = 0;
|
||||||
|
|
||||||
TSD_SetLanguage( s_langCode );
|
TSD_SetLanguage( s_langCode );
|
||||||
TSD_SetFlagLanguage( TRUE ); // 言語入力フラグを立てる
|
TSD_SetFlagLanguage( TRUE ); // 言語入力フラグを立てる
|
||||||
|
|||||||
@ -86,7 +86,6 @@ void InputDecimal(int *pTgt, InputNumParam *inpp);
|
|||||||
static void InputRtcDateTimeInit( int start );
|
static void InputRtcDateTimeInit( int start );
|
||||||
static int InputRtcDateTimeMain( void );
|
static int InputRtcDateTimeMain( void );
|
||||||
|
|
||||||
static void TransmitRtcData(DateTimeParam *dtpp, RtcDateTime *rtcp);
|
|
||||||
static void SelectString( int *pTgt, const u8 **const pStrp, InputNumParam *inpp);
|
static void SelectString( int *pTgt, const u8 **const pStrp, InputNumParam *inpp);
|
||||||
static void BcdToHex(int *bcdp);
|
static void BcdToHex(int *bcdp);
|
||||||
static void HexToBcd(int *hexp);
|
static void HexToBcd(int *hexp);
|
||||||
@ -114,7 +113,7 @@ void SetRTCInit( void )
|
|||||||
PutStringUTF16( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L" RETURN " );
|
PutStringUTF16( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L" RETURN " );
|
||||||
|
|
||||||
if( g_initialSet ) {
|
if( g_initialSet ) {
|
||||||
if( GetSYSMWork()->rtcStatus & 0x01) {
|
if( SYSM_GetWork()->rtcStatus & 0x01) {
|
||||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"RTC reset is detected!" );
|
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"RTC reset is detected!" );
|
||||||
}else {
|
}else {
|
||||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Set RTC." );
|
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Set RTC." );
|
||||||
@ -380,7 +379,7 @@ static int InputRtcDateTimeMain( void )
|
|||||||
TSD_SetRTCOffset( SYSM_CalcRTCOffsetAndSetDateTime( &date, &s_pWork->dtp.Time ) );
|
TSD_SetRTCOffset( SYSM_CalcRTCOffsetAndSetDateTime( &date, &s_pWork->dtp.Time ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
GetSYSMWork()->isValidTSD = 0;
|
SYSM_GetWork()->isValidTSD = 0;
|
||||||
TSD_SetFlagDateTime( TRUE ); // RTC入力フラグを立てる。
|
TSD_SetFlagDateTime( TRUE ); // RTC入力フラグを立てる。
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// TWL設定データファイルへの書き込み
|
||||||
|
|||||||
@ -96,7 +96,7 @@ extern AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle ); //
|
|||||||
// 成功時は、never return.
|
// 成功時は、never return.
|
||||||
// デバイス制御
|
// デバイス制御
|
||||||
extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション
|
extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション
|
||||||
extern void SYSM_SetBackLightBrightness( void ); // バックライトを制御(本体設定データへの値セーブも行う)
|
extern void SYSM_SetBackLightBrightness( u8 brightness ); // バックライトを制御(本体設定データへの値セーブも行う)
|
||||||
|
|
||||||
// 状態チェック
|
// 状態チェック
|
||||||
extern BOOL SYSM_IsExistCard( void ); // TWL/NTRカードが差さっているか?(アプリは未認証状態)
|
extern BOOL SYSM_IsExistCard( void ); // TWL/NTRカードが差さっているか?(アプリは未認証状態)
|
||||||
|
|||||||
@ -19,7 +19,6 @@
|
|||||||
#define __SYSMENU_WORK_H__
|
#define __SYSMENU_WORK_H__
|
||||||
|
|
||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
#include <twl/rtc.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -32,8 +31,6 @@ extern "C" {
|
|||||||
|
|
||||||
#endif // SDK_FINALROM
|
#endif // SDK_FINALROM
|
||||||
|
|
||||||
//#define __DEBUG_SECURITY_CODE // PassMeのセキュリティコード確認用スイッチ
|
|
||||||
|
|
||||||
|
|
||||||
// define data ------------------------------------
|
// define data ------------------------------------
|
||||||
#define SYSMENU_VER 0x071113 // SystemMenuバージョン
|
#define SYSMENU_VER 0x071113 // SystemMenuバージョン
|
||||||
@ -42,12 +39,7 @@ extern "C" {
|
|||||||
| PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R )
|
| PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R )
|
||||||
// 量産工程で使用する初回起動設定をキャンセルするショートカットキー
|
// 量産工程で使用する初回起動設定をキャンセルするショートカットキー
|
||||||
|
|
||||||
|
#define CLONE_BOOT_MODE 1
|
||||||
// bootFlagの値
|
|
||||||
#define BFLG_EXIST_CARD 0x00000001
|
|
||||||
|
|
||||||
|
|
||||||
#define cloneBootMode 1
|
|
||||||
#define OTHER_BOOT_MODE 2
|
#define OTHER_BOOT_MODE 2
|
||||||
|
|
||||||
|
|
||||||
@ -55,25 +47,13 @@ extern "C" {
|
|||||||
// データ型定義
|
// データ型定義
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
// ロック情報
|
|
||||||
typedef struct LockVariable{
|
|
||||||
OSLockWord lock;
|
|
||||||
vu32 value;
|
|
||||||
}LockVariable;
|
|
||||||
|
|
||||||
// RTC日付時刻構造体
|
|
||||||
typedef struct RtcDateTime {
|
|
||||||
RTCDate Date;
|
|
||||||
RTCTime Time;
|
|
||||||
}RtcDateTime;
|
|
||||||
|
|
||||||
// SYSM共有ワーク構造体
|
// SYSM共有ワーク構造体
|
||||||
typedef struct SYSM_work {
|
typedef struct SYSM_work {
|
||||||
BOOL isValidTSD; // NITRO設定データ無効フラグ
|
BOOL isValidTSD; // NITRO設定データ無効フラグ
|
||||||
BOOL isOnDebugger; // デバッガ動作か?
|
BOOL isOnDebugger; // デバッガ動作か?
|
||||||
BOOL isExistCard; // 有効なNTR/TWLカードが存在するか?
|
BOOL isExistCard; // 有効なNTR/TWLカードが存在するか?
|
||||||
u16 cardHeaderCrc16; // システムメニューで計算したROMヘッダCRC16
|
u16 cardHeaderCrc16; // システムメニューで計算したROMヘッダCRC16
|
||||||
u8 CloneBootMode;
|
int cloneBootMode;
|
||||||
|
|
||||||
// NTR-IPL2のレガシー 最終的には消すと思う
|
// NTR-IPL2のレガシー 最終的には消すと思う
|
||||||
u32 nCardID;
|
u32 nCardID;
|
||||||
@ -88,7 +68,7 @@ typedef struct SYSM_work {
|
|||||||
#if 1
|
#if 1
|
||||||
#define SYSM_GetResetParam() ( (ResetParam *)HW_RED_RESERVED )
|
#define SYSM_GetResetParam() ( (ResetParam *)HW_RED_RESERVED )
|
||||||
|
|
||||||
#define GetSYSMWork() ( (SYSM_work *)( HW_RED_RESERVED + sizeof(ResetParam) ) )
|
#define SYSM_GetWork() ( (SYSM_work *)( HW_RED_RESERVED + sizeof(ResetParam) ) )
|
||||||
#else
|
#else
|
||||||
// SYSMリセットパラメータの取得
|
// SYSMリセットパラメータの取得
|
||||||
#define SYSM_GetResetParam() ( (ResetParam *)0x02000100 )
|
#define SYSM_GetResetParam() ( (ResetParam *)0x02000100 )
|
||||||
@ -100,16 +80,6 @@ typedef struct SYSM_work {
|
|||||||
// カードROMヘッダワークの取得
|
// カードROMヘッダワークの取得
|
||||||
#define SYSM_GetCardRomHeader() ( (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF )
|
#define SYSM_GetCardRomHeader() ( (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline void SYSM_SetBootFlag( u32 flag )
|
|
||||||
{
|
|
||||||
#pragma unused( flag )
|
|
||||||
}
|
|
||||||
|
|
||||||
// カードROMヘッダワークの取得
|
|
||||||
#define SYSM_GetCardRomHeader() ( (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF )
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user