・アプリに引き渡すNANDアプリタイトルIDリストの作成ルールを、最新のdocに合わせた仕様に変更

・DataOnlyなNANDアプリもリストに入れるよう変更
・タイトルが3行になるアプリの表示がおかしい件の修正およびレイアウト変更

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1623 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2008-06-13 01:29:08 +00:00
parent 56f20ac193
commit b678f49c03
3 changed files with 120 additions and 60 deletions

View File

@ -409,13 +409,32 @@ static BOOL MakeTitleListMakerInfoFromTitleID( TitleListMakerInfo *info, OSTitle
OSTick prev;
#endif
// 無効なTitleID または、DataOnlyアプリはスキップ
if( (titleID == NULL) || ( titleID & TITLE_ID_DATA_ONLY_FLAG_MASK ) )
// 無効なTitleIDはスキップ
if( titleID == NULL)
{
return FALSE;
}
// romヘッダ読み込み
// DataOnlyはTADからメーカーコードを読み出し、他の情報はOFFでリスト登録
if( titleID & TITLE_ID_DATA_ONLY_FLAG_MASK )
{
int l;
NAMTitleInfo naminfo;
// [TODO:]この関数で得られる情報は無検証なので改ざんの可能性があるが、これで良いか
// でもFastつけないと一回300msぐらいかかる
NAM_ReadTitleInfoFast( &naminfo, titleID );
for(l=0;l<MAKER_CODE_MAX;l++)
{
info->makerCode[l] = ((char *)&naminfo.companyCode)[l];
//OS_TPrintf("companyCode[%d]::::%c\n",l,((char *)&naminfo.companyCode)[l]);
}
info->public_save_data_size = 0;
info->private_save_data_size = 0;
info->permit_landing_normal_jump = FALSE;
return TRUE;
}
// romヘッダ読み込み
#if (MEASURE_MAKELIST_TIME == 1)
// 時間計測1
prev = OS_GetTick();
@ -1703,8 +1722,6 @@ AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle )
// タイトルIDリストの作成
static void SYSMi_makeTitleIdList( void )
{
// [TODO:]現在ブート不可タイトルについても入れるようにしているが
// これで良いのか?
OSTitleIDList *list = ( OSTitleIDList * )HW_OS_TITLE_ID_LIST;
ROM_Header_Short *hs = ( ROM_Header_Short *)SYSM_APP_ROM_HEADER_BUF;
int l;
@ -1766,8 +1783,8 @@ static void SYSMi_makeTitleIdList( void )
}
}
// 無効なTitleID または、DataOnlyアプリはスキップ
if( (id == NULL) || ( id & TITLE_ID_DATA_ONLY_FLAG_MASK ) )
// 無効なTitleIDはスキップ
if( id == NULL )
{
continue;
}
@ -1783,27 +1800,12 @@ static void SYSMi_makeTitleIdList( void )
continue;
}
// セキュアアプリの場合か、メーカーコードが同じ場合は
if( (hs->titleID & TITLE_ID_SECURE_FLAG_MASK) ||
( same_maker_code ) )
if( same_maker_code )
{
// セキュアアプリのデータはマウントさせない
if( !(id & TITLE_ID_SECURE_FLAG_MASK) )
{
// リストに追加
list->TitleID[count] = id;
// sameMakerFlagをON
list->sameMakerFlag[count/8] |= (u8)(0x1 << (count%8));
// Prv,Pubそれぞれセーブデータがあるか見て、存在すればフラグON
if(p_info->public_save_data_size != 0)
{
list->publicFlag[count/8] |= (u8)(0x1 << (count%8));
}
if(p_info->private_save_data_size != 0)
{
list->privateFlag[count/8] |= (u8)(0x1 << (count%8));
}
}
// リストに追加
list->TitleID[count] = id;
// sameMakerFlagをON
list->sameMakerFlag[count/8] |= (u8)(0x1 << (count%8));
}
// ジャンプ可能ならば
@ -1814,6 +1816,41 @@ static void SYSMi_makeTitleIdList( void )
list->appJumpFlag[count/8] |= (u8)(0x1 << (count%8));
}
// ブートアプリがセキュアアプリの場合
if( hs->titleID & TITLE_ID_SECURE_FLAG_MASK )
{
// Prv,Pubそれぞれセーブデータがあるか見て、存在すればフラグON
if(p_info->public_save_data_size != 0)
{
list->publicFlag[count/8] |= (u8)(0x1 << (count%8));
}
if(p_info->private_save_data_size != 0)
{
list->privateFlag[count/8] |= (u8)(0x1 << (count%8));
}
// リストに強制追加
list->TitleID[count] = id;
}else
{
// セキュアアプリでない && メーカーコードが同じ
if( !(id & TITLE_ID_SECURE_FLAG_MASK) && same_maker_code )
{
// Prv,Pubそれぞれセーブデータがあるか見て、存在すればフラグON
if(p_info->public_save_data_size != 0)
{
list->publicFlag[count/8] |= (u8)(0x1 << (count%8));
// リストに追加
list->TitleID[count] = id;
}
if(p_info->private_save_data_size != 0)
{
list->privateFlag[count/8] |= (u8)(0x1 << (count%8));
// リストに追加
list->TitleID[count] = id;
}
}
}
// ここまでのうちに、list->TitleID[count]が編集されていたらcountインクリメント
if( list->TitleID[count] != NULL )
{
@ -1876,4 +1913,4 @@ void CheckDigest( void )
}
}
}
#endif
#endif

View File

@ -37,10 +37,10 @@
#define B_LIGHT_UP_BUTTON_BOTTOM_Y ( B_LIGHT_UP_BUTTON_TOP_Y + 13 )
// スクロールバー関係
#define BAR_ZERO_X ( (WINDOW_WIDTH - ((ITEM_SIZE + ITEM_INTERVAL) * (LAUNCHER_TITLE_LIST_NUM - 1) + ITEM_SIZE)) / 2)
#define BAR_ZERO_Y WINDOW_HEIGHT - 32
#define BAR_ZERO_X ( (WINDOW_WIDTH - ((ITEM_SIZE + ITEM_INTERVAL) * (LAUNCHER_TITLE_LIST_NUM - 1) + ITEM_SIZE)) / 2 - 3)
#define BAR_ZERO_Y (WINDOW_HEIGHT - 32 + 1)
#define BAR_HEIGHT 14
#define BAR_WIDTH 32 //((ITEM_SIZE + ITEM_INTERVAL) * 4 + ITEM_SIZE + 2)
#define BAR_WIDTH 14 //((ITEM_SIZE + ITEM_INTERVAL) * 4 + ITEM_SIZE + 2)
#define BAR_LOOSENESS 2
#define ITEMDOT_PER_FRAME ((double)(ITEM_SIZE + ITEM_INTERVAL) / (double)FRAME_PER_SELECT)
#define FRAME_PER_ITEMDOT ((double)FRAME_PER_SELECT / (double)(ITEM_SIZE + ITEM_INTERVAL))
@ -52,13 +52,13 @@
#define DOT_PER_FRAME ((BANNER_WIDTH + BANNER_INTERVAL) / FRAME_PER_SELECT) // 割り切れないと動きがカクカクするはず
#define FRAME_PER_SELECT 14 // バナーからバナーへの移動にかかるフレーム数
#define BANNER_FAR_LEFT_POS (WINDOW_WIDTH/2 - BANNER_WIDTH*5/2 - BANNER_INTERVAL * 2)
#define BANNER_TOP (WINDOW_HEIGHT/2 - 16)
#define BANNER_TOP (WINDOW_HEIGHT/2 + 4)
#define WINDOW_WIDTH 256
#define WINDOW_HEIGHT 192
#define BANNER_WIDTH 32
#define BANNER_HEIGHT 32
#define BANNER_INTERVAL 24
#define TITLE_V_CENTER 39
#define TITLE_V_CENTER 47
#define MAX_SHOW_BANNER 6
@ -372,7 +372,7 @@ static void BannerDraw(int selected, TitleProperty *titleprop)
{
NNSG2dChar *str = ((TWLBannerFile *)titleprop[selected].pBanner)->v1.gameName[ LCFG_TSD_GetLanguage() ];
NNSG2dTextRect rect = NNS_G2dTextCanvasGetTextRect( &gTextCanvas, str );
NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_NULL, 0, 24, WINDOW_WIDTH, 32 );
NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_NULL, 0, 24, WINDOW_WIDTH, 48 );
PutStringUTF16( (WINDOW_WIDTH-rect.width)>>1, TITLE_V_CENTER - (rect.height>>1), TXT_COLOR_BLACK, str );
MI_CpuCopy8( str, old_gameName, BANNER_LANG_LENGTH * 2 );
}
@ -506,9 +506,9 @@ static BOOL SelectFunc( u16 *csr, TPData *tgt )
for(l=0; l<2; l++)
{
int x = 11*8 + l*6*8;
int y = 17*8;
if(WithinRangeTP( x, y, x+32, y+16, tgt ))
int x = 1*8 + l*28*8;
int y = 20*8;
if(WithinRangeTP( x, y, x+16, y+16, tgt ))
{
*csr = (u16)l;
return TRUE;
@ -647,16 +647,19 @@ static TitleProperty *ProcessPads( TitleProperty *pTitleList )
static void MoveByScrollBar( void )
{
static double vx = 0;
static int last_move_dir = 0;
static int last_bar_left;
// スクロールバーによるスクロール
{
static BOOL holding = FALSE;
static BOOL ground_holding = FALSE;
static int dx;
static const int list_len = 4;
static int list_x[list_len];
int l;
if(!holding && vx == 0)
if( !ground_holding && !holding && vx == 0)
{
bar_left = (int)(BAR_ZERO_X + (ITEMDOT_PER_FRAME * s_csr));
}
@ -669,8 +672,6 @@ static void MoveByScrollBar( void )
vx = vx * 0.9;
if(vx*vx < 1)
{
int det = s_csr % FRAME_PER_SELECT;
csr_v = (det == 0 ? 0 : (vx>0 ? 1 : -1) );
vx = 0;
}
}
@ -696,7 +697,9 @@ static void MoveByScrollBar( void )
}
list_x[list_len-1] = tpd.disp.x;
}
else if(WithinRangeTP(bar_left+5-BAR_WIDTH/2, BAR_ZERO_Y+BAR_OFFSET,bar_left+5+BAR_WIDTH/2,BAR_ZERO_Y+BAR_OFFSET+BAR_HEIGHT,&tpd.disp))
else if(WithinRangeTP(bar_left+5-BAR_WIDTH/2, BAR_ZERO_Y+BAR_OFFSET,bar_left+5+BAR_WIDTH/2,BAR_ZERO_Y+BAR_OFFSET+BAR_HEIGHT,&tpd.disp) ||
( ground_holding && WithinRangeTP(bar_left+5-BAR_WIDTH/2, 0,bar_left+5+BAR_WIDTH/2,WINDOW_HEIGHT,&tpd.disp) )
)
{
holding = TRUE;
dx = tpd.disp.x - bar_left;
@ -706,12 +709,21 @@ static void MoveByScrollBar( void )
list_x[l] = tpd.disp.x;
}
}
else if(ground_holding)
{
bar_left += ( tpd.disp.x > bar_left ? 1 : -1 );
s_csr = (u16)((bar_left - BAR_ZERO_X) * FRAME_PER_ITEMDOT);
}
else if( WithinRangeTP(BAR_ZERO_X+BAR_OFFSET, BAR_ZERO_Y+BAR_OFFSET,BAR_ZERO_X + (ITEM_SIZE + ITEM_INTERVAL) * (LAUNCHER_TITLE_LIST_NUM),BAR_ZERO_Y+BAR_OFFSET+BAR_HEIGHT,&tpd.disp) )
{
ground_holding = TRUE;
}
}
else
{
int det = s_csr % FRAME_PER_SELECT;
if(holding)
{
int det = s_csr % FRAME_PER_SELECT;
holding = FALSE;
// 移動履歴から速度算出
@ -725,10 +737,16 @@ static void MoveByScrollBar( void )
}
}
vx /= (list_len-1);
if(vx == 0)
{
csr_v = (det < FRAME_PER_SELECT/2) ? (det == 0 ? 0 : -1) : 1;
}
}
if(ground_holding)
{
ground_holding = FALSE;
}
// タッチパネル放置状態でカーソルがアイコンの中間にある場合は最後に動いてた方に移動
if(vx == 0 && det != 0 && csr_v == 0)
{
csr_v = last_move_dir;
}
}
}
@ -746,6 +764,11 @@ static void MoveByScrollBar( void )
}
if((LAUNCHER_TITLE_LIST_NUM-1)*FRAME_PER_SELECT < s_csr) s_csr = (LAUNCHER_TITLE_LIST_NUM-1)*FRAME_PER_SELECT;
if( s_csr < 0 ) s_csr = 0;
// 最後に動いた方向の記録
if(bar_left != last_bar_left)
last_move_dir = ( bar_left > last_bar_left ? 1 : -1);
last_bar_left = bar_left;
}
static void DrawScrollBar( TitleProperty *pTitleList )

View File

@ -28,14 +28,14 @@ u16 bg_scr_data[32 * 32]=
0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,0x1001,
0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,//4
0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,
0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,//5
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//5
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//6
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,//7
0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,
0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,//6
0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,//8
0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//7
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//8
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//9
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//10
@ -52,16 +52,16 @@ u16 bg_scr_data[32 * 32]=
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//16
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1405,0x1405,0x1405,0x1405,0x1003,//17
0x1003,0x1005,0x1005,0x1005,0x1005,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1c05,0x1c05,0x1c05,0x1c05,0x1003,//18
0x1003,0x1805,0x1805,0x1805,0x1805,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//17
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//18
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//19
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//20
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//21
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,
0x1003,0x1405,0x1405,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//20
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1005,0x1005,0x1003,
0x1003,0x1c05,0x1c05,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,//21
0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1003,0x1805,0x1805,0x1003,
0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,//22
0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,
0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,//23