diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index 61860f6a..9d937280 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -35,12 +35,12 @@ #define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) ) #ifdef ISDBG_MB_CHILD_ -#define PRE_CLEAR_NUM_MAX (7*2) +#define PRE_CLEAR_NUM_MAX (6*2) #else -#define PRE_CLEAR_NUM_MAX (5*2) +#define PRE_CLEAR_NUM_MAX (4*2) #endif -#define COPY_NUM_MAX (4*3) +#define COPY_NUM_MAX (5*3) #define POST_CLEAR_NUM_MAX (12 + 4*2) // extern data------------------------------------------------------- @@ -59,7 +59,7 @@ static u32 twl_post_clear_list[POST_CLEAR_NUM_MAX + 1] = HW_PARAM_WIRELESS_FIRMWARE_DATA_END, SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END, OS_BOOT_A9CODE_BUF, OS_BOOT_A9CODE_BUF + OS_BOOT_CODE_SIZE, SYSM_OWN_ARM9_MMEM_ADDR, - SYSM_OWN_ARM9_MMEM_ADDR_END, HW_TWL_MAIN_MEM_SHARED, + SYSM_OWN_ARM9_MMEM_ADDR_END, SYSM_TWL_MOUNT_INFO_TMP_BUFFER + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN, NULL, }; @@ -69,7 +69,7 @@ static u32 nitro_post_clear_list[POST_CLEAR_NUM_MAX + 1] = HW_PARAM_RESERVED_END, SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END, OS_BOOT_A9CODE_BUF, SYSM_TWL_ARM9_LTD_LOAD_MMEM, SYSM_DBG_NTR_SYSTEM_BUF, - SYSM_OWN_ARM9_MMEM_ADDR_END, HW_TWL_MAIN_MEM_SHARED, + SYSM_OWN_ARM9_MMEM_ADDR_END, SYSM_TWL_MOUNT_INFO_TMP_BUFFER + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN, NULL, }; @@ -129,8 +129,7 @@ BOOL BOOT_WaitStart( void ) (void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。 (void)OS_SetIrqMaskEx(0); - // [TODO]アプリによって示されるマウント情報アドレスは、ランチャーにとって常に安全な場所なのか? - // マウント情報の登録 + // マウント情報を一時的にSYSM_TWL_MOUNT_INFO_TMP_BUFFERに登録 SYSMi_SetBootAppMountInfo( &SYSMi_GetWork2()->bootTitleProperty ); BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。 @@ -217,7 +216,6 @@ BOOL BOOT_WaitStart( void ) { // pre clear SYSM_OWN_ARM7_WRAM_ADDR, NULL, // SYSM_OWN_ARM7_WRAM_ADDR(SDK_AUTOLOAD_WRAM_START)はリンカから与えられるので定数でない - NULL, NULL, // 定数でないのであとで設定 SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END - SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR_END - SYSM_OWN_ARM9_MMEM_ADDR, HW_WRAM_BASE, HW_WRAM_SIZE, // 共有WRAM  Launcherの特殊配置なので、BASEからサイズぶん @@ -229,19 +227,13 @@ BOOL BOOT_WaitStart( void ) // post clear NULL, }; - if( ! isNtrMode ) - { - mem_list[1] = (u32)th->s.sub_mount_info_ram_address - SYSM_OWN_ARM7_WRAM_ADDR; - mem_list[2] = ((u32)th->s.sub_mount_info_ram_address + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN); - mem_list[3] = SYSM_OWN_ARM7_WRAM_ADDR_END - ((u32)th->s.sub_mount_info_ram_address + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN); - }else - { - mem_list[1] = (SYSM_OWN_ARM7_WRAM_ADDR_END / 2) - SYSM_OWN_ARM7_WRAM_ADDR; - mem_list[2] = (SYSM_OWN_ARM7_WRAM_ADDR_END / 2); - mem_list[3] = SYSM_OWN_ARM7_WRAM_ADDR_END - (SYSM_OWN_ARM7_WRAM_ADDR_END / 2) ; - } + + mem_list[1] = SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR; // copy forwardリスト設定 + mem_list[list_count++] = SYSM_TWL_MOUNT_INFO_TMP_BUFFER; + mem_list[list_count++] = (u32)th->s.sub_mount_info_ram_address; + mem_list[list_count++] = SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN; for( l=0; lromRelocateInfo[l].src != NULL && !SYSMi_GetWork()->romRelocateInfo[l].rev ) diff --git a/build/libraries_sysmenu/sysmenu/common/src/mountInfo.c b/build/libraries_sysmenu/sysmenu/common/src/mountInfo.c index 804efdd5..3821c03e 100644 --- a/build/libraries_sysmenu/sysmenu/common/src/mountInfo.c +++ b/build/libraries_sysmenu/sysmenu/common/src/mountInfo.c @@ -39,7 +39,7 @@ // extern data----------------------------------------------------------------- // function's prototype-------------------------------------------------------- static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID ); -static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc ); +static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc, OSMountInfo *pDst ); static void SYSMi_ModifySaveDataMount( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt ); static void SYSMi_ModifySaveDataMountForLauncher( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt ); @@ -76,6 +76,7 @@ OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = { // ランチャーのマウント情報セット void SYSMi_SetLauncherMountInfo( void ) { + ROM_Header_Short *header = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF; NAMTitleId titleID = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->titleID; // bootSRLパスを設定(ランチャーが自分で設定するのは厄介なので、NANDファームからHW_TWL_FS_BOOT_SRL_PATH_BUF経由で @@ -97,11 +98,12 @@ void SYSMi_SetLauncherMountInfo( void ) // マウント情報のセット SYSMi_SetMountInfoCore( LAUNCHER_BOOTTYPE_NAND, titleID, - &s_defaultMountList[0] ); + &s_defaultMountList[0], + (OSMountInfo *)header->sub_mount_info_ram_address ); } -// システム領域に、ブートするアプリのマウント情報を登録する +// SYSM_TWL_MOUNT_INFO_TMP_BUFFERに、ブートするアプリのマウント情報を登録する void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle ) { // アプリがTWL対応でない場合は、何もセットせずにリターン @@ -113,7 +115,7 @@ void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle ) // SYSMi_SetBootSRLPath( (LauncherBootType)pBootTitle->flags.bootType, // pBootTitle->titleID ); - STD_CopyLStringZeroFill( (char *)((u32)((( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->sub_mount_info_ram_address) + SYSM_MOUNT_INFO_SIZE), + STD_CopyLStringZeroFill( (char *)(SYSM_TWL_MOUNT_INFO_TMP_BUFFER + SYSM_MOUNT_INFO_SIZE), SYSMi_GetWork2()->bootContentPath, OS_MOUNT_PATH_LEN ); // セーブデータ有無によるマウント情報の編集 @@ -130,7 +132,8 @@ void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle ) // マウント情報のセット SYSMi_SetMountInfoCore( (LauncherBootType)pBootTitle->flags.bootType, pBootTitle->titleID, - &s_defaultMountList[0] ); + &s_defaultMountList[0], + (OSMountInfo *)SYSM_TWL_MOUNT_INFO_TMP_BUFFER ); /* ※※ 注意 ※※ @@ -140,46 +143,12 @@ void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle ) */ } -/* -// 起動SRLパスをシステム領域にセット -static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID ) -{ - static char path[ FS_ENTRY_LONGNAME_MAX ]; - ROM_Header_Short *header = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF; - - switch( bootType ) - { - case LAUNCHER_BOOTTYPE_NAND: - if( NAM_GetTitleBootContentPathFast( path, titleID ) != NAM_OK ) { - OS_TPrintf( "ERROR: BootContentPath Get failed.\n" ); - } - break; - case LAUNCHER_BOOTTYPE_TEMP: - STD_TSNPrintf( path, FS_ENTRY_LONGNAME_MAX, OS_TMP_APP_PATH, titleID ); - break; - default: - path[ 0 ] = 0; -// STD_StrCpy( path, (const char*)"rom:" ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。 - break; - } - - if( path[ 0 ] ) { - STD_CopyLStringZeroFill( (char *)((u32)header->sub_mount_info_ram_address + SYSMi_MOUNT_INFO_SIZE), path, OS_MOUNT_PATH_LEN ); - }else { - MI_CpuClearFast( (char *)((u32)header->sub_mount_info_ram_address + SYSMi_MOUNT_INFO_SIZE), OS_MOUNT_PATH_LEN ); - } - OS_TPrintf( "boot SRL path : %s\n", (char *)((u32)header->sub_mount_info_ram_address + SYSMi_MOUNT_INFO_SIZE) ); // ※OS_Init前で呼ぶとPrintfできないので注意。 -} -*/ - -// マウント情報をシステム領域に書き込み -static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc ) +// マウント情報を指定されたアドレスに書き込み +static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc, OSMountInfo *pDst ) { #pragma unused(bootType) int i; - ROM_Header_Short *header = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF; - OSMountInfo *pDst = (OSMountInfo *)header->sub_mount_info_ram_address; char contentpath[ FS_ENTRY_LONGNAME_MAX ]; // タイトルIDからcontentのファイルパスをセット diff --git a/include/sysmenu/hw/common/mmap.h b/include/sysmenu/hw/common/mmap.h index 90fa1844..6ad7cede 100644 --- a/include/sysmenu/hw/common/mmap.h +++ b/include/sysmenu/hw/common/mmap.h @@ -100,6 +100,8 @@ extern u32 SDK_AUTOLOAD_WRAM_START[]; #define SYSM_TWL_ARM7_LTD_HYB_LOAD_WRAM 0x037f8000 // ロード可能なARM7 LTD static WRAM アドレス #define SYSM_TWL_ARM7_LTD_HYB_LOAD_WRAM_END SYSM_NTR_ARM7_LOAD_WRAM_END // ロード可能なARM7 LTD static WRAM 最終アドレス +// マウント情報一時バッファ +#define SYSM_TWL_MOUNT_INFO_TMP_BUFFER 0x02ff3400 // マウント情報の一時バッファ // ※旧NTR-IPL2のレガシーコード 整理予定 #define SYSM_ARM9_LOAD_MMEM_LAST_ADDR 0x02280000 // ロード可能なARM9 staticメインメモリ最終アドレス