diff --git a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c index 72d80191..8636a493 100644 --- a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c @@ -29,18 +29,32 @@ // define data------------------------------------------------------- -#define SUBP_RECV_IF_ENABLE 0x4000 +#define SUBP_RECV_IF_ENABLE 0x4000 +#define TITLE_ID_NAND_INITIALIZER 0x00030011304E4941UL // 0NIA + +// 起動制限をかけるタイトル一覧 +typedef struct TitleBlackList { + OSTitleId titleID; + int rom_version; +}TitleBlackList; // extern data------------------------------------------------------- // function's prototype---------------------------------------------- static void BOOTi_ClearREG_RAM( void ); -static void BOOTi_CopyLCFGData( void ); +static void BOOTi_CheckTitleBlackList( void ); // global variables-------------------------------------------------- // static variables-------------------------------------------------- +// 起動制限をかけるタイトル一覧 +static const TitleBlackList s_blackList[] = { + { TITLE_ID_NAND_INITIALIZER, 0 }, + { 0UL, -1 }, +}; + + // const data-------------------------------------------------------- void BOOT_Init( void ) { @@ -62,6 +76,9 @@ void BOOT_Ready( void ) BOOL isNtrMode; int i; + // ブラックリストをチェックし、起動制限をかける + BOOTi_CheckTitleBlackList(); + // エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。 // SYSMi_CheckEntryAddress(); @@ -102,11 +119,6 @@ void BOOT_Ready( void ) isNtrMode = FALSE; } - // NTRモード起動でない場合は、LCFG関連データをメモリに展開 -/* if( !isNtrMode ) { - BOOTi_CopyLCFGData(); - } -*/ // WRAMの配置 { MIHeader_WramRegs *pWRAMREGS = (MIHeader_WramRegs *)th->s.main_wram_config_data; @@ -216,20 +228,21 @@ static void BOOTi_ClearREG_RAM( void ) // レジスタクリアは基本的に OS_Boot で行う } -/* -// LCFG関連データをメインメモリ先頭の予約領域にコピーする -static void BOOTi_CopyLCFGData( void ) + +// 起動制限をかけるブラックリストTITLEのチェック +static void BOOTi_CheckTitleBlackList( void ) { - // 本体設定データ、HWノーマル情報、HWセキュア情報をメモリに展開しておく - MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) ); - MI_CpuCopyFast( LCFGi_GetHWN(), (void *)HW_PARAM_TWL_HW_NORMAL_INFO, sizeof(LCFGTWLHWNormalInfo) ); - MI_CpuCopyFast( LCFGi_GetHWS(), (void *)HW_HW_SECURE_INFO, HW_HW_SECURE_INFO_END - HW_HW_SECURE_INFO ); + const TitleBlackList *pBlackList = &s_blackList[ 0 ]; + ROM_Header_Short *pROMH = (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF; - // 本体設定データの不要部分をクリアしておく - { - LCFGTWLSettingsData *pSettings = (LCFGTWLSettingsData *)HW_PARAM_TWL_SETTINGS_DATA; - MI_CpuClear32( &pSettings->launcherStatus, sizeof(LCFGTWLLauncherStatus) ); - MI_CpuClearFast( &pSettings->parental, sizeof(LCFGTWLParentalControl) ); + while( pBlackList->rom_version >= 0 ) { + if( ( pBlackList->titleID == pROMH->titleID ) && + ( pBlackList->rom_version == pROMH->rom_version ) ) { + OS_TPrintf( "Hit black list : %c%c%c%c ver.%d...Terminate.\n", + pROMH->titleID_Lo[ 3 ], pROMH->titleID_Lo[ 2 ], pROMH->titleID_Lo[ 1 ], pROMH->titleID_Lo[ 0 ], + pROMH->rom_version ); + OS_Terminate(); + } + pBlackList++; } } -*/