From 4367b1b62908346878f3645b82f28eed7bc115a2 Mon Sep 17 00:00:00 2001 From: nishikawa_takeshi Date: Mon, 29 Jun 2009 05:37:27 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=90=E3=83=8A=E3=83=BC=E6=8C=BF=E5=85=A5?= =?UTF-8?q?=E3=83=84=E3=83=BC=E3=83=AB=E3=81=AE=E3=83=90=E3=83=8A=E3=83=BC?= =?UTF-8?q?=E6=8C=BF=E5=85=A5=E7=AE=87=E6=89=80=E3=82=92=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E6=9C=AB=E5=B0=BE=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@326 7061adef-622a-194b-ae81-725974e89856 --- .../tools/BannerForcefulInserter/default.bnr | Bin 0 -> 2112 bytes build/tools/BannerForcefulInserter/main.c | 63 +++++++++++++----- 2 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 build/tools/BannerForcefulInserter/default.bnr diff --git a/build/tools/BannerForcefulInserter/default.bnr b/build/tools/BannerForcefulInserter/default.bnr new file mode 100644 index 0000000000000000000000000000000000000000..a632b39d847ff9af4238317c934eb286fa1a91b6 GIT binary patch literal 2112 zcmd^@J{CAUUBwl}J;G3VBxBLEmGmo7jXRecR!x-}` zP19^INwOsA0i7j1pzB#r?;~swPPNub>kU;G80lWJyrtBGEhY0fUQLveZ6#$aIOkYu z*^VO_w<3f|qV;qfg{;*K8KVKyw*?Dtf*XQmy1t!h!85&|0#&fFt1`9Q0rLK4NAgW6 zllMpYJF;zHV~+DTVH3tk3<)5@tOvpvA%;fO01xJBOw4gwFw1BS@L5WEnNn8vY3?z| z>Fl%zawi6@g18$E;_fK_uoZ>F2>D@i2ssP`!9!8wrU4#uW;i@JqlQ!8FzQ1*Mm>j? zy=sBuR6WP8dKW;+t~#Ys)h=0;L8}|~qfa@a-=uy&6rvx9+Ebh(p_B?7C~O#ndPo5A zVdEj>1I+NiKE$?d%Ys-A5__I!=i%I=WLXvKFYxdb!i2nDIrr}3=S$Nw3s>G;-JZ{` zov$n{yj>bD&j+s>W_^*|B8%i6VVEhoLoQ>!OYE7mdB2X Wp}XVy|LFcl^{=4*1N;sCuki=)%0&bK literal 0 HcmV?d00001 diff --git a/build/tools/BannerForcefulInserter/main.c b/build/tools/BannerForcefulInserter/main.c index 311dfc7..5a524bb 100644 --- a/build/tools/BannerForcefulInserter/main.c +++ b/build/tools/BannerForcefulInserter/main.c @@ -219,15 +219,7 @@ int main(int argc, char *argv[]) goto FINALIZE; } - // ファイルコピー - if( !CopyFile( context.ofp, context.ifp ) ) - { - printf( "\n*** Error: Failed to copy the file. ***\n" ); - bResult = FALSE; - goto FINALIZE; - } - - // フラグ立てが指定されていないときはコピーだけしてそのまま終了 + // 本体 bResult = iMain( &context ); // 終了処理 @@ -258,14 +250,14 @@ FINALIZE: フラグ立て本体 *---------------------------------------------------------------------------*/ - +#define CARD_PAGE_SIZE (0x200) static BOOL iMain( SContext *pContext ) { ROM_Header rh; int banner_size; u8 *banner_buf; - u8 *tmp; u16 curr_crc; + u32 append_banner_offset; // ROMヘッダをリード fseek( pContext->ifp, 0, SEEK_SET ); @@ -290,6 +282,40 @@ static BOOL iMain( SContext *pContext ) } printf("InitialCode : %c%c%c%c\n", rh.s.game_code[0], rh.s.game_code[1], rh.s.game_code[2], rh.s.game_code[3]); + // バナー用のページをファイルの末尾に追加する + { + int filesize, pagenum, i; + fseek(pContext->ifp, 0, SEEK_END); + filesize = ftell(pContext->ifp); + pagenum = filesize / CARD_PAGE_SIZE; + if( filesize % CARD_PAGE_SIZE ) // 中途半端なサイズのときページを埋めてそのあとにページを追加したい + { + pagenum++; + } + pagenum++; // バナー用のページ + + + // ページ数だけファイルを0クリア + for(i=0; i < pagenum; i++ ) + { + u8 page[CARD_PAGE_SIZE]; + memset( page, 0, CARD_PAGE_SIZE ); + if( CARD_PAGE_SIZE != fwrite( page, 1, CARD_PAGE_SIZE, pContext->ofp ) ) + { + printf( "\n*** Error! failed to write the file in file extending. ***\n" ); + return FALSE; + } + } + append_banner_offset = (pagenum-1)*CARD_PAGE_SIZE; // バナーを入れる場所 + } + + // ファイルコピー + if( !CopyFile( pContext->ofp, pContext->ifp ) ) + { + printf( "\n*** Error: Failed to copy the file. ***\n" ); + return FALSE; + } + // バナーを読み込む fseek(pContext->banner_fp, 0, SEEK_END); banner_size = ftell(pContext->banner_fp); @@ -307,11 +333,18 @@ static BOOL iMain( SContext *pContext ) return FALSE; } - // バナーをホワイトリストハッシュ以降の0x3C0からの領域に入れる(最大で0xDFFまでなので署名よりも前の領域に収まる) - tmp = (u8*)&rh; - memcpy( &tmp[0x3C0], banner_buf, banner_size ); - rh.s.banner_offset = 0x3C0; // オフセットを上書き + // バナーを末尾のページに入れる + fseek(pContext->ofp, append_banner_offset, SEEK_SET); + if( banner_size != fwrite( banner_buf, 1, banner_size, pContext->ofp ) ) + { + printf( "\n*** Error! failed to write the file in banner writing. ***\n" ); + return FALSE; + } + rh.s.banner_offset = append_banner_offset; free(banner_buf); + + printf("Banner Offset : 0x%08X\n", (unsigned int)append_banner_offset); + printf("Banner Size : 0x%08X\n", banner_size); // ヘッダCRC計算 curr_crc = rh.s.header_crc16;