ブートファイル名をFS形式でHW_TWL_FS_BOOT_SRL_PATH_BUFに書いてみた

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@243 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2007-11-21 10:38:07 +00:00
parent 18fe41a3a9
commit 7b449b3834
5 changed files with 108 additions and 12 deletions

View File

@ -65,7 +65,7 @@ static int menu_fd = -1;
*---------------------------------------------------------------------------*/
BOOL FATFS_OpenRecentMenu( int driveno )
{
char *menufile = (char*)L"A:\\title\\00010001\\4d454e55\\content\\12123434.app";
char *menufile = (char*)L"A:\\title\\00010001\\52434e4c\\content\\12123434.app";
if (driveno < 0 || driveno >= 26)
{
return FALSE;
@ -76,6 +76,7 @@ BOOL FATFS_OpenRecentMenu( int driveno )
{
return FALSE;
}
FATFS_SaveSrlFilename(FATFS_MEDIA_TYPE_NAND, menufile);
return TRUE;
}
@ -100,6 +101,71 @@ BOOL FATFS_OpenSpecifiedSrl( const char* menufile )
return TRUE;
}
/*---------------------------------------------------------------------------*
Name: FATFS_SaveSrlFilename
Description: store filename to HW_TWL_FS_BOOT_SRL_PATH_BUF
HW_TWL_FS_BOOT_SRL_PATH_BUFに書き込みます
Arguments: media media type
filename target filename
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_SaveSrlFilename( FATFSMediaType media, const char* filename )
{
char* dest = (char*)HW_TWL_FS_BOOT_SRL_PATH_BUF;
const char nandStr[] = "nand:/";
const char sdmcStr[] = "sdmc:/";
if ( filename[2] == ':' ) // ドライブレターは削除
{
filename += 4;
}
if ( filename[0] == '\\' ) // 先頭のパス記号は削除
{
filename += 2;
}
switch( media )
{
case FATFS_MEDIA_TYPE_NAND:
MI_CpuCopy8(nandStr, dest, sizeof(nandStr)-1);
dest += sizeof(nandStr)-1;
break;
case FATFS_MEDIA_TYPE_SD:
MI_CpuCopy8(sdmcStr, dest, sizeof(sdmcStr)-1);
dest += sizeof(sdmcStr)-1;
break;
default:
return FALSE;
}
// unicode詰め (ASCII only)
while ( dest < (char*)HW_TWL_ROM_HEADER_BUF )
{
if ( *filename == '\\' ) // パス記号変換
{
*dest++ = '/';
filename++;
}
else if ( *filename != 0 ) // 通常コピー
{
*dest++ = *filename++;
}
else if ( *(filename + 1) != 0 ) // \0が連続していないならunicodeの詰めるべき隙間
{
filename++; // omit
}
else // \0が連続しているなら終端
{
MI_CpuClear8( dest, HW_TWL_ROM_HEADER_BUF - (u32)dest ); // 残りバッファのクリア
break;
}
}
OS_TPrintf("Stored: %s\n", (char*)HW_TWL_FS_BOOT_SRL_PATH_BUF);
return TRUE;
}
/*---------------------------------------------------------------------------*
Name: FATFS_GetSrlDescriptor

View File

@ -290,7 +290,7 @@ BOOL MI_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key )
#endif
if ( result )
{
DC_FlushRange( rh, HW_TWL_ROM_HEADER_BUF_SIZE );
DC_StoreRange( rh, HW_TWL_ROM_HEADER_BUF_SIZE );
PXI_NotifyID( FIRM_PXI_ID_AUTH_HEADER );
PXI_SendDataByFifo( PXI_FIFO_TAG_DATA, sd.aes_key_seed, AES_BLOCK_SIZE );
// DS互換ヘッダコピー

View File

@ -54,14 +54,29 @@ void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header )
/* ITCMSƒNƒŠƒA */
clr_list[i++] = (u32)HW_ITCM;
clr_list[i++] = (u32)HW_ITCM_SIZE;
#else
/* CODEとSTACKの隙間をクリア */
/* FS Parameters領域のクリア (暫定) */
// clr_list[i++] = (u32)HW_TWL_FS_MOUNT_INFO_BUF; // 0x02ffdc00 - 0x02ffddff
// clr_list[i++] = (u32)HW_TWL_ROM_HEADER_BUF - (u32)HW_TWL_FS_MOUNT_INFO_BUF;
/* PSEG1/RED Reserved領域のクリア (暫定) */
clr_list[i++] = (u32)HW_MAIN_MEM_SHARED; // 0x02fff000 - 0x02fffa7f
clr_list[i++] = (u32)HW_PSEG1_RESERVED_1_END - (u32)HW_MAIN_MEM_SHARED;
/* System Shared領域のクリア (暫定) */
clr_list[i++] = (u32)HW_BOOT_CHECK_INFO_BUF; // 0x02fffc00 - 0x02fffc1f
clr_list[i++] = (u32)HW_BOOT_CHECK_INFO_BUF_END - (u32)HW_BOOT_CHECK_INFO_BUF;
clr_list[i++] = (u32)HW_BOOT_SHAKEHAND_9; // 0x02fffc24 - 0x02fffd7f
clr_list[i++] = (u32)HW_NVRAM_USER_INFO_END - (u32)HW_BOOT_SHAKEHAND_9;
clr_list[i++] = (u32)HW_ARENA_INFO_BUF; // 0x02fffda0 - 0x02fffdff
clr_list[i++] = (u32)HW_ROM_HEADER_BUF - (u32)HW_ARENA_INFO_BUF;
clr_list[i++] = (u32)HW_PXI_SIGNAL_PARAM_ARM9; // 0x02ffff80 - 0x02fffffd
clr_list[i++] = (u32)HW_CMD_AREA - (u32)HW_PXI_SIGNAL_PARAM_ARM9;
#else // SDK_ARM7
/* REBOOT_ExecuteのCODEとSTACKの隙間をクリア */
if ((u32)stack_top > (u32)OS_BOOT_CODE_BUF - OS_BOOT_CODE_SIZE - OS_BOOT_STACK_SIZE_MIN - sizeof(clr_list))
{
clr_list[i++] = (u32)OS_BOOT_CODE_BUF + (u32)OS_BOOT_CODE_SIZE;
clr_list[i++] = (u32)stack_top - (u32)OS_BOOT_CODE_BUF - OS_BOOT_CODE_SIZE - OS_BOOT_STACK_SIZE_MIN - sizeof(clr_list);
clr_list[i++] = (u32)OS_BOOT_CODE_BUF + OS_BOOT_CODE_SIZE;
clr_list[i++] = (u32)stack_top - OS_BOOT_STACK_SIZE_MIN - sizeof(clr_list) - (u32)OS_BOOT_CODE_BUF - OS_BOOT_CODE_SIZE;
}
#endif
#endif // SDK_ARM7
clr_list[i++] = NULL;
REBOOT_Execute(entry, wram_reg, clr_list, code_buf, stack_top, scfg, jtag);
OS_Terminate();

View File

@ -136,19 +136,19 @@ static BOOL Fatfs4sdmcInit(void)
switch ( PAD_Read() & PAD_KEYPORT_MASK )
{
case 0:
result = FATFS_OpenSpecifiedSrl( MENU_FILE );
result = FATFS_OpenSpecifiedSrl( MENU_FILE ) && FATFS_SaveSrlFilename( BOOT_DEVICE, MENU_FILE );
break;
case PAD_BUTTON_A:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_A );
result = FATFS_OpenSpecifiedSrl( MENU_FILE_A ) && FATFS_SaveSrlFilename( BOOT_DEVICE, MENU_FILE_A );
break;
case PAD_BUTTON_B:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_B );
result = FATFS_OpenSpecifiedSrl( MENU_FILE_B ) && FATFS_SaveSrlFilename( BOOT_DEVICE, MENU_FILE_B );
break;
case PAD_BUTTON_L:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_L );
result = FATFS_OpenSpecifiedSrl( MENU_FILE_L ) && FATFS_SaveSrlFilename( BOOT_DEVICE, MENU_FILE_L );
break;
case PAD_BUTTON_R:
result = FATFS_OpenSpecifiedSrl( MENU_FILE_R );
result = FATFS_OpenSpecifiedSrl( MENU_FILE_R ) && FATFS_SaveSrlFilename( BOOT_DEVICE, MENU_FILE_R );
break;
default:
OS_SetDebugLED( (u8)(PAD_Read() & PAD_KEYPORT_MASK) );

View File

@ -19,6 +19,7 @@
#define FIRM_FATFS_FATFS_LOADER_H_
#include <twl/types.h>
#include <twl/fatfs.h>
#ifdef __cplusplus
extern "C" {
@ -46,6 +47,20 @@ BOOL FATFS_OpenRecentMenu( int driveno );
*---------------------------------------------------------------------------*/
BOOL FATFS_OpenSpecifiedSrl( const char* menufile );
/*---------------------------------------------------------------------------*
Name: FATFS_SaveSrlFilename
Description: store filename to HW_TWL_FS_BOOT_SRL_PATH_BUF
HW_TWL_FS_BOOT_SRL_PATH_BUFに書き込みます
Arguments: media media type
filename target filename
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_SaveSrlFilename( FATFSMediaType media, const char* filename );
/*---------------------------------------------------------------------------*
Name: FATFS_GetSrlDescriptor