mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
再配置チェッカ中途保存
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@333 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
310b8522c4
commit
4182e17ba0
@ -21,7 +21,8 @@
|
|||||||
Static $(TARGET_NAME)
|
Static $(TARGET_NAME)
|
||||||
{
|
{
|
||||||
Address $(ADDRESS_FLXMAIN)
|
Address $(ADDRESS_FLXMAIN)
|
||||||
Library $(CRT0_O)
|
Library $(CRT0_O) \
|
||||||
|
libsyscall_sp.twl.a
|
||||||
StackSize 1024 1024
|
StackSize 1024 1024
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,7 +32,6 @@ Autoload WRAM
|
|||||||
Address $(ADDRESS_LTDWRAM)
|
Address $(ADDRESS_LTDWRAM)
|
||||||
|
|
||||||
Library libsubpsyscall.a \
|
Library libsubpsyscall.a \
|
||||||
libsyscall_sp.twl.a \
|
|
||||||
$(CW_LIBS) \
|
$(CW_LIBS) \
|
||||||
libos_sp$(LIBSUFFIX).a \
|
libos_sp$(LIBSUFFIX).a \
|
||||||
libmi_sp$(LIBSUFFIX).a \
|
libmi_sp$(LIBSUFFIX).a \
|
||||||
|
|||||||
@ -46,12 +46,26 @@ RTCDrawProperty g_rtcDraw = {
|
|||||||
// <20>‰Šú‰»
|
// <20>‰Šú‰»
|
||||||
void RelocateCheckerInit( void )
|
void RelocateCheckerInit( void )
|
||||||
{
|
{
|
||||||
|
u32 *test;
|
||||||
GX_DispOff();
|
GX_DispOff();
|
||||||
GXS_DispOff();
|
GXS_DispOff();
|
||||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||||
|
|
||||||
PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"RelocateChecker");
|
//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( 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 );
|
GetAndDrawRTCData( &g_rtcDraw, TRUE );
|
||||||
|
|
||||||
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
|
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
|
||||||
|
|||||||
@ -211,25 +211,6 @@ _start(void)
|
|||||||
ldr r2, =HW_PRV_WRAM
|
ldr r2, =HW_PRV_WRAM
|
||||||
mov lr, pc
|
mov lr, pc
|
||||||
bx r2
|
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:
|
@010:
|
||||||
/* スタックポインタ設定 */
|
/* スタックポインタ設定 */
|
||||||
@ -255,6 +236,9 @@ _start(void)
|
|||||||
strlt r0, [r1], #4
|
strlt r0, [r1], #4
|
||||||
blt @011
|
blt @011
|
||||||
|
|
||||||
|
// ロードされたアプリのダイジェストを計算してアプリ間パラメータに格納
|
||||||
|
bl INITi_SetHMACSHA1ToAppParam
|
||||||
|
|
||||||
/* TWL ハードウェア上で動作しているかどうかを調査 */
|
/* TWL ハードウェア上で動作しているかどうかを調査 */
|
||||||
ldr r1, =REG_CLK_ADDR
|
ldr r1, =REG_CLK_ADDR
|
||||||
ldrh r0, [r1]
|
ldrh r0, [r1]
|
||||||
@ -332,6 +316,7 @@ _start(void)
|
|||||||
|
|
||||||
#include <nitro/mi/stream.h>
|
#include <nitro/mi/stream.h>
|
||||||
#include <twl/os/common/systemCall.h>
|
#include <twl/os/common/systemCall.h>
|
||||||
|
#include <nitro/math/dgt.h>
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: INITi_SetHMACSHA1ToAppParam
|
Name: INITi_SetHMACSHA1ToAppParam
|
||||||
Description: ROMがロードされた各アプリ領域のHMACSHA1を計算し、アプリ間パラ
|
Description: ROMがロードされた各アプリ領域のHMACSHA1を計算し、アプリ間パラ
|
||||||
@ -339,8 +324,10 @@ _start(void)
|
|||||||
Arguments: なし。
|
Arguments: なし。
|
||||||
Returns: なし。
|
Returns: なし。
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static void INITi_SetHMACSHA1ToAppParam(void)
|
static void INITi_SetHMACSHA1ToAppParam(void)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
SVCHMACSHA1Context con;
|
SVCHMACSHA1Context con;
|
||||||
// arm9_flx
|
// arm9_flx
|
||||||
SVC_HMACSHA1Init(&con, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1);
|
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_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_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_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
|
SVCSHA1Context con;
|
||||||
SVC_CalcHMACSHA1( (void *)(HW_MAIN_MEM + SVC_SHA1_DIGEST_SIZE), (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x038)),
|
// arm9_flx
|
||||||
*((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x03c)), (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 );// arm7_flx
|
SVC_SHA1Init(&con);
|
||||||
SVC_CalcHMACSHA1( (void *)(HW_MAIN_MEM + 2 * SVC_SHA1_DIGEST_SIZE), (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1c8)),
|
SVC_SHA1Update(&con, (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x038)), *((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x03c)));
|
||||||
*((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1cc)), (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 );// arm9_ltd
|
SVC_SHA1GetHash(&con, (void *)HW_MAIN_MEM);
|
||||||
SVC_CalcHMACSHA1( (void *)(HW_MAIN_MEM + 3 * SVC_SHA1_DIGEST_SIZE), (void *)(*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1d8)),
|
// arm7_flx
|
||||||
*((u32 *)(HW_TWL_ROM_HEADER_BUF + 0x1dc)), (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 );// arm7_ltd
|
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
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
|
|||||||
@ -163,41 +163,12 @@ static const u32 microcode_SwitchCpuClock[13] =
|
|||||||
SDK_WEAK_SYMBOL asm void
|
SDK_WEAK_SYMBOL asm void
|
||||||
_start(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:
|
@000:
|
||||||
/* 割り込み禁止 */
|
/* 割り込み禁止 */
|
||||||
mov r12, #HW_REG_BASE
|
mov r12, #HW_REG_BASE
|
||||||
str r12, [r12, #REG_IME_OFFSET] // Use that LSB of HW_REG_BASE is 0b0
|
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
|
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)
|
ldr r2, =(HW_MAIN_MEM_SYSTEM+HW_MAIN_MEM_SYSTEM_SIZE-HW_PXI_SIGNAL_PARAM_ARM9)
|
||||||
bl INITi_CpuClear32
|
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
|
ldr r0, =HW_BOOT_SYNC_PHASE
|
||||||
mov r1, #BOOT_SYNC_PHASE_1
|
mov r1, #BOOT_SYNC_PHASE_1
|
||||||
strh r1, [r0]
|
strh r1, [r0]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user