From 14aa4dcb7f4c450214f600b36676fafbd1f2e6f1 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Fri, 29 Feb 2008 07:02:36 +0000 Subject: [PATCH] =?UTF-8?q?NAND=E3=82=A2=E3=83=97=E3=83=AA=E3=83=90?= =?UTF-8?q?=E3=83=8A=E3=83=BC=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E3=81=AE?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92banner.c=E3=81=AB=E7=A7=BB=E5=8B=95?= =?UTF-8?q?=20NAND=E3=82=A2=E3=83=97=E3=83=AA=E3=83=90=E3=83=8A=E3=83=BC?= =?UTF-8?q?=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E6=99=82=E3=81=AB=E3=83=90?= =?UTF-8?q?=E3=83=8A=E3=83=BC=E6=A4=9C=E8=A8=BC=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86=E8=BF=BD=E5=8A=A0?= 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@771 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/banner.c | 76 ++++++++++++++++++ .../sysmenu/ARM9/src/title.c | 73 +---------------- .../sysmenu/common/include/internal_api.h | 3 + docs/format_TWLBanner.xls | Bin 49664 -> 50176 bytes 4 files changed, 80 insertions(+), 72 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c b/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c index 165346d8..9160f0f9 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c @@ -76,6 +76,82 @@ BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner ) */ } +// NANDアプリバナーリード +BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst ) +{ +#define PATH_LENGTH 1024 + OSTick start; + FSFile file[1]; + BOOL bSuccess; + char path[PATH_LENGTH]; + s32 readLen; + s32 offset; + + //[TODO:]サブバナーが保存されている場合、そちらを使う + + start = OS_GetTick(); + readLen = NAM_GetTitleBootContentPathFast( path, titleID ); + OS_TPrintf( "NAM_GetTitleBootContentPath : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); + + // ファイルパスを取得 + if(readLen != NAM_OK){ + OS_TPrintf("NAM_GetTitleBootContentPath failed %lld,%d\n", titleID, readLen ); + return FALSE; + } + + // ファイルオープン + bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R); + if( ! bSuccess ) + { + OS_TPrintf("SYSM_GetNandTitleList failed: cant open file %s\n",path); + return FALSE; + } + + // ROMヘッダのバナーデータオフセットを読み込む + bSuccess = FS_SeekFile(file, 0x68, FS_SEEK_SET); + if( ! bSuccess ) + { + OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(0)\n"); + FS_CloseFile(file); + return FALSE; + } + readLen = FS_ReadFile(file, &offset, sizeof(offset)); + if( readLen != sizeof(offset) ) + { + OS_TPrintf("SYSM_GetNandTitleList failed: cant read file\n"); + FS_CloseFile(file); + return FALSE; + } + + // バナーが存在する場合のみリード + if( offset ) { + bSuccess = FS_SeekFile(file, offset, FS_SEEK_SET); + if( ! bSuccess ) + { + OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(offset)\n"); + FS_CloseFile(file); + return FALSE; + } + readLen = FS_ReadFile( file, pDst, (s32)sizeof(TWLBannerFile) ); + if( readLen != (s32)sizeof(TWLBannerFile) ) + { + OS_TPrintf("SYSM_GetNandTitleList failed: cant read file2\n"); + FS_CloseFile(file); + return FALSE; + } + if( !SYSMi_CheckBannerFile( pDst ) ) + { + // 正当性チェック失敗の場合はバッファクリア + MI_CpuClearFast( pDst, sizeof(TWLBannerFile) ); + } + }else { + // バナーが存在しない場合はバッファクリア + MI_CpuClearFast( pDst, sizeof(TWLBannerFile) ); + } + + FS_CloseFile(file); + return TRUE; +} // バナーデータの正誤チェック static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner ) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 5eaa0bf0..910a958d 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -51,7 +51,6 @@ typedef struct MbAuthCode extern const u8 g_devPubKey[ 3 ][ 0x80 ]; // function's prototype------------------------------------------------------- -static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst ); static s32 ReadFile( FSFile* pf, void* buffer, s32 size ); static void SYSMi_EnableHotSW( BOOL enable ); static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle ); @@ -218,7 +217,7 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum ) // "Not Launch"でない かつ "Data Only"でない なら有効なタイトルとしてリストに追加 if( ( pTitleIDList[ l ] & ( TITLE_ID_NOT_LAUNCH_FLAG_MASK | TITLE_ID_DATA_ONLY_FLAG_MASK ) ) == 0 ) { titleIDArray[ validNum ] = pTitleIDList[ l ]; - SYSMi_ReadBanner_NAND( pTitleIDList[ l ], (u8 *)&s_bannerBuf[ validNum ] ); + SYSMi_ReadBanner_NAND( pTitleIDList[ l ], &s_bannerBuf[ validNum ] ); validNum++; } } @@ -247,76 +246,6 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum ) return listNum; } -static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst ) -{ -#define PATH_LENGTH 1024 - OSTick start; - FSFile file[1]; - BOOL bSuccess; - char path[PATH_LENGTH]; - s32 readLen; - s32 offset; - - start = OS_GetTick(); - readLen = NAM_GetTitleBootContentPathFast( path, titleID ); - OS_TPrintf( "NAM_GetTitleBootContentPath : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); - - // ファイルパスを取得 - if(readLen != NAM_OK){ - OS_TPrintf("NAM_GetTitleBootContentPath failed %lld,%d\n", titleID, readLen ); - return FALSE; - } - - // ファイルオープン - bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R); - if( ! bSuccess ) - { - OS_TPrintf("SYSM_GetNandTitleList failed: cant open file %s\n",path); - return FALSE; - } - - // ROMヘッダのバナーデータオフセットを読み込む - bSuccess = FS_SeekFile(file, 0x68, FS_SEEK_SET); - if( ! bSuccess ) - { - OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(0)\n"); - FS_CloseFile(file); - return FALSE; - } - readLen = FS_ReadFile(file, &offset, sizeof(offset)); - if( readLen != sizeof(offset) ) - { - OS_TPrintf("SYSM_GetNandTitleList failed: cant read file\n"); - FS_CloseFile(file); - return FALSE; - } - - // バナーが存在する場合のみリード - if( offset ) { - bSuccess = FS_SeekFile(file, offset, FS_SEEK_SET); - if( ! bSuccess ) - { - OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(offset)\n"); - FS_CloseFile(file); - return FALSE; - } - readLen = ReadFile( file, pDst, (s32)sizeof(TWLBannerFile) ); - if( readLen != (s32)sizeof(TWLBannerFile) ) - { - OS_TPrintf("SYSM_GetNandTitleList failed: cant read file2\n"); - FS_CloseFile(file); - return FALSE; - } - }else { - // バナーが存在しない場合はバッファクリア - MI_CpuClearFast( pDst, sizeof(TWLBannerFile) ); - } - - FS_CloseFile(file); - return TRUE; -} - - // 指定ファイルリード static s32 ReadFile(FSFile* pf, void* buffer, s32 size) { diff --git a/build/libraries_sysmenu/sysmenu/common/include/internal_api.h b/build/libraries_sysmenu/sysmenu/common/include/internal_api.h index 3362975f..cd04b4a0 100644 --- a/build/libraries_sysmenu/sysmenu/common/include/internal_api.h +++ b/build/libraries_sysmenu/sysmenu/common/include/internal_api.h @@ -63,6 +63,9 @@ void SYSMi_CheckRTC( void ); // カードバナーリード(※NTR-IPL2仕様) BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner ); +// NANDアプリバナーリード +BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst ); + //------------------------------------------------------- // 活線挿抜 //------------------------------------------------------- diff --git a/docs/format_TWLBanner.xls b/docs/format_TWLBanner.xls index c3b58cc25d090f1dc801030c520981f1cffad4fc..c0024923a234b08a65b2efd311184a31ffb70733 100644 GIT binary patch delta 5082 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 Q*#2&p<6)xEk8=6?A8I*O)c^nh delta 4857 zcmbtY3s98T6+Zv&W%*@Uz@G&cmgj=MN{FmzFucqv+R#ZV5FBHS4_uQ%wP{c>q7Zgf z@D(4(QR9Q?+DTf|X{re(buvjtleQBx%}i#@RAVP?GKo`b(~Oxu#^y!Ox&OaEtZrx8 zDa`(RzwdnKoO{nb_wGV?yFJ`zAMh*7_D%JQr2z0^^C<;Kl*z6HP{z$avA7W0R(CDM zskRk($Tm;0cf*r1<497N%J`RL5C~%;6m3V+Xs!fncgn1z@NK*l6b~@ zg;WE>52c*)hDKlzRQTFSZbX*40IC&$Ehzve&F56!St3zy}m_MJ~WvidA0#(2@@Da)uA! z*W~1x05FNfnL0V;pmIlj(#O*PN@@VUnmHV*Kj;h*q#sHOsx1v@l8^v-{05+;N{%K< zTuKZ_lfI2}#NiU-aGcAE7c!I3Do06^qZQxA(duvGxWraK)0e7q8%LG8jSJCM5Sh!3 z00GmP>u_tp@o_jU4woK>bI0K_3@#K?*33Az}4woH=%ZbBzW4L>bJl}*c1irI zg;ONHUOl0{9KNAwsf7K!Vep1THbP#oL$8f(g2n*h04sSX{XoY_D${_J*jkg7z`NV;Jbfp^4H)UlT7T&f5w#bcgP>rkc3)4#3$?CAI ziPBosZ1@`1M9Zp5YjccMwXEZ$byJLWoMq*Uu^L}&&I<9YDrMdzY2~xY*W_rEIk{=% zIdoE+)<8db@P+3jJ$s*)7am`wWw4bnuOZp;NtQm_OrK=ar$hSCbvuWgcAHKv%gH63 zwwq2a)2TJUWlbSOUr+ca@?wD6PFasHKTwf(gxc7nq>#OtuAk9gqp?McKb>!LZfe#j z%2hgE3E0?DlqhJ)v|0Fg%QVNO1psdaF;xGOO93ZWVFvP(}JO-zS5h)c4^ zSCCf)H9F72PV=}MUth9ZxeE)Hw$XFj(k1k~D#zbj#>~s|nb*qW{?;W*C4NHB={Rfo zDq>!c&+H&uH_7Lp<+FJO$2ldRu19#hNu>3_6MsT}_6qq>s9*DTl6%b$aG zENTloezy|f*eWg|y60yOPi~JSiuVf-D!8v_68__HU1e}BSyS*tp9e>Jym)%oWDIp^ zqNK=Fz22d#3>sXPssbPD(D2^Xn&^zG`d8~JgN77Km4ukh}PMk4R9(-X#DgLHYSD9$g zOl982x!AleC>qj<_&DUoNUw?)*J87a#g}+>0ll2#U9v_&Ah{ zrRz0Ow#J-s`+8kv5Xdw$jP&rTt1^@M0;8|4E5Lc9goa`0iTadx=_-S!tQepB#BU8n z8GhO2QyKU@F^Y-!*oG33yH@7r6*j31(y~oe-o~GbKn{WE%0AtwiT#GW4E1iG${@mu z6Ma5>@2Och+^vaE4aFq8^O*X*L~FT?A-K9vC!NO>D}hk_!lP)etW&UI#)Yr@oA1UlGa zG^){Dhr_!?xX6mE;&(P_;7;B-0(@4Ts*v46OTM$X1TPP z8jC^|DAs|>EOf(zo`@w~WMD&@KOuN|65-e5{+?9^2T3-6Fpz8kpY z6Y&>2J4Jihm<+R@(nMd>E&LSiKY_PdVRTuGct2`w+(j1-fy;MVLAk?fM9D^Lh6262 zeJT@Yr&y{A+`GF|94a4^ws?;whN5oE_vk8vo2)p|*M|Sx6BO!HDbK~Oy_#@$n;Bl& zOP36RcD6?A7wU?ZJqc$FtQ1`pqnR=Tx1Hr(MzAup@AIh)F0TrMVb5po!ck&2+s7bd|w5w#F`VFyXzsH3jgq176&FuwD48Nb=RezJzl$0Bj9; z@%Yn0(Ns-z!lCIRxtC(r9a^OF;4-ru@0W-63r{V9#=}!YA4@hJZdG~E#Vkvf9ZN#z zk-g%5!|KMDj@+*@I9oSHG3n?D5uPLct1)p%R~Za-k5N20^rSd6*HmcF=qiJSJH{x2 z&ukFaj!K0a|MtxNDuX$@EyV@LOq&L;IIy541D72S4o3XSYdAGhT+~IEGygkbfL{DP zbBJF2-SQ;8=$|NX2G>Q3u`lArlM%loJm=|kwLcpELnJ?S@bt6x)QL_!bvk?a-099V z_1lq=kw)^s+VdU>9%Qiiyk{I+zMQVgi&5g=DT=!NenZDxy{e>!j F{tcRnCd>c;