From df134bf14712e30fc2165fda1334360bf057e23b Mon Sep 17 00:00:00 2001 From: nishikawa_takeshi Date: Wed, 27 Aug 2008 12:21:36 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=9E=E3=82=B9=E3=82=BF=E3=82=A8=E3=83=87?= =?UTF-8?q?=E3=82=A3=E3=82=BF:MRC=E6=A9=9F=E8=83=BD(NTR=E4=BA=92=E6=8F=9B)?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=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/TwlIPL/trunk@2291 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../tools/MasterEditorTWL/MasterEditorTWL.ncb | Bin 11078656 -> 11103232 bytes .../tools/MasterEditorTWL/MasterEditorTWL.suo | Bin 37376 -> 39936 bytes .../MasterEditorTWL/Debug/BuildLog.htm | Bin 15654 -> 15634 bytes .../MasterEditorTWL/MasterEditorTWL/srl.cpp | 253 +++++++++++++++++- .../MasterEditorTWL/MasterEditorTWL/srl.h | 9 +- 5 files changed, 253 insertions(+), 9 deletions(-) diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL.ncb b/build/tools/MasterEditorTWL/MasterEditorTWL.ncb index aa075b08d60e8de56a533dcb40576e8de174de34..3fa85b4f19e4346a87eaef22458d50fe7972ae9d 100644 GIT binary patch delta 26823 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 BA&>w7 diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL.suo b/build/tools/MasterEditorTWL/MasterEditorTWL.suo index bfb3df58ee31d5c66c8453efc83f2b5c4455feb8..5f0cbd28e058c418908b4116f61f1d8a90c2dc80 100644 GIT binary patch delta 4483 zcmZ{m3s6+o9memyF3%94Lx?zGXED%NHykuY(}10%#DbhaP|)ggEg=#D}3pnxy6U1Ll9qJV4Zn0 z&!gM^393B#<+e9zPUUC0kHPR|Q2p>HpkG5Lp|>FNw;7tZB{KCoq43*wJ4R{|0>u{T=!Y`Umtm#QHA~zl6Sm zzJ|_27a+cqOVDNL8uTxS4`~P*R#)uR% zJu^nNUz!WFg+8NLr@JlX?#9rd+js2yA+fi@~C5nY>La7jAs!Uhs$G*h366(H3#AZ zcoy-Ro#D)}?)5(ezBf*u?YSW4O@Me}fVs6+f!wbPAeJ`B-$^?>J6S8N8u3RE8{99< ziTJXx1H#53c0w!%A%A;^;Mv|`i>cwdvSO~O6VO=bq=kL!YydtB;+Ev?%nOI%i@g)k zVybKYdUNlZbGo|K82u>D3T>mUZd5p*^>o8Z(avIFGxsj&Jz3;eg|W?R@F|ElgmG%O z;L{Mj!Z@98;8{YkB6T&dKF4js1%dpM1Tg^$=XynXQy5$8hra`HP*?{1G0FQ>*m$td zgk2WK(OrShM!YJFZ*Rz#=hmJY?d$kiz#qc1Y!}7`cL*!Me&+zW<)?D*qjU@70H1@O zgt%E4m!3!RUKUmab_SjkK5H?zZ!P^47i`3d!-SorK;=AGP%4G7z6u^MMw=^)9nO-x zUBWoy7vbX&dxi0PyHE0t2;;J?Rr-VON5-Q|Zu3+`_D-J*lZ%)qjI9>Jry}y3h@W-x z9YJK7F3eh4KBUb6^BoyaCMD0}9en8T)1Z7Icd+HJ;5oeW!Z^nZ@SOA2fV^Smsj!7p z-FB=b-jOe>iz~lCR@W+Fd0=hAwh3d4yWsg&_XOnaki5gfxLS`2dsi4odImm~yZ$J8 zXJc>6mEFZ9=%n{{QRz384ReQ=W1@L`B`!uW6&z_YXn*I?H0BKY#%(A z*DJyn!@nwdM}^ga9TVn=u^y~jYXWrQf;TVnL2V&?gRmvSSic-T7;%NL2Kc3t*Al>1 z30o_S$BswXQ^NAWHpXCGu;EPt3*eO`?hwXKcEYpl7RLYoy~2JRz+Msdb74)$>l1cd z*nF@P!rrnArVpM;XLk%`Md)7X$`s))_*Q$q9jyrCI zcdf>>cJ1q5XX{y(F+#2RQ43Z}_xECZ?7`~V@;bHBl{8XX<+4O$B);y^A^kQTn|&_S zjafF*pwR8j+uer&|Ei~MvzsSO8`dP3<$X{)4a)PvxUshidqEiMcfs@C-NN`kZja=h z3dkFfywk!aBX3ahaJajzj={9AC6T8)>$zHD&;!r!I7Bjjc5g{uwy+$qi>ySMB#eGC zyaO>;81Hq$vwTO`-8?Sy1U3m|!Xxm+-xbF8*TD0zcwAT-{9<^PPGQXZK0H5X>jPL8 zX2Sz98<9EulhVz5d0aXKvZ4Z>CqrdGVyXBBL@rI<$BzZ``Ja`IvG6}C8A}nwyfTRF zImijIBm(&J+;_n-F+<==_)MuS7si_^;4=|xgmD0^@HRxQ8T_pOv9&ZPox=Fow+Y)R zjF((XxHm~VAdsW$65ogD+k~mj@w%q;Cyy(mc!sh^G@DHuJ`WD@eWp>7)Yj_>SFO!o uVq4YUZW}n;&Rg3c>c7u%Ox&zr9W&C7Q+=*db!f#8)Xys7%ojE;4*3tMT#>l| delta 1736 zcmZ{jZA@EL7{~9qT;9rCsRe4nHU_IJ0#cxi>0p!>+Z7lvaT5hytuDh!wg!1ISOMo) z7Gs3=i6)a}u;~XAKgfDCE=v|0H4&V~sQY5{gCG2&ZW5DynOR!@&&@5<1y1tIdG7!G z?{l7e?sH}?t26Jb%ggEu@kAoQR4a;-jPa-s7qoh?3p9Y;;9>9x*aONy(#x|O&n=)8 zw1IZ;DDVI;Ri*qG_FE&`aPF^FbJ<5yRz(W*Sc9C@#?@)wdoP}w!8o`#53lQau(l8Q z0BfC?yTE?XZD$IJyTmmEJNuYlbWT_FZnwP zhar6Xq06!s|0^Mcq7;KVLGk?Yv^p&1*=W)-C4Q5)E$M=6RtLql+%H?K)0vK0EPnt_ z-;<$2Rg`0Z2WO^Otu4CMEHsptkk)N}A)4h_$?GDu1A8g-+Q~%rQ}4{5V83q3D02$U z_10QFX^xWZCdgip2iVVT#^k5-+9k816w%GvqG(-6XndM9<7(H-rWKb%Bb3%G^29obV#YsGCc)_z&279{n=_1xZW+GncFej5fSyD((%8Lx=U=F-!?Ui#@^ zAxU3h?uD$S#tT`xeKh2kI4BK-B zcEQjfDd!OLFFtQ*oOjXief1yTisAd(&>n*Cn&JC>-KYNq{RGi7l-F0&1e@}Q z@$L=7$0uyTrUjS_FmswM;Ev%dH?(ScweOVtdt_3OGmt?)KWnF6+HbmhtaPckJ~C^j zFFVZCf2fj9w(OPh*;WzhpP9bNSurY&WE@u^c4KxL8gJT)n8%=@RUoc0w8MtR>wd&6 z2MmqVzliuK=3zrCMf@CM43iQ>pq~f%o@}5WLNWT>_6>CneM~b0ZYs68r5H@$mKv=g zJN=&sG9Rr$`&deF3loV(RX-X|cV^GsuU3+8Ow3&s(Lg}Rz#HdN-g8fh$gn;C|31_# zj~%a2H|RzAY4DcVtWQ6q7TG)I75YVgWpt3HgB$g;%p1G2X^ysutF-jewa953l?6vO zs$gR7#%6EJg|NC&)wEujGhn3w-|-Fd(x1Kp^7~!VJ?+(~b?Ov3-!)NYIG7vFS!#^t Z=$$dYJ9#6|UOZ)z?kP{I^qjq-{tHD;%qai> diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm b/build/tools/MasterEditorTWL/MasterEditorTWL/Debug/BuildLog.htm index 6abff88e32657cb1fa497735b60530eddc6217d1..7960e6065927d46065c68bc9dcf90c3ab8c6f26c 100644 GIT binary patch delta 290 zcmZ2hHK}TY1)HD+gA;=hg9Q*8F_<$LFc@t1W_!+oDLh$LB6f3tj0hu8${9n)M#jxm zLK9fA$jM5$gM?jBwM_PAGu^yK_82#&)aF*rLXah{7&?qM+i2S`VUd!RklwsZSC3KB ug24?{7lR%{5fUynwur`cQDH0RKlRdpafJVK6!yO%VsV^86E)Zo-}#@ delta 300 zcmbPKwXAA`1)Hz|gBgPfg8_pfgAs!Buj=d77>sqoe_YBf3roJ%%KP#L12Pl9PL6g*LP4?*RDpRomHeader; + u16 total = start; + int size = allsize; // CRCテーブルは固定 const u16 CRC16Table[16] = @@ -403,9 +400,13 @@ ECSrlResult RCSrl::calcRomHeaderCRC(void) data++; } + return total; +} // calcRomHeaderCRCCore() +ECSrlResult RCSrl::calcRomHeaderCRC(void) +{ // ROMヘッダのCRC領域を上書き - this->pRomHeader->s.header_crc16 = total; + this->pRomHeader->s.header_crc16 = calcCRC( CRC16_INIT_VALUE, (u8*)this->pRomHeader, CALC_CRC16_SIZE ); return (ECSrlResult::NOERROR); } // ECSrlResult RCSrl::calcRomHeaderCRC(void) @@ -617,8 +618,246 @@ ECSrlResult RCSrl::mrc( FILE *fp ) this->hErrorList->Clear(); this->hWarnList->Clear(); + ECSrlResult result; + result = this->mrcNTR( fp ); + if( result != ECSrlResult::NOERROR ) + { + return result; + } + result = this->mrcTWL( fp ); + if( result != ECSrlResult::NOERROR ) + { + return result; + } //this->hErrorList->Add( gcnew RCMRCError( "テスト", 0x01, 0xfe, "テスト要因", "test", "reason", false ) ); //this->hWarnList->Add( gcnew RCMRCError( "テスト2", 0x01, 0xfe, "テスト要因2", "test2", "reason2", false ) ); return ECSrlResult::NOERROR; } + +// NTR互換MRC +ECSrlResult RCSrl::mrcNTR( FILE *fp ) +{ + System::Int32 i; + + // ROMヘッダのチェック + + // 文字コードチェック + for( i=0; i < TITLE_NAME_MAX; i++ ) + { + char c = this->pRomHeader->s.title_name[i]; + if( ((c < 0x20) || (0x5f < c)) && (c != 0x00) ) + { + this->hErrorList->Add( gcnew RCMRCError( + "ソフトタイトル", 0x0, 0xb, "使用不可のASCIIコードが使用されています。", + "Game Title", "Unusable ASCII code is used.", false ) ); + } + } + for( i=0; i < GAME_CODE_MAX; i++ ) + { + char c = this->pRomHeader->s.game_code[i]; + if( (c < 0x20) || (0x5f < c) ) + { + this->hErrorList->Add( gcnew RCMRCError( + "イニシャルコード", 0xc, 0xf, "使用不可のASCIIコードが使用されています。", + "Game Code", "Unusable ASCII code is used.", false ) ); + } + } + if( memcmp( this->pRomHeader->s.game_code, "NTRJ", GAME_CODE_MAX ) == 0 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "イニシャルコード", 0xc, 0xf, "SDKデフォルトのコード(NTRJ)が使用されています。", + "Game Code", "SDK default code(NTRJ) is used.", false ) ); + } + for( i=0; i < MAKER_CODE_MAX; i++ ) + { + char c = this->pRomHeader->s.maker_code[i]; + if( (c < 0x20) || (0x5f < c) ) + { + this->hErrorList->Add( gcnew RCMRCError( + "メーカーコード", 0x10, 0x11, "使用不可のASCIIコードが使用されています。", + "Maker Code", "Unusable ASCII code is used.", false ) ); + } + } + + // 値チェック + if( this->pRomHeader->s.rom_type != 0x00 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "デバイスタイプ", 0x13, 0x13, "不正な値です。00hを設定してください。", + "Device Type", "Invalid data. Please set 00h.", false ) ); + } + fseek( fp, 0, SEEK_END ); + u32 filesize = ftell(fp); // 実ファイルサイズ(単位Mbit) + u32 romsize = 1 << (this->pRomHeader->s.rom_size); // ROM容量 + if( (romsize*1024*1024/8) < filesize ) + { + this->hErrorList->Add( gcnew RCMRCError( + "デバイス容量", 0x14, 0x14, "実ファイルサイズよりも小さい値が指定されています。", + "Device Capacity", "Setting data is less than the actual file size.", false ) ); + } + else if( filesize < (romsize*1024*1024/8) ) + { + this->hWarnList->Add( gcnew RCMRCError( // 警告 + "デバイス容量", 0x14, 0x14, "実ファイルサイズに比べて無駄のある値が設定されています。", + "Device Capacity", "Setting data is larger than the actual file size.", false ) ); + } + if( (filesize % 2) != 0 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "実ファイルサイズ", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, "中途半端な値です。通常では2のべき乗の値です。", + "Actual File Size", "Invalid size. This size is usually power of 2.", false ) ); + } + u8 romver = this->pRomHeader->s.rom_version; + if( ((romver < 0x00) || (0x09 < romver)) && (romver != 0xE0) ) + { + this->hErrorList->Add( gcnew RCMRCError( + "リマスターバージョン", 0x1e, 0x1e, "不正な値です。正式版では01h-09hのいずれかの値、事前版ではE0hです。", + "Release Ver.", "Invalid data. Please set either one of 01h-09h(Regular ver.), or E0h(Preliminary ver.)", false ) ); + } + if( this->pRomHeader->s.warning_no_spec_rom_speed != 0 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "諸フラグ", 0x1f, 0x1f, "rsfファイルでROMSpeedTypeが設定されていません。", + "Setting Flags", "In a RSF file, the item \"ROMSpeedType\" is not set.", false ) ); + } + if( this->pRomHeader->s.banner_offset == 0 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "バナーオフセット", 0x68, 0x6b, "バナーデータが設定されていません。", + "Banner Offset.", "Banner data is not set.", false ) ); + } + if( this->pRomHeader->s.rom_valid_size == 0 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "ROM実効サイズ", 0x80, 0x83, "値が設定されていません。", + "ROM Valid Size.", "Data is not set.", false ) ); + } + + // CRC + u16 crc; + // セキュア領域 + { + // セキュア領域はROMヘッダ外 + u8 *secures; + s32 secure_size = SECURE_AREA_END - this->pRomHeader->s.main_rom_offset; + if (secure_size > SECURE_AREA_SIZE) + { + secure_size = SECURE_AREA_SIZE; + } + if (secure_size <= 0) + { + this->hErrorList->Add( gcnew RCMRCError( + "セキュア領域CRC", 0x15e, 0x15f, "セキュア領域のアドレス指定が不正です。", + "Secure Area CRC.", "Illegal address of secure area.", false ) ); + } + secures = new u8[secure_size]; // never return if not allocated + fseek( fp, (u32)this->pRomHeader->s.main_rom_offset, SEEK_SET ); + if( secure_size != fread( secures, 1, secure_size, fp ) ) + { + delete []secures; + return ECSrlResult::ERROR_FILE_READ; + } + crc = calcCRC(CRC16_INIT_VALUE, (u8 *)secures, secure_size); + delete []secures; + if( crc != this->pRomHeader->s.secure_area_crc16 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "セキュア領域CRC", 0x07c, 0x07d, "計算結果と一致しません。セキュア領域が改ざんされた可能性があります。", + "Secure Area CRC.", "Calclated CRC is different from Registered one.", false ) ); + } + } + + // ロゴ領域 + crc = 0xcf56; + if( crc != this->pRomHeader->s.nintendo_logo_crc16 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "キャラクターデータCRC", 0x15c, 0x15d, "計算結果と一致しません。キャラクターデータが改ざんされた可能性があります。", + "Charactor Data CRC.", "Calclated CRC is different from Registered one.", false ) ); + } + + // ヘッダCRC + crc = calcCRC( CRC16_INIT_VALUE, (u8*)this->pRomHeader, CALC_CRC16_SIZE ); + if( crc != this->pRomHeader->s.header_crc16 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "ROMヘッダCRC", 0x15e, 0x15f, "計算結果と一致しません。ROMヘッダが改ざんされた可能性があります。", + "ROM Header CRC.", "Calclated CRC is different from Registered one.", false ) ); + } + + // 予約領域 + for( i=0; i < 8; i++ ) + { + if( this->pRomHeader->s.ctrl_reserved_B[i] != 0 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "ROM情報予約領域", 0x078, 0x07f, "不正な値が含まれています。この領域をすべて0で埋めてください。", + "Reserved Area for ROM Info.", "Invalid data is included. Please set 0 into this area.", false ) ); + } + } + for( i=0; i < 32; i++ ) + { + if( this->pRomHeader->s.reserved_C[i] != 0 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "予約領域C", 0x078, 0x07f, "不正な値が含まれています。この領域をすべて0で埋めてください。", + "Reserved Area C", "Invalid data is included. Please set 0 into this area.", false ) ); + } + } + + // ROMヘッダ以外の領域のチェック (ファイルから適宜リードする) + + // システムコールライブラリ + u8 syscall[32]; + u32 offset = this->pRomHeader->s.main_rom_offset; + fseek( fp, offset, SEEK_SET ); + if( 32 != fread( syscall, 1, 32, fp ) ) + { + return ECSrlResult::ERROR_FILE_READ; + } + for( i=0; i < 32; i++ ) + { + if( syscall[i] != 0x00 ) + break; + } + if( i == 32 ) // 全部0 + { + this->hErrorList->Add( gcnew RCMRCError( + "システムコールライブラリ", METWL_ERRLIST_NORANGE, METWL_ERRLIST_NORANGE, "SDKデフォルトです。", + "System-Call Library", "This Library is SDK default one.", false ) ); + } + + return ECSrlResult::NOERROR; +} // mrcNTR() + +ECSrlResult RCSrl::mrcTWL( FILE *fp ) +{ + System::Int32 i; + + // ROMヘッダのチェック + + // 値チェック + u32 romsize = 1 << (this->pRomHeader->s.rom_size); // ROM容量 + if( (romsize < METWL_ROMSIZE_MIN) || (METWL_ROMSIZE_MAX < romsize) ) + { + this->hErrorList->Add( gcnew RCMRCError( + "デバイス容量", 0x14, 0x14, "指定可能な容量ではありません。", + "Device Capacity", "Invalid capacity.", false ) ); + } + + // 予約領域 + for( i=0; i < 7; i++ ) + { + if( this->pRomHeader->s.reserved_A[i] != 0 ) + { + this->hErrorList->Add( gcnew RCMRCError( + "予約領域A", 0x015, 0x01b, "不正な値が含まれています。この領域をすべて0で埋めてください。", + "Reserved Area A", "Invalid data is included. Please set 0 into this area.", false ) ); + } + } + + // ROMヘッダ以外の領域のチェック + + return ECSrlResult::NOERROR; +} \ No newline at end of file diff --git a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h index dace2ac1..61a82b32 100644 --- a/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h +++ b/build/tools/MasterEditorTWL/MasterEditorTWL/srl.h @@ -6,6 +6,11 @@ #include #include +// 宣言 +#define METWL_ERRLIST_NORANGE 0 // エラーのアドレス範囲を指定しないことを表す特別な値 +#define METWL_ROMSIZE_MIN 256 // 最小のデバイス容量 256Mbit +#define METWL_ROMSIZE_MAX 4096 // 最大の.. 4Gbit + namespace MasterEditorTWL { // ------------------------------------------------------------------- @@ -305,8 +310,8 @@ namespace MasterEditorTWL // MRC(Master ROM Checker)機能 ECSrlResult mrc( FILE *fp ); - //ECSrlResult mrcNTR( FILE *fp ); - //ECSrlResult mrcTWL( FILE *fp ); + ECSrlResult mrcNTR( FILE *fp ); + ECSrlResult mrcTWL( FILE *fp ); }; // end of ref class RCSrl