コード整理

メモリクリア範囲の変更 (TwlSDK待ちで再変更予定)
リセットパラメータの設定追加

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@176 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2007-11-14 12:13:08 +00:00
parent c2076e0e89
commit 3a622b99af
6 changed files with 303 additions and 174 deletions

View File

@ -324,8 +324,9 @@ INITi_InitCoprocessor(void)
; Region 0: IO_VRAM: Base = 0x04000000, Size = 64MB, I:NC NB / D:NC NB, I:RW / D:RW ; Region 0: IO_VRAM: Base = 0x04000000, Size = 64MB, I:NC NB / D:NC NB, I:RW / D:RW
; Region 1: MAIN_MEM: Base = 0x02000000, Size = 8MB*, I:Cach Buf / D:Cach Buf, I:RW / D:RW ; Region 1: MAIN_MEM: Base = 0x02000000, Size = 8MB*, I:Cach Buf / D:Cach Buf, I:RW / D:RW
; (* When hardware is not debugger, size will be reduced to 4MB in OS_InitArena() ) ; (* When hardware is not debugger, size will be reduced to 4MB in OS_InitArena() )
; Region 2: ARM7_RESERVE: Base = 0x027e0000, Size = 128KB, I:NC NB / D:NC NB, I:NA / D:NA ;// Region 2: ARM7_RESERVE: Base = 0x027e0000, Size = 128KB, I:NC NB / D:NC NB, I:NA / D:NA
; (* When hardware is not debugger, base will be moved to 0x023e0000 in OS_InitArena() ) ;// (* When hardware is not debugger, base will be moved to 0x023e0000 in OS_InitArena() )
; Region 2: SHARED_WORK: Base = 0x027ff000, Size = 4KB, I:NC NB / D:NC NB, I:NA / D:RW
; Region 3: CARTRIDGE: Base = 0x08000000, Size = 128MB, I:NC NB / D:NC NB, I:NA / D:RW ; Region 3: CARTRIDGE: Base = 0x08000000, Size = 128MB, I:NC NB / D:NC NB, I:NA / D:RW
; Region 4: DTCM: Base = 0x02fe0000, Size = 16KB, I:NC NB / D:NC NB, I:NA / D:RW ; Region 4: DTCM: Base = 0x02fe0000, Size = 16KB, I:NC NB / D:NC NB, I:NA / D:RW
; Region 5: ITCM: Base = 0x01000000, Size = 16MB, I:NC NB / D:NC NB, I:RW / D:RW ; Region 5: ITCM: Base = 0x01000000, Size = 16MB, I:NC NB / D:NC NB, I:RW / D:RW
@ -411,8 +412,10 @@ INITi_InitRegion(void)
@002: /* ハードウェアが NITRO の場合 */ @002: /* ハードウェアが NITRO の場合 */
/* (1) メインメモリ */ /* (1) メインメモリ */
SET_PROTECTION_A(c1, HW_MAIN_MEM_MAIN, 8MB) //SET_PROTECTION_A(c1, HW_MAIN_MEM_MAIN, 8MB)
SET_PROTECTION_B(c1, HW_MAIN_MEM_MAIN, 8MB) //SET_PROTECTION_B(c1, HW_MAIN_MEM_MAIN, 8MB)
SET_PROTECTION_A(c1, HW_MAIN_MEM_MAIN, 32MB)
SET_PROTECTION_B(c1, HW_MAIN_MEM_MAIN, 32MB)
/* Size will be arranged in OS_InitArena(). */ /* Size will be arranged in OS_InitArena(). */
/* (2) ARM7 専用メインメモリ空間 */ /* (2) ARM7 専用メインメモリ空間 */
@ -421,8 +424,10 @@ INITi_InitRegion(void)
/* Base address will be moved in OS_InitArena(). */ /* Base address will be moved in OS_InitArena(). */
/* (3) カートリッジ */ /* (3) カートリッジ */
SET_PROTECTION_A(c3, HW_CTRDG_ROM, 128MB) //SET_PROTECTION_A(c3, HW_CTRDG_ROM, 128MB)
SET_PROTECTION_B(c3, HW_CTRDG_ROM, 128MB) //SET_PROTECTION_B(c3, HW_CTRDG_ROM, 128MB)
SET_PROTECTION_A(c3, HW_CTRDG_ROM, 32MB)
SET_PROTECTION_B(c3, HW_CTRDG_ROM, 32MB)
/* (7) ARM9/ARM7 共有メインメモリ空間 */ /* (7) ARM9/ARM7 共有メインメモリ空間 */
SET_PROTECTION_A(c7, HW_MAIN_MEM_SHARED, 4KB) SET_PROTECTION_A(c7, HW_MAIN_MEM_SHARED, 4KB)
@ -433,15 +438,18 @@ INITi_InitRegion(void)
mcr p15, 0, r0, c2, c0, 1 mcr p15, 0, r0, c2, c0, 1
/* データキャッシュ許可 */ /* データキャッシュ許可 */
mov r0, #REGION_BIT(0, 1, 0, 0, 0, 0, 1, 0) //mov r0, #REGION_BIT(0, 1, 0, 0, 0, 0, 1, 0)
mov r0, #REGION_BIT(0, 1, 0, 1, 0, 0, 1, 0)
mcr p15, 0, r0, c2, c0, 0 mcr p15, 0, r0, c2, c0, 0
/* ライトバッファ許可 */ /* ライトバッファ許可 */
mov r0, #REGION_BIT(0, 1, 0, 0, 0, 0, 0, 0) //mov r0, #REGION_BIT(0, 1, 0, 0, 0, 0, 0, 0)
mov r0, #REGION_BIT(0, 1, 0, 1, 0, 0, 0, 0)
mcr p15, 0, r0, c3, c0, 0 mcr p15, 0, r0, c3, c0, 0
/* 命令アクセス許可 */ /* 命令アクセス許可 */
ldr r0, =REGION_ACC(RW, RW, NA, NA, NA, RW, RO, NA) //ldr r0, =REGION_ACC(RW, RW, NA, NA, NA, RW, RO, NA)
ldr r0, =REGION_ACC(RW, RW, NA, RW, NA, RW, RO, NA)
mcr p15, 0, r0, c5, c0, 3 mcr p15, 0, r0, c5, c0, 3
/* データアクセス許可 */ /* データアクセス許可 */

View File

@ -27,8 +27,8 @@
: :
OSi_BootCoreのコピー先決定 OSi_BootCoreのコピー先決定
(ITCM,DTCM,STACK,TEXT,RODATA,DATAなど (OSi_BootCoreは残す)) (ITCM,DTCM,STACK,STATICなど (OSBootCore, OSFromFirmBufは残す))
OSi_BootCoreは次のプログラムですぐに壊されそうなところを使う OSBootCoreはできれば次のプログラムですぐに壊されそうなところを使う
#endif #endif
void OSi_BootCore( ROM_Header* rom_header ); void OSi_BootCore( ROM_Header* rom_header );

View File

@ -15,6 +15,7 @@
$Author$ $Author$
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
#include <firm.h> #include <firm.h>
#include <twl/mcu.h>
#include <twl/os/ARM7/debugLED.h> #include <twl/os/ARM7/debugLED.h>
#define FATFS_HEAP_SIZE (64*1024) // FATFS用ヒープ (サイズ調整必要) #define FATFS_HEAP_SIZE (64*1024) // FATFS用ヒープ (サイズ調整必要)
@ -32,11 +33,19 @@ static u8 step = 0x80;
#endif #endif
/* /*
Profile PROFILE_ENABLE
main.cかどこかにu32 profile[256]; u32 pf_cnt = 0;
*/ */
#ifndef SDK_FINALROM #define PROFILE_ENABLE
#define PRFILE_MAX 128
u32 profile[PRFILE_MAX]; #ifdef SDK_FINALROM // FINALROMで無効化
#undef PROFILE_ENABLE
#endif
#ifdef PROFILE_ENABLE
#define PROFILE_MAX 128
u32 profile[PROFILE_MAX];
u32 pf_cnt = 0; u32 pf_cnt = 0;
#endif #endif
@ -55,6 +64,14 @@ static void PreInit(void)
{ {
OS_Terminate(); OS_Terminate();
} }
/*
(4)
*/
*(u32*)HW_RESET_PARAMETER_BUF = (u32)((MCUi_ReadRegister( MCU_REG_TEMP_ADDR + 0 ) << 0)
| (MCUi_ReadRegister( MCU_REG_TEMP_ADDR + 1 ) << 8)
| (MCUi_ReadRegister( MCU_REG_TEMP_ADDR + 2 ) << 16)
| (MCUi_ReadRegister( MCU_REG_TEMP_ADDR + 3 ) << 24));
} }
/*************************************************************** /***************************************************************
@ -71,6 +88,57 @@ static void EraseAll(void)
#endif #endif
} }
/***************************************************************
Fatfs4nandInit
FATFS周りの初期化 for NAND
***************************************************************/
static BOOL Fatfs4nandInit(void)
{
/* FATFSライブラリ用にカレントヒープに設定 */
/* WRAM上のfatfsHeapをメインメモリヒープとして登録している */
{
OSHeapHandle hh;
u8 *lo = (u8*)fatfsHeap;
u8 *hi = (u8*)fatfsHeap + FATFS_HEAP_SIZE;
lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1);
OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo);
hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, OS_GetSubPrivArenaLo(), hi);
OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh);
}
OS_SetDebugLED(++step);
if ( !FATFS_InitFIRM( &(OSi_GetFromFirmAddr()->SDNandContext) ) )
{
return FALSE;
}
#ifdef PROFILE_ENABLE
// 3: after FATFS
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
if ( !FATFS_MountDriveFIRM( DRIVE_NO, BOOT_DEVICE, PARTITION_NO ) )
{
return FALSE;
}
#ifdef PROFILE_ENABLE
// 4: after Mount
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
PM_BackLightOn( FALSE );
if ( !FATFS_OpenRecentMenu( DRIVE_NO ) )
{
return FALSE;
}
return TRUE;
}
void TwlSpMain( void ) void TwlSpMain( void )
{ {
// OS_InitDebugLED and OS_SetDebugLED are able to call after OS_Init // OS_InitDebugLED and OS_SetDebugLED are able to call after OS_Init
@ -83,14 +151,15 @@ void TwlSpMain( void )
#ifndef SDK_FINALROM #ifndef SDK_FINALROM
I2Ci_WriteRegister(I2C_SLAVE_DEBUG_LED, 0x01, ++step); I2Ci_WriteRegister(I2C_SLAVE_DEBUG_LED, 0x01, ++step);
#endif
#ifdef PROFILE_ENABLE
// 0: before PXI // 0: before PXI
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick()); profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif #endif
OS_InitFIRM(); OS_InitFIRM();
#ifndef SDK_FINALROM #ifdef PROFILE_ENABLE
// 1: after PXI // 1: after PXI
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick()); profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif #endif
@ -98,71 +167,53 @@ void TwlSpMain( void )
OS_SetDebugLED(++step); OS_SetDebugLED(++step);
PM_InitFIRM(); PM_InitFIRM();
PM_BackLightOn( FALSE );
#ifndef SDK_FINALROM #ifdef PROFILE_ENABLE
// 2: after PM // 2: after PM
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick()); profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif #endif
OS_SetDebugLED(++step); if ( !Fatfs4nandInit() )
/* FATFSライブラリ用にカレントヒープに設定 */
{ {
{ goto end;
OSHeapHandle hh;
u8 *lo = (u8*)fatfsHeap;
u8 *hi = (u8*)fatfsHeap + FATFS_HEAP_SIZE;
lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1);
OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo);
hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, OS_GetSubPrivArenaLo(), hi);
OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh);
}
} }
OS_SetDebugLED(++step); #ifdef PROFILE_ENABLE
// 5: after Open
if ( FATFS_InitFIRM( &(OSi_GetFromFirmAddr()->SDNandContext) ) ) profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
{
#ifndef SDK_FINALROM
// 3: after FATFS
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif #endif
OS_SetDebugLED(++step); OS_SetDebugLED(++step);
if ( FATFS_MountDriveFIRM( DRIVE_NO, BOOT_DEVICE, PARTITION_NO ) ) PM_BackLightOn( FALSE );
if ( !FATFS_LoadHeader() && !FATFS_LoadStatic() )
{
goto end;
}
#ifdef PROFILE_ENABLE
// 127: before Boot
pf_cnt = PROFILE_MAX-1;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
{
int i;
PXI_RecvID();
OS_TPrintf("\n[ARM7] Begin\n");
for (i = 0; i < PROFILE_MAX; i++)
{ {
BOOL result; OS_TPrintf("0x%08X\n", profile[i]);
#ifndef SDK_FINALROM
// 4: after Mount
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
result = FATFS_OpenRecentMenu( DRIVE_NO );
if ( result )
{
#ifndef SDK_FINALROM
// 5: after Open
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
{
#ifndef SDK_FINALROM
// 127: before Boot
pf_cnt = PRFILE_MAX-1;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
FATFS_Boot();
}
}
} }
OS_TPrintf("\n[ARM7] End\n");
} }
#endif
OS_SetDebugLED(++step);
PM_BackLightOn( TRUE ); // last chance
FATFS_Boot();
end:
OS_SetDebugLED( (u8)(0xF0 | step)); OS_SetDebugLED( (u8)(0xF0 | step));
EraseAll(); EraseAll();

View File

@ -17,7 +17,23 @@
#include <firm.h> #include <firm.h>
/* 鍵はどこへ? */ /* 鍵はどこへ? */
#define RSA_KEY_ADDR OSi_GetFromBromAddr()->rsa_pubkey[7] #if 0
#define RSA_KEY_ADDR OSi_GetFromFirmAddr()->rsa_pubkey[7]
#else
#define RSA_KEY_ADDR rsa_key
static const u8 rsa_key[128] =
{
0xdf, 0x56, 0x30,
0xc9, 0xae, 0x05, 0x55, 0xe8, 0xdf, 0xbe, 0xe6, 0xb9, 0x30, 0xb9, 0x76, 0x93, 0xb4, 0xc2, 0x20,
0xe7, 0xae, 0x4c, 0x3e, 0xc3, 0xed, 0x27, 0xcf, 0x5d, 0x4f, 0xb5, 0x7d, 0xde, 0x38, 0xbc, 0xfe,
0x25, 0x32, 0xd8, 0x23, 0x98, 0x52, 0xb5, 0xda, 0xf7, 0x39, 0xdc, 0xb3, 0x0a, 0x94, 0x7a, 0x2b,
0x79, 0xe6, 0xe0, 0x4c, 0xbc, 0x21, 0xbd, 0x59, 0xb2, 0xc7, 0xf1, 0xc0, 0xf1, 0xfb, 0x29, 0x75,
0xa1, 0x21, 0x93, 0x01, 0x29, 0x1c, 0x9a, 0xe1, 0x2d, 0x55, 0xfc, 0x7b, 0xb8, 0xcb, 0x07, 0x33,
0xc5, 0x91, 0x0d, 0xc8, 0x45, 0x59, 0xef, 0xbe, 0x58, 0xc7, 0xc1, 0x1d, 0xd5, 0xf2, 0xcf, 0x1f,
0xe0, 0x6d, 0x21, 0x00, 0xcd, 0x42, 0xd8, 0x84, 0x85, 0xe3, 0xb2, 0x02, 0x1a, 0xa5, 0x89, 0x02,
0xa1, 0x96, 0xc6, 0xf7, 0x61, 0x68, 0x66, 0xe6, 0x65, 0x12, 0xb7, 0xf1, 0x49
};
#endif
#define RSA_HEAP_SIZE (4*1024) // RSA用ヒープサイズ (サイズ調整必要) #define RSA_HEAP_SIZE (4*1024) // RSA用ヒープサイズ (サイズ調整必要)
@ -36,8 +52,8 @@ static SVCSignHeapContext acPool;
#endif #endif
#ifdef PROFILE_ENABLE #ifdef PROFILE_ENABLE
#define PRFILE_MAX 128 #define PROFILE_MAX 128
u32 profile[PRFILE_MAX]; u32 profile[PROFILE_MAX];
u32 pf_cnt = 0; u32 pf_cnt = 0;
#endif #endif
@ -52,7 +68,7 @@ static void PreInit(void)
*/ */
// SHARED領域クリア (ここだけでOK?) // SHARED領域クリア (ここだけでOK?)
MIi_CpuClearFast( 0, (void*)HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SHARED_END-HW_PXI_SIGNAL_PARAM_ARM9); MIi_CpuClearFast( 0, (void*)HW_PXI_SIGNAL_PARAM_ARM9, HW_MMEMCHECKER_MAIN-HW_PXI_SIGNAL_PARAM_ARM9);
/* /*
FromBrom関連 FromBrom関連
@ -76,10 +92,15 @@ static void PostInit(void)
/* /*
*/ */
// (DTCMの手前までの領域を全クリア) // ARM9—̈æðSƒNƒŠƒA
//MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, SDK_SECTION_ARENA_DTCM_START-HW_DELIVER_ARG_BUF_END ); if ( OS_GetResetParameter() )
// (ARM9領域を全クリア) {
MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, HW_MAIN_MEM_MAIN_END-HW_DELIVER_ARG_BUF_END ); MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, HW_MAIN_MEM_MAIN_END-HW_DELIVER_ARG_BUF_END );
}
else
{
MI_CpuClearFast( (void*)HW_MAIN_MEM_MAIN, HW_MAIN_MEM_MAIN_SIZE );
}
DC_FlushAll(); DC_FlushAll();
} }
@ -121,6 +142,7 @@ void TwlMain( void )
OS_InitFIRM(); OS_InitFIRM();
#ifdef PROFILE_ENABLE #ifdef PROFILE_ENABLE
OS_EnableIrq();
OS_InitTick(); OS_InitTick();
// 1: after PXI // 1: after PXI
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick()); profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -130,13 +152,28 @@ void TwlMain( void )
PostInit(); PostInit();
#ifdef PROFILE_ENABLE
// 2: after PostInit
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
// load menu // load menu
if ( MI_LoadHeader( &acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() ) if ( MI_LoadHeader( &acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() )
{ {
#ifdef PROFILE_ENABLE #ifdef PROFILE_ENABLE
// 127: before Boot // 127: before Boot
pf_cnt = PRFILE_MAX-1; pf_cnt = PROFILE_MAX-1;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick()); profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
{
int i;
OS_TPrintf("\n[ARM9] Begin\n");
for (i = 0; i < PROFILE_MAX; i++)
{
OS_TPrintf("0x%08X\n", profile[i]);
}
OS_TPrintf("\n[ARM9] End\n");
PXI_NotifyID( FIRM_PXI_ID_NULL );
}
#endif #endif
MI_Boot(); MI_Boot();

View File

@ -15,6 +15,7 @@
$Author$ $Author$
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
#include <firm.h> #include <firm.h>
#include <twl/mcu.h>
#include <twl/os/ARM7/debugLED.h> #include <twl/os/ARM7/debugLED.h>
#define FATFS_HEAP_SIZE (64*1024) // FATFS用ヒープ (サイズ調整必要) #define FATFS_HEAP_SIZE (64*1024) // FATFS用ヒープ (サイズ調整必要)
@ -65,6 +66,13 @@ static void PreInit(void)
{ {
OS_Terminate(); OS_Terminate();
} }
/*
(4)
*/
*(u32*)HW_RESET_PARAMETER_BUF = (u32)((MCUi_ReadRegister( MCU_REG_TEMP_ADDR + 0 ) << 0)
| (MCUi_ReadRegister( MCU_REG_TEMP_ADDR + 1 ) << 8)
| (MCUi_ReadRegister( MCU_REG_TEMP_ADDR + 2 ) << 16)
| (MCUi_ReadRegister( MCU_REG_TEMP_ADDR + 3 ) << 24));
} }
/*************************************************************** /***************************************************************
@ -81,6 +89,78 @@ static void EraseAll(void)
#endif #endif
} }
/***************************************************************
Fatfs4sdmcInit
FATFS周りの初期化 for SDカード
***************************************************************/
static BOOL Fatfs4sdmcInit(void)
{
BOOL result;
/* FATFSライブラリ用にカレントヒープを設定 */
/* WRAM上のfatfsHeapをメインメモリヒープとして登録している */
OSHeapHandle hh;
u8 *lo = (u8*)fatfsHeap;
u8 *hi = (u8*)fatfsHeap + FATFS_HEAP_SIZE;
lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1);
OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo);
hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, OS_GetSubPrivArenaLo(), hi);
OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh);
OS_SetDebugLED(++step);
if ( !FATFS_InitFIRM( NULL ) )
{
return FALSE;
}
#ifndef SDK_FINALROM
// 3: after FATFS
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
PM_BackLightOn( FALSE );
if ( !FATFS_MountDriveFIRM( DRIVE_NO, BOOT_DEVICE, PARTITION_NO ) )
{
return FALSE;
}
#ifndef SDK_FINALROM
// 4: after Mount
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
PM_BackLightOn( FALSE );
switch ( PAD_Read() & PAD_KEYPORT_MASK )
{
case 0:
result = FATFS_OpenSpecifiedSrl( MENU_FILE );
break;
case PAD_BUTTON_A:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_A );
break;
case PAD_BUTTON_B:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_B );
break;
case PAD_BUTTON_L:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_L );
break;
case PAD_BUTTON_R:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_R );
break;
default:
OS_SetDebugLED( (u8)(PAD_Read() & PAD_KEYPORT_MASK) );
result = FALSE;
break;
}
return result;
}
void TwlSpMain( void ) void TwlSpMain( void )
{ {
// OS_InitDebugLED and OS_SetDebugLED are able to call after OS_Init // OS_InitDebugLED and OS_SetDebugLED are able to call after OS_Init
@ -100,7 +180,7 @@ void TwlSpMain( void )
OS_InitFIRM(); OS_InitFIRM();
PRODUCTION_CHECK(); PRODUCTION_CHECK();
OS_EnableIrq(); // PMでOS_InitTick()を使っているので (他でも使ってる?) OS_EnableIrq();
#ifndef SDK_FINALROM #ifndef SDK_FINALROM
//OS_EnableIrq(); //OS_EnableIrq();
@ -117,100 +197,49 @@ void TwlSpMain( void )
// 2: after PM // 2: after PM
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick()); profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif #endif
OS_SetDebugLED(++step);
/* FATFSライブラリ用にカレントヒープを設定 */
/* WRAM上のfatfsHeapをメインメモリヒープとして登録している */
{
OSHeapHandle hh;
u8 *lo = (u8*)fatfsHeap;
u8 *hi = (u8*)fatfsHeap + FATFS_HEAP_SIZE;
lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1);
OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo);
hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, OS_GetSubPrivArenaLo(), hi);
OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh);
}
OS_SetDebugLED(++step); OS_SetDebugLED(++step);
PRODUCTION_CHECK(); PRODUCTION_CHECK();
if ( FATFS_InitFIRM( NULL ) ) if ( !Fatfs4sdmcInit() )
{ {
#ifndef SDK_FINALROM goto end;
// 3: after FATFS
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
PM_BackLightOn( FALSE );
if ( FATFS_MountDriveFIRM( DRIVE_NO, BOOT_DEVICE, PARTITION_NO ) )
{
BOOL result;
#ifndef SDK_FINALROM
// 4: after Mount
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
PM_BackLightOn( FALSE );
switch ( PAD_Read() & PAD_KEYPORT_MASK )
{
case 0:
result = FATFS_OpenSpecifiedSrl( MENU_FILE );
break;
case PAD_BUTTON_A:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_A );
break;
case PAD_BUTTON_B:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_B );
break;
case PAD_BUTTON_L:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_L );
break;
case PAD_BUTTON_R:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_R );
break;
default:
OS_SetDebugLED( (u8)(PAD_Read() & PAD_KEYPORT_MASK) );
OS_Terminate();
break;
}
if ( result )
{
#ifndef SDK_FINALROM
// 5: after Open
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
PM_BackLightOn( FALSE );
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
{
#ifndef SDK_FINALROM
// 127: before Boot
pf_cnt = PROFILE_MAX-1;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
{
int i;
PXI_RecvID();
OS_TPrintf("\n[ARM7] Begin\n");
for (i = 0; i < PROFILE_MAX; i++)
{
OS_TPrintf("0x%08X\n", profile[i]);
}
OS_TPrintf("\n[ARM7] End\n");
}
#endif
OS_SetDebugLED(++step);
PM_BackLightOn( TRUE ); // last chance
PRODUCTION_CHECK();
FATFS_Boot();
}
}
}
} }
#ifndef SDK_FINALROM
// 5: after Open
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
PM_BackLightOn( FALSE );
if ( !FATFS_LoadHeader() || !FATFS_LoadStatic() )
{
goto end;
}
#ifndef SDK_FINALROM
// 127: before Boot
pf_cnt = PROFILE_MAX-1;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
{
int i;
PXI_RecvID();
OS_TPrintf("\n[ARM7] Begin\n");
for (i = 0; i < PROFILE_MAX; i++)
{
OS_TPrintf("0x%08X\n", profile[i]);
}
OS_TPrintf("\n[ARM7] End\n");
}
#endif
OS_SetDebugLED(++step);
PRODUCTION_CHECK();
PM_BackLightOn( TRUE ); // last chance
FATFS_Boot();
end: end:
OS_SetDebugLED( (u8)(0xF0 | step)); OS_SetDebugLED( (u8)(0xF0 | step));

View File

@ -55,7 +55,7 @@ static void PreInit(void)
*/ */
// SHARED領域クリア (ここだけでOK?) // SHARED領域クリア (ここだけでOK?)
MIi_CpuClearFast( 0, (void*)HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SHARED_END-HW_PXI_SIGNAL_PARAM_ARM9); MIi_CpuClearFast( 0, (void*)HW_PXI_SIGNAL_PARAM_ARM9, HW_MMEMCHECKER_MAIN-HW_PXI_SIGNAL_PARAM_ARM9);
/* /*
FromBrom関連 FromBrom関連
@ -79,10 +79,15 @@ static void PostInit(void)
/* /*
*/ */
// (DTCMの手前までの領域を全クリア) // ARM9領域を全クリア
//MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, SDK_SECTION_ARENA_DTCM_START-HW_DELIVER_ARG_BUF_END ); if ( OS_GetResetParameter() )
// (ARM9領域を全クリア) {
MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, HW_MAIN_MEM_MAIN_END-HW_DELIVER_ARG_BUF_END ); MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, HW_MAIN_MEM_MAIN_END-HW_DELIVER_ARG_BUF_END );
}
else
{
MI_CpuClearFast( (void*)HW_MAIN_MEM_MAIN, HW_MAIN_MEM_MAIN_SIZE );
}
DC_FlushAll(); DC_FlushAll();
} }
@ -90,8 +95,7 @@ static void PostInit(void)
/*************************************************************** /***************************************************************
CheckHeader CheckHeader
TWLアプリとして問題ないかチェック
32Bは固定値と思われ ()
***************************************************************/ ***************************************************************/
static BOOL CheckHeader(void) static BOOL CheckHeader(void)
{ {