diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index 70a74bf2..91f910cb 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -318,14 +318,6 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget* reg_SND_SMX_CNT = REG_SND_SMX_CNT_MIX_RATE_MASK | REG_SND_SMX_CNT_E_MASK; -#ifdef SDK_ARM7 - // デバッガではTWLカードスロット2を電源ON - if ( SYSM_IsRunOnDebugger() ) - { - HOTSWi_TurnCardPowerOn( 2 ); - } -#endif // SDK_ARM7 - #if !defined(FIRM_USE_PRODUCT_KEYS) || defined(SYSMENU_DISABLE_RETAIL_BOOT) // 開発鍵を使っている時は製品用CPUではTWLアプリはブートしない if ( ! (*(u8*)HWi_WSYS08_ADDR & HWi_WSYS08_OP_OPT_MASK) ) diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c index 7c9502d6..ef3e8de7 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c @@ -386,8 +386,12 @@ HotSwState ReadRomEmulationInfo(SYSMRomEmuInfo *info) u32 temp; u32 *dst = (void*)info; + MI_CpuClear8( info, sizeof(SYSMRomEmuInfo) ); + // 量産用CPUでは平文アクセス防止のためリードしない - if ( ! (*(u8*)(OS_CHIPTYPE_DEBUGGER_ADDR) & OS_CHIPTYPE_DEBUGGER_MASK) ) + if ( ! (*(u8*)HWi_WSYS08_ADDR & HWi_WSYS08_OP_OPT_MASK) || + ! ((OS_GetRunningConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_32MB) + ) { return HOTSW_SUCCESS; } diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 0025693a..a323f660 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -369,7 +369,7 @@ static HotSwState LoadCardData(void) // ARM9/7で不整合が発生しないようにRomエミュレーション情報ロードは初回のみ if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked ) { - // Romエミュレーション情報を取得 + // Romエミュレーション情報を取得(開発用CPUのみ) state = ReadRomEmulationInfo(&s_romEmuInfo); retval = (retval == HOTSW_SUCCESS) ? state : retval; @@ -1466,23 +1466,26 @@ void HOTSWi_TurnCardPowerOn(u32 slot) // 電源が落ちている最中なら待つ if ( (reg_MI_MC & mask) == (0x3 << shift) ) { - OS_SpinWait( OS_MSEC_TO_CPUCYC(1) ); + OS_Sleep(1); } if ( (reg_MI_MC & mask) == (0x0 << shift) ) { + // 3DMのリセット待ち + OS_Sleep(1); + reg_MI_MC = (u16)((reg_MI_MC & ~mask) | (0x1 << shift)); // VDDの安定期間 - OS_SpinWait( OS_MSEC_TO_CPUCYC(100) ); + OS_Sleep(10); reg_MI_MC = (u16)((reg_MI_MC & ~mask) | (0x2 << shift)); // RESBのLow期間 - OS_SpinWait( OS_MSEC_TO_CPUCYC(1) ); + OS_Sleep(27); reg_MI_MCCNT1_B = REG_MI_MCCNT1_RESB_MASK; - // RESBのHigh期間 - OS_SpinWait( OS_MSEC_TO_CPUCYC(100) ); + // カードへ最初のコマンドを送るまでの待ち時間 + OS_Sleep(120); } } @@ -1765,6 +1768,12 @@ static void FinalizeHotSw(HotSwApliType type) ClearCardIrq(); final: + // デバッガではTWLカードスロット2を電源ON(既にONなら何もしない) + if ( SYSM_IsRunOnDebugger() ) + { + HOTSWi_TurnCardPowerOn( 2 ); + } + // 終了完了通知 SYSMi_GetWork()->flags.hotsw.isFinalized = TRUE; }