暫定的に再配置チェック及びリスト作成の処理をbootAPIに追加。後で関数化&処理追加予定。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@297 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2007-11-30 07:37:48 +00:00
parent 83deb399dd
commit a013d63162
4 changed files with 91 additions and 3 deletions

View File

@ -77,6 +77,66 @@ BOOL BOOT_WaitStart( void )
HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9,
NULL
};
/*
#define SYSM_TWL_ARM9_LOAD_MMEM 0x02000400 // ロード可能なARM9 static MMEM アドレス
#define SYSM_TWL_ARM9_LOAD_MMEM_END SYSM_NTR_ARM9_LOAD_MMEM_END // ロード可能なARM9 static MMEM 最終アドレス
#define SYSM_TWL_ARM7_LOAD_MMEM SYSM_NTR_ARM7_LOAD_MMEM // ロード可能なARM7 static MMEM アドレス
#define SYSM_TWL_ARM7_LOAD_MMEM_END SYSM_NTR_ARM7_LOAD_MMEM_END // ロード可能なARM7 static MMEM 最終アドレス
#define SYSM_TWL_ARM9_LTD_LOAD_MMEM 0x02400000 // ロード可能なARM9 LTD static MMEM アドレス
#define SYSM_TWL_ARM9_LTD_LOAD_MMEM_END 0x02800000 // ロード可能なARM9 LTD static MMEM 最終アドレス
#define SYSM_TWL_ARM7_LTD_LOAD_MMEM 0x02e80000 // ロード可能なARM7 LTD static MMEM アドレス
#define SYSM_TWL_ARM7_LTD_LOAD_MMEM_END 0x02f88000 // ロード可能なARM7 LTD static MMEM 最終アドレス
*/
// [TODO]再配置リストの作成と設定
// 自分以外のデフォルトロード領域に被る場合は即NG
static u32 relocate_list[13] =
{
NULL
};
u32 revCopy = 0;
ROM_Header *pHeader = (ROM_Header *)HW_TWL_ROM_HEADER_BUF;
u32 arm9ltd_dest = (u32)pHeader->s.main_ltd_ram_address;
u32 arm9ltd_size = (u32)pHeader->s.main_ltd_size;
u32 arm9flx_dest = (u32)pHeader->s.main_ram_address;
u32 arm9flx_size = (u32)pHeader->s.main_size;
u32 arm7ltd_dest = (u32)pHeader->s.sub_ltd_ram_address;
u32 arm7ltd_size = (u32)pHeader->s.sub_ltd_size;
u32 arm7flx_dest = (u32)pHeader->s.sub_ram_address;
u32 arm7flx_size = (u32)pHeader->s.sub_size;
{
// チェックコード例
// とりあえずarm9ltdのみ。同じような処理は関数化しないとぐちゃぐちゃ。NTRの場合は領域が若干違うので注意。
if( SYSM_TWL_ARM9_LTD_LOAD_MMEM <= arm9ltd_dest && arm9ltd_dest + arm9ltd_size < SYSM_TWL_ARM9_LTD_LOAD_MMEM_END)
{
// リロケート必要なし
}else
{
// リロケート必要あり
if( SYSM_TWL_ARM7_LTD_LOAD_MMEM <= arm9ltd_dest && arm9ltd_dest < SYSM_TWL_ARM7_LTD_LOAD_MMEM_END ) return FALSE;//NG
if( SYSM_TWL_ARM7_LTD_LOAD_MMEM <= arm9ltd_dest + arm9ltd_size && arm9ltd_dest + arm9ltd_size < SYSM_TWL_ARM7_LTD_LOAD_MMEM_END ) return FALSE;//NG
if( SYSM_TWL_ARM9_LOAD_MMEM <= arm9ltd_dest && arm9ltd_dest < SYSM_TWL_ARM9_LOAD_MMEM_END ) return FALSE;//NG
if( SYSM_TWL_ARM9_LOAD_MMEM <= arm9ltd_dest + arm9ltd_size && arm9ltd_dest + arm9ltd_size < SYSM_TWL_ARM9_LOAD_MMEM_END ) return FALSE;//NG
if( SYSM_TWL_ARM7_LOAD_MMEM <= arm9ltd_dest && arm9ltd_dest < SYSM_TWL_ARM7_LOAD_MMEM_END ) return FALSE;//NG
if( SYSM_TWL_ARM7_LOAD_MMEM <= arm9ltd_dest + arm9ltd_size && arm9ltd_dest + arm9ltd_size < SYSM_TWL_ARM7_LOAD_MMEM_END ) return FALSE;//NG
// リロケート可能
if( SYSM_TWL_ARM9_LTD_LOAD_MMEM <= arm9ltd_dest && SYSM_TWL_ARM9_LTD_LOAD_MMEM_END <= arm9ltd_dest + arm9ltd_size )
{
revCopy = 1; // 後方からコピーするフラグON
}
relocate_list[0] = SYSM_TWL_ARM9_LTD_LOAD_MMEM;
relocate_list[1] = arm9ltd_dest;
relocate_list[2] = arm9ltd_size;
relocate_list[3] = revCopy;
}
}
// [TODO]起動するターゲットの種類を指定する必要あり
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list, REBOOT_TARGET_TWL_SYSTEM );
}

View File

@ -102,7 +102,14 @@ void BOOT_Ready( void )
//HW_DTCM, HW_DTCM_SIZE,
NULL
};
// [TODO]起動するターゲットの種類を指定する必要あり
// [TODO]再配置リストの作成と設定ほぼARM7側でやるのでこちらは空
static u32 relocate_list[] =
{
NULL
};
// 起動するターゲットの種類を指定する必要あり
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list, REBOOT_TARGET_TWL_SYSTEM );
}
}

View File

@ -577,9 +577,30 @@ static void MoveByScrollBar( void )
static void DrawScrollBar( TitleProperty *pTitleList )
{
int l;
static int col_count = 0;
static int col_count_d = 1;
static const int COL_FLAME_MAX = 30;
static const int COL_NUM = 15;
static const int COL_DIV = COL_FLAME_MAX / COL_NUM;
col_count += col_count_d;
if(col_count < 0)
{
col_count = 0;
col_count_d = 1;
}
if(COL_FLAME_MAX <= col_count)
{
col_count = COL_FLAME_MAX - 1;
col_count_d = -1;
}
for(l=0; l<LAUNCHER_TITLE_LIST_NUM; l++)
{
PutStringUTF16( (int)(BAR_ZERO_X + l * (ITEM_SIZE + ITEM_INTERVAL)), BAR_ZERO_Y, (pTitleList[l].flags.isValid ? TXT_UCOLOR_G1 : TXT_COLOR_BLACK), (const u16 *)L"<EFBFBD>E" );
PutStringUTF16( (int)(BAR_ZERO_X + l * (ITEM_SIZE + ITEM_INTERVAL)),
BAR_ZERO_Y,
(pTitleList[l].flags.isValid ? (TXT_UCOLOR_G0 + col_count/COL_DIV) : TXT_COLOR_BLACK),
(const u16 *)L"<EFBFBD>E" );
}
for(l=0; l<4; l++)
{

View File

@ -69,7 +69,7 @@ extern "C" {
#define SYSM_NTR_ARM7_LOAD_WRAM 0x037f8000 // ロード可能なARM7 static WRAM アドレス
#define SYSM_NTR_ARM7_LOAD_WRAM_END 0x0380f000 // ロード可能なARM7 static WRAM 最終アドレス
#define SYSM_TWL_ARM9_LOAD_MMEM SYSM_NTR_ARM9_LOAD_MMEM // ロード可能なARM9 static MMEM アドレス
#define SYSM_TWL_ARM9_LOAD_MMEM 0x02000400 // ロード可能なARM9 static MMEM アドレス
#define SYSM_TWL_ARM9_LOAD_MMEM_END SYSM_NTR_ARM9_LOAD_MMEM_END // ロード可能なARM9 static MMEM 最終アドレス
#define SYSM_TWL_ARM7_LOAD_MMEM SYSM_NTR_ARM7_LOAD_MMEM // ロード可能なARM7 static MMEM アドレス
#define SYSM_TWL_ARM7_LOAD_MMEM_END SYSM_NTR_ARM7_LOAD_MMEM_END // ロード可能なARM7 static MMEM 最終アドレス