本体ID毎にゲームカードのスクランブルが変化するように対応。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2004 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-07-28 00:47:04 +00:00
parent a0c0229379
commit 63d1dbcaa7

View File

@ -1214,12 +1214,20 @@ static void GenVA_VB_VD(void)
SYSM_work* sw = SYSMi_GetWork();
u32 dummy = 0;
MATHRandContext32 rnd;
u64 fuse64 = SCFG_ReadFuseData();
u32 fuse32[2];
// 念のためeFuseIDを推測できなくする
fuse32[0] = ((u32*)&fuse64)[0];
fuse32[1] = ((u32*)&fuse64)[1];
EncryptByBlowfish(&s_cbData.keyTable, &fuse32[0], &fuse32[1]);
// 乱数を初期化
// チックRTC初回ロード値ゲームコードを種とする。
// チックRTC初回ロード値ゲームコードeFuseIDを種とする。
// (起動する度に変化するパラメータと組み合わせる。
// Vカウンタは2130サイクル変化しないので固定値になりやすい。
MATH_InitRand32(&rnd, OS_GetTick() ^ sw->Rtc1stData.words[0] ^ sw->Rtc1stData.words[1] ^ *(u32*)(s_cbData.pBootSegBuf->rh.s.game_code));
// 起動毎、ゲームカード毎、本体毎にスクランブルが変化することになる。
MATH_InitRand32(&rnd, OS_GetTick() ^ sw->Rtc1stData.words[0] ^ sw->Rtc1stData.words[1] ^ *(u32*)(s_cbData.pBootSegBuf->rh.s.game_code) ^ fuse32[0] ^ fuse32[1]);
s_cbData.vae = MATH_Rand32(&rnd, 0);
s_cbData.vbi = MATH_Rand32(&rnd, 0);