・Finalize処理を変更

→カードタイプ(NTR/TWL)を判別して、Game/Game2モードに移行するように変更
・RomHeader/Secure/Secure2領域のCRCを計算して、値をShared領域に格納するように変更

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20081031_TwlCard_Tester@2656 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
(no author) 2008-10-31 05:30:18 +00:00
parent 319f1f6011
commit f52700d03f
2 changed files with 54 additions and 14 deletions

View File

@ -97,7 +97,7 @@ static void ClearCardFlgs(void);
static void FinalizeHotSw(HotSwCardState state);
static void ForceNitroModeToFinalize(void);
static void ForceNormalModeToFinalize(void);
static BOOL ChangeGameMode(void);
static BOOL ChangeCardMode(BOOL isApplicationJump);
static void ClearCardIrq(void);
static void ClearAllCardRegister(void);
@ -1870,13 +1870,13 @@ final:
/*---------------------------------------------------------------------------*
Name: ForceNitroModeToFinalize
Description: Nitro互換のGame Modeに強制移行させる
Description: Game Mode / Game2 Modeに移行させる
*---------------------------------------------------------------------------*/
static void ForceNitroModeToFinalize(void)
{
s_cbData.id_gam = 0;
if(!ChangeGameMode()){
if(!ChangeCardMode( FALSE )){
ClearAllCardRegister();
McPowerOff();
@ -1914,20 +1914,26 @@ static void ForceNormalModeToFinalize(void)
/*---------------------------------------------------------------------------*
Name: ChangeGameMode
Name: ChangeCardMode
Description: Nitro互換のRomHeaderを読んでGame Modeに移行させる
Description: RomHeader / Secure (Secure2) CRCを計算
Gameモード / Game2モードに移行させる
*---------------------------------------------------------------------------*/
static BOOL ChangeGameMode(void)
static BOOL ChangeCardMode(BOOL isApplicationJump)
{
HotSwState state;
// カードのロック
CARD_LockRom(s_CardLockID);
McPowerOff();
McPowerOn();
s_cbData.pBootSegBuf = s_pBootSegBuffer;
// バッファを設定
s_cbData.pBootSegBuf = s_pBootSegBuffer;
s_cbData.pSecureSegBuf = s_pSecureSegBuffer;
s_cbData.pSecure2SegBuf = s_pSecure2SegBuffer;
s_cbData.modeType = HOTSW_MODE1;
// ---------------------- Normal Mode ----------------------
@ -1935,6 +1941,9 @@ static BOOL ChangeGameMode(void)
state = ReadIDNormal(&s_cbData);
state = ReadBootSegNormal(&s_cbData);
// RomHeaderのCRC16の計算
SYSMi_GetWork()->flags.hotsw.romHeaderCRC = SVC_GetCRC16( 65535, s_cbData.pBootSegBuf, BOOT_SEGMENT_SIZE );
if(s_isRomEmu){
s_cbData.cardType = ROM_EMULATION;
s_cbData.gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param & ~SCRAMBLE_MASK;
@ -1953,20 +1962,47 @@ static BOOL ChangeGameMode(void)
state = ChangeModeNormal(&s_cbData);
// ---------------------- Secure Mode ----------------------
state = s_funcTable[s_isRomEmu].SetPNG_S(&s_cbData);
SetMCSCR();
state = s_funcTable[s_isRomEmu].ChangeMode_S(&s_cbData);
state = ReadSecureModeCardData();
// ---------------------- Game Mode ----------------------
// Secure SegmentのCRC16の計算と格納
SYSMi_GetWork()->flags.hotsw.secure1CRC = SVC_GetCRC16( 65535, s_cbData.pSecureSegBuf, SECURE_SEGMENT_SIZE );
// カード種別の判定
// TWLカード → Game2モード
// NTRカード → Gameモード
// アプリジャンプ → Gameモード
if(!isApplicationJump && s_cbData.id_nml & HOTSW_ROMID_TWLROM_MASK){
s_cbData.modeType = HOTSW_MODE2;
// ---------------------- Reset ----------------------
McPowerOff();
McPowerOn();
// ---------------------- Normal Mode ----------------------
state = ReadSecureModeCardData();
MakeBlowfishTableTWL(&s_cbData, 8, s_bondingOp); // s_bondingOpの値はHotSw_Initで格納される
GenVA_VB_VD();
state = ChangeModeNormal2(&s_cbData);
// ---------------------- Secure2 Mode ----------------------
state = ReadSecureModeCardData();
// Secure SegmentのCRC16の計算と格納
SYSMi_GetWork()->flags.hotsw.secure2CRC = SVC_GetCRC16( 65535, s_cbData.pSecure2SegBuf, SECURE_SEGMENT_SIZE );
}
state = s_funcTable[s_isRomEmu].ChangeMode_S(&s_cbData);
// ---------------------- Game2 Mode ----------------------
state = ReadIDGame(&s_cbData);
if(s_cbData.id_nml != s_cbData.id_gam){
state = HOTSW_ID_CHECK_ERROR;
}
HOTSW_TPrintf("Card Normal ID : 0x%08x\n", s_cbData.id_nml);
HOTSW_TPrintf("Card Game ID : 0x%08x\n", s_cbData.id_gam);
#ifdef USE_NEW_DMA
HOTSW_WaitNDmaCtrl(HOTSW_NDMA_NO);
#else
@ -1975,6 +2011,7 @@ static BOOL ChangeGameMode(void)
HOTSW_WaitCardCtrl();
// カードのアンロック
CARD_UnlockRom(s_CardLockID);
if(state == HOTSW_SUCCESS){

View File

@ -127,6 +127,9 @@ typedef struct SYSM_work {
vu8 isCardStateChanged; // カード状態更新フラグ
vu8 isBusyHotSW; // 活線挿抜処理中?
vu8 isKeyTableLoadReady; // Key Tableのロード準備完了
vu16 romHeaderCRC;
vu16 secure1CRC;
vu16 secure2CRC;
}hotsw;
}flags; // 9B