mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ブートファイル名を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:
parent
18fe41a3a9
commit
7b449b3834
@ -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
|
||||
|
||||
|
||||
@ -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互換ヘッダコピー
|
||||
|
||||
@ -54,14 +54,29 @@ void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header )
|
||||
/* ITCM‘Sƒ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();
|
||||
|
||||
@ -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) );
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user