diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 191160ad..14e1e0d0 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -92,6 +92,7 @@ NitroConfigData *ncdp; // // static variable------------------------------------------------------------- static BOOL s_isBanner = FALSE; static BannerFile s_bannerBuf; +static NAMTitleId old_titleIdArray[TITLE_ID_BUF_SIZE]; // const data------------------------------------------------------------------ @@ -120,12 +121,12 @@ static inline void DBG_SetRed(u32 y_pos) static void * AllocForNAM(unsigned long size) { - return OS_AllocFromHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, size ); + return OS_AllocFromHeap( OS_ARENA_WRAM_MAIN, OS_CURRENT_HEAP_HANDLE, size ); } static void FreeForNAM(void *p) { - OS_FreeToHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, p); + OS_FreeToHeap( OS_ARENA_WRAM_MAIN, OS_CURRENT_HEAP_HANDLE, p); } // SystemMenuの初期化 @@ -150,7 +151,9 @@ void SYSM_Init( void ) SYSMi_WaitInitARM7(); //NAMの初期化 - NAM_Init(AllocForNAM,FreeForNAM); + //NAM_Init(AllocForNAM,FreeForNAM); + + MI_CpuClearFast(old_titleIdArray, sizeof(old_titleIdArray) ); } @@ -198,18 +201,153 @@ int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ) return 0; } +static s32 ReadFile(FSFile* pf, void* buffer, s32 size) +{ + u8* p = (u8*)buffer; + s32 remain = size; + + while( remain > 0 ) + { + const s32 len = MATH_IMin(1024, remain); + const s32 readLen = FS_ReadFile(pf, p, len); + + if( readLen < 0 ) + { + return readLen; + } + if( readLen != len ) + { + return size - remain + readLen; + } + + remain -= readLen; + p += readLen; + } + + return size; +} + +#include +ESTitleMeta dst[1]; int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size) { // filter_flag : ALL, ALL_APP, SYS_APP, USER_APP, Data only, 等の条件を指定してタイトルリストを取得する。 + // とりあえずALL int l; int gotten; NAMTitleId titleIdArray[TITLE_ID_BUF_SIZE]; + static BannerFile bannerBuf[TITLE_ID_BUF_SIZE]; gotten = NAM_GetTitleList(titleIdArray, TITLE_ID_BUF_SIZE); + + /* + { + static const char ppp[] = "nand:/title_e/00010001/50434854/content/title.tmd"; + + + FSFile f[1]; + int len = sizeof(ESTitleMeta); + + FS_InitFile(f); + + if (!FS_OpenFileEx(f, ppp, FS_PERMIT_R)) + { // ファイルが存在すれば上書きします + OS_TWarning("\"%s\" does not exist.\n", ppp); + } + + OS_TPrintf("filelength = %d\n",FS_GetFileLength(f)); + + OS_TPrintf("sizeof(ESTitleMeta) = %d\n",len); + + DC_InvalidateRange(dst, (u32)len); + size = FS_ReadFile(f, dst, len); + if (size < 0) + { + OS_TWarning("FS_ReadFile() failed.\n"); + }else + { + OS_TWarning("OK.\n"); + } + } + */ + + // バナーの読み込み……別の関数に移すべきかも。 + // 毎フレーム変化を見る必要がある。 + // 前のフレームのNAMTitleIdの配列を残しておき、比較。 + // IDが変化していたら問答無用でバナーを読み込む。 + for(l=0;l