From d90815eb3c6bdfb9904cbf28e8825c32e94567ee Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Thu, 10 Jan 2008 06:15:28 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=97=E3=83=AA=E3=83=AD=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=82=A2=E3=83=97=E3=83=AA=E8=B5=B7=E5=8B=95=E3=81=AE=E3=82=B5?= =?UTF-8?q?=E3=83=B3=E3=83=97=E3=83=AB=E3=81=A7SDK=E3=81=AE=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E5=A4=89=E6=9B=B4=20=E3=80=80SDK=E3=81=AElauncherPara?= =?UTF-8?q?m.h=E3=81=8A=E3=82=88=E3=81=B3os=5FlauncherParam.c=E3=82=92?= =?UTF-8?q?=E3=83=AA=E3=83=93=E3=82=B8=E3=83=A7=E3=83=B33425=E3=81=AB?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B=E5=BF=85=E8=A6=81=E3=82=A2?= =?UTF-8?q?=E3=83=AA=EF=BC=88=E5=85=A8=E4=BD=93=E3=82=92=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E3=81=97=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AE=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=81=AF=E6=9C=AA=E7=A2=BA=E8=AA=8D=EF=BC=89=20?= =?UTF-8?q?=E3=80=80ese=E3=82=92=E4=BD=BF=E3=81=A3=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=81=A7es=E3=82=92=E4=BD=BF=E3=81=86?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@454 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../reloc_info/common/src/reloc_info.c | 11 +- .../sysmenu/ARM9/src/sysmenu_lib.c | 16 +- build/tests/ExecPreLoadedApp/ARM9/Makefile | 5 +- .../ARM9/src/ExecPreLoadedApp.c | 307 +----------------- 4 files changed, 18 insertions(+), 321 deletions(-) diff --git a/build/libraries_sysmenu/reloc_info/common/src/reloc_info.c b/build/libraries_sysmenu/reloc_info/common/src/reloc_info.c index 1b3b8f78..f9456674 100644 --- a/build/libraries_sysmenu/reloc_info/common/src/reloc_info.c +++ b/build/libraries_sysmenu/reloc_info/common/src/reloc_info.c @@ -60,7 +60,7 @@ static u32 load_region_check_list[RELOCATE_INFO_NUM][RELOCATE_INFO_NUM * 2 - 1] // ============================================================================ // -// アプリ起動 +// 再配置情報生成 // // ============================================================================ @@ -71,9 +71,7 @@ static u32 load_region_check_list[RELOCATE_INFO_NUM][RELOCATE_INFO_NUM * 2 - 1] static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx ( u32 *dest, u32 length, RomSegmentRange default_region, u32 *check_dest, Relocate_Info *info ) { - // 再配置情報が残っている可能性大なのでクリアしておく MI_CpuClearFast( info, sizeof(Relocate_Info) ); - if( default_region.end - default_region.start < length ) return FALSE;// サイズオーバー if( !( default_region.start <= *dest && *dest + length <= default_region.end ) ) { @@ -84,7 +82,7 @@ static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx check_dest += 2; } - // ここまで来ていれば再配置可能 + // ここまで来ていれば再配置可 // 後方コピーフラグOFF info->rev = FALSE; if( default_region.start < *dest + length && *dest + length <= default_region.end ) @@ -120,11 +118,6 @@ static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx }else { // 再配置の必要なし - info->src = NULL; - info->dest = NULL; - info->length = NULL; - info->post_clear_addr = NULL; - info->post_clear_length = NULL; } return TRUE; } diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 40099eef..e0d8fb29 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -625,6 +625,8 @@ OS_TPrintf("RebootSystem failed: logo CRC error\n"); } // 領域読み込み先のチェック及び再配置情報データの作成 + // ゲームカードの再配置情報が書き込まれているので、nandアプリロード前に一旦クリア + MI_CpuClearFast(SYSMi_GetWork()->romRelocateInfo, sizeof(Relocate_Info) * RELOCATE_INFO_NUM); for( i=0; i= ARM9_LTD_STATIC ) continue;// nitroでは読み込まない領域 @@ -702,17 +704,17 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle ) // カードブートでなく、ロード済みの場合、再配置情報をランチャーパラメタから読み込み MI_CpuCopy8( SYSM_GetLauncherParamBody()->v1.relocInfo, SYSMi_GetWork()->romRelocateInfo, sizeof(Relocate_Info)*RELOCATE_INFO_NUM ); // 更にヘッダを再配置 - if( ((ROM_Header_Short *)(0x27e0000 - 0x4000))->platform_code & PLATFORM_CODE_FLAG_TWL ) { + if( ((ROM_Header_Short *)(OS_TWL_HEADER_PRELOAD_MMEM))->platform_code & PLATFORM_CODE_FLAG_TWL ) { // TWL-ROMヘッダ情報の再配置 - MI_CpuCopyFast( (void *)(0x27e0000 - 0x4000), (void *)HW_TWL_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE ); - MI_CpuCopyFast( (void *)(0x27e0000 - 0x4000), (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); + MI_CpuCopyFast( (void *)(OS_TWL_HEADER_PRELOAD_MMEM), (void *)HW_TWL_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE ); + MI_CpuCopyFast( (void *)(OS_TWL_HEADER_PRELOAD_MMEM), (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); }else { // TWL-ROMヘッダ情報の再配置 - MI_CpuCopyFast( (void *)(0x27e0000 - 0x4000), (void *)HW_TWL_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); - MI_CpuCopyFast( (void *)(0x27e0000 - 0x4000), (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); + MI_CpuCopyFast( (void *)(OS_TWL_HEADER_PRELOAD_MMEM), (void *)HW_TWL_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); + MI_CpuCopyFast( (void *)(OS_TWL_HEADER_PRELOAD_MMEM), (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); // NTR-ROMヘッダ情報の再配置 - MI_CpuCopyFast( (void *)(0x27e0000 - 0x4000), (void *)0x027ffe00, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); // 8Mのケツへ(TWLデバッガでのNTRモードデバッグ用) - MI_CpuCopyFast( (void *)(0x27e0000 - 0x4000), (void *)0x023ffe00, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); // 4Mのケツへ + MI_CpuCopyFast( (void *)(OS_TWL_HEADER_PRELOAD_MMEM), (void *)0x027ffe00, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); // 8Mのケツへ(TWLデバッガでのNTRモードデバッグ用) + MI_CpuCopyFast( (void *)(OS_TWL_HEADER_PRELOAD_MMEM), (void *)0x023ffe00, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); // 4Mのケツへ } } } diff --git a/build/tests/ExecPreLoadedApp/ARM9/Makefile b/build/tests/ExecPreLoadedApp/ARM9/Makefile index 0390f39d..eb99e626 100644 --- a/build/tests/ExecPreLoadedApp/ARM9/Makefile +++ b/build/tests/ExecPreLoadedApp/ARM9/Makefile @@ -37,8 +37,9 @@ SRCS = main.c ExecPreLoadedApp.c \ LINCLUDES = $(MISC_DIR)/include -LLIBRARIES += libnam$(TWL_LIBSUFFIX).a \ - libese$(TWL_LIBSUFFIX).a \ +LLIBRARIES += libboc$(TWL_LIBSUFFIX).a \ + libes$(TWL_LIBSUFFIX).a \ + libnam$(TWL_LIBSUFFIX).a \ libreloc_info$(TWL_LIBSUFFIX).a ADDRESS_DTCM = 0x0e000000 diff --git a/build/tests/ExecPreLoadedApp/ARM9/src/ExecPreLoadedApp.c b/build/tests/ExecPreLoadedApp/ARM9/src/ExecPreLoadedApp.c index 450a688f..b1ca8598 100644 --- a/build/tests/ExecPreLoadedApp/ARM9/src/ExecPreLoadedApp.c +++ b/build/tests/ExecPreLoadedApp/ARM9/src/ExecPreLoadedApp.c @@ -78,146 +78,12 @@ static const MenuParam s_menuParam = { // テストプログラム //====================================================== -typedef struct RomSegmentRange { - u32 start; - u32 end; -}RomSegmentRange; - -//#define EPLA_TWL_HEADER_LOAD_MMEM (SYSM_TWL_ARM9_LTD_LOAD_MMEM_END - 0x4000) -//#define EPLA_TWL_HEADER_LOAD_MMEM_END SYSM_TWL_ARM9_LTD_LOAD_MMEM_END -#define EPLA_TWL_HEADER_LOAD_MMEM (0x27e0000 - 0x4000) -#define EPLA_TWL_HEADER_LOAD_MMEM_END 0x27e0000 -#define EPLA_TWL_ARM7_LTD_LOAD_MMEM (EPLA_TWL_HEADER_LOAD_MMEM - 0x108000) -#define EPLA_TWL_ARM7_LTD_LOAD_MMEM_END EPLA_TWL_HEADER_LOAD_MMEM -#define EPLA_TWL_ARM9_LTD_LOAD_MMEM_END EPLA_TWL_ARM7_LTD_LOAD_MMEM - -#define EPLA_TWL_ARM9_LTD_LOAD_MMEM (SYSM_TWL_ARM9_LTD_LOAD_MMEM + 0x1800) - -static RomSegmentRange romSegmentRange[RELOCATE_INFO_NUM] = { - { SYSM_TWL_ARM9_LOAD_MMEM, SYSM_TWL_ARM9_LOAD_MMEM_END }, - { SYSM_TWL_ARM7_LOAD_MMEM, SYSM_TWL_ARM7_LOAD_MMEM_END }, - { EPLA_TWL_ARM9_LTD_LOAD_MMEM, EPLA_TWL_ARM9_LTD_LOAD_MMEM_END }, - { EPLA_TWL_ARM7_LTD_LOAD_MMEM, EPLA_TWL_ARM7_LTD_LOAD_MMEM_END }, -}; - -static RomSegmentRange romSegmentRangeNitro[RELOCATE_INFO_NUM] = { - { SYSM_NTR_ARM9_LOAD_MMEM, SYSM_NTR_ARM9_LOAD_MMEM_END }, - { SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END }, - { EPLA_TWL_ARM9_LTD_LOAD_MMEM, EPLA_TWL_ARM9_LTD_LOAD_MMEM_END }, - { EPLA_TWL_ARM7_LTD_LOAD_MMEM, EPLA_TWL_ARM7_LTD_LOAD_MMEM_END }, -}; - -static u32 load_region_check_list[RELOCATE_INFO_NUM][(RELOCATE_INFO_NUM+1) * 2 - 1] = -{ - {SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END, - EPLA_TWL_ARM9_LTD_LOAD_MMEM, EPLA_TWL_ARM9_LTD_LOAD_MMEM_END, - EPLA_TWL_ARM7_LTD_LOAD_MMEM, EPLA_TWL_ARM7_LTD_LOAD_MMEM_END, - EPLA_TWL_HEADER_LOAD_MMEM, EPLA_TWL_HEADER_LOAD_MMEM_END, - NULL }, - {SYSM_NTR_ARM9_LOAD_MMEM, SYSM_NTR_ARM9_LOAD_MMEM_END, - EPLA_TWL_ARM9_LTD_LOAD_MMEM, EPLA_TWL_ARM9_LTD_LOAD_MMEM_END, - EPLA_TWL_ARM7_LTD_LOAD_MMEM, EPLA_TWL_ARM7_LTD_LOAD_MMEM_END, - EPLA_TWL_HEADER_LOAD_MMEM, EPLA_TWL_HEADER_LOAD_MMEM_END, - NULL }, - {SYSM_NTR_ARM9_LOAD_MMEM, SYSM_NTR_ARM9_LOAD_MMEM_END, - SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END, - EPLA_TWL_ARM7_LTD_LOAD_MMEM, EPLA_TWL_ARM7_LTD_LOAD_MMEM_END, - EPLA_TWL_HEADER_LOAD_MMEM, EPLA_TWL_HEADER_LOAD_MMEM_END, - NULL }, - {SYSM_NTR_ARM9_LOAD_MMEM, SYSM_NTR_ARM9_LOAD_MMEM_END, - SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END, - EPLA_TWL_ARM9_LTD_LOAD_MMEM, EPLA_TWL_ARM9_LTD_LOAD_MMEM_END, - EPLA_TWL_HEADER_LOAD_MMEM, EPLA_TWL_HEADER_LOAD_MMEM_END, - NULL }, -}; - // ============================================================================ // // アプリ起動 // // ============================================================================ -// ROMのロード先領域をチェックし、再配置の必要があればロード先アドレスを変更し、再配置情報を*infoにセットする。 -// ロード先領域が被ってはいけない領域のリストcheck_destは{開始, 終了, 開始2, 終了2, ……, NULL}の形式。 -// 再配置の有り無しに関わらずロード可能ならばTRUE、ロード不可能ならばFALSEを返す -// 再配置が必要ない場合、再配置情報のsrc,dest,lengthにはそれぞれNULLが代入される。 -static BOOL EPLAi_CheckLoadRegionAndSetRelocateInfoEx -( u32 *dest, u32 length, RomSegmentRange default_region, u32 *check_dest, Relocate_Info *info ) -{ - // 再配置情報が残っている可能性大なのでクリアしておく - MI_CpuClearFast( info, sizeof(Relocate_Info) ); - - if( default_region.end - default_region.start < length ) return FALSE;// サイズオーバー - if( !( default_region.start <= *dest && *dest + length <= default_region.end ) ) - { - // 再配置の必要あり - while( *check_dest != NULL ) - { - if( check_dest[0] < *dest + length && *dest < check_dest[1] ) return FALSE;// チェック領域に被ったらNG - check_dest += 2; - } - - // ここまで来ていれば再配置可能 - // 後方コピーフラグOFF - info->rev = FALSE; - if( default_region.start < *dest + length && *dest + length <= default_region.end ) - { - // デフォルト配置領域の先頭部に、再配置先の後部が被っている - // ポストクリア情報 - info->post_clear_addr = *dest + length; - info->post_clear_length = default_region.end - (*dest + length); - } - else if( default_region.start <= *dest && *dest < default_region.end ) - { - // デフォルト配置領域の後部に、再配置先の先頭部が被っている - // ポストクリア情報 - info->post_clear_addr = default_region.start; - info->post_clear_length = *dest - default_region.start; - if( *dest < default_region.start + length ) - { - // 更に、デフォルト配置領域にロードしたデータの最後尾と再配置先の先頭部が被っている - // 後方コピーフラグON - info->rev = TRUE; - } - }else - { - // まったく被っていない - // ポストクリア情報 - info->post_clear_addr = default_region.start; - info->post_clear_length = default_region.end - default_region.start; - } - info->src = default_region.start; - info->dest = *dest; - info->length = length; - *dest = default_region.start; - }else - { - // 再配置の必要なし - info->src = NULL; - info->dest = NULL; - info->length = NULL; - info->post_clear_addr = NULL; - info->post_clear_length = NULL; - } - return TRUE; -} - -// EPLAi_CheckLoadRegionAndSetRelocateInfoExのラッパー関数 -static BOOL EPLAi_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32 length, Relocate_Info *info, BOOL isTwlApp) -{ - RomSegmentRange *rsr; - if( isTwlApp ) - { - rsr = romSegmentRange; - }else - { - //NTR専用 - rsr = romSegmentRangeNitro; - } - return EPLAi_CheckLoadRegionAndSetRelocateInfoEx(dest, length, rsr[seg], load_region_check_list[seg], info); -} - - static void DrawMenuScene( void ) { PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"ExecPreLoadedApp"); @@ -246,52 +112,9 @@ static void MenuInit( void ) GXS_DispOn(); } -// 指定ファイルリード -static s32 ReadFile(FSFile* pf, void* buffer, s32 size) -{ - u8* p = (u8*)buffer; - s32 remain = size; - - while( remain > 0 ) - { - const s32 len = MATH_IMin(1024, remain); - const s32 readLen = FS_ReadFile(pf, p, len); - - if( readLen < 0 ) - { - return readLen; - } - if( readLen != len ) - { - return size - remain + readLen; - } - - remain -= readLen; - p += readLen; - } - - return size; -} - -#define EPLAi_GetLauncherParamAddr() ( (LauncherParam *)HW_PARAM_LAUNCH_PARAM ) static BOOL LoadTitle( NAMTitleId bootTitleID ) { - enum - { - region_header = 0, - region_arm9_ntr, - region_arm7_ntr, - region_arm9_twl, - region_arm7_twl, - region_max - }; - // メインメモリのクリア - // DSダウンロードプレイの時は、ROMヘッダを退避する - // アプリロード - // アプリ認証 - - // ロード char path[256]; FSFile file[1]; @@ -299,132 +122,10 @@ static BOOL LoadTitle( NAMTitleId bootTitleID ) BOOL isTwlApp = TRUE; NAM_GetTitleBootContentPath(path, bootTitleID); - bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R); - - if( ! bSuccess ) - { -OS_TPrintf("RebootSystem failed: cant open file\n"); - return FALSE; - } - - { - int i; - u32 source[region_max]; - u32 length[region_max]; - u32 destaddr[region_max]; - static u8 header[HW_TWL_ROM_HEADER_BUF_SIZE] ATTRIBUTE_ALIGN(32); - s32 readLen; - - // まずROMヘッダを読み込む - // (本来ならここでSRLの正当性判定) - bSuccess = FS_SeekFile(file, 0x00000000, FS_SEEK_SET); - - if( ! bSuccess ) - { -OS_TPrintf("RebootSystem failed: cant seek file(0)\n"); - FS_CloseFile(file); - return FALSE; - } - - readLen = ReadFile(file, header, (s32)sizeof(header)); - - if( readLen != (s32)sizeof(header) ) - { -OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", header, 0, sizeof(header), readLen); - FS_CloseFile(file); - return FALSE; - } - - if( header[0x15C] != 0x56 || header[0x15D] != 0xCF ) - { -int i, j; -for( i = 0; i < 0x20; ++i ) -{ -for( j = 0; j < 0x10; ++j ) -{ -OS_TPrintf("%02X ", header[i * 0x10 + j]); -} -OS_TPrintf("\n"); -} -OS_TPrintf("RebootSystem failed: logo CRC error\n"); - FS_CloseFile(file); - return FALSE; - } - - if( header[0x12] && 0x03 == 0 ) - { - //NTR専用ROM - isTwlApp = FALSE; - } - - // 各領域を読み込む - source [region_header ] = 0x00000000; - length [region_header ] = HW_TWL_ROM_HEADER_BUF_SIZE; - destaddr[region_header ] = HW_TWL_ROM_HEADER_BUF; - - source [region_arm9_ntr] = *(const u32*)&header[0x020]; - length [region_arm9_ntr] = *(const u32*)&header[0x02C]; - destaddr[region_arm9_ntr] = *(const u32*)&header[0x028]; - - source [region_arm7_ntr] = *(const u32*)&header[0x030]; - length [region_arm7_ntr] = *(const u32*)&header[0x03C]; - destaddr[region_arm7_ntr] = *(const u32*)&header[0x038]; - - if( isTwlApp ) - { - source [region_arm9_twl] = *(const u32*)&header[0x1C0]; - length [region_arm9_twl] = *(const u32*)&header[0x1CC]; - destaddr[region_arm9_twl] = *(const u32*)&header[0x1C8]; - - source [region_arm7_twl] = *(const u32*)&header[0x1D0]; - length [region_arm7_twl] = *(const u32*)&header[0x1DC]; - destaddr[region_arm7_twl] = *(const u32*)&header[0x1D8]; - } - - // 領域読み込み先のチェック及び再配置情報データの作成 - for( i=0; i= ARM9_LTD_STATIC ) continue;// nitroでは読み込まない領域 - // 再配置情報のランチャーパラメタへの受け渡し処理。暫定的な実装。SDKに機能として組み込んでしまうか検討中。 - if ( !EPLAi_CheckLoadRegionAndSetRelocateInfo( (RomSegmentName)i, &(destaddr[i+region_arm9_ntr]), length[i+region_arm9_ntr], - &EPLAi_GetLauncherParamAddr()->body.v1.relocInfo[i], isTwlApp ) ) - { - OS_TPrintf("RebootSystem failed: ROM Load Region error\n"); - FS_CloseFile(file); - return FALSE; - } - } - - for (i = region_header; i < region_max; ++i) - { - u32 len = length[i]; - - if ( !isTwlApp && i >= region_arm9_twl ) continue;// nitroでは読み込まない領域 - - bSuccess = FS_SeekFile(file, (s32)source[i], FS_SEEK_SET); - - if( ! bSuccess ) - { -OS_TPrintf("RebootSystem failed: cant seek file(%d)\n", source[i]); - FS_CloseFile(file); - return FALSE; - } - - readLen = ReadFile(file, (void *)destaddr[i], (s32)len); - - if( readLen != (s32)len ) - { -OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len); - FS_CloseFile(file); - return FALSE; - } - } - - (void)FS_CloseFile(file); - } - - // ROMヘッダバッファをコピー - MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)EPLA_TWL_HEADER_LOAD_MMEM, EPLA_TWL_HEADER_LOAD_MMEM_END - EPLA_TWL_HEADER_LOAD_MMEM ); + if( !OS_SetRelocateInfoAndLoadApplication( path ) ) + { + return FALSE; + } SYSMi_GetWork()->isLoadSucceeded = TRUE; return TRUE;