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@431 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
d7c6cb4e6a
commit
9b84321cf0
@ -83,6 +83,7 @@ static void PreInit(void)
|
|||||||
***************************************************************/
|
***************************************************************/
|
||||||
static void EraseAll(void)
|
static void EraseAll(void)
|
||||||
{
|
{
|
||||||
|
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||||
OS_BootFromFIRM();
|
OS_BootFromFIRM();
|
||||||
|
|||||||
@ -109,14 +109,21 @@ static void PostInit(void)
|
|||||||
/***************************************************************
|
/***************************************************************
|
||||||
CheckHeader
|
CheckHeader
|
||||||
|
|
||||||
ヘッダの内容がTWLアプリとして問題ないかチェック
|
ヘッダがシステムメニューとして問題ないかチェック
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
static BOOL CheckHeader(void)
|
static BOOL CheckHeader(void)
|
||||||
{
|
{
|
||||||
static ROM_Header_Short* const rhs = (ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF;
|
static ROM_Header_Short* const rhs = (ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF;
|
||||||
// TODO
|
// イニシャルコードなど
|
||||||
// イニシャルコード
|
|
||||||
OS_TPrintf("Initial Code : %08X\n", *(u32*)rhs->game_code);
|
OS_TPrintf("Initial Code : %08X\n", *(u32*)rhs->game_code);
|
||||||
|
OS_TPrintf("Platform Code : %02X\n", rhs->platform_code);
|
||||||
|
OS_TPrintf("Codec Mode : %s\n", rhs->codec_mode ? "TWL" : "NITRO");
|
||||||
|
OS_TPrintf("Sigunature : %s\n", rhs->enable_signature ? "AVAILABLE" : "NOT AVAILABLE");
|
||||||
|
OS_TPrintf("AES Encryption : %s\n", rhs->enable_aes ? "AVAILABLE" : "NOT AVAILABLE");
|
||||||
|
if ( rhs->enable_aes )
|
||||||
|
{
|
||||||
|
OS_TPrintf("AES Key Type : %s\n", rhs->developer_encrypt ? "FOR DEVELOPMENT" : "FOR PRODUCT");
|
||||||
|
}
|
||||||
// ƒGƒ“ƒgƒŠƒ|ƒCƒ“ƒg
|
// ƒGƒ“ƒgƒŠƒ|ƒCƒ“ƒg
|
||||||
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_entry_address);
|
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_entry_address);
|
||||||
OS_TPrintf("ARM7 Entry point : %08X\n", rhs->sub_entry_address);
|
OS_TPrintf("ARM7 Entry point : %08X\n", rhs->sub_entry_address);
|
||||||
@ -133,6 +140,35 @@ static BOOL CheckHeader(void)
|
|||||||
OS_TPrintf("ARM7 LTD ROM address: %08X\n", rhs->sub_ltd_rom_offset);
|
OS_TPrintf("ARM7 LTD ROM address: %08X\n", rhs->sub_ltd_rom_offset);
|
||||||
OS_TPrintf("ARM7 LTD RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
OS_TPrintf("ARM7 LTD RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
||||||
OS_TPrintf("ARM7 LTD size : %08X\n", rhs->sub_ltd_size);
|
OS_TPrintf("ARM7 LTD size : %08X\n", rhs->sub_ltd_size);
|
||||||
|
// 順序ほぼ最適化済み
|
||||||
|
#ifndef FIRM_USE_TWLSDK_KEYS
|
||||||
|
if ( rhs->platform_code != PLATFORM_CODE_TWL_LIMITED || // TWL Limited only
|
||||||
|
!rhs->codec_mode || // TWL mode only
|
||||||
|
!rhs->enable_signature || // Should be use ROM header signature
|
||||||
|
#else
|
||||||
|
if ( // no check
|
||||||
|
#endif
|
||||||
|
// should be in main memory
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->main_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->sub_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->main_ltd_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->sub_ltd_ram_address ||
|
||||||
|
// should be in static area without Limited region
|
||||||
|
(u32)rhs->main_ram_address > (u32)rhs->main_entry_address ||
|
||||||
|
(u32)rhs->sub_ram_address > (u32)rhs->sub_entry_address ||
|
||||||
|
// should be in main memory (end address)
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->main_ram_address + rhs->main_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->sub_ram_address + rhs->sub_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->main_ltd_ram_address + rhs->main_ltd_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->sub_ltd_ram_address + rhs->sub_ltd_size ||
|
||||||
|
// should be in static area without Limited region (end address)
|
||||||
|
(u32)rhs->main_ram_address + rhs->main_size <= (u32)rhs->main_entry_address ||
|
||||||
|
(u32)rhs->sub_ram_address + rhs->sub_size <= (u32)rhs->sub_entry_address ||
|
||||||
|
0 )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Invalid ROM header for MENU Launcher!\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,8 +181,10 @@ static BOOL CheckHeader(void)
|
|||||||
***************************************************************/
|
***************************************************************/
|
||||||
static void EraseAll(void)
|
static void EraseAll(void)
|
||||||
{
|
{
|
||||||
|
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||||
|
MI_CpuClearFast( (void*)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END-HW_ROM_HEADER_BUF );
|
||||||
OS_BootFromFIRM();
|
OS_BootFromFIRM();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -202,9 +240,10 @@ void TwlMain( void )
|
|||||||
EraseAll();
|
EraseAll();
|
||||||
|
|
||||||
// failed
|
// failed
|
||||||
while (1)
|
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||||
{
|
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||||
PXI_NotifyID( FIRM_PXI_ID_NULL );
|
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||||
}
|
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||||
|
OS_Terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -111,6 +111,7 @@ static void PreInit(void)
|
|||||||
***************************************************************/
|
***************************************************************/
|
||||||
static void EraseAll(void)
|
static void EraseAll(void)
|
||||||
{
|
{
|
||||||
|
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||||
OS_BootFromFIRM();
|
OS_BootFromFIRM();
|
||||||
|
|||||||
@ -126,14 +126,20 @@ static void PostInit(void)
|
|||||||
CheckHeader
|
CheckHeader
|
||||||
|
|
||||||
ヘッダがシステムメニューとして問題ないかチェック
|
ヘッダがシステムメニューとして問題ないかチェック
|
||||||
先頭32Bは固定値と思われ (リマスターバージョンは違うかな)
|
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
static BOOL CheckHeader(void)
|
static BOOL CheckHeader(void)
|
||||||
{
|
{
|
||||||
static ROM_Header_Short* const rhs = (ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF;
|
static ROM_Header_Short* const rhs = (ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF;
|
||||||
// TODO
|
// イニシャルコードなど
|
||||||
// イニシャルコード
|
|
||||||
OS_TPrintf("Initial Code : %08X\n", *(u32*)rhs->game_code);
|
OS_TPrintf("Initial Code : %08X\n", *(u32*)rhs->game_code);
|
||||||
|
OS_TPrintf("Platform Code : %02X\n", rhs->platform_code);
|
||||||
|
OS_TPrintf("Codec Mode : %s\n", rhs->codec_mode ? "TWL" : "NITRO");
|
||||||
|
OS_TPrintf("Sigunature : %s\n", rhs->enable_signature ? "AVAILABLE" : "NOT AVAILABLE");
|
||||||
|
OS_TPrintf("AES Encryption : %s\n", rhs->enable_aes ? "AVAILABLE" : "NOT AVAILABLE");
|
||||||
|
if ( rhs->enable_aes )
|
||||||
|
{
|
||||||
|
OS_TPrintf("AES Key Type : %s\n", rhs->developer_encrypt ? "FOR DEVELOPMENT" : "FOR PRODUCT");
|
||||||
|
}
|
||||||
// エントリポイント
|
// エントリポイント
|
||||||
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_entry_address);
|
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_entry_address);
|
||||||
OS_TPrintf("ARM7 Entry point : %08X\n", rhs->sub_entry_address);
|
OS_TPrintf("ARM7 Entry point : %08X\n", rhs->sub_entry_address);
|
||||||
@ -150,6 +156,32 @@ static BOOL CheckHeader(void)
|
|||||||
OS_TPrintf("ARM7 LTD ROM address: %08X\n", rhs->sub_ltd_rom_offset);
|
OS_TPrintf("ARM7 LTD ROM address: %08X\n", rhs->sub_ltd_rom_offset);
|
||||||
OS_TPrintf("ARM7 LTD RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
OS_TPrintf("ARM7 LTD RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
||||||
OS_TPrintf("ARM7 LTD size : %08X\n", rhs->sub_ltd_size);
|
OS_TPrintf("ARM7 LTD size : %08X\n", rhs->sub_ltd_size);
|
||||||
|
// 順序ほぼ最適化済み
|
||||||
|
if ( rhs->platform_code != PLATFORM_CODE_TWL_LIMITED || // TWL Limited only
|
||||||
|
!rhs->codec_mode || // TWL mode only
|
||||||
|
!rhs->enable_signature || // Should be use ROM header signature
|
||||||
|
(rhs->titleID_Hi & 0x0005) != 0x0005 || // check only NAND/SYSTEM bits (need?)
|
||||||
|
// should be in main memory
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->main_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->sub_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->main_ltd_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->sub_ltd_ram_address ||
|
||||||
|
// should be in static area without Limited region
|
||||||
|
(u32)rhs->main_ram_address > (u32)rhs->main_entry_address ||
|
||||||
|
(u32)rhs->sub_ram_address > (u32)rhs->sub_entry_address ||
|
||||||
|
// should be in main memory (end address)
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->main_ram_address + rhs->main_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->sub_ram_address + rhs->sub_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->main_ltd_ram_address + rhs->main_ltd_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->sub_ltd_ram_address + rhs->sub_ltd_size ||
|
||||||
|
// should be in static area without Limited region (end address)
|
||||||
|
(u32)rhs->main_ram_address + rhs->main_size <= (u32)rhs->main_entry_address ||
|
||||||
|
(u32)rhs->sub_ram_address + rhs->sub_size <= (u32)rhs->sub_entry_address ||
|
||||||
|
0 )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Invalid ROM header for MENU Launcher!\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,8 +194,10 @@ static BOOL CheckHeader(void)
|
|||||||
***************************************************************/
|
***************************************************************/
|
||||||
static void EraseAll(void)
|
static void EraseAll(void)
|
||||||
{
|
{
|
||||||
|
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||||
|
MI_CpuClearFast( (void*)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END-HW_ROM_HEADER_BUF );
|
||||||
OS_BootFromFIRM();
|
OS_BootFromFIRM();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@ -111,6 +111,7 @@ static void PreInit(void)
|
|||||||
***************************************************************/
|
***************************************************************/
|
||||||
static void EraseAll(void)
|
static void EraseAll(void)
|
||||||
{
|
{
|
||||||
|
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||||
OS_BootFromFIRM();
|
OS_BootFromFIRM();
|
||||||
|
|||||||
@ -127,14 +127,20 @@ static void PostInit(void)
|
|||||||
CheckHeader
|
CheckHeader
|
||||||
|
|
||||||
ヘッダがシステムメニューとして問題ないかチェック
|
ヘッダがシステムメニューとして問題ないかチェック
|
||||||
先頭32Bは固定値と思われ (リマスターバージョンは違うかな)
|
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
static BOOL CheckHeader(void)
|
static BOOL CheckHeader(void)
|
||||||
{
|
{
|
||||||
static ROM_Header_Short* const rhs = (ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF;
|
static ROM_Header_Short* const rhs = (ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF;
|
||||||
// TODO
|
// イニシャルコードなど
|
||||||
// イニシャルコード
|
|
||||||
OS_TPrintf("Initial Code : %08X\n", *(u32*)rhs->game_code);
|
OS_TPrintf("Initial Code : %08X\n", *(u32*)rhs->game_code);
|
||||||
|
OS_TPrintf("Platform Code : %02X\n", rhs->platform_code);
|
||||||
|
OS_TPrintf("Codec Mode : %s\n", rhs->codec_mode ? "TWL" : "NITRO");
|
||||||
|
OS_TPrintf("Sigunature : %s\n", rhs->enable_signature ? "AVAILABLE" : "NOT AVAILABLE");
|
||||||
|
OS_TPrintf("AES Encryption : %s\n", rhs->enable_aes ? "AVAILABLE" : "NOT AVAILABLE");
|
||||||
|
if ( rhs->enable_aes )
|
||||||
|
{
|
||||||
|
OS_TPrintf("AES Key Type : %s\n", rhs->developer_encrypt ? "FOR DEVELOPMENT" : "FOR PRODUCT");
|
||||||
|
}
|
||||||
// エントリポイント
|
// エントリポイント
|
||||||
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_entry_address);
|
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_entry_address);
|
||||||
OS_TPrintf("ARM7 Entry point : %08X\n", rhs->sub_entry_address);
|
OS_TPrintf("ARM7 Entry point : %08X\n", rhs->sub_entry_address);
|
||||||
@ -151,6 +157,32 @@ static BOOL CheckHeader(void)
|
|||||||
OS_TPrintf("ARM7 LTD ROM address: %08X\n", rhs->sub_ltd_rom_offset);
|
OS_TPrintf("ARM7 LTD ROM address: %08X\n", rhs->sub_ltd_rom_offset);
|
||||||
OS_TPrintf("ARM7 LTD RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
OS_TPrintf("ARM7 LTD RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
||||||
OS_TPrintf("ARM7 LTD size : %08X\n", rhs->sub_ltd_size);
|
OS_TPrintf("ARM7 LTD size : %08X\n", rhs->sub_ltd_size);
|
||||||
|
// 順序ほぼ最適化済み
|
||||||
|
if ( rhs->platform_code != PLATFORM_CODE_TWL_LIMITED || // TWL Limited only
|
||||||
|
!rhs->codec_mode || // TWL mode only
|
||||||
|
!rhs->enable_signature || // Should be use ROM header signature
|
||||||
|
(rhs->titleID_Hi & 0x0005) != 0x0005 || // check only NAND/SYSTEM bits (need?)
|
||||||
|
// should be in main memory
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->main_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->sub_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->main_ltd_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->sub_ltd_ram_address ||
|
||||||
|
// should be in static area without Limited region
|
||||||
|
(u32)rhs->main_ram_address > (u32)rhs->main_entry_address ||
|
||||||
|
(u32)rhs->sub_ram_address > (u32)rhs->sub_entry_address ||
|
||||||
|
// should be in main memory (end address)
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->main_ram_address + rhs->main_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->sub_ram_address + rhs->sub_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->main_ltd_ram_address + rhs->main_ltd_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->sub_ltd_ram_address + rhs->sub_ltd_size ||
|
||||||
|
// should be in static area without Limited region (end address)
|
||||||
|
(u32)rhs->main_ram_address + rhs->main_size <= (u32)rhs->main_entry_address ||
|
||||||
|
(u32)rhs->sub_ram_address + rhs->sub_size <= (u32)rhs->sub_entry_address ||
|
||||||
|
0 )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Invalid ROM header for MENU Launcher!\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,8 +195,10 @@ static BOOL CheckHeader(void)
|
|||||||
***************************************************************/
|
***************************************************************/
|
||||||
static void EraseAll(void)
|
static void EraseAll(void)
|
||||||
{
|
{
|
||||||
|
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||||
|
MI_CpuClearFast( (void*)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END-HW_ROM_HEADER_BUF );
|
||||||
OS_BootFromFIRM();
|
OS_BootFromFIRM();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,6 +83,7 @@ static void PreInit(void)
|
|||||||
***************************************************************/
|
***************************************************************/
|
||||||
static void EraseAll(void)
|
static void EraseAll(void)
|
||||||
{
|
{
|
||||||
|
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||||
OS_BootFromFIRM();
|
OS_BootFromFIRM();
|
||||||
|
|||||||
@ -109,14 +109,21 @@ static void PostInit(void)
|
|||||||
/***************************************************************
|
/***************************************************************
|
||||||
CheckHeader
|
CheckHeader
|
||||||
|
|
||||||
ヘッダの内容がTWLアプリとして問題ないかチェック
|
ヘッダがシステムメニューとして問題ないかチェック
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
static BOOL CheckHeader(void)
|
static BOOL CheckHeader(void)
|
||||||
{
|
{
|
||||||
static ROM_Header_Short* const rhs = (ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF;
|
static ROM_Header_Short* const rhs = (ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF;
|
||||||
// TODO
|
// イニシャルコードなど
|
||||||
// イニシャルコード
|
|
||||||
OS_TPrintf("Initial Code : %08X\n", *(u32*)rhs->game_code);
|
OS_TPrintf("Initial Code : %08X\n", *(u32*)rhs->game_code);
|
||||||
|
OS_TPrintf("Platform Code : %02X\n", rhs->platform_code);
|
||||||
|
OS_TPrintf("Codec Mode : %s\n", rhs->codec_mode ? "TWL" : "NITRO");
|
||||||
|
OS_TPrintf("Sigunature : %s\n", rhs->enable_signature ? "AVAILABLE" : "NOT AVAILABLE");
|
||||||
|
OS_TPrintf("AES Encryption : %s\n", rhs->enable_aes ? "AVAILABLE" : "NOT AVAILABLE");
|
||||||
|
if ( rhs->enable_aes )
|
||||||
|
{
|
||||||
|
OS_TPrintf("AES Key Type : %s\n", rhs->developer_encrypt ? "FOR DEVELOPMENT" : "FOR PRODUCT");
|
||||||
|
}
|
||||||
// ƒGƒ“ƒgƒŠƒ|ƒCƒ“ƒg
|
// ƒGƒ“ƒgƒŠƒ|ƒCƒ“ƒg
|
||||||
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_entry_address);
|
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_entry_address);
|
||||||
OS_TPrintf("ARM7 Entry point : %08X\n", rhs->sub_entry_address);
|
OS_TPrintf("ARM7 Entry point : %08X\n", rhs->sub_entry_address);
|
||||||
@ -133,6 +140,35 @@ static BOOL CheckHeader(void)
|
|||||||
OS_TPrintf("ARM7 LTD ROM address: %08X\n", rhs->sub_ltd_rom_offset);
|
OS_TPrintf("ARM7 LTD ROM address: %08X\n", rhs->sub_ltd_rom_offset);
|
||||||
OS_TPrintf("ARM7 LTD RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
OS_TPrintf("ARM7 LTD RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
||||||
OS_TPrintf("ARM7 LTD size : %08X\n", rhs->sub_ltd_size);
|
OS_TPrintf("ARM7 LTD size : %08X\n", rhs->sub_ltd_size);
|
||||||
|
// 順序ほぼ最適化済み
|
||||||
|
#ifndef FIRM_USE_TWLSDK_KEYS
|
||||||
|
if ( rhs->platform_code != PLATFORM_CODE_TWL_LIMITED || // TWL Limited only
|
||||||
|
!rhs->codec_mode || // TWL mode only
|
||||||
|
!rhs->enable_signature || // Should be use ROM header signature
|
||||||
|
#else
|
||||||
|
if ( // no check
|
||||||
|
#endif
|
||||||
|
// should be in main memory
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->main_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->sub_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->main_ltd_ram_address ||
|
||||||
|
HW_TWL_MAIN_MEM > (u32)rhs->sub_ltd_ram_address ||
|
||||||
|
// should be in static area without Limited region
|
||||||
|
(u32)rhs->main_ram_address > (u32)rhs->main_entry_address ||
|
||||||
|
(u32)rhs->sub_ram_address > (u32)rhs->sub_entry_address ||
|
||||||
|
// should be in main memory (end address)
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->main_ram_address + rhs->main_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->sub_ram_address + rhs->sub_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->main_ltd_ram_address + rhs->main_ltd_size ||
|
||||||
|
HW_TWL_MAIN_MEM_END <= (u32)rhs->sub_ltd_ram_address + rhs->sub_ltd_size ||
|
||||||
|
// should be in static area without Limited region (end address)
|
||||||
|
(u32)rhs->main_ram_address + rhs->main_size <= (u32)rhs->main_entry_address ||
|
||||||
|
(u32)rhs->sub_ram_address + rhs->sub_size <= (u32)rhs->sub_entry_address ||
|
||||||
|
0 )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Invalid ROM header for MENU Launcher!\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,8 +181,10 @@ static BOOL CheckHeader(void)
|
|||||||
***************************************************************/
|
***************************************************************/
|
||||||
static void EraseAll(void)
|
static void EraseAll(void)
|
||||||
{
|
{
|
||||||
|
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||||
|
MI_CpuClearFast( (void*)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END-HW_ROM_HEADER_BUF );
|
||||||
OS_BootFromFIRM();
|
OS_BootFromFIRM();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -202,9 +240,10 @@ void TwlMain( void )
|
|||||||
EraseAll();
|
EraseAll();
|
||||||
|
|
||||||
// failed
|
// failed
|
||||||
while (1)
|
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||||
{
|
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||||
PXI_NotifyID( FIRM_PXI_ID_NULL );
|
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||||
}
|
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||||
|
OS_Terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user