mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
SYSM_CheckLoadRegionAndSetRelocateInfoを変更
・他のソースからも使えるよう、staticでなくなった ・TWLアプリかどうかのフラグを引数で指定するよう変更 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@381 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
cd910f66d0
commit
58ae377663
@ -64,12 +64,6 @@ static TWLBannerFile s_bannerBuf[ LAUNCHER_TITLE_LIST_NUM ] ATTRIBUTE_ALIGN(32);
|
||||
|
||||
|
||||
// const data------------------------------------------------------------------
|
||||
typedef enum RomSegmentName {
|
||||
ARM9_STATIC,
|
||||
ARM7_STATIC,
|
||||
ARM9_LTD_STATIC,
|
||||
ARM7_LTD_STATIC
|
||||
}RomSegmentName;
|
||||
|
||||
typedef struct RomSegmentRange {
|
||||
u32 start;
|
||||
@ -83,6 +77,13 @@ static RomSegmentRange romSegmentRange[RELOCATE_INFO_NUM] = {
|
||||
{ SYSM_TWL_ARM7_LTD_LOAD_MMEM, SYSM_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 },
|
||||
{ SYSM_TWL_ARM9_LTD_LOAD_MMEM, SYSM_TWL_ARM9_LTD_LOAD_MMEM_END },
|
||||
{ SYSM_TWL_ARM7_LTD_LOAD_MMEM, SYSM_TWL_ARM7_LTD_LOAD_MMEM_END },
|
||||
};
|
||||
|
||||
static u32 load_region_check_list[RELOCATE_INFO_NUM][RELOCATE_INFO_NUM * 2 - 1] =
|
||||
{
|
||||
{SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END,
|
||||
@ -579,14 +580,24 @@ static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx
|
||||
}
|
||||
|
||||
// SYSMi_CheckLoadRegionAndSetRelocateInfoExのラッパー関数
|
||||
static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32 length, Relocate_Info *info )
|
||||
BOOL SYSM_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32 length, Relocate_Info *info, BOOL isTwlApp)
|
||||
{
|
||||
// TWLにしか対応していないので注意。ヘッダを見てNTRならデフォルト配置領域を変更してやる必要あり。
|
||||
return SYSMi_CheckLoadRegionAndSetRelocateInfoEx(dest, length, romSegmentRange[seg], load_region_check_list[seg], info);
|
||||
RomSegmentRange *rsr;
|
||||
if( isTwlApp )
|
||||
{
|
||||
rsr = romSegmentRange;
|
||||
}else
|
||||
{
|
||||
//NTR専用
|
||||
rsr = romSegmentRangeNitro;
|
||||
}
|
||||
return SYSMi_CheckLoadRegionAndSetRelocateInfoEx(dest, length, rsr[seg], load_region_check_list[seg], info);
|
||||
}
|
||||
|
||||
// TWLアプリのみ対応、NTRはまだ
|
||||
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
|
||||
{ enum
|
||||
{
|
||||
enum
|
||||
{
|
||||
region_header = 0,
|
||||
region_arm9_ntr,
|
||||
@ -658,7 +669,12 @@ OS_TPrintf("RebootSystem failed: logo CRC error\n");
|
||||
FS_CloseFile(file);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if( header[0x12] && 0x03 == 0 )
|
||||
{
|
||||
//NTR専用ROM
|
||||
}
|
||||
|
||||
// 各領域を読み込む
|
||||
source [region_header ] = 0x00000000;
|
||||
length [region_header ] = HW_TWL_ROM_HEADER_BUF_SIZE;
|
||||
@ -679,18 +695,14 @@ OS_TPrintf("RebootSystem failed: logo CRC error\n");
|
||||
source [region_arm7_twl] = *(const u32*)&header[0x1D0];
|
||||
length [region_arm7_twl] = *(const u32*)&header[0x1DC];
|
||||
destaddr[region_arm7_twl] = *(const u32*)&header[0x1D8];
|
||||
|
||||
if( header[0x12] && 0x03 == 0 )
|
||||
{
|
||||
//NTR専用ROM
|
||||
}
|
||||
|
||||
MI_CpuClearFast( (void *)SYSMi_GetWork()->romRelocateInfo, RELOCATE_INFO_NUM * sizeof(Relocate_Info) );
|
||||
|
||||
// 領域読み込み先のチェック及び再配置情報データの作成
|
||||
for( i=0; i<RELOCATE_INFO_NUM; i++ )
|
||||
{
|
||||
if ( !SYSMi_CheckLoadRegionAndSetRelocateInfo( (RomSegmentName)i, &(destaddr[i+region_arm9_ntr]), length[i+region_arm9_ntr], &(SYSMi_GetWork()->romRelocateInfo[i]) ) )
|
||||
if ( !SYSM_CheckLoadRegionAndSetRelocateInfo( (RomSegmentName)i, &(destaddr[i+region_arm9_ntr]), length[i+region_arm9_ntr],
|
||||
&(SYSMi_GetWork()->romRelocateInfo[i]), TRUE ) )
|
||||
{
|
||||
OS_TPrintf("RebootSystem failed: ROM Load Region error\n");
|
||||
FS_CloseFile(file);
|
||||
|
||||
@ -68,6 +68,14 @@ typedef enum AuthResult {
|
||||
AUTH_RESULT_ENTRY_ADDRESS_ERROR = 5
|
||||
}AuthResult;
|
||||
|
||||
// ROMセグメント名
|
||||
typedef enum RomSegmentName {
|
||||
ARM9_STATIC = 0,
|
||||
ARM7_STATIC = 1,
|
||||
ARM9_LTD_STATIC = 2,
|
||||
ARM7_LTD_STATIC = 3
|
||||
}RomSegmentName;
|
||||
|
||||
|
||||
// global variable------------------------------------------------------
|
||||
extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用
|
||||
@ -85,6 +93,7 @@ extern int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ); //
|
||||
extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size ); // NAND アプリタイトルリストの取得
|
||||
|
||||
// アプリ起動
|
||||
BOOL SYSM_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32 length, Relocate_Info *info, BOOL isTwlApp ); //
|
||||
extern void SYSM_StartLoadTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドでロード開始
|
||||
extern BOOL SYSM_IsLoadTitleFinished( TitleProperty *pBootTitle ); // SYSM_StartLoadTitleで起動したスレッドが終了したかどうかを確認
|
||||
extern AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを認証してブート
|
||||
|
||||
Loading…
Reference in New Issue
Block a user