diff --git a/build/libraries/fs/ARM9/src/fs_firm.c b/build/libraries/fs/ARM9/src/fs_firm.c index cd96aad4..f5f14e34 100644 --- a/build/libraries/fs/ARM9/src/fs_firm.c +++ b/build/libraries/fs/ARM9/src/fs_firm.c @@ -17,6 +17,8 @@ #include #include +//#define PROFILE_ES 0x02FFCB00 + // bootContent を表す特殊な contentIndex #define CONTENT_INDEX_BOOT 0xFFFF @@ -34,11 +36,26 @@ *---------------------------------------------------------------------------*/ void FS_InitFIRM( void ) { - FSiTemporaryBuffer = (void*)HW_FIRM_FS_TEMP_BUFFER; FATFS_InitFIRM(); FS_Init( FS_DMA_NOT_USE ); } +/*---------------------------------------------------------------------------* + Name: FSi_SetupFATBuffers + + Description: override weak function + + Arguments: + + Returns: None + *---------------------------------------------------------------------------*/ +void FSi_SetupFATBuffers(void) +{ + FSiFATFSDrive = (void*)HW_FIRM_FS_FATFS_DRIVE; + FSiFATFSAsyncRequest = (void*)HW_FIRM_FS_FATFS_ASYNC_REQUEST; + FSiTemporaryBuffer = (void*)HW_FIRM_FS_TEMP_BUFFER; +} + /*---------------------------------------------------------------------------* Name: FSi_OverrideRomArchive @@ -241,32 +258,42 @@ BOOL FS_ResolveSrl( OSTitleId titleId ) int FS_ResolveSrlList( const OSTitleId* titleIdList, u32 nums ) { int i; -OSTick tick[8]; -char*ptr=(char*)0x02FFCB00; -tick[0] = OS_GetTick(); +#ifdef PROFILE_ES + OSTick tick[8]; + char*ptr=(char*)PROFILE_ES; + tick[0] = OS_GetTick(); +#endif MI_CpuClearFast( (char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, HW_FIRM_FS_BOOT_SRL_PATH_BUF_SIZE ); -tick[1] = OS_GetTick(); +#ifdef PROFILE_ES + tick[1] = OS_GetTick(); +#endif if ( !titleIdList || !nums || ES_ERR_OK != ES_InitLib() ) { return FALSE; } for ( i = 0; i < nums; i++ ) { -tick[2+i] = OS_GetTick(); +#ifdef PROFILE_ES + tick[2+i] = OS_GetTick(); +#endif if ( ES_ERR_OK == ES_GetContentPath(titleIdList[i], CONTENT_INDEX_BOOT, (char*)HW_TWL_FS_BOOT_SRL_PATH_BUF) ) { break; } } -tick[3+i] = OS_GetTick(); +#ifdef PROFILE_ES + tick[3+i] = OS_GetTick(); +#endif if ( ES_ERR_OK != ES_CloseLib() ) { return FALSE; } -tick[4+i] = OS_GetTick(); -tick[5+i] = tick[4+i]; -for(i=0;i<7;i++) -ptr+=STD_TSPrintf(ptr, "tick[%d]:%d\n",i,(int)OS_TicksToMicroSeconds(tick[i+1]-tick[i])); +#ifdef PROFILE_ES + tick[4+i] = OS_GetTick(); + tick[5+i] = tick[4+i]; + for(i=0;i<7;i++) + ptr+=STD_TSPrintf(ptr, "tick[%d]:%d\n",i,(int)OS_TicksToMicroSeconds(tick[i+1]-tick[i])); +#endif return (i == nums ? -1 : i); } diff --git a/include/firm/hw/common/mmap_firm.h b/include/firm/hw/common/mmap_firm.h index a1b182c5..a6f27035 100644 --- a/include/firm/hw/common/mmap_firm.h +++ b/include/firm/hw/common/mmap_firm.h @@ -24,6 +24,8 @@ extern "C" { #endif +#define HW_FIRM_ROUNDUP32(x) ( ((x) + 31) & -32 ) + //------------------------------------- *_LoadBuffer #define HW_FIRM_LOAD_BUFFER_BASE MI_GetWramMapStart_B() #define HW_FIRM_LOAD_BUFFER_UNIT_SIZE 0x8000 @@ -35,13 +37,21 @@ extern "C" { #define HW_FIRM_FS_MOUNT_INFO_BUF_SIZE (HW_TWL_FS_BOOT_SRL_PATH_BUF - HW_TWL_FS_MOUNT_INFO_BUF) #define HW_FIRM_FS_BOOT_SRL_PATH_BUF_SIZE (HW_TWL_ROM_HEADER_BUF - HW_TWL_FS_BOOT_SRL_PATH_BUF) -#define HW_FIRM_FATFS_ARCHNAME_LIST (HW_FIRM_FATFS_ARCHNAME_LIST_END - HW_FIRM_FATFS_ARCHNAME_LIST_SIZE) -#define HW_FIRM_FATFS_ARCHNAME_LIST_SIZE MATH_ROUNDUP(OS_MOUNT_ARCHIVE_NAME_LEN * OS_MOUNT_INFO_MAX + 1, 32) // 0xC0 -#define HW_FIRM_FATFS_ARCHNAME_LIST_END HW_FIRM_FATFS_COMMAND_BUFFER // 0x02ff5800 +#define HW_FIRM_FATFS_ARCHNAME_LIST (HW_FIRM_FATFS_ARCHNAME_LIST_END - HW_FIRM_FATFS_ARCHNAME_LIST_SIZE) // 0x02fee120 +#define HW_FIRM_FATFS_ARCHNAME_LIST_SIZE MATH_ROUNDUP(OS_MOUNT_ARCHIVE_NAME_LEN * OS_MOUNT_INFO_MAX + 1, 32) // 0xc0 +#define HW_FIRM_FATFS_ARCHNAME_LIST_END HW_FIRM_FATFS_COMMAND_BUFFER // 0x2fee1e0 #define HW_FIRM_FATFS_COMMAND_BUFFER (HW_FIRM_FATFS_COMMAND_BUFFER_END - HW_FIRM_FATFS_COMMAND_BUFFER_SIZE) #define HW_FIRM_FATFS_COMMAND_BUFFER_SIZE FATFS_COMMAND_BUFFER_MAX // 0x1000 -#define HW_FIRM_FATFS_COMMAND_BUFFER_END HW_FIRM_FS_TEMP_BUFFER // 0x02ff6800 +#define HW_FIRM_FATFS_COMMAND_BUFFER_END HW_FIRM_FS_FATFS_DRIVE // 0x2fef1e0 + +#define HW_FIRM_FS_FATFS_DRIVE (HW_FIRM_FS_FATFS_DRIVE_END - HW_FIRM_FS_FATFS_DRIVE_SIZE) +#define HW_FIRM_FS_FATFS_DRIVE_SIZE HW_FIRM_ROUNDUP32(sizeof(FSFATFSArchiveContext[FS_MOUNTDRIVE_MAX])) // 0x1cc0 +#define HW_FIRM_FS_FATFS_DRIVE_END HW_FIRM_FS_FATFS_ASYNC_REQUEST // 0x02ff0ea0 + +#define HW_FIRM_FS_FATFS_ASYNC_REQUEST (HW_FIRM_FS_FATFS_ASYNC_REQUEST_END - HW_FIRM_FS_FATFS_ASYNC_REQUEST_SIZE) +#define HW_FIRM_FS_FATFS_ASYNC_REQUEST_SIZE HW_FIRM_ROUNDUP32(sizeof(FATFSRequestBuffer[FS_MOUNTDRIVE_MAX])) // 0x5960 +#define HW_FIRM_FS_FATFS_ASYNC_REQUEST_END HW_FIRM_FS_TEMP_BUFFER // 0x02ff6800 #define HW_FIRM_FS_TEMP_BUFFER (HW_FIRM_FS_TEMP_BUFFER_END - HW_FIRM_FS_TEMP_BUFFER_SIZE) #define HW_FIRM_FS_TEMP_BUFFER_SIZE FS_TEMPORARY_BUFFER_MAX // 0x5800