mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
コード整理
メモリクリア範囲の変更 (TwlSDK待ちで再変更予定) リセットパラメータの設定追加 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@176 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
c2076e0e89
commit
3a622b99af
@ -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 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() )
|
||||
; 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() )
|
||||
;// 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() )
|
||||
; 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 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
|
||||
@ -411,8 +412,10 @@ INITi_InitRegion(void)
|
||||
|
||||
@002: /* ハードウェアが NITRO の場合 */
|
||||
/* (1) メインメモリ */
|
||||
SET_PROTECTION_A(c1, HW_MAIN_MEM_MAIN, 8MB)
|
||||
SET_PROTECTION_B(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_A(c1, HW_MAIN_MEM_MAIN, 32MB)
|
||||
SET_PROTECTION_B(c1, HW_MAIN_MEM_MAIN, 32MB)
|
||||
/* Size will be arranged in OS_InitArena(). */
|
||||
|
||||
/* (2) ARM7 専用メインメモリ空間 */
|
||||
@ -421,8 +424,10 @@ INITi_InitRegion(void)
|
||||
/* Base address will be moved in OS_InitArena(). */
|
||||
|
||||
/* (3) カートリッジ */
|
||||
SET_PROTECTION_A(c3, HW_CTRDG_ROM, 128MB)
|
||||
SET_PROTECTION_B(c3, HW_CTRDG_ROM, 128MB)
|
||||
//SET_PROTECTION_A(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 共有メインメモリ空間 */
|
||||
SET_PROTECTION_A(c7, HW_MAIN_MEM_SHARED, 4KB)
|
||||
@ -433,15 +438,18 @@ INITi_InitRegion(void)
|
||||
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
|
||||
|
||||
/* ライトバッファ許可 */
|
||||
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
|
||||
|
||||
/* 命令アクセス許可 */
|
||||
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
|
||||
|
||||
/* データアクセス許可 */
|
||||
|
||||
@ -27,8 +27,8 @@
|
||||
課題:
|
||||
OSi_BootCoreのコピー先決定
|
||||
|
||||
いろいろクリア (ITCM,DTCM,STACK,TEXT,RODATA,DATAなど (OSi_BootCoreは残す))
|
||||
なので、OSi_BootCoreは次のプログラムですぐに壊されそうなところを使う
|
||||
いろいろクリア (ITCM,DTCM,STACK,STATICなど (OSBootCore, OSFromFirmBufは残す))
|
||||
なので、OSBootCoreはできれば次のプログラムですぐに壊されそうなところを使う
|
||||
#endif
|
||||
|
||||
void OSi_BootCore( ROM_Header* rom_header );
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <firm.h>
|
||||
#include <twl/mcu.h>
|
||||
#include <twl/os/ARM7/debugLED.h>
|
||||
|
||||
#define FATFS_HEAP_SIZE (64*1024) // FATFS用ヒープ (サイズ調整必要)
|
||||
@ -32,11 +33,19 @@ static u8 step = 0x80;
|
||||
#endif
|
||||
|
||||
/*
|
||||
Profile
|
||||
PROFILE_ENABLE を定義するとある程度のパフォーマンスチェックができます。
|
||||
利用するためには、main.cかどこかに、u32 profile[256]; u32 pf_cnt = 0; を
|
||||
定義する必要があります。
|
||||
*/
|
||||
#ifndef SDK_FINALROM
|
||||
#define PRFILE_MAX 128
|
||||
u32 profile[PRFILE_MAX];
|
||||
#define PROFILE_ENABLE
|
||||
|
||||
#ifdef SDK_FINALROM // FINALROMで無効化
|
||||
#undef PROFILE_ENABLE
|
||||
#endif
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
#define PROFILE_MAX 128
|
||||
u32 profile[PROFILE_MAX];
|
||||
u32 pf_cnt = 0;
|
||||
#endif
|
||||
|
||||
@ -55,6 +64,14 @@ static void PreInit(void)
|
||||
{
|
||||
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
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
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 )
|
||||
{
|
||||
// OS_InitDebugLED and OS_SetDebugLED are able to call after OS_Init
|
||||
@ -83,14 +151,15 @@ void TwlSpMain( void )
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
I2Ci_WriteRegister(I2C_SLAVE_DEBUG_LED, 0x01, ++step);
|
||||
|
||||
#endif
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 0: before PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
|
||||
OS_InitFIRM();
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 1: after PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
@ -98,71 +167,53 @@ void TwlSpMain( void )
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
PM_InitFIRM();
|
||||
PM_BackLightOn( FALSE );
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 2: after PM
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
/* FATFSライブラリ用にカレントヒープに設定 */
|
||||
if ( !Fatfs4nandInit() )
|
||||
{
|
||||
{
|
||||
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);
|
||||
}
|
||||
goto end;
|
||||
}
|
||||
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
if ( FATFS_InitFIRM( &(OSi_GetFromFirmAddr()->SDNandContext) ) )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
// 3: after FATFS
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 5: after Open
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#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;
|
||||
#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("0x%08X\n", profile[i]);
|
||||
}
|
||||
OS_TPrintf("\n[ARM7] End\n");
|
||||
}
|
||||
#endif
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
PM_BackLightOn( TRUE ); // last chance
|
||||
|
||||
FATFS_Boot();
|
||||
|
||||
end:
|
||||
OS_SetDebugLED( (u8)(0xF0 | step));
|
||||
|
||||
EraseAll();
|
||||
|
||||
@ -17,7 +17,23 @@
|
||||
#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用ヒープサイズ (サイズ調整必要)
|
||||
|
||||
@ -36,8 +52,8 @@ static SVCSignHeapContext acPool;
|
||||
#endif
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
#define PRFILE_MAX 128
|
||||
u32 profile[PRFILE_MAX];
|
||||
#define PROFILE_MAX 128
|
||||
u32 profile[PROFILE_MAX];
|
||||
u32 pf_cnt = 0;
|
||||
#endif
|
||||
|
||||
@ -52,7 +68,7 @@ static void PreInit(void)
|
||||
メインメモリ関連
|
||||
*/
|
||||
// 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関連
|
||||
@ -76,10 +92,15 @@ static void PostInit(void)
|
||||
/*
|
||||
メインメモリ関連
|
||||
*/
|
||||
// (DTCMの手前までの領域を全クリア)
|
||||
//MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, SDK_SECTION_ARENA_DTCM_START-HW_DELIVER_ARG_BUF_END );
|
||||
// (ARM9領域を全クリア)
|
||||
MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, HW_MAIN_MEM_MAIN_END-HW_DELIVER_ARG_BUF_END );
|
||||
// ARM9—̈æ‚ð‘SƒNƒŠƒA
|
||||
if ( OS_GetResetParameter() )
|
||||
{
|
||||
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();
|
||||
}
|
||||
@ -121,6 +142,7 @@ void TwlMain( void )
|
||||
|
||||
OS_InitFIRM();
|
||||
#ifdef PROFILE_ENABLE
|
||||
OS_EnableIrq();
|
||||
OS_InitTick();
|
||||
// 1: after PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -130,13 +152,28 @@ void TwlMain( void )
|
||||
|
||||
PostInit();
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 2: after PostInit
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
|
||||
// load menu
|
||||
if ( MI_LoadHeader( &acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() )
|
||||
{
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 127: before Boot
|
||||
pf_cnt = PRFILE_MAX-1;
|
||||
pf_cnt = PROFILE_MAX-1;
|
||||
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
|
||||
|
||||
MI_Boot();
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <firm.h>
|
||||
#include <twl/mcu.h>
|
||||
#include <twl/os/ARM7/debugLED.h>
|
||||
|
||||
#define FATFS_HEAP_SIZE (64*1024) // FATFS用ヒープ (サイズ調整必要)
|
||||
@ -65,6 +66,13 @@ static void PreInit(void)
|
||||
{
|
||||
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
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
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 )
|
||||
{
|
||||
// OS_InitDebugLED and OS_SetDebugLED are able to call after OS_Init
|
||||
@ -100,7 +180,7 @@ void TwlSpMain( void )
|
||||
|
||||
OS_InitFIRM();
|
||||
PRODUCTION_CHECK();
|
||||
OS_EnableIrq(); // PMでOS_InitTick()を使っているので (他でも使ってる?)
|
||||
OS_EnableIrq();
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
//OS_EnableIrq();
|
||||
@ -117,100 +197,49 @@ void TwlSpMain( void )
|
||||
// 2: after PM
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#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);
|
||||
PRODUCTION_CHECK();
|
||||
|
||||
if ( FATFS_InitFIRM( NULL ) )
|
||||
if ( !Fatfs4sdmcInit() )
|
||||
{
|
||||
#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 ) )
|
||||
{
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
goto end;
|
||||
}
|
||||
|
||||
#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:
|
||||
OS_SetDebugLED( (u8)(0xF0 | step));
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ static void PreInit(void)
|
||||
メインメモリ関連
|
||||
*/
|
||||
// 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関連
|
||||
@ -79,10 +79,15 @@ static void PostInit(void)
|
||||
/*
|
||||
メインメモリ関連
|
||||
*/
|
||||
// (DTCMの手前までの領域を全クリア)
|
||||
//MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, SDK_SECTION_ARENA_DTCM_START-HW_DELIVER_ARG_BUF_END );
|
||||
// (ARM9領域を全クリア)
|
||||
MI_CpuClearFast( (void*)HW_DELIVER_ARG_BUF_END, HW_MAIN_MEM_MAIN_END-HW_DELIVER_ARG_BUF_END );
|
||||
// ARM9領域を全クリア
|
||||
if ( OS_GetResetParameter() )
|
||||
{
|
||||
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();
|
||||
}
|
||||
@ -90,8 +95,7 @@ static void PostInit(void)
|
||||
/***************************************************************
|
||||
CheckHeader
|
||||
|
||||
ヘッダがシステムメニューとして問題ないかチェック
|
||||
先頭32Bは固定値と思われ (リマスターバージョンは違うかな)
|
||||
ヘッダの内容がTWLアプリとして問題ないかチェック
|
||||
***************************************************************/
|
||||
static BOOL CheckHeader(void)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user