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)
|
||||
{
|
||||
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||
#ifdef SDK_FINALROM
|
||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||
OS_BootFromFIRM();
|
||||
|
||||
@ -109,14 +109,21 @@ static void PostInit(void)
|
||||
/***************************************************************
|
||||
CheckHeader
|
||||
|
||||
ヘッダの内容がTWLアプリとして問題ないかチェック
|
||||
ヘッダがシステムメニューとして問題ないかチェック
|
||||
***************************************************************/
|
||||
static BOOL CheckHeader(void)
|
||||
{
|
||||
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("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
|
||||
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_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 RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -145,8 +181,10 @@ static BOOL CheckHeader(void)
|
||||
***************************************************************/
|
||||
static void EraseAll(void)
|
||||
{
|
||||
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||
#ifdef SDK_FINALROM
|
||||
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();
|
||||
#endif
|
||||
}
|
||||
@ -202,9 +240,10 @@ void TwlMain( void )
|
||||
EraseAll();
|
||||
|
||||
// failed
|
||||
while (1)
|
||||
{
|
||||
PXI_NotifyID( FIRM_PXI_ID_NULL );
|
||||
}
|
||||
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||
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)
|
||||
{
|
||||
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||
#ifdef SDK_FINALROM
|
||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||
OS_BootFromFIRM();
|
||||
|
||||
@ -126,14 +126,20 @@ static void PostInit(void)
|
||||
CheckHeader
|
||||
|
||||
ヘッダがシステムメニューとして問題ないかチェック
|
||||
先頭32Bは固定値と思われ (リマスターバージョンは違うかな)
|
||||
***************************************************************/
|
||||
static BOOL CheckHeader(void)
|
||||
{
|
||||
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("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("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 RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -162,8 +194,10 @@ static BOOL CheckHeader(void)
|
||||
***************************************************************/
|
||||
static void EraseAll(void)
|
||||
{
|
||||
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||
#ifdef SDK_FINALROM
|
||||
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();
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -111,6 +111,7 @@ static void PreInit(void)
|
||||
***************************************************************/
|
||||
static void EraseAll(void)
|
||||
{
|
||||
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||
#ifdef SDK_FINALROM
|
||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||
OS_BootFromFIRM();
|
||||
|
||||
@ -127,14 +127,20 @@ static void PostInit(void)
|
||||
CheckHeader
|
||||
|
||||
ヘッダがシステムメニューとして問題ないかチェック
|
||||
先頭32Bは固定値と思われ (リマスターバージョンは違うかな)
|
||||
***************************************************************/
|
||||
static BOOL CheckHeader(void)
|
||||
{
|
||||
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("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("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 RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -163,8 +195,10 @@ static BOOL CheckHeader(void)
|
||||
***************************************************************/
|
||||
static void EraseAll(void)
|
||||
{
|
||||
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||
#ifdef SDK_FINALROM
|
||||
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();
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -83,6 +83,7 @@ static void PreInit(void)
|
||||
***************************************************************/
|
||||
static void EraseAll(void)
|
||||
{
|
||||
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||
#ifdef SDK_FINALROM
|
||||
MI_CpuClearFast( (void*)HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_SIZE );
|
||||
OS_BootFromFIRM();
|
||||
|
||||
@ -109,14 +109,21 @@ static void PostInit(void)
|
||||
/***************************************************************
|
||||
CheckHeader
|
||||
|
||||
ヘッダの内容がTWLアプリとして問題ないかチェック
|
||||
ヘッダがシステムメニューとして問題ないかチェック
|
||||
***************************************************************/
|
||||
static BOOL CheckHeader(void)
|
||||
{
|
||||
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("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
|
||||
OS_TPrintf("ARM9 Entry point : %08X\n", rhs->main_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 RAM address: %08X\n", rhs->sub_ltd_ram_address);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -145,8 +181,10 @@ static BOOL CheckHeader(void)
|
||||
***************************************************************/
|
||||
static void EraseAll(void)
|
||||
{
|
||||
MI_CpuClearFast( OSi_GetFromFirmAddr(), sizeof(OSFromFirmBuf) );
|
||||
#ifdef SDK_FINALROM
|
||||
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();
|
||||
#endif
|
||||
}
|
||||
@ -202,9 +240,10 @@ void TwlMain( void )
|
||||
EraseAll();
|
||||
|
||||
// failed
|
||||
while (1)
|
||||
{
|
||||
PXI_NotifyID( FIRM_PXI_ID_NULL );
|
||||
}
|
||||
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||
PXI_NotifyID( FIRM_PXI_ID_ERR );
|
||||
OS_Terminate();
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user