diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/dsCardCommon.h b/build/libraries_sysmenu/hotsw/ARM7/include/dsCardCommon.h index 19b0bbf1..8436a137 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/dsCardCommon.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/dsCardCommon.h @@ -38,7 +38,7 @@ HotSwState ChangeModeNormal2(CardBootData *cbd); HotSwState LoadTable(void); // デバッガのROMエミュレーション情報読み込み -HotSwState ReadRomEmulationInfo(CardBootData *cbd); +HotSwState ReadRomEmulationInfo(SYSMRomEmuInfo *info); // ■ セキュアモードのコマンド ■ diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h index 9082a559..39e5b52b 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h @@ -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; diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c index 9a49cac3..3e1128f3 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c @@ -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); diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index a08b3f27..945ba98f 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -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; diff --git a/include/sysmenu/hotsw/common/hotsw.h b/include/sysmenu/hotsw/common/hotsw.h index 6fe8208b..9a762da0 100644 --- a/include/sysmenu/hotsw/common/hotsw.h +++ b/include/sysmenu/hotsw/common/hotsw.h @@ -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);