開発機用シリアルNoの先頭が'V'になったことに対応。

北米版のシリアルNoを初めて生成する際、他のリージョン用とは異なる8桁の数字が生成されていた問題を修正。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2380 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
kamikawa 2008-09-03 01:53:13 +00:00
parent 213f160b6d
commit 98acfbefbd

View File

@ -441,13 +441,18 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi
LCFG_THW_SetValidLanguageBitmap( s_langBitmapList[ region ] );
// シリアルNo.のセット
if( pSerialNo == NULL ) {
if( pSerialNo != NULL )
{
LCFG_THW_SetSerialNo( pSerialNo );
}
else
{
// 量産工程でないとシリアルNo.は用意できないので、ここではMACアドレスをもとに適当な値をセットする。
u8 buffer[ 12 ] = "SERIAL"; // 適当な文字列をMACアドレスと結合してSHA1を取り、仮SerialNoとする。
u8 serialNoOld[ SVC_SHA1_DIGEST_SIZE ];
u8 serialNoNew[ SVC_SHA1_DIGEST_SIZE ];
u8 sha1_buffer[ SVC_SHA1_DIGEST_SIZE ];
int i;
int i,j;
int len;
int offset;
@ -468,11 +473,18 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi
// 新しいシリアルNoをクリアしておく
MI_CpuClear8( serialNoNew, sizeof(serialNoNew) );
// シリアルNoの先頭が'T'でなければ不正なので仮のシリアルNo.を作成する
if ( serialNoOld[0] != 'T')
// シリアルNoの先頭が'T'(量産用)または'V'(開発用)でなければ不正なので仮のシリアルNo.を作成する
if ( serialNoOld[0] != 'T' && serialNoOld[0] != 'V')
{
// 1バイト目はTWLの'T'
serialNoNew[0] = 'T';
// 1バイト目は量産用なら'T'、その他なら'V'
if (SCFG_ReadBondingOption() == SCFG_OP_PRODUCT)
{
serialNoNew[0] = 'T';
}
else
{
serialNoNew[0] = 'V';
}
// 2バイト目はリージョン別ASCII
serialNoNew[1] = (u8)regionAsciiForSerialNo[region];
// 米国リージョン以外は3バイト目にEMS仮シリアルNo.なので任天堂の'N'
@ -484,8 +496,8 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi
// 数字8桁
OS_GetMacAddress( buffer + 6 );
SVC_CalcSHA1( sha1_buffer, buffer, sizeof(buffer) );
for( i = offset; i < len-1; i++ ) {
serialNoNew[ i ] = (u8)( ( sha1_buffer[ i ] % 10 ) + 0x30 );
for( i=offset,j=0; i < len-1; i++,j++ ) {
serialNoNew[ i ] = (u8)( ( sha1_buffer[ j ] % 10 ) + 0x30 );
}
// チェックコード取得
@ -494,11 +506,18 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi
// 仮シリアルNo.であることの印として14バイト目を'K'とする
serialNoNew[13] = 'K';
}
// シリアルNoの先頭が'T'である場合ユニーク数字8桁はそのままで他を変更する
// シリアルNoの先頭が'T'(量産用)または'V'(開発用)である場合ユニーク数字8桁はそのままで他を変更する
else
{
// 1バイト目はTWLの'T'
serialNoNew[0] = 'T';
// 1バイト目は量産用なら'T'、その他なら'V'
if (SCFG_ReadBondingOption() == SCFG_OP_PRODUCT)
{
serialNoNew[0] = 'T';
}
else
{
serialNoNew[0] = 'V';
}
// 2バイト目はリージョン別ASCII
serialNoNew[1] = (u8)regionAsciiForSerialNo[region];
// 米国リージョン以外は3バイト目にEMS
@ -536,8 +555,6 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWi
OS_TPrintf( "serialNo : %s\n", serialNoNew );
LCFG_THW_SetSerialNo( serialNoNew );
}else {
LCFG_THW_SetSerialNo( pSerialNo );
}
// ランチャーTitleID_Loのセット