エラーチェック追加。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@442 7061adef-622a-194b-ae81-725974e89856
This commit is contained in:
nishikawa_takeshi 2009-12-10 12:25:31 +00:00
parent 29a9b3aab1
commit adade89f29
11 changed files with 7113 additions and 8011 deletions

View File

@ -41,7 +41,7 @@ System::Xml::XmlElement^ Form1::makeErrorListXmlElement(System::Xml::XmlDocument
{
for each( RCMrcError ^err in this->hSrl->hErrorList )
{
if( !err->IsEnableModify ) // 修正可能な情報は出力しない
if( !err->IsEnableModify && this->isDisplayOneGridErrorForPurpose( err ) ) // 修正可能な情報は出力しない
{
list->AppendChild( CreateErrorListElement(doc, err, 0, "error", this->isJapanese()) );
}
@ -51,7 +51,7 @@ System::Xml::XmlElement^ Form1::makeErrorListXmlElement(System::Xml::XmlDocument
{
for each( RCMrcError ^err in this->hErrorList )
{
if( err->IsAffectRom ) // 書類上のエラーは出力しない
if( err->IsAffectRom && this->isDisplayOneGridErrorForPurpose( err ) ) // 書類上のエラーは出力しない
{
list->AppendChild( CreateErrorListElement(doc, err, 1, "error", this->isJapanese()) );
}
@ -69,7 +69,10 @@ System::Xml::XmlElement^ Form1::makeErrorListXmlElement(System::Xml::XmlDocument
{
errtype = 1;
}
list->AppendChild( CreateErrorListElement(doc, err, errtype, "error", this->isJapanese()) );
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
list->AppendChild( CreateErrorListElement(doc, err, errtype, "error", this->isJapanese()) );
}
}
}
}
@ -86,7 +89,7 @@ System::Xml::XmlElement^ Form1::makeWarningListXmlElement(System::Xml::XmlDocume
{
for each( RCMrcError ^err in this->hSrl->hWarnList )
{
if( !err->IsEnableModify ) // 修正可能な情報は出力しない
if( !err->IsEnableModify && this->isDisplayOneGridErrorForPurpose( err ) ) // 修正可能な情報は出力しない
{
list->AppendChild( CreateErrorListElement(doc, err, 0, "warning", this->isJapanese()) );
}
@ -96,7 +99,7 @@ System::Xml::XmlElement^ Form1::makeWarningListXmlElement(System::Xml::XmlDocume
{
for each( RCMrcError ^err in this->hWarnList )
{
if( err->IsAffectRom ) // 書類上のエラーは出力しない
if( err->IsAffectRom && this->isDisplayOneGridErrorForPurpose( err ) ) // 書類上のエラーは出力しない
{
list->AppendChild( CreateErrorListElement(doc, err, 1, "warning", this->isJapanese()) );
}
@ -114,7 +117,10 @@ System::Xml::XmlElement^ Form1::makeWarningListXmlElement(System::Xml::XmlDocume
{
errtype = 1;
}
list->AppendChild( CreateErrorListElement(doc, err, errtype, "warning", this->isJapanese()) );
if( this->isDisplayOneGridErrorForPurpose( err ) )
{
list->AppendChild( CreateErrorListElement(doc, err, errtype, "warning", this->isJapanese()) );
}
}
}
}

View File

@ -143,11 +143,14 @@ bool Form1::isDisplayOneGridErrorForPurpose( RCMrcError ^err )
{
is_display = true;
}
if( ((err->Purpose & RCMrcError::PurposeType::DSStation) != (RCMrcError::PurposeType)0) &&
if( ((err->Purpose & RCMrcError::PurposeType::TouchTryDS) != (RCMrcError::PurposeType)0) &&
this->rPurposeCardTouchTryDS->Checked)
{
is_display = true;
}
/*
Zone DSDownload Service
*/
return is_display;
} //isDisplayOneGridErrorForPurpose()

View File

@ -270,10 +270,12 @@ namespace MasterEditorTWL
enum class PurposeType : System::UInt32 // 型指定
{
Production = 1 << 0, // 一般販売用(カード/NAND)
CardDistribution = 1 << 1, // データ配信用カード
CardKiosk = 1 << 2, // 店頭試遊台(単独型)
DSStation = 1 << 3, // DS Station
Zone = 1 << 4, // Nintendo Zone
TouchTryDS = 1 << 1, // TouchTryDS/DS CENTRE
CardDistribution = 1 << 2, // データ配信用カード
CardKiosk = 1 << 3, // 店頭試遊台(単独型)
DSiShop = 1 << 4, // DSiショップ配信用体験版
DSDownload = 1 << 5, // DSダウンロードサービス(& ニンテンドーチャンネル)
Zone = 1 << 6, // Nintendo Zone
Common = 0xFFFFFFFF, // すべての用途で共通のエラー
};

View File

@ -220,7 +220,10 @@ ECSrlResult RCSrl::mrcNTR( FILE *fp )
}
if( i == 32 ) // 全部0
{
this->hErrorList->Add( this->makeMrcError("Syscall") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution |
RCMrcError::PurposeType::DSiShop,
"Syscall") );
}
return ECSrlResult::NOERROR;
} // mrcNTR()
@ -284,26 +287,27 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp )
u32 filesizeMb = (filesize / (1024*1024)) * 8; // 単位をMbitに直す
if( romsize < filesizeMb )
{
// Touch!Try!DS用のROMを除く
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk, // Touch!Try!DS用のROMを除く
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"CapacityCardLess") );
}
else if( filesizeMb < romsize )
{
this->hWarnList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"CapacityCardWaste") );
}
if( (romsize < METWL_ROMSIZE_MIN) || (METWL_ROMSIZE_MAX < romsize) )
{
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"CapacityCardRange") );
}
if( (filesizeMb < 1) || (MasterEditorTWL::countBits(filesizeMb) != 1) ) // 立っているビットが1つかどうかでべき乗かどうかを調べる
{
this->hWarnList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"FilesizeFraction") );
}
} //if( *(this->hIsNAND) == false )
@ -312,7 +316,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp )
if( (romsize < METWL_ROMSIZE_MIN_NAND) || (METWL_ROMSIZE_MAX_NAND < romsize) )
{
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::DSiShop,
"CapacityNandRange") );
}
//u32 allsize = filesize + this->pRomHeader->s.public_save_data_size + this->pRomHeader->s.private_save_data_size;
@ -320,13 +324,13 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp )
if( allsize > METWL_ALLSIZE_MAX_NAND )
{
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::DSiShop,
"UsedNandSizeLimit") );
}
if( (allsize > METWL_ALLSIZE_MAX_NAND_LIC) && this->IsAppUser ) // ユーザアプリのときのみ
{
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::DSiShop,
"UsedNandSizeExceed") );
}
}
@ -343,7 +347,7 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp )
if( !crcret || (crcseg3 != METWL_SEG3_CRC) )
{
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"Seg3CRC") );
}
}
@ -386,11 +390,15 @@ ECSrlResult RCSrl::mrcTWL( FILE *fp )
}
if( !this->IsMediaNand && this->IsNormalJump )
{
this->hErrorList->Add( this->makeMrcError("NormalJumpCard") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"NormalJumpCard") );
}
if( !this->IsMediaNand && this->IsTmpJump )
{
this->hErrorList->Add( this->makeMrcError("TmpJumpCard") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"TmpJumpCard") );
}
if( this->IsNormalJump && this->IsTmpJump )
{
@ -694,7 +702,10 @@ void RCSrl::mrcAccessControl(FILE *fp)
}
if( this->pRomHeader->s.access_control.game_card_on != 0 )
{
this->hErrorList->Add( this->makeMrcError("GameCardNormalAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution |
RCMrcError::PurposeType::DSiShop,
"GameCardNormalAccessUser") );
}
if( this->pRomHeader->s.access_control.hw_aes_slot_B_SignJPEGForLauncher != 0 )
{
@ -702,7 +713,10 @@ void RCSrl::mrcAccessControl(FILE *fp)
}
if( this->pRomHeader->s.access_control.game_card_nitro_mode != 0 )
{
this->hErrorList->Add( this->makeMrcError("GameCardNTRAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution |
RCMrcError::PurposeType::DSiShop,
"GameCardNTRAccessUser") );
}
if( this->pRomHeader->s.access_control.hw_aes_slot_A_SSLClientCert != 0 )
{
@ -710,11 +724,17 @@ void RCSrl::mrcAccessControl(FILE *fp)
}
if( this->pRomHeader->s.access_control.backup_access_read != 0 )
{
this->hErrorList->Add( this->makeMrcError("GameCardReadAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution |
RCMrcError::PurposeType::DSiShop,
"GameCardReadAccessUser") );
}
if( this->pRomHeader->s.access_control.backup_access_write != 0 )
{
this->hErrorList->Add( this->makeMrcError("GameCardWriteAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution |
RCMrcError::PurposeType::DSiShop,
"GameCardWriteAccessUser") );
}
// SDアクセスは 5.2RELEASE で特定のアプリには許可される
@ -723,15 +743,21 @@ void RCSrl::mrcAccessControl(FILE *fp)
// カードアプリはSDアクセス禁止
if( this->pRomHeader->s.access_control.sd_card_access != 0 )
{
this->hErrorList->Add( this->makeMrcError("SDAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"SDAccessUser") );
}
if( this->pRomHeader->s.access_control.sdmc_access_read != 0 )
{
this->hErrorList->Add( this->makeMrcError("SDReadAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"SDReadAccessUser") );
}
if( this->pRomHeader->s.access_control.sdmc_access_read != 0 )
{
this->hErrorList->Add( this->makeMrcError("SDWriteAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"SDWriteAccessUser") );
}
}
else
@ -742,15 +768,21 @@ void RCSrl::mrcAccessControl(FILE *fp)
// 5.2 RELEASE以前は原則SDアクセス禁止
if( this->pRomHeader->s.access_control.sd_card_access != 0 )
{
this->hErrorList->Add( this->makeMrcError("SDAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::DSiShop,
"SDAccessUser") );
}
if( this->pRomHeader->s.access_control.sdmc_access_read != 0 )
{
this->hErrorList->Add( this->makeMrcError("SDReadAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::DSiShop,
"SDReadAccessUser") );
}
if( this->pRomHeader->s.access_control.sdmc_access_read != 0 )
{
this->hErrorList->Add( this->makeMrcError("SDWriteAccessUser") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::DSiShop,
"SDWriteAccessUser") );
}
}
else
@ -760,7 +792,9 @@ void RCSrl::mrcAccessControl(FILE *fp)
(this->pRomHeader->s.access_control.sdmc_access_write == 0) && // アクセス権のフラグが下りている
(this->pRomHeader->s.access_control.sdmc_access_read == 0 ) )
{
this->hErrorList->Add( this->makeMrcError("SDAccessPriv") );
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::DSiShop,
"SDAccessPriv") );
}
}
} //else
@ -872,7 +906,7 @@ void RCSrl::mrcPadding(FILE *fp)
if( (offset + padsize) > filesize )
{
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"PaddingRead", padstr) );
return;
}
@ -882,7 +916,7 @@ void RCSrl::mrcPadding(FILE *fp)
if( padsize != fread( buf, 1, padsize, fp ) )
{
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"PaddingRead", padstr) );
delete []buf;
return;
@ -900,7 +934,7 @@ void RCSrl::mrcPadding(FILE *fp)
if( !bResult )
{
this->hErrorList->Add( this->makeMrcError(
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk,
RCMrcError::PurposeType::Production | RCMrcError::PurposeType::CardKiosk | RCMrcError::PurposeType::CardDistribution,
"PaddingValue", padstr, romstr) );
}
delete []buf;
@ -1268,38 +1302,66 @@ void RCSrl::mrcTrialApp(FILE *fp)
// 表示するときに振り分けをする
// Touch!Try!DS
if( this->IsTmpJump )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::DSStation, "DSStationTmpJump") );
}
fseek( fp, 0, SEEK_END );
u32 filesize = ftell(fp); // 実ファイルサイズ
if( filesize > (96 * 1024 * 1024) )
{
this->hWarnList->Add( this->makeMrcError(RCMrcError::PurposeType::DSStation, "DSStationRomSize") );
}
bool use_nis = false;
for each( RCLicense ^lic in this->hLicenseList )
{
if( lic->Publisher->Equals( "NINTENDO" ) && lic->Name->Equals( "NIS_FOR_TWLSDK" ) )
if( lic->Publisher->Equals( "NINTENDO" ) && lic->Name->StartsWith( "NIS_FOR_TWLSDK" ) )
{
use_nis = true;
}
}
if( !use_nis )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::DSStation, "DSStationLib") );
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::TouchTryDS, "TouchTryDSLib") );
}
if( this->IsMediaNand )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::TouchTryDS, "TouchTryDSMedia") );
}
if( this->IsNormalJump )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::TouchTryDS, "TouchTryDSNormalJump") );
}
if( this->IsTmpJump )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::TouchTryDS, "TouchTryDSTmpJump") );
}
if( this->IsSD )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::TouchTryDS, "TouchTryDSSDCard") );
}
fseek( fp, 0, SEEK_END );
u32 filesize = ftell(fp); // 実ファイルサイズ
if( filesize > (96 * 1024 * 1024) )
{
this->hWarnList->Add( this->makeMrcError(RCMrcError::PurposeType::TouchTryDS, "TouchTryDSRomSize") );
}
// Nintendo Zone
if( !this->IsTmpJump )
// システムコール
u8 syscall[32];
u32 offset = this->pRomHeader->s.main_rom_offset;
fseek( fp, offset, SEEK_SET );
if( 32 != fread( syscall, 1, 32, fp ) )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::Zone, "ZoneTmpJump") );
return;
}
if( filesize > (5 * 1024 * 1024 / 2) )
int i;
for( i=0; i < 32; i++ )
{
this->hWarnList->Add( this->makeMrcError(RCMrcError::PurposeType::Zone, "ZoneRomSize") );
if( syscall[i] != 0x00 )
break;
}
if( i == 32 ) // 全部0
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::TouchTryDS, "TouchTryDSSyscall") ); // SDK付属のときダメ
}
else
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::DSDownload, "DSDownloadSyscall") ); // SDK付属でないとダメ
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::Zone, "ZoneSyscall") );
}
// Zone or DS Download Service
if( this->pRomHeader->s.platform_code == PLATFORM_CODE_TWL_HYBLID )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::Zone, "ZoneHybrid") );
@ -1307,5 +1369,30 @@ void RCSrl::mrcTrialApp(FILE *fp)
if( this->pRomHeader->s.platform_code == PLATFORM_CODE_TWL_LIMITED )
{
this->hWarnList->Add( this->makeMrcError(RCMrcError::PurposeType::Zone, "ZoneLimited") );
this->hWarnList->Add( this->makeMrcError(RCMrcError::PurposeType::DSDownload, "DSDownloadLimited") );
}
if( filesize > (5 * 1024 * 1024 / 2) )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::Zone, "ZoneRomSize") );
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::DSDownload, "DSDownloadRomSize") );
}
if( !this->HasDSDLPlaySign )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::DSDownload, "DSDownloadCloneBoot") );
}
if( this->IsGameCardOn || this->IsGameCardNitro )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::Zone, "ZoneCardAccess") );
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::DSDownload, "DSDownloadCardAccess") );
}
if( !this->IsMediaNand )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::Zone, "ZoneMedia") );
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::DSDownload, "DSDownloadMedia") );
}
if( !this->IsTmpJump )
{
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::Zone, "ZoneTmpJump") );
this->hErrorList->Add( this->makeMrcError(RCMrcError::PurposeType::DSDownload, "DSDownloadTmpJump") );
}
} //mrcTrialApp()

View File

@ -60,11 +60,11 @@
<begin>1b4</begin><end>1b7</end><modify>False</modify><affect>True</affect>
</TouchTryDSSDCard>
<TouchTryDSSDK>
<TouchTryDSSyscall>
<name>Touch!Try!DS体験版対応</name>
<sentence>Touch!Try!DS体験版では、SDK付属のシステムコールライブラリを使用せず、弊社より体験版専用に提供されたライブラリを使用してください。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</TouchTryDSSDK>
</TouchTryDSSyscall>
<TouchTryDSRomSize>
<name>Touch!Try!DS体験版対応</name>
@ -97,11 +97,11 @@
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</ZoneCardAccess>
<ZoneLib>
<ZoneSyscall>
<name>Nintendo Zone対応</name>
<sentence>Nintendo ZoneソフトではSDK付属のシステムコールライブラリを使用する必要があります。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</ZoneLib>
</ZoneSyscall>
<ZoneMedia>
<name>Nintendo Zone対応</name>
@ -140,11 +140,11 @@
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</DSDownloadCardAccess>
<DSDownloadLib>
<DSDownloadSyscall>
<name>DSダウンロードサービス/ニンテンドーチャンネル対応</name>
<sentence>DSダウンロードサービスもしくはみんなのニンテンドーチャンネル向けソフトではSDK付属のシステムコールライブラリを使用する必要があります。</sentence>
<begin>0</begin><end>0</end><modify>False</modify><affect>True</affect>
</DSDownloadLib>
</DSDownloadSyscall>
<DSDownloadMedia>
<name>DSダウンロードサービス/ニンテンドーチャンネル対応</name>