From 3008c730ce08da5202143b08525da8c83c6917c1 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Wed, 12 Mar 2008 12:44:14 +0000 Subject: [PATCH] =?UTF-8?q?(=E6=9B=B4=E6=96=B0:Akabane=20Jumpei)=20?= =?UTF-8?q?=E3=83=BBArm9=E5=B8=B8=E9=A7=90=E3=83=A2=E3=82=B8=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=81=AEGame=E9=A0=98=E5=9F=9F=E3=81=AB?= =?UTF-8?q?=E3=81=8B=E3=81=8B=E3=81=A3=E3=81=A6=E3=81=84=E3=82=8B=E9=83=A8?= =?UTF-8?q?=E5=88=86=E3=81=AE=E3=83=87=E3=83=BC=E3=82=BF=E8=AA=AD=E3=81=BF?= =?UTF-8?q?=E8=BE=BC=E3=81=BF=E6=9D=A1=E4=BB=B6=E3=82=92=E4=BF=AE=E6=AD=A3?= 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@875 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../hotsw/ARM7/include/hotswTypes.h | 2 ++ .../libraries_sysmenu/hotsw/ARM7/src/hotsw.c | 34 ++++++++----------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h index 09420636..ee48e7bf 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h @@ -44,7 +44,9 @@ extern "C" { #define ONE_SEGMENT_SIZE 0x1000 // 1Segmentのサイズ(バイト単位) #define ONE_SEGMENT_WORD_SIZE 0x400 // 1Segmentのサイズ(ワード単位) +#define SECURE_SEGMENT_START 0x4000 // Secure領域のスタートアドレス #define SECURE_SEGMENT_SIZE 0x4000 // Secure領域のサイズ +#define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE) #define ROM_EMULATION_DATA_SIZE 0x20 // ROMエミュレーションデータサイズ diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 4a664563..a9c6e6f9 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -599,45 +599,42 @@ static HotSwState LoadStaticModule(void) { HotSwState retval = HOTSW_SUCCESS; HotSwState state = HOTSW_SUCCESS; - + u32 arm9StcEnd = s_cbData.pBootSegBuf->rh.s.main_rom_offset + s_cbData.pBootSegBuf->rh.s.main_size; + + // 配置先と再配置情報を取得 & Arm9の常駐モジュール残りを指定先に転送 s_cbData.arm9Stc = (u32)s_cbData.pBootSegBuf->rh.s.main_ram_address; - // 配置先と再配置情報を取得 & Arm9の常駐モジュール残りを指定先に転送 if(SYSM_CheckLoadRegionAndSetRelocateInfo( ARM9_STATIC, &s_cbData.arm9Stc, s_cbData.pBootSegBuf->rh.s.main_size, &SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC] , s_cbData.twlFlg)){ - if(s_cbData.pBootSegBuf->rh.s.main_size > SECURE_SEGMENT_SIZE){ - state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_rom_offset + SECURE_SEGMENT_SIZE, - (u32 *)(s_cbData.arm9Stc + SECURE_SEGMENT_SIZE), - s_cbData.pBootSegBuf->rh.s.main_size - SECURE_SEGMENT_SIZE); + if(arm9StcEnd > SECURE_SEGMENT_END){ + state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_rom_offset + SECURE_SEGMENT_SIZE, (u32 *)(s_cbData.arm9Stc + SECURE_SEGMENT_SIZE), arm9StcEnd - SECURE_SEGMENT_END); retval = (retval == HOTSW_SUCCESS) ? state : retval; } } else{ retval = HOTSW_BUFFER_OVERRUN_ERROR; } - if(retval != HOTSW_SUCCESS){ return retval; } - - s_cbData.arm7Stc = (u32)s_cbData.pBootSegBuf->rh.s.sub_ram_address; + // 配置先と再配置情報を取得 & Arm7の常駐モジュールを指定先に転送 - if(SYSM_CheckLoadRegionAndSetRelocateInfo( ARM7_STATIC, &s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size, &SYSMi_GetWork()->romRelocateInfo[ARM7_STATIC] , s_cbData.twlFlg)){ + s_cbData.arm7Stc = (u32)s_cbData.pBootSegBuf->rh.s.sub_ram_address; + if(SYSM_CheckLoadRegionAndSetRelocateInfo( ARM7_STATIC, &s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size, &SYSMi_GetWork()->romRelocateInfo[ARM7_STATIC], s_cbData.twlFlg)){ state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_rom_offset, (u32 *)s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size); retval = (retval == HOTSW_SUCCESS) ? state : retval; } else{ retval = HOTSW_BUFFER_OVERRUN_ERROR; } - if(retval != HOTSW_SUCCESS){ return retval; } + - // TWLでのみロード - if( s_cbData.pBootSegBuf->rh.s.platform_code & PLATFORM_CODE_FLAG_TWL ) { - u32 size = ( s_cbData.pBootSegBuf->rh.s.main_ltd_size < SECURE_SEGMENT_SIZE ) ? - s_cbData.pBootSegBuf->rh.s.main_ltd_size : SECURE_SEGMENT_SIZE; + // [TODO] TWLカード対応 (※ 拡張領域の境界はRomHeaderの値で計算する) + if( s_cbData.twlFlg ) { + u32 size = ( s_cbData.pBootSegBuf->rh.s.main_ltd_size < SECURE_SEGMENT_SIZE ) ? s_cbData.pBootSegBuf->rh.s.main_ltd_size : SECURE_SEGMENT_SIZE; s_cbData.arm9Ltd = (u32)s_cbData.pBootSegBuf->rh.s.main_ltd_ram_address; - // 配置先と再配置情報を取得 & Arm9の常駐モジュールを指定先に転送(※TWLカード対応していないので、注意!!) + // 配置先と再配置情報を取得 & Arm9の常駐モジュールを指定先に転送 if(SYSM_CheckLoadRegionAndSetRelocateInfo( ARM9_LTD_STATIC, &s_cbData.arm9Ltd, s_cbData.pBootSegBuf->rh.s.main_ltd_size, &SYSMi_GetWork()->romRelocateInfo[ARM9_LTD_STATIC] , TRUE)){ state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset, (u32 *)SYSM_CARD_TWL_SECURE_BUF, size); retval = (retval == HOTSW_SUCCESS) ? state : retval; @@ -656,9 +653,9 @@ static HotSwState LoadStaticModule(void) if(retval != HOTSW_SUCCESS){ return retval; } - - s_cbData.arm7Ltd = (u32)s_cbData.pBootSegBuf->rh.s.sub_ltd_ram_address; + // 配置先と再配置情報を取得 & Arm7の常駐モジュールを指定先に転送 + s_cbData.arm7Ltd = (u32)s_cbData.pBootSegBuf->rh.s.sub_ltd_ram_address; if(SYSM_CheckLoadRegionAndSetRelocateInfo( ARM7_LTD_STATIC, &s_cbData.arm7Ltd, s_cbData.pBootSegBuf->rh.s.sub_ltd_size, &SYSMi_GetWork()->romRelocateInfo[ARM7_LTD_STATIC], TRUE)){ state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_ltd_rom_offset, (u32 *)s_cbData.arm7Ltd, s_cbData.pBootSegBuf->rh.s.sub_ltd_size); retval = (retval == HOTSW_SUCCESS) ? state : retval; @@ -666,7 +663,6 @@ static HotSwState LoadStaticModule(void) else{ retval = HOTSW_BUFFER_OVERRUN_ERROR; } - if(retval != HOTSW_SUCCESS){ return retval; }