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);
|
HotSwState LoadTable(void);
|
||||||
|
|
||||||
// デバッガのROMエミュレーション情報読み込み
|
// デバッガのROMエミュレーション情報読み込み
|
||||||
HotSwState ReadRomEmulationInfo(CardBootData *cbd);
|
HotSwState ReadRomEmulationInfo(SYSMRomEmuInfo *info);
|
||||||
|
|
||||||
|
|
||||||
// ■ セキュアモードのコマンド ■
|
// ■ セキュアモードのコマンド ■
|
||||||
|
|||||||
@ -290,11 +290,9 @@ typedef struct CardBootData{
|
|||||||
u32 arm7Ltd;
|
u32 arm7Ltd;
|
||||||
|
|
||||||
BOOL twlFlg;
|
BOOL twlFlg;
|
||||||
BOOL debuggerFlg;
|
|
||||||
|
|
||||||
u32 romStatus;
|
u32 romStatus;
|
||||||
|
|
||||||
u32 romEmuBuf[ROM_EMULATION_DATA_SIZE/sizeof(u32)];
|
|
||||||
u32 keyBuf[KEY_BUF_SIZE];
|
u32 keyBuf[KEY_BUF_SIZE];
|
||||||
|
|
||||||
CardTypeEx cardType;
|
CardTypeEx cardType;
|
||||||
|
|||||||
@ -353,11 +353,11 @@ HotSwState LoadTable(void)
|
|||||||
|
|
||||||
Description: Romエミュレーション情報の読み込み
|
Description: Romエミュレーション情報の読み込み
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadRomEmulationInfo(CardBootData *cbd)
|
HotSwState ReadRomEmulationInfo(SYSMRomEmuInfo *info)
|
||||||
{
|
{
|
||||||
u32 count=0;
|
u32 count=0;
|
||||||
u32 temp;
|
u32 temp;
|
||||||
u32 *dst = cbd->romEmuBuf;
|
u32 *dst = (void*)info;
|
||||||
|
|
||||||
// 量産用CPUでは平文アクセス防止のためリードしない
|
// 量産用CPUでは平文アクセス防止のためリードしない
|
||||||
if ( ! (*(u8*)(OS_CHIPTYPE_DEBUGGER_ADDR) & OS_CHIPTYPE_DEBUGGER_MASK) )
|
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 |= cbd->vbi;
|
||||||
cndLE.dw |= data << HSWOP_S_VA_SHIFT;
|
cndLE.dw |= data << HSWOP_S_VA_SHIFT;
|
||||||
|
|
||||||
if(!cbd->debuggerFlg){
|
if(!HOTSWi_IsRomEmulation()){
|
||||||
// コマンドの暗号化
|
// コマンドの暗号化
|
||||||
EncryptByBlowfish( &cbd->keyTable, (u32*)&cndLE.b[4], (u32*)cndLE.b );
|
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);
|
SetSecureCommand(S_RD_ID, cbd);
|
||||||
@ -520,7 +520,7 @@ HotSwState ReadIDSecure(CardBootData *cbd)
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadSegSecure(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 *buf = (cbd->modeType == HOTSW_MODE1) ? cbd->pSecureSegBuf : cbd->pSecure2SegBuf;
|
||||||
u32 loop, pc, size, interval, i, j=0, k;
|
u32 loop, pc, size, interval, i, j=0, k;
|
||||||
u64 segNum = 4;
|
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);
|
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);
|
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);
|
SetSecureCommand(S_CHG_MODE, cbd);
|
||||||
|
|||||||
@ -105,6 +105,8 @@ static u32 *s_pSecureSegBuffer; //
|
|||||||
static u32 *s_pSecure2SegBuffer; // カード抜けてもバッファの場所覚えとく
|
static u32 *s_pSecure2SegBuffer; // カード抜けてもバッファの場所覚えとく
|
||||||
|
|
||||||
static CardBootData s_cbData;
|
static CardBootData s_cbData;
|
||||||
|
static SYSMRomEmuInfo s_romEmuInfo;
|
||||||
|
static BOOL debuggerFlg;
|
||||||
|
|
||||||
// HMACSHA1の鍵
|
// HMACSHA1の鍵
|
||||||
static u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = {
|
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;
|
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と排他制御する
|
// バナーリードが完了して、フラグ処理が終わるまでARM9と排他制御する
|
||||||
LockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
|
LockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
|
||||||
@ -323,24 +325,19 @@ static HotSwState LoadCardData(void)
|
|||||||
if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked )
|
if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked )
|
||||||
{
|
{
|
||||||
// Romエミュレーション情報を取得
|
// Romエミュレーション情報を取得
|
||||||
state = ReadRomEmulationInfo(&s_cbData);
|
state = ReadRomEmulationInfo(&s_romEmuInfo);
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
|
|
||||||
// 取得したRomエミュレーション情報を比較
|
// 取得したRomエミュレーション情報を比較
|
||||||
s_cbData.debuggerFlg = TRUE;
|
debuggerFlg = TRUE;
|
||||||
if ( romEmuInfo->magic_code != SYSM_ROMEMU_INFO_MAGIC_CODE ){
|
if ( romEmuInfo->magic_code != SYSM_ROMEMU_INFO_MAGIC_CODE ){
|
||||||
s_cbData.debuggerFlg = FALSE;
|
debuggerFlg = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初回のRomエミュレーション情報を使用
|
// 初回のRomエミュレーション情報を使用
|
||||||
if(s_cbData.debuggerFlg &&
|
if(HOTSWi_IsRomEmulation()){
|
||||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
OS_PutString("Read Emuration ROM\n");
|
||||||
romEmuInfo->isEnableSlot1){
|
|
||||||
#else
|
|
||||||
romEmuInfo->isEnableSlot2){
|
|
||||||
#endif
|
|
||||||
OS_PutString("Read Debugger\n");
|
|
||||||
s_cbData.cardType = ROM_EMULATION;
|
s_cbData.cardType = ROM_EMULATION;
|
||||||
s_cbData.gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param & ~SCRAMBLE_MASK;
|
s_cbData.gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param & ~SCRAMBLE_MASK;
|
||||||
OS_TPrintf("SYSMi_GetWork()->gameCommondParam : 0x%08x\n", s_cbData.gameCommondParam);
|
OS_TPrintf("SYSMi_GetWork()->gameCommondParam : 0x%08x\n", s_cbData.gameCommondParam);
|
||||||
@ -541,7 +538,32 @@ HotSwState HOTSWi_RefreshBadBlock(u32 romMode)
|
|||||||
* ----------------------------------------------------------------- */
|
* ----------------------------------------------------------------- */
|
||||||
void* HOTSW_GetRomEmulationBuffer(void)
|
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 );
|
MI_CpuCopy8( HOTSW_GetRomEmulationBuffer(), &s_romEmuInfo, ROM_EMULATION_DATA_SIZE );
|
||||||
SYSMi_GetWork()->flags.hotsw.isOnDebugger = s_cbData.debuggerFlg;
|
SYSMi_GetWork()->flags.hotsw.isOnDebugger = debuggerFlg;
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
|
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
|
||||||
|
|||||||
@ -84,6 +84,12 @@ SDK_INLINE void* HOTSW_GetRomEmulationBuffer(void)
|
|||||||
}
|
}
|
||||||
#endif // SDK_ARM9
|
#endif // SDK_ARM9
|
||||||
|
|
||||||
|
// ISデバッガ上で動作しているか?
|
||||||
|
BOOL HOTSWi_IsRunOnDebugger(void);
|
||||||
|
|
||||||
|
// ROMをエミュレーションしているか?
|
||||||
|
BOOL HOTSWi_IsRomEmulation(void);
|
||||||
|
|
||||||
// デバッガ通信用にカードスロットの電源をONにする。
|
// デバッガ通信用にカードスロットの電源をONにする。
|
||||||
void HOTSWi_TurnCardPowerOn(u32 slot);
|
void HOTSWi_TurnCardPowerOn(u32 slot);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user