再配置チェッカ中途保存

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@333 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2007-12-06 10:33:58 +00:00
parent 310b8522c4
commit 4182e17ba0
4 changed files with 78 additions and 63 deletions

View File

@ -21,7 +21,8 @@
Static $(TARGET_NAME)
{
Address $(ADDRESS_FLXMAIN)
Library $(CRT0_O)
Library $(CRT0_O) \
libsyscall_sp.twl.a
StackSize 1024 1024
}
@ -31,7 +32,6 @@ Autoload WRAM
Address $(ADDRESS_LTDWRAM)
Library libsubpsyscall.a \
libsyscall_sp.twl.a \
$(CW_LIBS) \
libos_sp$(LIBSUFFIX).a \
libmi_sp$(LIBSUFFIX).a \

View File

@ -46,12 +46,26 @@ RTCDrawProperty g_rtcDraw = {
// <20>‰Šú‰»
void RelocateCheckerInit( void )
{
u32 *test;
GX_DispOff();
GXS_DispOff();
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"RelocateChecker");
PutStringUTF16( 4 * 8, 8 * 8, TXT_COLOR_BLACK, (const u16 *)L"Under Construction...");
//PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"RelocateChecker");
//PutStringUTF16( 4 * 8, 8 * 8, TXT_COLOR_BLACK, (const u16 *)L"Under Construction...");
test = (u32 *)0x02000000;
PrintfSJIS(0,0,TXT_COLOR_BLUE, "%8x %8x %8x",*(test+5),*(test+6),*(test+7));
PrintfSJIS(0,2*8,TXT_COLOR_BLUE, "%8x %8x:arm9",*(test+8),*(test+9));
PrintfSJIS(0,4*8,TXT_COLOR_BLUE, "%8x %8x %8x",*(test+0),*(test+1),*(test+2));
PrintfSJIS(0,6*8,TXT_COLOR_BLUE, "%8x %8x:arm7",*(test+3),*(test+4));
PrintfSJIS(0,8*8,TXT_COLOR_BLUE, "%8x %8x %8x",*(test+10),*(test+11),*(test+12));
PrintfSJIS(0,10*8,TXT_COLOR_BLUE, "%8x %8x:arm9ltd",*(test+13),*(test+14));
PrintfSJIS(0,12*8,TXT_COLOR_BLUE, "%8x %8x %8x",*(test+15),*(test+16),*(test+17));
PrintfSJIS(0,14*8,TXT_COLOR_BLUE, "%8x %8x:arm7ltd",*(test+18),*(test+19));
GetAndDrawRTCData( &g_rtcDraw, TRUE );
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );

View File

@ -211,25 +211,6 @@ _start(void)
ldr r2, =HW_PRV_WRAM
mov lr, pc
bx r2
// ロードされたアプリのダイジェストを計算してアプリ間パラメータに格納
bl INITi_SetHMACSHA1ToAppParam
/* 専用 WRAM 上のコードで ARM9 とハンドシェイク2 */
ldr r0, =HW_BOOT_SHAKEHAND_9
ldr r1, =HW_BOOT_SHAKEHAND_7
ldr r2, =HW_PRV_WRAM
mov lr, pc
bx r2
// arm9待ち
/* 専用 WRAM 上のコードで ARM9 とハンドシェイク3 */
ldr r0, =HW_BOOT_SHAKEHAND_9
ldr r1, =HW_BOOT_SHAKEHAND_7
ldr r2, =HW_PRV_WRAM
mov lr, pc
bx r2
@010:
/* スタックポインタ設定 */
@ -255,6 +236,9 @@ _start(void)
strlt r0, [r1], #4
blt @011
// ロードされたアプリのダイジェストを計算してアプリ間パラメータに格納
bl INITi_SetHMACSHA1ToAppParam
/* TWL ハードウェア上で動作しているかどうかを調査 */
ldr r1, =REG_CLK_ADDR
ldrh r0, [r1]
@ -332,6 +316,7 @@ _start(void)
#include <nitro/mi/stream.h>
#include <twl/os/common/systemCall.h>
#include <nitro/math/dgt.h>
/*---------------------------------------------------------------------------*
Name: INITi_SetHMACSHA1ToAppParam
Description: ROMがロードされた各アプリ領域のHMACSHA1を計算し
@ -339,8 +324,10 @@ _start(void)
Arguments:
Returns:
*---------------------------------------------------------------------------*/
static void INITi_SetHMACSHA1ToAppParam(void)
{
/*
SVCHMACSHA1Context con;
// arm9_flx
SVC_HMACSHA1Init(&con, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1);
@ -358,17 +345,51 @@ static void INITi_SetHMACSHA1ToAppParam(void)
SVC_HMACSHA1Init(&con, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1);
SVC_HMACSHA1Update(&con, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1d8)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1dc)));
SVC_HMACSHA1GetHash(&con, (void *)(HW_MAIN_MEM + 3 * SVC_SHA1_DIGEST_SIZE));
/*
SVC_CalcHMACSHA1( (void *)HW_MAIN_MEM, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x028)),
*((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x02c)), (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 );// arm9_flx
SVC_CalcHMACSHA1( (void *)(HW_MAIN_MEM + SVC_SHA1_DIGEST_SIZE), (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x038)),
*((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x03c)), (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 );// arm7_flx
SVC_CalcHMACSHA1( (void *)(HW_MAIN_MEM + 2 * SVC_SHA1_DIGEST_SIZE), (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1c8)),
*((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1cc)), (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 );// arm9_ltd
SVC_CalcHMACSHA1( (void *)(HW_MAIN_MEM + 3 * SVC_SHA1_DIGEST_SIZE), (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1d8)),
*((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1dc)), (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 );// arm7_ltd
*/
*/
SVCSHA1Context con;
// arm9_flx
SVC_SHA1Init(&con);
SVC_SHA1Update(&con, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x038)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x03c)));
SVC_SHA1GetHash(&con, (void *)HW_MAIN_MEM);
// arm7_flx
SVC_SHA1Init(&con);
SVC_SHA1Update(&con, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x028)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x02c)));
SVC_SHA1GetHash(&con, (void *)(HW_MAIN_MEM + SVC_SHA1_DIGEST_SIZE));
// arm9_ltd
SVC_SHA1Init(&con);
SVC_SHA1Update(&con, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1c8)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1cc)));
SVC_SHA1GetHash(&con, (void *)(HW_MAIN_MEM + 2 * SVC_SHA1_DIGEST_SIZE));
// arm7_ltd
SVC_SHA1Init(&con);
SVC_SHA1Update(&con, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1d8)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1dc)));
SVC_SHA1GetHash(&con, (void *)(HW_MAIN_MEM + 3 * SVC_SHA1_DIGEST_SIZE));
}
/*
static asm void INITi_SetHMACSHA1ToAppParam(void)
{
mov r0, #HW_MAIN_MEM
add r0, r0, #SVC_SHA1_DIGEST_SIZE
add r0, r0, #SVC_SHA1_DIGEST_SIZE
add r0, r0, #SVC_SHA1_DIGEST_SIZE
add r0, r0, #SVC_SHA1_DIGEST_SIZE
ldr r1, =s_digestDefaultKey
mov r2, #(DIGEST_HASH_BLOCK_SIZE_SHA1)
bl SVC_HMACSHA1Init
mov r1, #HW_WRAM_AREA
sub r3, r1, 0x2000
ldr r1, [r3, 0x028]
ldr r2, [r3, 0x02c]
bl SVC_HMACSHA1Update
mov r1, #HW_MAIN_MEM
bl SVC_HMACSHA1GetHash
bx lr
}
*/
/*---------------------------------------------------------------------------*

View File

@ -163,41 +163,12 @@ static const u32 microcode_SwitchCpuClock[13] =
SDK_WEAK_SYMBOL asm void
_start(void)
{
/* ハンドシェイク用マイクロコードを ITCM にコピー */
ldr r1, =microcode_ShakeHand
ldr r2, =HW_ITCM
add r3, r2, #40
@001: ldr r0, [r1], #4
str r0, [r2], #4
cmp r2, r3
blt @001
@000:
/* 割り込み禁止 */
mov r12, #HW_REG_BASE
str r12, [r12, #REG_IME_OFFSET] // Use that LSB of HW_REG_BASE is 0b0
/* ITCM 上のコードで ARM7 とハンドシェイク1 */
ldr r0, =HW_BOOT_SYNC_PHASE
mov r1, #BOOT_SYNC_PHASE_1
strh r1, [r0]
ldr r0, =HW_BOOT_SHAKEHAND_9
ldr r1, =HW_BOOT_SHAKEHAND_7
ldr r2, =HW_ITCM
blx r2
// arm7のダイジェスト計算待ち
/* ITCM 上のコードで ARM7 とハンドシェイク2 */
ldr r0, =HW_BOOT_SYNC_PHASE
mov r1, #BOOT_SYNC_PHASE_1
strh r1, [r0]
ldr r0, =HW_BOOT_SHAKEHAND_9
ldr r1, =HW_BOOT_SHAKEHAND_7
ldr r2, =HW_ITCM
blx r2
/* システム制御コプロセッサ初期化 */
bl INITi_InitCoprocessor
@ -214,7 +185,16 @@ _start(void)
ldr r2, =(HW_MAIN_MEM_SYSTEM+HW_MAIN_MEM_SYSTEM_SIZE-HW_PXI_SIGNAL_PARAM_ARM9)
bl INITi_CpuClear32
/* ITCM 上のコードで ARM7 とハンドシェイク3 */
/* ハンドシェイク用マイクロコードを ITCM にコピー */
ldr r1, =microcode_ShakeHand
ldr r2, =HW_ITCM
add r3, r2, #40
@001: ldr r0, [r1], #4
str r0, [r2], #4
cmp r2, r3
blt @001
/* ITCM 上のコードで ARM7 とハンドシェイク1 */
ldr r0, =HW_BOOT_SYNC_PHASE
mov r1, #BOOT_SYNC_PHASE_1
strh r1, [r0]