再利用しやすいようにコメント追加

Menuに限定しないAPIのMenuを削除


git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@60 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2007-10-18 10:07:36 +00:00
parent 1ae654a35f
commit bf5462bb6f
9 changed files with 372 additions and 99 deletions

View File

@ -31,6 +31,8 @@ extern u32 NAND_FAT_PARTITION_COUNT;
/*
DMA関数
MI_NDmaライブラリが全然足りないのでAPIを追加
*/
//---------------- register setting
static inline void MIi_SetSrc( u32 ndmaNo, u32 src )
@ -94,6 +96,18 @@ extern volatile SDMC_ERR_CODE SDCARD_ErrStatus;
extern s16 SDCARD_SDHCFlag; /* SDHCカードフラグ */
extern SDPortContext* SDNandContext; /* NAND初期化パラメータ */
/*---------------------------------------------------------------------------*
Name: WaitFifoFull
Description: waiting to fill the SD FIFO
SDカードからの読み込みデータがFIFOから読み込める状態になるまで
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
static inline void WaitFifoFull( void )
{
while( (*SDIF_CNT & SDIF_CNT_FULL) == 0 )
@ -105,6 +119,18 @@ static inline void WaitFifoFull( void )
}
}
/*---------------------------------------------------------------------------*
Name: StartToRead
Description: start to read from SD I/F
SDカードからの読み込みの開始処理を行います
Arguments: block begining sector to transfer
count number of setctors to transfer
Returns: None
*---------------------------------------------------------------------------*/
static void StartToRead(u32 block, u32 count)
{
*SDIF_FSC = count;
@ -125,6 +151,17 @@ static void StartToRead(u32 block, u32 count)
}
}
/*---------------------------------------------------------------------------*
Name: StopToRead
Description: stop to read from SD I/F
SDカードからの読み込みの完了処理を行います
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
static void StopToRead( void )
{
if( !SD_CheckFPGAReg( SD_STOP,SD_STOP_SEC_ENABLE ) ){
@ -153,6 +190,15 @@ static AESCounter aesCounter;
Description: enable AES data path
AES暗号化されていることを
IO関数に通知するためのAPIです
APIを呼び出した直後に読み込むデータのAESの初期値を指定
APIを呼び出す
Arguments: counter initial counter value
Returns: None
@ -168,6 +214,9 @@ void FATFS_EnableAES( const AESCounter* pCounter )
Description: bypass AES
AES暗号化されていないことを
IO関数に通知するためのAPIです
Arguments: None
Returns: None
@ -182,6 +231,10 @@ void FATFS_DisableAES( void )
Description: normal read
NAND/SDカードを読み込みます
Arguments: block: source sector number in NAND
dest: dest address (4 bytes alignment)
count: sectors to transfer
@ -205,6 +258,12 @@ static u16 ReadNormal(u32 block, void *dest, u16 count)
Description: AES read
AESをかけながらNAND/SDカードを読み込みます
AESの鍵の設定はあらかじめ行っておく必要があります
AESの初期値の設定はFATFS_EnableAESの引数から計算されます
Arguments: block: source sector number in NAND
dest: dest address (4 bytes alignment)
count: sectors to transfer
@ -272,6 +331,10 @@ err:
Description:
Readに対してのみ使IO関数です
AESの有無の判定は断片化時に未検証です
()
Arguments: driveno :
block :
buffer :
@ -307,6 +370,8 @@ static BOOL nandRtfsIoFirm( int driveno, u32 block, void* buffer, u16 count, BOO
Description:
Readに対してのみ使IO関数です
Arguments: driveno :
block :
buffer :
@ -342,6 +407,8 @@ static BOOL sdmcRtfsIoFirm( int driveno, u32 block, void* buffer, u16 count, BOO
Description: sdmcドライバをドライブに割り当てる
IO関数を使用するように初期化します
Arguments: driveno :
Returns:
@ -395,6 +462,8 @@ static BOOL nandRtfsAttachFirm( int driveno, int partition_no)
Description: sdmcドライバをドライブに割り当てる
IO関数を使用するように初期化します
Arguments: driveno :
Returns:
@ -426,7 +495,14 @@ static BOOL sdmcRtfsAttachFirm( int driveno)
Description: init file system
Arguments: None
FATFSを初期化します
FATFS_Initの使用しない部分を省略しているだけです
NANDコンテキストが残っているなら
FATFS用のメモリヒープ(OS_ARENA_MAIN_SUBPRIVの関連とヒープ)
Arguments: nandContext context of nand driver's previous life
Returns: None
*---------------------------------------------------------------------------*/
@ -452,9 +528,15 @@ BOOL FATFS_InitFIRM( void* nandContext )
/*---------------------------------------------------------------------------*
Name: FATFS_MountDriveFirm
Description: mount nand partition
Description: mount specified partition
Arguments: None
NANDまたはSDカードのみ対応しています
APIでマウントした場合IO関数を使用するようになります
Arguments: driveno drive number "A:" is 0
media media type
partition_no pertition number
Returns: None
*---------------------------------------------------------------------------*/

View File

@ -22,6 +22,25 @@
#include <rtfs.h>
#include <devices/sdif_reg.h>
/*
PROFILE_ENABLE
main.cかどこかにu32 profile[256]; u32 pf_cnt;
*/
//#define PROFILE_ENABLE
#ifdef SDK_FINALROM // FINALROMで無効化
#undef PROFILE_ENABLE
#endif
#ifdef PROFILE_ENABLE
#define PROFILE_PXI_SEND 1000000000
#define PROFILE_PXI_RECV 2000000000
extern u32 profile[];
extern u32 pf_cnt;
#endif
#define PXI_FIFO_TAG_DATA PXI_FIFO_TAG_USER_0
static ROM_Header* const rh= (ROM_Header*)(HW_MAIN_MEM_SYSTEM_END - 0x2000);
@ -31,6 +50,10 @@ static int menu_fd = -1;
Name: FATFS_OpenRecentMenu
Description: open recent menu file
IDを
menu_fdにセットします
eTicketの処理
Arguments: driveno drive number ('A' is 0)
@ -53,15 +76,17 @@ BOOL FATFS_OpenRecentMenu( int driveno )
}
/*---------------------------------------------------------------------------*
Name: FATFS_OpenSpecifiedMenu
Name: FATFS_OpenSpecifiedSrl
Description: open specified menu file
IDをmenu_fdにセットします
Arguments: menufile target filename
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_OpenSpecifiedMenu( const char* menufile )
BOOL FATFS_OpenSpecifiedSrl( const char* menufile )
{
menu_fd = po_open((u8*)menufile, PO_BINARY, 0);
if (menu_fd < 0)
@ -74,13 +99,36 @@ BOOL FATFS_OpenSpecifiedMenu( const char* menufile )
#define HEADER_SIZE 0x1000
#define AUTH_SIZE ROM_HEADER_SIGN_TARGET_SIZE
#ifndef SDK_FINALROM
#define PROFILE_PXI_SEND 1000000000
#define PROFILE_PXI_RECV 2000000000
extern u32 profile[];
extern u32 pf_cnt;
#endif
/*---------------------------------------------------------------------------*
Name: FATFS_LoadBuffer
Description: load data and pass to ARM9 via WRAM[B]
LoadBufferメカニズムでFAT中のファイルの内容をARM9に転送します
[LoadBufferメカニズム]
WRAM[B]ARM7,ARM9間のデータ転送を行います
WRAM[B]
1ARM9へ
FIRM_PXI_ID_LOAD_PIRIODを送信します
2使
使ARM9側に割り当てられているときはARM7側に
[使]
WRAM[B]ARM7側に倒しておくこと
[]
offsetとsizeはARM9に通知されません
SRLファイルを読み込む場合はROMヘッダを参照できれば十分です
(ROMヘッダ部分は元から知っているはず)
Arguments: offset offset of the file to load (512 bytes alignment)
size size to load
Returns: None
*---------------------------------------------------------------------------*/
static BOOL FATFS_LoadBuffer(u32 offset, u32 size)
{
u8* base = (u8*)HW_FIRM_LOAD_BUFFER_BASE;
@ -91,7 +139,7 @@ static BOOL FATFS_LoadBuffer(u32 offset, u32 size)
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// x2: after Seek
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
@ -104,7 +152,7 @@ OS_TPrintf("%s: dest=%X, unit=%X\n", __func__, dest, unit);
while (MI_GetWramBankMaster_B(count) != MI_WRAM_ARM7) // waiting to be master
{
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// x3...: after to wait ARM9
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
@ -112,7 +160,7 @@ OS_TPrintf("%s: dest=%X, unit=%X\n", __func__, dest, unit);
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// x4...: before PXI
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_PIRIOD; // checkpoint
@ -127,7 +175,16 @@ OS_TPrintf("%s: dest=%X, unit=%X\n", __func__, dest, unit);
/*---------------------------------------------------------------------------*
Name: FATFS_LoadHeader
Description: load menu header
Description: load header
SRLのROMヘッダ部分を読み込みARM9に渡します
ARM9へ FIRM_PXI_ID_LOAD_HEADER
ARM9から FIRM_PXI_ID_AUTH_HEADER
ROMヘッダが格納されたと
seedデータを16バイト受信します
seedはSeedAとKeyCに設定されます
makerom.TWLまたはIPLの仕様に依存します
Arguments: None
@ -141,7 +198,7 @@ BOOL FATFS_LoadHeader( void )
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 10: before PXI
pf_cnt = 10;
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_HEADER; // checkpoint
@ -151,12 +208,12 @@ BOOL FATFS_LoadHeader( void )
PXI_NotifyID( FIRM_PXI_ID_LOAD_HEADER );
FATFS_DisableAES();
if (!FATFS_LoadBuffer(0, AUTH_SIZE) ||
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 12: after to load half
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
#endif
!FATFS_LoadBuffer(AUTH_SIZE, HEADER_SIZE - AUTH_SIZE) ||
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 1x: after to load remain
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
#endif
@ -164,7 +221,7 @@ BOOL FATFS_LoadHeader( void )
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 1x: after PXI
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_HEADER; // checkpoint
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -195,6 +252,9 @@ BOOL FATFS_LoadHeader( void )
Description: get counter
offsetに対応したAESのカウンタ値を計算します
makerom.TWL内のコードに依存します
Arguments: offset offset from head of ROM_Header
Returns: counter
@ -213,6 +273,17 @@ static AESCounter* FATFSi_GetCounter( u32 offset )
Description: setup whiere to use AES
AES暗号化されたデータを読み込むためのセットアップを行います
fatfs_sdmc.cのドライバを使用していることが条件となります
(TwlSDK標準で行う場合は)
APIを呼び出す前にROMヘッダが
makerom.TWLまたはIPLの使用に依存します
Arguments: offset offset of region from head of ROM_Header
size size of region
@ -243,20 +314,28 @@ static void FATFSi_SetupAES( u32 offset, u32 size )
/*---------------------------------------------------------------------------*
Name: FATFS_LoadMenu
Name: FATFS_LoadStatic
Description: load menu binary
Description: load static binary
ARM9/ARM7のStaticおよびLTD Staticを読み込みます
ARM9へFIRM_PXI_ID_LOAD_*_STATICを送信します
ARM9からFIRM_PXI_ID_AUTH_*_STATICを受信します
0PXI通信すら行いません
APIを呼び出す前にROMヘッダが
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FATFS_LoadMenu( void )
BOOL FATFS_LoadStatic( void )
{
// load ARM9 static region without AES
if ( rh->s.main_size > 0 )
{
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 30: before PXI
pf_cnt = 30;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -269,7 +348,7 @@ BOOL FATFS_LoadMenu( void )
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 3x: after PXI
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM9_STATIC; // checkpoint
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -278,7 +357,7 @@ BOOL FATFS_LoadMenu( void )
// load ARM7 static region without AES
if ( rh->s.sub_size > 0 )
{
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 50: before PXI
pf_cnt = 50;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -291,7 +370,7 @@ BOOL FATFS_LoadMenu( void )
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 5x: after PXI
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM7_STATIC; // checkpoint
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -300,7 +379,7 @@ BOOL FATFS_LoadMenu( void )
// load ARM9 extended static region with AES
if ( rh->s.main_ltd_size > 0 )
{
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 70: before PXI
pf_cnt = 70;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -313,7 +392,7 @@ BOOL FATFS_LoadMenu( void )
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 7x: after PXI
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC; // checkpoint
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -322,7 +401,7 @@ BOOL FATFS_LoadMenu( void )
// load ARM7 extended static region with AES
if ( rh->s.sub_ltd_size > 0 )
{
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 90: before PXI
pf_cnt = 90;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -335,7 +414,7 @@ BOOL FATFS_LoadMenu( void )
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 9x: after PXI
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC; // checkpoint
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -345,15 +424,20 @@ BOOL FATFS_LoadMenu( void )
}
/*---------------------------------------------------------------------------*
Name: FATFS_BootMenu
Name: FATFS_Boot
Description: boot menu
Description: boot
ROMヘッダの情報を引数にOSi_Bootを呼び出すだけです
APIを呼び出す前にROMヘッダが
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void FATFS_BootMenu( void )
void FATFS_Boot( void )
{
OSi_Boot( rh->s.sub_entry_address, (MIHeader_WramRegs*)rh->s.main_wram_config_data );
}

View File

@ -19,6 +19,25 @@
#include <firm.h>
#include <firm/format/format_rom.h>
/*
PROFILE_ENABLE
main.cかどこかにu32 profile[256]; u32 pf_cnt;
*/
//#define PROFILE_ENABLE
#ifdef SDK_FINALROM // FINALROMで無効化
#undef PROFILE_ENABLE
#endif
#ifdef PROFILE_ENABLE
#define PROFILE_PXI_SEND 1000000000
#define PROFILE_PXI_RECV 2000000000
extern u32 profile[];
extern u32 pf_cnt;
#endif
#define PXI_FIFO_TAG_DATA PXI_FIFO_TAG_USER_0
static ROM_Header* const rh = (ROM_Header*)HW_TWL_ROM_HEADER_BUF;
@ -31,6 +50,7 @@ static ROM_Header* const rh = (ROM_Header*)HW_TWL_ROM_HEADER_BUF;
/*
SHA1
MATHライブラリやDGTライブラリと同じだが使
*/
typedef struct SHA1_CTX // 実際には、サイズが同じなら中身は何でも良い
@ -77,6 +97,7 @@ static inline void SHA1_Calc(u8* md, const void* data, u32 len)
/*
HMAC (SHA1)
MATHライブラリやDGTライブラリと同じだが使
*/
#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8)
@ -187,6 +208,21 @@ static const u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = {
0x87, 0x46, 0x58, 0x24,
};
/*---------------------------------------------------------------------------*
Name: CheckRomCertificate
Description: check the certification in the ROM
ROMヘッダに付加された証明書のチェックを行います
makerom.TWL内のコードに依存します
Arguments: pool pointer to the pool info for SVC_DecryptoSign
pCert pointer to the certification
pCAPubKey pointer to the public key for the certification
gameCode initial code
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static BOOL CheckRomCertificate( int* pool, const RomCertificate *pCert, const void* pCAPubKey, u32 gameCode )
{
u8 digest[DIGEST_SIZE_SHA1];
@ -219,13 +255,38 @@ static BOOL CheckRomCertificate( int* pool, const RomCertificate *pCert, const v
return result;
}
#ifndef SDK_FINALROM
#define PROFILE_PXI_SEND 1000000000
#define PROFILE_PXI_RECV 2000000000
extern u32 profile[];
extern u32 pf_cnt;
#endif
/*---------------------------------------------------------------------------*
Name: MI_LoadBuffer
Description: receive data from ARM7 and store(move) via WRAM[B]
LoadBufferメカニズムでARM7から受け取ります
SHA1_CTXを指定していた場合SHA1の計算も
[LoadBufferメカニズム]
WRAM[B]ARM7,ARM9間のデータ転送を行います
WRAM[B]
1ARM7から
FIRM_PXI_ID_LOAD_PIRIODを受信します
ARM9は受信後にそのスロットの使用権をARM9に変更してデータを
()使
ARM7に戻します
[使]
WRAM[B]ARM7側に倒しておくこと
[]
offsetとsizeはARM7から通知されません
SRLファイルを読み込む場合はROMヘッダを参照できれば十分です
(ROMヘッダ部分は元から知っているはず)
Arguments: dest destination address for received data
size size to load
ctx context for SHA1 if execute SHA1_Update
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static BOOL MI_LoadBuffer(u8* dest, u32 size, SHA1_CTX *ctx)
{
u8* base = (u8*)HW_FIRM_LOAD_BUFFER_BASE;
@ -239,7 +300,7 @@ OS_TPrintf("%s: src=%X, unit=%X\n", __func__, src, unit);
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// x2...: after PXI
profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_PIRIOD;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -271,6 +332,23 @@ OS_TPrintf("%s: src=%X, unit=%X\n", __func__, src, unit);
return TRUE;
}
/*---------------------------------------------------------------------------*
Name: MI_LoadModule
Description: receive module from ARM7 and store(move) via WRAM[B]
MI_LoadBufferの上位APIでSHA1のハッシュ値を渡すことで
SHA1ハッシュチェックを行います
SHA1の計算範囲全体を
便
Arguments: dest destination address for received data
size size to load
digest digest to compare
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static /*inline*/ BOOL MI_LoadModule(void* dest, u32 size, const u8 digest[DIGEST_SIZE_SHA1])
{
HMAC_CTX ctx;
@ -284,7 +362,7 @@ static /*inline*/ BOOL MI_LoadModule(void* dest, u32 size, const u8 digest[DIGES
return FALSE;
}
HMAC_GetHash(&ctx, md);
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// xx: after SHA1
profile[pf_cnt++] = (u32)20202020; // checkpoint
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -305,6 +383,14 @@ static /*inline*/ BOOL MI_LoadModule(void* dest, u32 size, const u8 digest[DIGES
Description: load header
SRLのROMヘッダ部分をARM7から受け取り
ARM7から FIRM_PXI_ID_LOAD_HEADER
ARM7へ FIRM_PXI_ID_AUTH_HEADER
ROMヘッダが格納
seedデータを16バイト送信します
makerom.TWLまたはIPLの仕様に依存します
Arguments: pool pointer to the pool info for SVC_DecryptoSign
rsa_key key address
@ -320,12 +406,12 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
SHA1_Init(&ctx);
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
pf_cnt = 10;
#endif
// load header (hash target)
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_HEADER ||
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 10: after PXI
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_HEADER), FALSE) ||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
@ -335,7 +421,7 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
return FALSE;
}
SHA1_GetHash(&ctx, md);
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 1x: after HMAC
profile[pf_cnt++] = (u32)2020202020; // checkpoint
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -365,7 +451,7 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
result = FALSE;
}
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 1x: after RSA, before PXI
profile[pf_cnt++] = (u32)128128128; // checkpoint
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -385,26 +471,34 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
}
/*---------------------------------------------------------------------------*
Name: MI_LoadMenu
Name: MI_LoadStatic
Description: load menu program
Description: load static binary
ARM9/ARM7のStaticおよびLTD Staticを受信します
ARM7からFIRM_PXI_ID_LOAD_*_STATICを受信します
ARM7へFIRM_PXI_ID_AUTH_*_STATICを送信
0PXI通信すら行いません
APIを呼び出す前にROMヘッダが
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL MI_LoadMenu( void )
BOOL MI_LoadStatic( void )
{
// load ARM9 static region
if ( rh->s.main_size > 0 )
{
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 30: before PXI
pf_cnt = 30;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM9_STATIC ||
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 31: after PXI
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM9_STATIC), FALSE) ||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
@ -413,7 +507,7 @@ BOOL MI_LoadMenu( void )
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 3x: after PXI
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM9_STATIC; // checkpoint
#endif
@ -423,13 +517,13 @@ BOOL MI_LoadMenu( void )
// load ARM7 static region
if ( rh->s.sub_size > 0 )
{
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 50: before PXI
pf_cnt = 50;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM7_STATIC ||
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 51: after PXI
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM7_STATIC), FALSE) ||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
@ -438,7 +532,7 @@ BOOL MI_LoadMenu( void )
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 5x: after PXI
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM7_STATIC; // checkpoint
#endif
@ -448,13 +542,13 @@ BOOL MI_LoadMenu( void )
// load ARM9 extended static region
if ( rh->s.main_ltd_size > 0 )
{
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 70: before PXI
pf_cnt = 70;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC ||
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 71: after PXI
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC), FALSE) ||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
@ -463,7 +557,7 @@ BOOL MI_LoadMenu( void )
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 7x: after PXI
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC; // checkpoint
#endif
@ -472,13 +566,13 @@ BOOL MI_LoadMenu( void )
// load ARM7 extended static region
if ( rh->s.sub_ltd_size > 0 )
{
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 90: before PXI
pf_cnt = 90;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC ||
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 91: after PXI
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC), FALSE) ||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
@ -487,7 +581,7 @@ BOOL MI_LoadMenu( void )
{
return FALSE;
}
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 9x: before PXI
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC; // checkpoint
#endif
@ -497,15 +591,20 @@ BOOL MI_LoadMenu( void )
}
/*---------------------------------------------------------------------------*
Name: MI_BootMenu
Name: MI_Boot
Description: boot menu
Description: boot
ROMヘッダの情報を引数にOSi_Bootを呼び出すだけです
APIを呼び出す前にROMヘッダが
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void MI_BootMenu( void )
void MI_Boot( void )
{
OSi_Boot( rh->s.main_entry_address, (MIHeader_WramRegs*)rh->s.main_wram_config_data );
}

View File

@ -154,16 +154,16 @@ void TwlSpMain( void )
#endif
OS_SetDebugLED(++step);
if ( FATFS_LoadHeader() && FATFS_LoadMenu() )
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
{
#ifndef SDK_FINALROM
// 127: before BootMenu
// 127: before Boot
pf_cnt = PRFILE_MAX-1;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
FATFS_BootMenu();
FATFS_Boot();
}
}
}

View File

@ -25,9 +25,17 @@ static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32)));
static int acPool[3];
/*
Profile
PROFILE_ENABLE
main.cかどこかにu32 profile[256]; u32 pf_cnt = 0;
*/
#ifndef SDK_FINALROM
#define PROFILE_ENABLE
#ifdef SDK_FINALROM // FINALROMで無効化
#undef PROFILE_ENABLE
#endif
#ifdef PROFILE_ENABLE
#define PRFILE_MAX 128
u32 profile[PRFILE_MAX];
u32 pf_cnt = 0;
@ -89,13 +97,13 @@ void TwlMain( void )
{
PreInit();
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
// 0: before PXI
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_InitFIRM();
#ifndef SDK_FINALROM
#ifdef PROFILE_ENABLE
OS_InitTick();
// 1: after PXI
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
@ -104,15 +112,15 @@ void TwlMain( void )
SVC_InitSignHeap( acPool, acHeap, sizeof(acHeap) );
// load menu
if ( MI_LoadHeader( acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadMenu() )
if ( MI_LoadHeader( acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() )
{
#ifndef SDK_FINALROM
// 127: before BootMenu
#ifdef PROFILE_ENABLE
// 127: before Boot
pf_cnt = PRFILE_MAX-1;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
MI_BootMenu();
MI_Boot();
}
EraseAll();

View File

@ -148,19 +148,19 @@ void TwlSpMain( void )
switch ( PAD_Read() & PAD_KEYPORT_MASK )
{
case 0:
result = FATFS_OpenSpecifiedMenu( MENU_FILE );
result = FATFS_OpenSpecifiedSrl( MENU_FILE );
break;
case PAD_BUTTON_A:
result = FATFS_OpenSpecifiedMenu( MENU_FILE_A );
result = FATFS_OpenSpecifiedSrl( MENU_FILE_A );
break;
case PAD_BUTTON_B:
result = FATFS_OpenSpecifiedMenu( MENU_FILE_B );
result = FATFS_OpenSpecifiedSrl( MENU_FILE_B );
break;
case PAD_BUTTON_L:
result = FATFS_OpenSpecifiedMenu( MENU_FILE_L );
result = FATFS_OpenSpecifiedSrl( MENU_FILE_L );
break;
case PAD_BUTTON_R:
result = FATFS_OpenSpecifiedMenu( MENU_FILE_R );
result = FATFS_OpenSpecifiedSrl( MENU_FILE_R );
break;
default:
OS_SetDebugLED( (u8)(PAD_Read() & PAD_KEYPORT_MASK) );
@ -176,16 +176,16 @@ void TwlSpMain( void )
#endif
OS_SetDebugLED(++step);
if ( FATFS_LoadHeader() && FATFS_LoadMenu() )
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
{
#ifndef SDK_FINALROM
// 127: before BootMenu
// 127: before Boot
pf_cnt = PRFILE_MAX-1;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
OS_SetDebugLED(++step);
FATFS_BootMenu();
FATFS_Boot();
}
}
}

View File

@ -114,15 +114,15 @@ void TwlMain( void )
SVC_InitSignHeap( acPool, acHeap, sizeof(acHeap) );
// load menu
if ( MI_LoadHeader( acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadMenu() )
if ( MI_LoadHeader( acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() )
{
#ifndef SDK_FINALROM
// 127: before BootMenu
// 127: before Boot
pf_cnt = PRFILE_MAX-1;
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
#endif
MI_BootMenu();
MI_Boot();
}
EraseAll();

View File

@ -36,7 +36,7 @@ extern "C" {
BOOL FATFS_OpenRecentMenu( int driveno );
/*---------------------------------------------------------------------------*
Name: FATFS_OpenSpecifiedMenu
Name: FATFS_OpenSpecifiedSrl
Description: open specified menu file
@ -44,7 +44,7 @@ BOOL FATFS_OpenRecentMenu( int driveno );
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_OpenSpecifiedMenu( const char* menufile );
BOOL FATFS_OpenSpecifiedSrl( const char* menufile );
/*---------------------------------------------------------------------------*
Name: FATFS_LoadHeader
@ -58,26 +58,26 @@ BOOL FATFS_OpenSpecifiedMenu( const char* menufile );
BOOL FATFS_LoadHeader( void );
/*---------------------------------------------------------------------------*
Name: FATFS_LoadMenu
Name: FATFS_LoadStatic
Description: load menu binary
Description: load static binary
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FATFS_LoadMenu( void );
BOOL FATFS_LoadStatic( void );
/*---------------------------------------------------------------------------*
Name: FATFS_BootMenu
Name: FATFS_Boot
Description: boot menu
Description: boot
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void FATFS_BootMenu( void );
void FATFS_Boot( void );
#ifdef __cplusplus

View File

@ -37,26 +37,26 @@ extern "C" {
BOOL MI_LoadHeader( int* pool, const void* rsa_key );
/*---------------------------------------------------------------------------*
Name: MI_LoadMenu
Name: MI_LoadStatic
Description: load menu program
Description: load static binary
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL MI_LoadMenu( void );
BOOL MI_LoadStatic( void );
/*---------------------------------------------------------------------------*
Name: MI_BootMenu
Name: MI_Boot
Description: boot menu
Description: boot
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void MI_BootMenu( void );
void MI_Boot( void );
#ifdef __cplusplus
} /* extern "C" */