diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index f71fc659..c16893fd 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -44,23 +44,6 @@ void BOOT_Init( void ) BOOL BOOT_WaitStart( void ) { if( (reg_PXI_MAINPINTF & 0x000f ) == 0x000f ) { - // メモリクリアリストの設定 - static u32 clr_list[] = - { - 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, - SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR, - SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR, -#ifdef ISDBG_MB_CHILD_ - HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600), - HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20), -#endif - HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED, - HW_ARENA_INFO_BUF, HW_ROM_HEADER_BUF - HW_ARENA_INFO_BUF, - HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9, - NULL - }; - (void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。 (void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。 /* @@ -77,7 +60,25 @@ BOOL BOOT_WaitStart( void ) reg_PXI_MAINPINTF = MAINP_SEND_IF | 0x0100; // ARM9に対してブートするようIRQで要求+ARM7のステートを1にする。 // SDK共通リブート - OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list ); + { + // メモリクリアリストの設定 + static u32 clr_list[] = + { + 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, + SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR, + SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR, +#ifdef ISDBG_MB_CHILD_ + HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600), + HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20), +#endif + HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED, + HW_ARENA_INFO_BUF, HW_ROM_HEADER_BUF - HW_ARENA_INFO_BUF, + HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9, + NULL + }; + OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list ); + } } return FALSE; } @@ -90,11 +91,13 @@ static void BOOTi_ClearREG_RAM( void ) MI_StopDma( (u16)i ); } + if( SYSMi_GetWork()->isCardBoot ) { #ifdef DEBUG_USED_CARD_SLOT_B_ - reg_MI_MC_SWP = 0x80; // カードスロットのスワップ + reg_MI_MC_SWP = 0x80; // カードスロットのスワップ #endif - *(u32 *)HW_BOOT_CHECK_INFO_BUF = SYSMi_GetWork()->nCardID; // カード抜けチェックバッファにカードIDをセット - *(u32 *)HW_RED_RESERVED = SYSMi_GetWork()->nCardID; + *(u32 *)HW_BOOT_CHECK_INFO_BUF = SYSMi_GetWork()->nCardID; // カード抜けチェックバッファにカードIDをセット + *(u32 *)HW_RED_RESERVED = SYSMi_GetWork()->nCardID; + } // レジスタのクリア SVC_CpuClearFast( 0x0000, (void*)(HW_REG_BASE + 0x0b0), (0x13c - 0x0b0) ); diff --git a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c index 75b9ba66..51680990 100644 --- a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c @@ -54,14 +54,6 @@ static void ie_subphandler( void ) // ブート準備をして、ARM7からの通知を待つ。 void BOOT_Ready( void ) { - // メモリクリアリストの設定 - static u32 clr_list[] = - { - HW_ITCM, HW_ITCM_SIZE, - //HW_DTCM, HW_DTCM_SIZE, - NULL - }; - int i; // エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。 @@ -98,8 +90,20 @@ void BOOT_Ready( void ) reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01; } + // ROMヘッダバッファをコピー + MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF ); + // SDK共通リブート - OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list ); + { + // メモリクリアリストの設定 + static u32 clr_list[] = + { + HW_ITCM, HW_ITCM_SIZE, + //HW_DTCM, HW_DTCM_SIZE, + NULL + }; + OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list ); + } } diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c b/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c index b7bc7a44..a664b069 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c @@ -27,29 +27,54 @@ // extern data----------------------------------------------------------------- // function's prototype-------------------------------------------------------- -void SYSM_SetBootSRLPath( NAMTitleId titleID ); -void SYSM_SetMountInfo( NAMTitleId titleID ); +void SYSMi_SetLauncherMountInfo( void ); +void SYSM_SetBootAppMountInfo( NAMTitleId titleID ); static void SYSMi_ModifySaveDataMount( NAMTitleId titleID ); // global variable------------------------------------------------------------- // static variable------------------------------------------------------------- +static void SYSMi_SetBootSRLPath( NAMTitleId titleID ); +static void SYSMi_SetMountInfoCore( const OSMountInfo *pSrc ); // const data------------------------------------------------------------------ +/* + + ※現在、SDKのFATFSバグ回避のため、突貫で"nand:"を"F:"ドライブにしている。 + (NAND2KBリード問題対策が、"F"ドライブのみでの対応になっているため。) + +*/ + + // デフォルトマウント情報リスト OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = { // drive device target pertitionIdx resource userPermission rsvA B archive path { 'A', OS_MOUNT_DEVICE_SD, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "sdmc", "/" }, - { 'B', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, 0, 0, 0, "nand", "/" }, // ユーザーはこのアーカイブを使えない(RW不可) - { 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, 0, 0, 0, "nand2", "/" }, // ユーザーはこのアーカイブを使えない(RW不可) +// { 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R), 0, 0, "nand", "/" }, // ユーザーはこのアーカイブではWrite不可 +// { 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R), 0, 0, "nand2", "/" }, // ユーザーはこのアーカイブではWrite不可 + { 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand", "/" }, // ユーザーはこのアーカイブではWrite不可 + { 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand2", "/" }, // ユーザーはこのアーカイブではWrite不可 { 'D', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "shared2", "nand2:/shared2" }, { 'E', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "photo", "nand2:/photo" }, - { 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPrv", NULL }, - { 'G', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPub", NULL }, + { 'G', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPrv", NULL }, + { 'H', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPub", NULL }, }; +// ランチャーマウント情報 +const OSMountInfo s_launcherMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = { +// drive device target pertitionIdx resource userPermission rsvA B archive path + { 'A', OS_MOUNT_DEVICE_SD, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "sdmc", "/" }, + { 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand", "/" }, // ランチャーはここもアクセス可 + { 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand2", "/" }, // 同上 + { 'D', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "shared2", "nand2:/shared2" }, + { 'E', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "photo", "nand2:/photo" }, + { 0, OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPrv", NULL }, + { 0, OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPub", NULL }, +}; + + // ============================================================================ // @@ -57,53 +82,76 @@ OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = { // // ============================================================================ -// 起動SRLパスをシステム領域にセット -void SYSM_SetBootSRLPath( NAMTitleId titleID ) +// ランチャーのマウント情報セット +void SYSMi_SetLauncherMountInfo( void ) { - char path[ FS_FILE_NAME_MAX ]; - - // タイトルIDが"0"の時は、ROMと判断する(DSダウンロードプレイの時の挙動は未実装。。。) - if( titleID ) { - NAM_GetTitleBootContentPath( path, titleID ); - }else { - STD_StrCpy( path, (const char*)"rom:" ); - } - - STD_CopyLStringZeroFill( (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, path, OS_MOUNT_PATH_LEN ); - OS_TPrintf( "boot path : %s\n", (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF ); + // ※とりあえず自身はROMブートで。(後で修正) +// SYSMi_SetBootSRLPath( 0 ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。 + SYSMi_SetMountInfoCore( &s_launcherMountList[0] ); } // システム領域に、ブートするアプリのマウント情報を登録する -void SYSM_SetMountInfo( NAMTitleId titleID ) +void SYSM_SetBootAppMountInfo( NAMTitleId titleID ) { - // マウント情報の整理 - SYSMi_ModifySaveDataMount( titleID ); // セーブデータ - // SDは全アプリ解放で良い? - // PHOTOは全アプリに解放で良い? + SYSMi_SetBootSRLPath( titleID ); // 起動アプリのSRLパスをセット + SYSMi_ModifySaveDataMount( titleID ); // セーブデータ有無によるマウント情報の編集 + /* + ※※ 注意 ※※ + MountInfoは、FSで直接参照してアクセス許可状態を判定しているため、ここにアプリ用のデータをセットすると、 + その後はパーミッションの都合上FSライブラリおよびFSを使用したESやNAMライブラリが全く使用できなくなる。(今後パーミッション仕様については変更される可能性あり) + よって、内部でFSライブラリを使用する処理は、本処理の前に完了しておく必要がある。 + */ + SYSMi_SetMountInfoCore( (const OSMountInfo *)&s_defaultMountList[0] ); // マウント情報のセット +} + + +// 起動SRLパスをシステム領域にセット +static void SYSMi_SetBootSRLPath( NAMTitleId titleID ) +{ + static char path[ FS_FILE_NAME_MAX ]; - // マウント情報をシステム領域に書き込み - { - OSMountInfo *pSrc = s_defaultMountList; - OSMountInfo *pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF; - int i; - for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) { - if( pSrc->drive[ 0 ] ) { - MI_CpuCopyFast( pSrc, pDst, sizeof(OSMountInfo) ); - pDst++; - } - pSrc++; + MI_CpuClear8( path, FS_FILE_NAME_MAX ); + + // タイトルIDが"0"の時は、ROMと判断する(DSダウンロードプレイの時の挙動は未実装。。。) + if( titleID ) { + if( NAM_GetTitleBootContentPath( path, titleID ) != NAM_OK ) { + OS_TPrintf( "ERROR: BootContentPath Get failed.\n" ); } -#if 0 - pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF; - for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) { - OS_TPrintf( "mount path : %s\n", pDst->path ); + }else { +// STD_StrCpy( path, (const char*)"rom:" ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。 + } + + STD_CopyLStringZeroFill( (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, path, OS_MOUNT_PATH_LEN ); +// OS_TPrintf( "boot path : %s\n", (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF ); // ※今はOS_Init前で呼ばれるので、Printfできない。 +} + + +// マウント情報をシステム領域に書き込み +static void SYSMi_SetMountInfoCore( const OSMountInfo *pSrc ) +{ + OSMountInfo *pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF; + int i; + + MI_CpuClearFast( (void *)HW_TWL_FS_MOUNT_INFO_BUF, HW_TWL_FS_BOOT_SRL_PATH_BUF - HW_TWL_FS_MOUNT_INFO_BUF ); + + for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) { + if( pSrc->drive[ 0 ] ) { + MI_CpuCopyFast( pSrc, pDst, sizeof(OSMountInfo) ); pDst++; } -#endif + pSrc++; } +#if 0 + pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF; + for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) { + OS_TPrintf( "mount path : %s\n", pDst->path ); + pDst++; + } +#endif } + // タイトルIDをもとにセーブデータ有無を判定して、マウント情報を編集する。 static void SYSMi_ModifySaveDataMount( NAMTitleId titleID ) { @@ -116,13 +164,13 @@ static void SYSMi_ModifySaveDataMount( NAMTitleId titleID ) // セーブデータのファイルパスを取得 NAM_GetTitleSaveFilePath( saveFilePath[ 1 ], saveFilePath[ 0 ], titleID ); - // 結果を元にマウント情報を編集。 for( i = 0; i < 2; i++ ) { FSFile file[1]; FS_InitFile( file ); // ※現在は、セーブファイルを開けるかどうかでセーブファイル有無を確認。 // 最終的にはTMDもしくはROMヘッダの値を参照。ROMヘッダの方が簡単で速いか? + if( FS_OpenFileEx( file, saveFilePath[ i ], FS_FILEMODE_R) ) { FS_CloseFile( file ); STD_CopyLStringZeroFill( pMountTgt->path, saveFilePath[ i ], OS_MOUNT_PATH_LEN ); @@ -138,3 +186,56 @@ static void SYSMi_ModifySaveDataMount( NAMTitleId titleID ) } } } + + +/* +static void SYSMi_ModifySaveDataMount2( NAMTitleId titleID, ROM_Header_Short *pROMH ) +{ + int i; + OSMountInfo *pMountTgt = &s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ]; + u32 *pROMHSaveDataSize = &pROMH->public_save_data_size; + + if( titleID ) { + // タイトルIDが指定されているNANDアプリの場合は、セーブデータ有無を判定して、パスをセット + char saveFilePath[ 2 ][ FS_FILE_NAME_MAX ]; + + // セーブデータのファイルパスを取得 + NAM_GetTitleSaveFilePath( saveFilePath[ 1 ], saveFilePath[ 0 ], titleID ); + + // 結果を元にマウント情報を編集。 + for( i = 0; i < 2; i++ ) { + BOOL isFind = FALSE; + // ROMヘッダにセーブデータサイズの記載があるなら + if( *pROMHSaveDataSize++ ) { + FSFile file[1]; + FS_InitFile( file ); + // セーブファイルを開けるならOK。 + if( FS_OpenFileEx( file, saveFilePath[ i ], FS_FILEMODE_R) ) { + FS_CloseFile( file ); + isFind = TRUE; + } + // ※ランチャーでセーブデータファイルのリカバリまでやる? +#if 0 + else if( FS_CreateFile( saveFilePath[ i ], FS_PERMIT_R | FS_PERMIT_W ) && + FS_SetFileLength( file, *pROMHSaveDataSize ) ) { + FS_CloseFile( file ); + isFind = TRUE; + } +#endif + } + + if( isFind ) { + STD_CopyLStringZeroFill( pMountTgt->path, saveFilePath[ i ], OS_MOUNT_PATH_LEN ); + }else { + pMountTgt->drive[ 0 ] = 0; + } + pMountTgt++; + } + }else { + // タイトルID指定なしのカードアプリの場合は、セーブデータ無効 + for( i = 0; i < 2; i++ ) { + pMountTgt->drive[ 0 ] = 0; + } + } +} +*/ diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 19aed91a..7b209957 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -21,6 +21,7 @@ #include "spi.h" // define data----------------------------------------------------------------- +#define CARD_BANNER_INDEX ( LAUNCHER_TITLE_LIST_NUM - 1 ) typedef struct BannerCheckParam { u8 *pSrc; @@ -28,8 +29,8 @@ typedef struct BannerCheckParam { }BannerCheckParam; // extern data----------------------------------------------------------------- -extern void SYSM_SetMountInfo( NAMTitleId titleID ); // マウント情報のセット -extern void SYSM_SetBootSRLPath( NAMTitleId titleID ); // SRL起動パスのセット +extern void SYSMi_SetLauncherMountInfo( void ); +extern void SYSM_SetBootAppMountInfo( NAMTitleId titleID ); // マウント情報のセット // function's prototype------------------------------------------------------- static TitleProperty *SYSMi_CheckShortcutBoot( void ); @@ -141,6 +142,9 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ) pSysm = SYSMi_GetWork(); #endif /* SYSM_DEBUG_ */ + // ランチャーのマウント情報セット + SYSMi_SetLauncherMountInfo(); + // ARM7コンポーネント用プロテクションユニット領域変更 OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB ); @@ -307,10 +311,10 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ) // バナーデータのリード if( SYSM_GetCardRomHeader()->banner_offset && - SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ 0 ] ) ) { - pTitleList_Card->pBanner = &s_bannerBuf[ 0 ]; + SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ CARD_BANNER_INDEX ] ) ) { + pTitleList_Card->pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ]; }else { - MI_CpuClearFast( &s_bannerBuf[ 0 ], sizeof(TWLBannerFile) ); + MI_CpuClearFast( &s_bannerBuf[ CARD_BANNER_INDEX ], sizeof(TWLBannerFile) ); } } @@ -363,9 +367,13 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum ) int l; int gotten; NAMTitleId titleIdArray[ LAUNCHER_TITLE_LIST_NUM ]; - gotten = NAM_GetTitleList( &titleIdArray[ 1 ], LAUNCHER_TITLE_LIST_NUM - 1 ) + 1; - for(l=1;l LAUNCHER_TITLE_LIST_NUM ) { + OS_TPrintf( "Warning: TitleList_Nand num over LAUNCHER_TITLE_LIST_NUM(%d)\n", LAUNCHER_TITLE_LIST_NUM ); + } + gotten = NAM_GetTitleList( &titleIdArray[ 0 ], LAUNCHER_TITLE_LIST_NUM - 1 ); + + for(l=0;lisLoadSucceeded = TRUE; } + + if( pBootTitle->flags.media == TITLE_MEDIA_CARD ) { + SYSMi_GetWork()->isCardBoot = TRUE; + } } @@ -739,8 +743,7 @@ AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ) // マウント情報の登録 - SYSM_SetMountInfo ( pBootTitle->titleID ); - SYSM_SetBootSRLPath( pBootTitle->titleID ); + SYSM_SetBootAppMountInfo ( pBootTitle->titleID ); BOOT_Ready(); // never return. diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/main.c b/build/systemMenu_RED/MachineSettings/ARM9/src/main.c index 22e2a44b..c99dd6b4 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/main.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/main.c @@ -18,7 +18,6 @@ #include #include "misc.h" #include "MachineSetting.h" -#include "nand_app_hack.h" // extern data----------------------------------------------------------------- @@ -79,12 +78,6 @@ void TwlMain(void) SYSM_CaribrateTP(); } - { - // ファイルシステム切り替え応急処置 -// FS_IdentifyTitle(0x4d534554);//MSET - FS_IdentifyTitle(0x5445534d);//TESM ※今はmakerom.TWLのバグで逆になっている。 - } - InitBG(); GetAndDrawRTCData( &g_rtcDraw, TRUE ); MachineSettingInit(); diff --git a/build/systemMenu_RED/PictoChat/ARM9/src/main.c b/build/systemMenu_RED/PictoChat/ARM9/src/main.c index 953bdbf4..837e94d0 100644 --- a/build/systemMenu_RED/PictoChat/ARM9/src/main.c +++ b/build/systemMenu_RED/PictoChat/ARM9/src/main.c @@ -18,7 +18,6 @@ #include #include "misc.h" #include "PictoChat.h" -#include "nand_app_hack.h" // extern data----------------------------------------------------------------- @@ -61,12 +60,6 @@ void TwlMain(void) // システムの初期化------------------ InitAllocator(); - { - // ファイルシステム切り替え応急処置 -// FS_IdentifyTitle(0x50434854);//PCHT - FS_IdentifyTitle(0x54484350);//THCP ※今はmakerom.TWLのバグで逆になっている。 - } - InitBG(); PictoChatInit(); // メインループ---------------------------- diff --git a/doc/NAND繝輔Λ繝繧キ繝・繝槭ャ繝&繝輔か繝ォ繝繝繝ェ繝シ.vsd b/doc/NAND繝輔Λ繝繧キ繝・繝槭ャ繝&繝輔か繝ォ繝繝繝ェ繝シ.vsd index 96f1817b..52b442ea 100644 Binary files a/doc/NAND繝輔Λ繝繧キ繝・繝槭ャ繝&繝輔か繝ォ繝繝繝ェ繝シ.vsd and b/doc/NAND繝輔Λ繝繧キ繝・繝槭ャ繝&繝輔か繝ォ繝繝繝ェ繝シ.vsd differ diff --git a/include/nand_app_hack.h b/include/nand_app_hack.h deleted file mode 100644 index da5761d5..00000000 --- a/include/nand_app_hack.h +++ /dev/null @@ -1,63 +0,0 @@ - -// とにかく.appファイル内のSRLを直接読み込むコールバック -//#define WAD_SRL_OFFSET 0x12C0 -#define WAD_SRL_OFFSET 0 -static FSResult ReadFromWad(FSArchive *arc, void *buffer, u32 offset, u32 length) -{ - FSFile *file = (FSFile *)FS_GetArchiveBase(arc); - (void)FS_SeekFile(file, (int)(WAD_SRL_OFFSET + offset), FS_SEEK_SET); - return (FS_ReadFile(file, buffer, (int)length) >= 0) ? - FS_RESULT_SUCCESS : FS_GetResultCode(file); -} -// 指定のタイトルIDで起動したNANDアプリであると仮定して"rom"アーカイブを置換 -static BOOL FS_IdentifyTitle(u32 titleLo) -{ - BOOL retval = FALSE; - static struct - { - BOOL initialized; - FSFile file[1]; - } - context; - if (!context.initialized) - { - context.initialized = TRUE; -// if (OS_GetBootType() == OS_BOOTTYPE_NAND) - { - char path[FS_ENTRY_LONGNAME_MAX]; -/* STD_TSPrintf(path, "nand:/title_e/00010001/%02X%02X%02X%02X/content/12123434.app", - ((titleLo / 1000) % 10) + '0', - ((titleLo / 100) % 10) + '0', - ((titleLo / 10) % 10) + '0', - ((titleLo / 1) % 10) + '0'); -*/ - STD_TSPrintf(path, "nand:/title/00010001/%08X/content/12123434.app", titleLo ); - if (!FS_IsAvailable()) - { - FS_Init(FS_DMA_NOT_USE); - } - if (FS_OpenFileEx(context.file, path, FS_FILEMODE_R)) - { - CARDRomHeader header[1]; - (void)FS_SeekFile(context.file, (int)(WAD_SRL_OFFSET + 0), FS_SEEK_SET); - if (FS_ReadFile(context.file, header, sizeof(header)) == sizeof(header)) - { - FSArchive *arc = FS_FindArchive("rom", 3); - (void)FS_UnloadArchive(arc); - if (FS_LoadArchive(arc, (u32)context.file, - header->fat.offset, header->fat.length, - header->fnt.offset, header->fnt.length, - ReadFromWad, NULL)) - { - retval = TRUE; - } - } - if (!retval) - { - (void)FS_CloseFile(context.file); - } - } - } - } - return retval; -} diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h index 7204ab76..82bf9ada 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h @@ -102,13 +102,14 @@ typedef struct SYSM_work { vu16 isOnDebugger :1; // デバッガ動作か? vu16 isExistCard :1; // 有効なNTR/TWLカードが存在するか? vu16 isCardStateChanged :1; // カード状態更新フラグ - vu16 isLoadSucceeded :1; + vu16 isLoadSucceeded :1; // アプリロード完了? + vu16 isCardBoot :1; // カードブートか? #ifdef DEBUG_USED_CARD_SLOT_B_ vu16 isValidCardBanner :1; vu16 is1stCardChecked :1; - vu16 rsv :5; + vu16 rsv :4; #else - vu16 rsv :7; + vu16 rsv :6; #endif u16 cardHeaderCrc16; // カード検出時に算出したROMヘッダCRC16(ARM9側でコピーして使用する側)