diff --git a/build/libraries_sysmenu/sysmenu/ARM9/Makefile b/build/libraries_sysmenu/sysmenu/ARM9/Makefile index 9759b2b5..8d0c9221 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/Makefile +++ b/build/libraries_sysmenu/sysmenu/ARM9/Makefile @@ -27,7 +27,7 @@ TWL_ARCHGEN = LIMITED TWL_PROC = ARM9 SRCS = sysmenu_lib.c sysmenu_card.c sysmenu_util.c gameBoot.c ninLogoFunc.c cmn.c \ - settingsAPI.c + settingsAPI.c mountInfo.c TARGET_LIB = libsysmenu$(TWL_LIBSUFFIX).a diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c b/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c new file mode 100644 index 00000000..717c7a60 --- /dev/null +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c @@ -0,0 +1,133 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: SYSM_lib.c + + Copyright 2007 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#include +#include +#include + +// define data----------------------------------------------------------------- +#define DEFAULT_MOUNT_LIST_NUM 7 +#define PRV_SAVE_DATA_MOUNT_INDEX 5 // プライベートセーブデータの s_defaultMountInfo リストインデックス +#define PUB_SAVE_DATA_MOUNT_INDEX 6 // パブリック セーブデータの s_defaultMountInfo リストインデックス + +// extern data----------------------------------------------------------------- + +// function's prototype-------------------------------------------------------- +void SYSM_SetBootSRLPath( NAMTitleId titleID ); +void SYSM_SetMountInfo( NAMTitleId titleID ); + +static void SYSMi_ModifySaveDataMount( NAMTitleId titleID ); + +// global variable------------------------------------------------------------- + +// static variable------------------------------------------------------------- + +// const data------------------------------------------------------------------ + +// デフォルトマウント情報リスト +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不可) + { '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 }, +}; + + +// ============================================================================ +// +// マウント情報セット +// +// ============================================================================ + +// 起動SRLパスをシステム領域にセット +void SYSM_SetBootSRLPath( NAMTitleId titleID ) +{ + 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 ); +} + + +// システム領域に、ブートするアプリのマウント情報を登録する +void SYSM_SetMountInfo( NAMTitleId titleID ) +{ + // マウント情報の整理 + SYSMi_ModifySaveDataMount( titleID ); // セーブデータ + // SDは全アプリ解放で良い? + // PHOTOは全アプリに解放で良い? + + // マウント情報をシステム領域に書き込み + { + 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++; + } +#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 ) +{ + int i; + char saveFilePath[ 2 ][ FS_FILE_NAME_MAX ]; + OSMountInfo *pMountTgt = &s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ]; + + // セーブデータのファイルパスを取得 + NAM_GetTitleSaveFilePath( saveFilePath[ 1 ], saveFilePath[ 0 ], titleID ); + + // 結果を元にマウント情報を編集。 + for( i = 0; i < 2; i++ ) { + FSFile file[1]; + FS_InitFile( file ); + // ※現在は、セーブファイルを開けるかどうかでセーブファイル有無を確認。 + // 最終的にはTMDの情報を参照する形になる? + if( FS_OpenFileEx( file, saveFilePath[ i ], FS_FILEMODE_R) ) { + FS_CloseFile( file ); + STD_CopyLStringZeroFill( pMountTgt->path, + saveFilePath[ i ], + OS_MOUNT_PATH_LEN ); + }else { + pMountTgt->drive[ 0 ] = 0; + } + pMountTgt++; + } +} diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index fd32e70f..a413b411 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -16,7 +16,6 @@ *---------------------------------------------------------------------------*/ #include -#include #include #include #include "sysmenu_define.h" @@ -32,6 +31,8 @@ typedef struct BannerCheckParam { }BannerCheckParam; // extern data----------------------------------------------------------------- +extern void SYSM_SetMountInfo( NAMTitleId titleID ); // マウント情報のセット +extern void SYSM_SetBootSRLPath( NAMTitleId titleID ); // SRL起動パスのセット // function's prototype------------------------------------------------------- static BOOL SYSMi_IsDebuggerBannerViewMode( void ); @@ -43,6 +44,8 @@ static BOOL SYSMi_CheckEntryAddress( void ); static void SYSMi_CheckCardCloneBoot( void ); static void SYSMi_CheckRTC( void ); +static s32 ReadFile(FSFile* pf, void* buffer, s32 size); + // global variable------------------------------------------------------------- void *(*SYSM_Alloc)( u32 size ); void (*SYSM_Free )( void *ptr ); @@ -67,7 +70,6 @@ static BannerCheckParam s_bannerCheckList[ NTR_BNR_VER_MAX ] = { }; - // ============================================================================ // // 初期化 @@ -474,6 +476,10 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len); return AUTH_RESULT_ENTRY_ADDRESS_ERROR; } #endif + + // マウント情報の登録 + SYSM_SetMountInfo ( pBootTitle->titleID ); + SYSM_SetBootSRLPath( pBootTitle->titleID ); // 起動。 BOOT_Ready(); // never return; @@ -599,7 +605,7 @@ static void SYSMi_ReadCardBannerFile( void ) BOOL SYSM_IsTWLCard( void ); BOOL SYSM_IsTWLCard( void ) { - return ( SYSM_IsExistCard() && ( SYSM_GetCardRomHeader()->platform_code & PLATFORM_ID_FLAG_TWL ) ); + return ( SYSM_IsExistCard() && ( SYSM_GetCardRomHeader()->platform_code & PLATFORM_CODE_FLAG_TWL ) ); } diff --git a/build/systemMenu_RED/DS_DownloadPlay/ARM9/src/DS_DownloadPlay.c b/build/systemMenu_RED/DS_DownloadPlay/ARM9/src/DS_DownloadPlay.c index d7eb4ed0..ab0ccd02 100644 --- a/build/systemMenu_RED/DS_DownloadPlay/ARM9/src/DS_DownloadPlay.c +++ b/build/systemMenu_RED/DS_DownloadPlay/ARM9/src/DS_DownloadPlay.c @@ -314,7 +314,7 @@ int DS_DownloadPlayMain(void) } if (PAD_DetectFold() == TRUE) { // スリープモードへの遷移 - SYSM_GoSleepMode(); +// SYSM_GoSleepMode(); } OS_PrintServer(); // ARM7からのプリントデバッグを処理する diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index fbe8439a..c0771ebf 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -244,7 +244,7 @@ static BOOL CheckBootStatus(void) #ifndef __SYSM_DEBUG // if( TSD_IsAutoBoot() ) { if( 0 ) { - if ( SYSM_IsNITROCard() ) { // NITROカードのみの時はNITRO起動 + if ( SYSM_IsExistCard() ) { // NITROカードのみの時はNITRO起動 SYSM_SetBootFlag( BFLG_BOOT_NITRO ); return TRUE; // 「ブート内容決定」でリターン } diff --git a/doc/SystemMenu_RED繝ェ繝ェ繝シ繧ケ.txt b/doc/SystemMenu_RED繝ェ繝ェ繝シ繧ケ.txt index 9a2c6124..bb3b084d 100644 --- a/doc/SystemMenu_RED繝ェ繝ェ繝シ繧ケ.txt +++ b/doc/SystemMenu_RED繝ェ繝ェ繝シ繧ケ.txt @@ -3,7 +3,7 @@ SystemMenu_RED 11/16(金) 1st.リリース予定 -・ランチャー △ +・ランチャー ・カードアプリ取得 × ・TWLカード起動 × ・カード活線挿抜処理 × @@ -13,15 +13,17 @@ SystemMenu_RED ・ISデバッガ対応 × ・ファームウェアとして正規動作 × ・アプリ起動時のWRAM-MAP設定 ○ + ・アプリ起動時のSCFGレジスタロック  × +  ・アプリ起動時のSDカードアクセス可否 △ (とりあえず解放にしておき、セキュリティ面での検討を行う。) ・署名・暗号処理 × ・鍵管理 × ・メモリマップFIX ○ ・NTRコンポーネントパッチ × -・本体設定 △ +・本体設定 ・言語選択 ○ ・TP補正 ○ ・日付・時刻設定 ○ - ・ユーザー情報 × + ・ユーザー情報 △ (欧州文字、絵文字など一部文字は入力できない) ・その他設定 × ・NANDへの保存 ○ ・NTR側(NVRAM)への保存 ○ @@ -38,10 +40,10 @@ SystemMenu_RED ・アドレスFIX × ・ランチャー⇔NANDアプリ間パラメータ引渡し × ・本体設定データなどの情報 × - ・NAND,SDマウント情報(アクセス制限) × + ・NAND,SDマウント情報(アクセス制限) ○ ・アプリからのHWリセット時パラメータ × ・DSダウンロードプレイの情報 × -・NAND内オーバーレイ&FS △ +・NAND内オーバーレイ&FS △ (nand_app_hack.hのFS_IdentifyTitle()を起動時に呼ぶ) ・共有リソースアクセス × ・タイトル外部リソースアクセス × ・NANDアプリデバッグ対応 × (現状カードアプリとしてデバッグ) diff --git a/doc/TWL_SystemMenu繝。繝「繝ェ繝槭ャ繝.vsd b/doc/TWL_SystemMenu繝。繝「繝ェ繝槭ャ繝.vsd index 3384e12c..4524af92 100644 Binary files a/doc/TWL_SystemMenu繝。繝「繝ェ繝槭ャ繝.vsd and b/doc/TWL_SystemMenu繝。繝「繝ェ繝槭ャ繝.vsd differ diff --git a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h index a82d26ce..e579703d 100644 --- a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h +++ b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -50,8 +51,8 @@ typedef struct TitleFlags { // タイトル情報 typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。 - u64 titleID; // タイトルID(TitleID_Hiで起動メディアは判定できる?) - void *pBanner; // バナーへのポインタ(固定長フォーマットなら偽造されても大丈夫だろう。) + NAMTitleId titleID; // タイトルID(TitleID_Hiで起動メディアは判定できる?) + void *pBanner; // バナーへのポインタ(固定長フォーマットなら偽造されても大丈夫だろう。) TitleFlags flags; u8 rsv[ 2 ]; }TitleProperty; @@ -59,7 +60,7 @@ typedef struct TitleProperty { // // リセットパラメータ typedef struct ResetParam { - u64 bootTitleID; // 起動するタイトルがあるか?あるならそのタイトルID + NAMTitleId bootTitleID; // 起動するタイトルがあるか?あるならそのタイトルID u32 rsv_A; TitleFlags flags; u8 rsv_B[ 2 ]; @@ -123,12 +124,6 @@ extern u32 SYSM_GetDayNum( u32 year, u32 month ); // extern BOOL SYSM_IsLeapYear100( u32 year ); // 指定された年がうるう年か調べる -void SYSM_GoSleepMode( void ); -inline BOOL SYSM_IsNITROCard( void ) -{ - return TRUE; -} - #ifdef __cplusplus } #endif