NAMを使ってTitleIDをNandから取得するように変更(バナーは未読なのでNoBanner表示)

バナーファイルをいくつか変更
選択中バナーへのエフェクト実験中(現在はパラメタの指定がうまくいかず不自然な表示)

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@100 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2007-11-05 06:50:21 +00:00
parent 3bb618c945
commit 7b9a34d1a6
11 changed files with 78 additions and 34 deletions

View File

@ -31,7 +31,6 @@ SRCS = sysmenu_lib.c sysmenu_card.c sysmenu_util.c gameBoot.c ninLogoFunc.c cm
TARGET_LIB = libsysmenu$(TWL_LIBSUFFIX).a
include $(TWLIPL_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)

View File

@ -16,6 +16,7 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <twl/nam.h>
#include <sysmenu.h>
#include "sysmenu_define.h"
#include "sysmenu_card.h"
@ -27,6 +28,8 @@
#define SCREEN_RED 0
#define SCREEN_YELLOW 1
#define TITLE_ID_BUF_SIZE 40
typedef struct BannerCheckParam {
u8 *srcp;
u32 size;
@ -115,6 +118,16 @@ static inline void DBG_SetRed(u32 y_pos)
// function's description
// ============================================================================
static void * AllocForNAM(unsigned long size)
{
return OS_AllocFromHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, size );
}
static void FreeForNAM(void *p)
{
OS_FreeToHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, p);
}
// SystemMenuの初期化
void SYSM_Init( void )
{
@ -135,6 +148,9 @@ void SYSM_Init( void )
// ※ISデバッガかどうかの判定。 BootROMからのパラメータ引渡し
SYSMi_WaitInitARM7();
//NAMÌ<E2809A>‰Šú‰»
NAM_Init(AllocForNAM,FreeForNAM);
}
@ -183,12 +199,27 @@ int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
}
int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand )
int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size)
{
#pragma unused( pTitleList_Nand )
// filter_flag : ALL, ALL_APP, SYS_APP, USER_APP, Data only, 等の条件を指定してタイトルリストを取得する。
// return : *TitleProperty Array
return 0;
int l;
int gotten;
NAMTitleId titleIdArray[TITLE_ID_BUF_SIZE];
gotten = NAM_GetTitleList(titleIdArray, TITLE_ID_BUF_SIZE);
for(l=0;l<size;l++)
{
pTitleList_Nand[l].titleID = 0;
pTitleList_Nand[l].pBanner = NULL;
}
size = (gotten<size) ? gotten : size;
for(l=0;l<size;l++)
{
pTitleList_Nand[l].titleID = titleIdArray[l];
}
// return : *TitleProperty Array
return size;
}

View File

@ -40,6 +40,9 @@ LINCLUDES = $(SRCDIR)/$(LOGO_DIR)
#LLIBRARIES =
#LDEPENDS_NEF =
LLIBRARIES += libnam$(TWL_LIBSUFFIX).a\
libese$(TWL_LIBSUFFIX).a
include $(TWLIPL_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------

View File

@ -143,5 +143,5 @@ RomSpec
Segment ALL
HostRoot ../../data
Root /data
File NTR_IPL_font_m.NFTR CardBanner.bnr DownloadBanner.bnr EmptyBanner.bnr PictoChatBanner.bnr SettingBanner.bnr
File NTR_IPL_font_m.NFTR CardBanner.bnr DownloadBanner.bnr EmptyBanner.bnr NoBanner.bnr
}

View File

@ -110,13 +110,10 @@ static const u16 *const str_backlight[] = {
#define DBGBNR
#ifdef DBGBNR
static const u8 TITLE_PROPERTY_NUM = 40;
static BannerFile *empty_banner;
static BannerFile *nobanner_banner;
static BannerFile *card_banner;
static BannerFile *pictochat_banner;
static BannerFile *download_banner;
static BannerFile *setting_banner;
static TitleProperty tp[TITLE_PROPERTY_NUM];
static u8 image_index_list[TITLE_PROPERTY_NUM];
static const int MAX_SHOW_BANNER = 6;
static GXOamAttr banner_oam_attr[MAX_SHOW_BANNER];
@ -129,14 +126,12 @@ static void LoadBannerFiles()
// 最後に解放しないと駄目。だが、どこで解放すればいいのやら……
u32 size = CMN_LoadFile( (void **)&empty_banner, "data/EmptyBanner.bnr", &g_allocator);
NNS_G2D_ASSERT( size > 0 );
size = CMN_LoadFile( (void **)&nobanner_banner, "data/NoBanner.bnr", &g_allocator);
NNS_G2D_ASSERT( size > 0 );
size = CMN_LoadFile( (void **)&card_banner, "data/CardBanner.bnr", &g_allocator);
NNS_G2D_ASSERT( size > 0 );
size = CMN_LoadFile( (void **)&pictochat_banner, "data/PictochatBanner.bnr", &g_allocator);
NNS_G2D_ASSERT( size > 0 );
size = CMN_LoadFile( (void **)&download_banner, "data/DownloadBanner.bnr", &g_allocator);
NNS_G2D_ASSERT( size > 0 );
size = CMN_LoadFile( (void **)&setting_banner, "data/SettingBanner.bnr", &g_allocator);
NNS_G2D_ASSERT( size > 0 );
}
// パレットの読み込みやOBJ関係の初期化
@ -167,8 +162,9 @@ static void BannerInit()
0, // charactor
0, // palette
0); // affine
DC_FlushRange(&banner_oam_attr[l], sizeof(banner_oam_attr[l]));
}
G2_SetOBJEffect(&banner_oam_attr[2], GX_OAM_EFFECT_AFFINE_DOUBLE, 0);
DC_FlushRange(&banner_oam_attr, sizeof(banner_oam_attr));
}
// 活線挿抜対応のため、毎回VRAMへのイメージデータロード判定をしている
@ -177,18 +173,18 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop)
static int count = 0;
int l;
// TitleProperty……本来は外部から取得
// TitleProperty˜Mè
for(l=0;l<TITLE_PROPERTY_NUM;l++)
{
tp[l].titleID = 0;
tp[l].pBanner = empty_banner;
if(titleprop[l].titleID == 0)
{
titleprop[l].pBanner = empty_banner;
}
else if(titleprop[l].pBanner == NULL)
{
titleprop[l].pBanner = nobanner_banner;
}
}
tp[0].pBanner = card_banner;
tp[1].pBanner = pictochat_banner;
tp[2].pBanner = download_banner;
tp[3].pBanner = setting_banner;
titleprop=tp;
// TitlePropertyを見てVRAMにキャラクタデータをロード
for(l=0;l<TITLE_PROPERTY_NUM;l++)
@ -216,16 +212,32 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop)
{
int num = cursor/12 - 2 + l;
if(-1 < num && num < TITLE_PROPERTY_NUM){
banner_oam_attr[l].x = 128-16-64-32+l*48-(cursor%12)*4;
banner_oam_attr[l].charNo = image_index_list[num]*4;
G2_SetOBJEffect(&banner_oam_attr[l],GX_OAM_EFFECT_NONE,0);
if(l == 2)
{
GXOamAffine *test = (GXOamAffine *)&banner_oam_attr[2];
MtxFx22 mtx;
mtx._00 = FX32_ONE;
mtx._01 = 0;
mtx._10 = 0;
mtx._11 = FX32_ONE;
G2_SetOBJPosition(&banner_oam_attr[l], 128-32-(cursor%12)*4, 96-16);
G2_SetOBJAffine((GXOamAffine *)&banner_oam_attr[l], &mtx);
test=test+1;
test=test-1;
}else
{
banner_oam_attr[l].x = 128-16-64-32+l*48-(cursor%12)*4;
G2_SetOBJEffect(&banner_oam_attr[l],GX_OAM_EFFECT_NONE,0);
}
}else
{
G2_SetOBJEffect(&banner_oam_attr[l],GX_OAM_EFFECT_NODISPLAY,0);
}
DC_FlushRange(&banner_oam_attr[l], sizeof(banner_oam_attr[l]));
GX_LoadOAM(&banner_oam_attr[l], l * sizeof(banner_oam_attr[l]), sizeof(banner_oam_attr[l]));
}
DC_FlushRange(&banner_oam_attr, sizeof(banner_oam_attr));
GX_LoadOAM(&banner_oam_attr, 0, sizeof(banner_oam_attr));
// ゲーム名表示
{
NNSG2dChar *str = ((BannerFile *)titleprop[selected].pBanner)->v1.gameName[GetNCDWork()->option.language];
@ -279,8 +291,6 @@ void LauncherInit( TitleProperty *pTitleList )
// ランチャーメイン
TitleProperty *LauncherMain( TitleProperty *pTitleList )
{
#pragma unused( pTitleList )
static BOOL touch_bl = FALSE;
BOOL tp_bl_on_off = FALSE;
BOOL tp_select = FALSE;
@ -336,7 +346,7 @@ TitleProperty *LauncherMain( TitleProperty *pTitleList )
// DrawMenu( s_csr, &s_launcherParam );
#ifdef DBGBNR
BannerDraw( s_csr, selected, NULL );
BannerDraw( s_csr, selected, pTitleList );
#endif
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐

View File

@ -26,6 +26,7 @@ extern "C" {
#endif
// define data----------------------------------------------------------
#define TITLE_PROPERTY_NUM 40
// global variables--------------------------------------------------

View File

@ -59,7 +59,7 @@ void TwlMain( void )
};
u32 state = START;
TitleProperty *pBootTitle = NULL;
TitleProperty *pTitleList = NULL;
TitleProperty pTitleList[TITLE_PROPERTY_NUM];
OS_Init();
@ -98,7 +98,7 @@ void TwlMain( void )
// FS_ReadSharedContentFile( ContentID );
// NANDアプリリストの取得----------
(void)SYSM_GetNandTitleList( pTitleList );
(void)SYSM_GetNandTitleList( pTitleList, TITLE_PROPERTY_NUM );
while( 1 ) {
OS_WaitIrq(1, OS_IE_V_BLANK); // Vブランク割り込み待ち

View File

@ -62,7 +62,7 @@ extern void SYSM_Init( void );
extern BOOL SYSM_IsLogoDemoSkip( void );
extern void SYSM_CaribrateTP( void );
extern int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card );
extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand );
extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size );
extern AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle );
extern void SYSM_Finalize( void );