From ba4aa375dee609428c8ac4be68e8502d0a40e9e2 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Thu, 8 May 2008 08:59:22 +0000 Subject: [PATCH] =?UTF-8?q?(=E6=9B=B4=E6=96=B0:Akabane=20Jumpei)=20?= =?UTF-8?q?=E3=83=BB=E9=96=A2=E6=95=B0=E5=90=8D=E4=BF=AE=E6=AD=A3=20?= =?UTF-8?q?=E3=83=BBHotSwFinalize=E5=87=A6=E7=90=86=E3=81=A7=E3=80=81?= =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=83=89=E3=83=96=E3=83=BC=E3=83=88=E3=81=AE?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AF=E3=82=B9=E3=83=AD=E3=83=83=E3=83=88?= =?UTF-8?q?=E3=81=AE=E9=9B=BB=E6=BA=90=E3=82=92=E8=90=BD=E3=81=A8=E3=81=95?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20=E3=83=BBHotSwFinalize=E5=87=A6=E7=90=86=E3=81=A7=E3=80=81?= =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=83=89=E3=82=92Game=E3=83=A2=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=AB=E7=A7=BB=E8=A1=8C=E3=81=95=E3=81=9B=E3=82=8B?= =?UTF-8?q?=E3=81=A8=E3=81=8D=E3=81=AF=E3=80=81=E4=BA=8B=E5=89=8D=E3=81=AB?= =?UTF-8?q?=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=82=93=E3=81=A0RomHeader=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= 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@1292 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../libraries_sysmenu/hotsw/ARM7/src/hotsw.c | 99 ++++++------------- 1 file changed, 30 insertions(+), 69 deletions(-) diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 2dbba736..8a2efff0 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -86,7 +86,7 @@ static HotSwState ReadSecureModeCardData(void); static void ClearCardFlgs(void); static void FinalizeHotSw(HotSwApliType type); -static BOOL ShiftGameMode(void); +static BOOL ChangeGameMode(void); static void ClearUnnecessaryCardRegister(void); static void ClearAllCardRegister(void); @@ -408,7 +408,11 @@ static HotSwState LoadCardData(void) s_debuggerFlg = FALSE; } } - +#if 0 + else{ + s_debuggerFlg = FALSE; + } +#endif // 初回のRomエミュレーション情報を使用 if(HOTSWi_IsRomEmulation()){ OS_PutString("Read Emulation ROM\n"); @@ -1612,9 +1616,9 @@ static void ClearCardFlgs(void) NANDアプリ起動なら スロット電源OFFして、カードスロット関連のレジスタをクリアする - - // NANDアプリ起動時の終了処理が確認できたら、、BOOTAPIでKillThreadでスレッドを殺せるようにしておく。 - // スレッドを殺す前に、IREQとDET割り込みを無効にしておく。 + NANDアプリ起動時の終了処理が確認できたら、、BOOTAPIでKillThreadでスレッドを殺せるようにしておく。 + スレッドを殺す前に、IREQとDET割り込みを無効にしておく。 + *---------------------------------------------------------------------------*/ static void FinalizeHotSw(HotSwApliType type) { @@ -1622,41 +1626,38 @@ static void FinalizeHotSw(HotSwApliType type) BOOL isCardExist; if(finalized){ - OS_PutString("HotSw has been already finalized..."); return; } finalized = TRUE; + + // ポーリングスレッドを消去 + OS_KillThread( &HotSwThreadData.monitorThread, NULL ); + + if(type == HOTSW_APLITYPE_CARD){ + ClearUnnecessaryCardRegister(); + return; + } isCardExist = HOTSW_IsCardExist(); McPowerOff(); - // ポーリングスレッドを消去 - OS_KillThread( &HotSwThreadData.monitorThread, NULL ); - // カードがなかったら、レジスタクリアしてリターン if(!isCardExist){ ClearAllCardRegister(); - return; } switch(type){ - // Card Application Boot - case HOTSW_APLITYPE_CARD: - OS_PutString("Finalize Type : Card Application\n"); - break; - // NTR NAND Application Boot case HOTSW_APLITYPE_NTR_NAND: OS_PutString("Finalize Type : NTR NAND Application\n"); - if(!ShiftGameMode()){ + if(!ChangeGameMode()){ ClearAllCardRegister(); - McPowerOff(); - OS_PutString("Failed To Shift Game Mode... Card Slot Power Off\n"); + OS_PutString("Failed To Change Game Mode... Card Slot Power Off\n"); return; } @@ -1674,6 +1675,7 @@ static void FinalizeHotSw(HotSwApliType type) McPowerOn(); s_cbData.modeType = HOTSW_MODE2; + (void)LoadTable(); (void)ReadBootSegNormal(&s_cbData); OS_PutString("- game card on flg is TRUE : now Normal Mode\n"); @@ -1682,12 +1684,11 @@ static void FinalizeHotSw(HotSwApliType type) // else default: - OS_PutString("Finalize Type : Unexpected Type\n"); - ClearAllCardRegister(); - McPowerOff(); + OS_PutString("Finalize Type : Unexpected Type\n"); + break; } @@ -1697,15 +1698,13 @@ static void FinalizeHotSw(HotSwApliType type) /*---------------------------------------------------------------------------* - Name: ShiftGameMode + Name: ChangeGameMode Description: Nitro互換のRomHeaderを読んで、Game Modeに移行させる *---------------------------------------------------------------------------*/ -BOOL ShiftGameMode(void) +static BOOL ChangeGameMode(void) { HotSwState state; - - MI_CpuClear32(&s_cbData, sizeof(CardBootData)); #ifndef DEBUG_USED_CARD_SLOT_B_ CARD_LockRom(s_CardLockID); @@ -1716,40 +1715,16 @@ BOOL ShiftGameMode(void) McPowerOn(); s_cbData.pBootSegBuf = s_pBootSegBuffer; - s_cbData.modeType = HOTSW_MODE1; + + // ---------------------- Normal Mode ---------------------- state = LoadTable(); - - // ---------------------- Normal Mode ---------------------- state = ReadIDNormal(&s_cbData); - - // ARM9と排他制御 - LockHotSwRsc(&SYSMi_GetWork()->lockCardRsc); - - // Boot Segment読み込み - // [TODO] Rom Header読み込む必要あるのか?挿したときに読み込まれた情報を使えばよい? state = ReadBootSegNormal(&s_cbData); - // CRCのチェック - // [TODO] Rom Header読み込まないんだったらCRCのチェックもいらない - { - u16 crc16; - - // ROMヘッダCRCを算出してチェック。NintendoロゴCRCも確認。 - crc16 = SVC_GetCRC16( 65535, s_cbData.pBootSegBuf, 0x015e ); - - if( ( crc16 != s_cbData.pBootSegBuf->rh.s.header_crc16 ) || ( 0xcf56 != crc16 ) ){ - state = HOTSW_CRC_CHECK_ERROR; - } - } - // NTR互換 Rom Headerをコピー - // [TODO] HW_CARD_ROM_HEADERだとデータが消されるっぽい - MI_NDmaCopy(HOTSW_NDMA_NO, (void *)SYSM_CARD_ROM_HEADER_BAK, (void *)HW_CARD_ROM_HEADER, HW_CARD_ROM_HEADER_SIZE); +// MI_NDmaCopy(HOTSW_NDMA_NO, (void *)SYSM_CARD_ROM_HEADER_BAK, (void *)HW_CARD_ROM_HEADER, HW_CARD_ROM_HEADER_SIZE); - OS_TPrintf("SYSM_CARD_ROM_HEADER_BAK( 0x%08x ) -> HW_CARD_ROM_HEADER( 0x%08x ) size : 0x%08x\n", SYSM_CARD_ROM_HEADER_BAK, HW_CARD_ROM_HEADER, HW_CARD_ROM_HEADER_SIZE); - - // カード読みパラメータ設定 if(s_debuggerFlg){ s_cbData.cardType = ROM_EMULATION; s_cbData.gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param & ~SCRAMBLE_MASK; @@ -1759,28 +1734,20 @@ BOOL ShiftGameMode(void) s_cbData.gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param; } s_cbData.secureLatency = AddLatency2ToLatency1(s_cbData.pBootSegBuf->rh.s.secure_cmd_param); - - // ARM9と排他制御ここまで - UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc); - // KeyTable初期化 + MI_CpuClear32(&s_cbData.keyTable, sizeof(BLOWFISH_CTX)); + MI_CpuClear32(s_cbData.keyBuf, sizeof(s_cbData.keyBuf)); + MakeBlowfishTableDS(&s_cbData, 8); GenVA_VB_VD(); - - // Secure Modeへ state = ChangeModeNormal(&s_cbData); // ---------------------- Secure Mode ---------------------- - // PNG On 設定 state = s_funcTable[s_cbData.cardType].SetPNG_S(&s_cbData); - - // 本体側符号化回路初期化 SetMCSCR(); // [TODO] デバッグ用に読み込み。後で消す。 state = s_funcTable[s_cbData.cardType].ReadID_S(&s_cbData); - - // Game Modeへ state = s_funcTable[s_cbData.cardType].ChangeMode_S(&s_cbData); // ---------------------- Game Mode ---------------------- @@ -1822,12 +1789,6 @@ BOOL ShiftGameMode(void) static void ClearUnnecessaryCardRegister(void) { - // Chattering Coungerをクリア [d31-d16 Chattering Counter] - reg_MI_MC1 &= ~REG_MI_MC1_CC_MASK; - - // Counter-Aをクリア - reg_MI_MC2 = REGCLEAR_16; - // HotSwで使っている割り込みを無効にする (void)OS_DisableIrq(); (void)OS_SetIrqMask( OS_GetIrqMask() & ~(HOTSW_IF_CARD_DET | HOTSW_IF_CARD_IREQ) );