mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
カード抜去時にROMエミュレーション情報をクリアしないように変更。
NANDアプリデバッグ時にROMエミュレーションしないケースに対応。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1074 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
4db0d8c3d8
commit
cd6d0fbfa9
@ -38,7 +38,7 @@ HotSwState ChangeModeNormal2(CardBootData *cbd);
|
||||
HotSwState LoadTable(void);
|
||||
|
||||
// デバッガのROMエミュレーション情報読み込み
|
||||
HotSwState ReadRomEmulationInfo(CardBootData *cbd);
|
||||
HotSwState ReadRomEmulationInfo(SYSMRomEmuInfo *info);
|
||||
|
||||
|
||||
// ■ セキュアモードのコマンド ■
|
||||
|
||||
@ -290,11 +290,9 @@ typedef struct CardBootData{
|
||||
u32 arm7Ltd;
|
||||
|
||||
BOOL twlFlg;
|
||||
BOOL debuggerFlg;
|
||||
|
||||
u32 romStatus;
|
||||
|
||||
u32 romEmuBuf[ROM_EMULATION_DATA_SIZE/sizeof(u32)];
|
||||
u32 keyBuf[KEY_BUF_SIZE];
|
||||
|
||||
CardTypeEx cardType;
|
||||
|
||||
@ -353,11 +353,11 @@ HotSwState LoadTable(void)
|
||||
|
||||
Description: Romエミュレーション情報の読み込み
|
||||
*---------------------------------------------------------------------------*/
|
||||
HotSwState ReadRomEmulationInfo(CardBootData *cbd)
|
||||
HotSwState ReadRomEmulationInfo(SYSMRomEmuInfo *info)
|
||||
{
|
||||
u32 count=0;
|
||||
u32 temp;
|
||||
u32 *dst = cbd->romEmuBuf;
|
||||
u32 *dst = (void*)info;
|
||||
|
||||
// 量産用CPUでは平文アクセス防止のためリードしない
|
||||
if ( ! (*(u8*)(OS_CHIPTYPE_DEBUGGER_ADDR) & OS_CHIPTYPE_DEBUGGER_MASK) )
|
||||
@ -428,7 +428,7 @@ static void SetSecureCommand(SecureCommandType type, CardBootData *cbd)
|
||||
cndLE.dw |= cbd->vbi;
|
||||
cndLE.dw |= data << HSWOP_S_VA_SHIFT;
|
||||
|
||||
if(!cbd->debuggerFlg){
|
||||
if(!HOTSWi_IsRomEmulation()){
|
||||
// コマンドの暗号化
|
||||
EncryptByBlowfish( &cbd->keyTable, (u32*)&cndLE.b[4], (u32*)cndLE.b );
|
||||
}
|
||||
@ -481,7 +481,7 @@ HotSwState ReadIDSecure(CardBootData *cbd)
|
||||
}
|
||||
|
||||
// スクランブルの設定
|
||||
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_RD_ID, cbd);
|
||||
@ -520,7 +520,7 @@ HotSwState ReadIDSecure(CardBootData *cbd)
|
||||
*---------------------------------------------------------------------------*/
|
||||
HotSwState ReadSegSecure(CardBootData *cbd)
|
||||
{
|
||||
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
u32 scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
u32 *buf = (cbd->modeType == HOTSW_MODE1) ? cbd->pSecureSegBuf : cbd->pSecure2SegBuf;
|
||||
u32 loop, pc, size, interval, i, j=0, k;
|
||||
u64 segNum = 4;
|
||||
@ -605,7 +605,7 @@ HotSwState SwitchONPNGSecure(CardBootData *cbd)
|
||||
}
|
||||
|
||||
// スクランブルの設定
|
||||
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_PNG_ON, cbd);
|
||||
@ -643,7 +643,7 @@ HotSwState SwitchOFFPNGSecure(CardBootData *cbd)
|
||||
}
|
||||
|
||||
// スクランブルの設定
|
||||
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_PNG_OFF, cbd);
|
||||
@ -683,7 +683,7 @@ HotSwState ChangeModeSecure(CardBootData *cbd)
|
||||
}
|
||||
|
||||
// スクランブルの設定
|
||||
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_CHG_MODE, cbd);
|
||||
|
||||
@ -105,6 +105,8 @@ static u32 *s_pSecureSegBuffer; //
|
||||
static u32 *s_pSecure2SegBuffer; // カード抜けてもバッファの場所覚えとく
|
||||
|
||||
static CardBootData s_cbData;
|
||||
static SYSMRomEmuInfo s_romEmuInfo;
|
||||
static BOOL debuggerFlg;
|
||||
|
||||
// HMACSHA1の鍵
|
||||
static u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = {
|
||||
@ -310,7 +312,7 @@ static HotSwState LoadCardData(void)
|
||||
s_cbData.cardType = (s_cbData.id_nml & HOTSW_ROMID_1TROM_MASK) ? DS_CARD_TYPE_2 : DS_CARD_TYPE_1;
|
||||
|
||||
{
|
||||
SYSMRomEmuInfo *romEmuInfo = (void *)s_cbData.romEmuBuf;
|
||||
SYSMRomEmuInfo *romEmuInfo = (void *)&s_romEmuInfo;
|
||||
|
||||
// バナーリードが完了して、フラグ処理が終わるまでARM9と排他制御する
|
||||
LockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
|
||||
@ -323,24 +325,19 @@ static HotSwState LoadCardData(void)
|
||||
if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked )
|
||||
{
|
||||
// Romエミュレーション情報を取得
|
||||
state = ReadRomEmulationInfo(&s_cbData);
|
||||
state = ReadRomEmulationInfo(&s_romEmuInfo);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
// 取得したRomエミュレーション情報を比較
|
||||
s_cbData.debuggerFlg = TRUE;
|
||||
debuggerFlg = TRUE;
|
||||
if ( romEmuInfo->magic_code != SYSM_ROMEMU_INFO_MAGIC_CODE ){
|
||||
s_cbData.debuggerFlg = FALSE;
|
||||
debuggerFlg = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// 初回のRomエミュレーション情報を使用
|
||||
if(s_cbData.debuggerFlg &&
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
romEmuInfo->isEnableSlot1){
|
||||
#else
|
||||
romEmuInfo->isEnableSlot2){
|
||||
#endif
|
||||
OS_PutString("Read Debugger\n");
|
||||
if(HOTSWi_IsRomEmulation()){
|
||||
OS_PutString("Read Emuration ROM\n");
|
||||
s_cbData.cardType = ROM_EMULATION;
|
||||
s_cbData.gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param & ~SCRAMBLE_MASK;
|
||||
OS_TPrintf("SYSMi_GetWork()->gameCommondParam : 0x%08x\n", s_cbData.gameCommondParam);
|
||||
@ -541,7 +538,32 @@ HotSwState HOTSWi_RefreshBadBlock(u32 romMode)
|
||||
* ----------------------------------------------------------------- */
|
||||
void* HOTSW_GetRomEmulationBuffer(void)
|
||||
{
|
||||
return s_cbData.romEmuBuf;
|
||||
return &s_romEmuInfo;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* HOTSWi_IsRunOnDebugger関数
|
||||
*
|
||||
* ISデバッガ上で動作しているか?
|
||||
* ----------------------------------------------------------------- */
|
||||
BOOL HOTSWi_IsRunOnDebugger(void)
|
||||
{
|
||||
return debuggerFlg;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* HOTSWi_IsRomEmulation関数
|
||||
*
|
||||
* ROMをエミュレーションしているか?
|
||||
* ----------------------------------------------------------------- */
|
||||
BOOL HOTSWi_IsRomEmulation(void)
|
||||
{
|
||||
return debuggerFlg &&
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
s_romEmuInfo.isEnableSlot1;
|
||||
#else
|
||||
s_romEmuInfo.isEnableSlot2;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
@ -583,10 +605,10 @@ static HotSwState LoadBannerData(void)
|
||||
}
|
||||
|
||||
// デバッガ情報
|
||||
if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked && s_cbData.debuggerFlg )
|
||||
if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked && debuggerFlg )
|
||||
{
|
||||
MI_CpuCopy8( HOTSW_GetRomEmulationBuffer(), &SYSMi_GetWork()->romEmuInfo, ROM_EMULATION_DATA_SIZE );
|
||||
SYSMi_GetWork()->flags.hotsw.isOnDebugger = s_cbData.debuggerFlg;
|
||||
MI_CpuCopy8( HOTSW_GetRomEmulationBuffer(), &s_romEmuInfo, ROM_EMULATION_DATA_SIZE );
|
||||
SYSMi_GetWork()->flags.hotsw.isOnDebugger = debuggerFlg;
|
||||
}
|
||||
|
||||
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
|
||||
|
||||
@ -84,6 +84,12 @@ SDK_INLINE void* HOTSW_GetRomEmulationBuffer(void)
|
||||
}
|
||||
#endif // SDK_ARM9
|
||||
|
||||
// ISデバッガ上で動作しているか?
|
||||
BOOL HOTSWi_IsRunOnDebugger(void);
|
||||
|
||||
// ROMをエミュレーションしているか?
|
||||
BOOL HOTSWi_IsRomEmulation(void);
|
||||
|
||||
// デバッガ通信用にカードスロットの電源をONにする。
|
||||
void HOTSWi_TurnCardPowerOn(u32 slot);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user