From bb025b03dd695a0fd4a7a576910c4c8349b9ef5d Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Wed, 18 Jun 2008 07:14:28 +0000 Subject: [PATCH] =?UTF-8?q?=E7=B6=9A=E3=83=BB=E3=83=A1=E3=83=8B=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E3=82=A2=E3=83=97=E3=83=AA=E3=83=9E=E3=83=8D=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=83=A3=E3=82=B3=E3=83=B3=E3=83=90=E3=83=BC=E3=83=88?= =?UTF-8?q?=E4=BD=9C=E6=A5=AD=EF=BC=9A=E5=88=9D=E6=9C=9F=E5=8C=96=E3=81=A7?= =?UTF-8?q?=E5=BC=95=E6=95=B0=E3=81=AB=E3=82=A2=E3=83=AD=E3=82=B1=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E9=96=A2=E6=95=B0=E5=8F=8A=E3=81=B3free=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=81=AE=E3=83=9D=E3=82=A4=E3=83=B3=E3=82=BF=E3=82=92?= =?UTF-8?q?=E4=B8=8E=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1647 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../util/ARM9/src/util_menuAppManager.c | 62 +++++++++++-------- include/sysmenu/util_menuAppManager.h | 2 +- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/build/libraries_sysmenu/util/ARM9/src/util_menuAppManager.c b/build/libraries_sysmenu/util/ARM9/src/util_menuAppManager.c index 91f8a02b..c9d83211 100644 --- a/build/libraries_sysmenu/util/ARM9/src/util_menuAppManager.c +++ b/build/libraries_sysmenu/util/ARM9/src/util_menuAppManager.c @@ -8,8 +8,8 @@ #include -static OSArenaId s_id_arena = OS_ARENA_MAIN; -static OSHeapHandle s_hHeap = -1; +void *(*AMNi_Alloc)( u32 size ) = NULL; +void (*AMNi_Free )( void *ptr ) = NULL; ///////////////////////////////////////////////////////////////////////////////// // private: @@ -110,7 +110,8 @@ s32 AMN_getCardTitleListLength() { return mCardTitleListLength; } //////////////////////////////////////////////////////////////////////////////////////////////////// /*! - コンストラクタ + コンストラクタ(C++時代の遺物) + もうAMN_Init()とまとめて良いかも…… */ void AMN_Manager( ) { @@ -176,20 +177,21 @@ void AMN_Manager( ) /*! 起動。 */ -void AMN_init( OSArenaId id, OSHeapHandle heap ) +void AMN_init( void *(*pAlloc)(u32), void (*pFree)(void*) ) { - // この時点でs_hHeapが-1であるべし - SDK_ASSERT( s_hHeap == -1 ); - s_id_arena = id; - s_hHeap = heap; + // この時点でAMNi_AllocとAMNi_FreeがNULLであるべし + SDK_ASSERT( AMNi_Alloc == NULL && AMNi_Free == NULL ); - mpNandBannerFileArray = (TWLBannerFile*)OS_AllocFromHeap( s_id_arena, s_hHeap, sizeof(TWLBannerFile) * cNandTitleArrayMax ); + AMNi_Alloc = pAlloc; + AMNi_Free = pFree; + + mpNandBannerFileArray = (TWLBannerFile*)AMNi_Alloc( sizeof(TWLBannerFile) * cNandTitleArrayMax ); SDK_ASSERT( mpNandBannerFileArray ); - mpEmptyBannerFileBuffer = (TWLBannerFile*)OS_AllocFromHeap( s_id_arena, s_hHeap, sizeof(TWLBannerFile) ); + mpEmptyBannerFileBuffer = (TWLBannerFile*)AMNi_Alloc( sizeof(TWLBannerFile) ); SDK_ASSERT( mpEmptyBannerFileBuffer ); - mpSubBannerFileBuffer = (TWLSubBannerFile*)OS_AllocFromHeap( s_id_arena, s_hHeap, sizeof(TWLSubBannerFile) ); + mpSubBannerFileBuffer = (TWLSubBannerFile*)AMNi_Alloc( sizeof(TWLSubBannerFile) ); SDK_ASSERT( mpSubBannerFileBuffer ); MI_CpuClearFast(mpEmptyBannerFileBuffer, sizeof(TWLBannerFile)); @@ -273,8 +275,8 @@ void AMN_init( OSArenaId id, OSHeapHandle heap ) */ void AMN_restart() { - // s_hHeapはセットされているべし - SDK_ASSERT( s_hHeap != -1 ); + // AMNi_AllocおよびAMNi_Freeはセットされているべし + SDK_ASSERT( AMNi_Alloc != NULL && AMNi_Free != NULL ); AMN_initFlags_(); @@ -308,19 +310,18 @@ void AMN_destroy() OS_Sleep(1); } - if( s_hHeap != -1 && mpSubBannerFileBuffer) + if( AMNi_Free != NULL && mpSubBannerFileBuffer) { - OS_FreeToHeap( s_id_arena, s_hHeap, mpSubBannerFileBuffer ); + AMNi_Free( mpSubBannerFileBuffer ); } - if( s_hHeap != -1 && mpEmptyBannerFileBuffer) + if( AMNi_Free != NULL && mpEmptyBannerFileBuffer) { - OS_FreeToHeap( s_id_arena, s_hHeap, mpEmptyBannerFileBuffer ); + AMNi_Free( mpEmptyBannerFileBuffer ); } - if( s_hHeap != -1 && mpNandBannerFileArray) + if( AMNi_Free != NULL && mpNandBannerFileArray) { - OS_FreeToHeap( s_id_arena, s_hHeap, mpNandBannerFileArray ); + AMNi_Free( mpNandBannerFileArray ); } - s_hHeap = -1; } void AMN_initFlags_() @@ -355,7 +356,7 @@ void AMN_initNandTitleList_() SDK_ASSERT( mNandAllTitleListLength >= 0 ); if (mNandAllTitleListLength > 0) { - pNandAllTitleIDList = (NAMTitleId*)OS_AllocFromHeap( s_id_arena, s_hHeap, sizeof(NAMTitleId) * mNandAllTitleListLength ); + pNandAllTitleIDList = (NAMTitleId*)AMNi_Alloc( sizeof(NAMTitleId) * mNandAllTitleListLength ); SDK_ASSERT( pNandAllTitleIDList ); if (!pNandAllTitleIDList) { @@ -397,7 +398,7 @@ void AMN_initNandTitleList_() } if (pNandAllTitleIDList) { - OS_FreeToHeap( s_id_arena, s_hHeap, pNandAllTitleIDList); + AMNi_Free( pNandAllTitleIDList); } } @@ -1034,22 +1035,29 @@ BOOL AMN_isIndexValidForSetting(s32 index) // アプリケーションに埋め込むテストコードのサンプル // 実験用にヒープを拡張メインメモリから確保しているので注意 // 事前にOS_EnableMainExArena、OS_Init(OS_InitArena)、およびNAM_Initを呼んでおく必要あり -static void test() +static OSHeapHandle os_heap_handle; +static void *alloc_tmp(u32 size) +{ + return OS_AllocFromHeap( OS_ARENA_MAINEX, os_heap_handle, size); +} +static void free_tmp( void *ptr ) +{ + OS_FreeToHeap( OS_ARENA_MAINEX, os_heap_handle, ptr ); +} +static void test2() { s32 length; s32 idx; void *nstart; - OSHeapHandle handle; nstart = OS_InitAlloc( OS_ARENA_MAINEX, OS_GetMainExArenaLo(), OS_GetMainExArenaHi(), 1 ); OS_SetMainExArenaLo( nstart ); - handle = OS_CreateHeap( OS_ARENA_MAINEX, OS_GetMainExArenaLo(), OS_GetMainExArenaHi() ); + os_heap_handle = OS_CreateHeap( OS_ARENA_MAINEX, OS_GetMainExArenaLo(), OS_GetMainExArenaHi() ); AMN_Manager(); - - AMN_init( OS_ARENA_MAINEX, handle ); + AMN_init( alloc_tmp, free_tmp ); // 起動直後、自動的にバナーデータ読み込みを行います。 // メインスレッドでは、とりあえず完了まで待ちます。 diff --git a/include/sysmenu/util_menuAppManager.h b/include/sysmenu/util_menuAppManager.h index 4858a12c..0529f944 100644 --- a/include/sysmenu/util_menuAppManager.h +++ b/include/sysmenu/util_menuAppManager.h @@ -39,7 +39,7 @@ AMNFrameAnimeData; void AMN_Manager( ); -void AMN_init( OSArenaId id, OSHeapHandle heap ); +void AMN_init( void *(*pAlloc)(u32), void (*pFree)(void*) ); void AMN_restart(); void AMN_destroy();