diff --git a/build/components/hyena.TWL/Makefile b/build/components/hyena.TWL/Makefile index 2b136838..88223169 100644 --- a/build/components/hyena.TWL/Makefile +++ b/build/components/hyena.TWL/Makefile @@ -81,7 +81,7 @@ ifeq ($(DEFAULT_COMP_ARM7),hyena) MACRO_FLAGS += -DUSE_HYENA_COMPONENT endif -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037a8000' \ +MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037a0000' \ -DADDRESS_FLXMAIN='0x02280200' \ -DADDRESS_BOOTCORE='0x0380f000' \ -DCRT0_O='$(CRT0_O)' diff --git a/build/components/hyena.TWL/hyena.lcf.template b/build/components/hyena.TWL/hyena.lcf.template index 8f65625b..ba69dee4 100644 --- a/build/components/hyena.TWL/hyena.lcf.template +++ b/build/components/hyena.TWL/hyena.lcf.template @@ -33,7 +33,7 @@ MEMORY (RWXO): ORIGIN = , LENGTH = 0x0 > - check.WORKRAM (RWX) : ORIGIN = 0x037a8000, LENGTH = 0x62000 > workram.check + check.WORKRAM (RWX) : ORIGIN = 0x037a0000, LENGTH = 0x6a000 > workram.check binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > diff --git a/build/components/hyena.TWL/wram_regs/wram_regs.c b/build/components/hyena.TWL/wram_regs/wram_regs.c index fdfabae1..e5ee1268 100644 --- a/build/components/hyena.TWL/wram_regs/wram_regs.c +++ b/build/components/hyena.TWL/wram_regs/wram_regs.c @@ -25,8 +25,10 @@ // MAP_TS_LTD for hyena // WRAM-A Lock:ON, Master:ARM7, Enable:Slot0-3(256Kbytes), Address(7):0x037c0000-0x037fffff, Address(9):None -// WRAM-B Lock:ON, Master:ARM7, Enable:Slot5-7(96Kbytes), Address(7):0x037a8000-0x037bffff, Address(9):None -// WRAM-B Lock:OFF, Master:ARM9, Enable:Slot0-4(160Kbytes), Address(7):0x03740000-0x037bffff, Address(9):0x03740000-0x037bffff +// WRAM-B Lock:ON, Master:ARM7, Enable:Slot4-7(128Kbytes), Address(7):0x03760000-0x0377ffff, Address(9):None +// Address(7):0x037a0000-0x037bffff, Address(9):None +// WRAM-B Lock:OFF, Master:ARM9, Enable:Slot0-3(128Kbytes), Address(7):0x03740000-0x0375ffff, Address(9):0x03740000-0x0375ffff +// Address(7):0x03780000-0x0379ffff, Address(9):0x03780000-0x0379ffff // WRAM-C Lock:OFF, Msster:ARM9, Enable:Slot0-7(256Kbytes), Address(7):0x03700000-0x0373ffff, Address(9):0x03700000-0x0373ffff // WRAM-0 Master:ARM9, (16Kbytes), Address(7):0x03040000-0x03043fff, Address(9):0x03040000-0x03043fff // WRAM-1 Master:ARM9, (16Kbytes), Address(7):0x03044000-0x03047fff, Address(9):0x03044000-0x03047fff @@ -106,7 +108,7 @@ u32 HYENA_WramReg[0x30/sizeof(u32)] = // WRAM Lock (u32)( (0x0F << 0) | - (0xE0 << 8) | + (0xF0 << 8) | (0x00 << 16) | // WRAM-0/1 diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 1b948697..c8073738 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -29,7 +29,8 @@ extern void LCFG_VerifyAndRecoveryNTRSettings( void ); // function's prototype------------------------------------------------------- void _start_AutoloadDoneCallback(void* argv[]); -static void SYSMi_CopyLCFGData( u32 dst_addr ); +static void SYSMi_CopyLCFGDataHWInfo( u32 dst_addr ); +static void SYSMi_CopyLCFGDataSettings( void ); static TitleProperty *SYSMi_CheckDebuggerBannerViewModeBoot( void ); static TitleProperty *SYSMi_CheckShortcutBoot1( void ); static TitleProperty *SYSMi_CheckShortcutBoot2( void ); @@ -186,21 +187,34 @@ TitleProperty *SYSM_ReadParameters( void ) UTL_SetFatalError( FATAL_ERROR_HWINFO_SECURE ); } + //----------------------------------------------------- + // システム領域にHWInfoをコピー //----------------------------------------------------- + // NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、 + // ここでこれらのパラメータをロードしても大丈夫。 + SYSMi_CopyLCFGDataHWInfo( (u32)s_lcfgBuffer ); + + //----------------------------------------------------- // 本体設定データのリード(※必ずHWSecureInforリード後に実行すること。LanguageBitmapを判定に使うため) //----------------------------------------------------- { u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP ); if( pBuffer ) { - if( !LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ) ) { // NANDからTWL本体設定データをリード - // リード失敗時は、ファイルをリカバリ - if( LCFG_RecoveryTWLSettings() ) { - // リカバリ成功時は、フラッシュ壊れシーケンスへ - // 関数内で、LCFGのisBrokenTWLSettingsフラグがセットされる。 + // NANDからTWL本体設定データをリード + BOOL isRead = LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ); + + // リード失敗ファイルが存在する場合は、ファイルをリカバリ + if( LCFG_RecoveryTWLSettings() ) { + if( isRead ) { + // ミラーデータのうち、一方がリードできていたなら何もしない。 }else { - // リカバリ失敗時は、FALTALエラー - UTL_SetFatalError( FATAL_ERROR_TWLSETTINGS ); + // リードに完全に失敗していた場合は、フラッシュ壊れシーケンスへ。 + LCFG_TSD_SetFlagFinishedBrokenTWLSettings( FALSE ); + (void)LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); // LCFG_READ_TEMP > LCFG_WRITE_TEMP なので、pBufferをそのまま流用 } + }else { + // リカバリ失敗時は、FALTALエラー + UTL_SetFatalError( FATAL_ERROR_TWLSETTINGS ); } SYSM_Free( pBuffer ); }else { @@ -211,11 +225,11 @@ TitleProperty *SYSM_ReadParameters( void ) } //----------------------------------------------------- - // システム領域に本体設定などをコピー + // システム領域に本体設定をコピー //----------------------------------------------------- // NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、 // ここでこれらのパラメータをロードしても大丈夫。 - SYSMi_CopyLCFGData( (u32)s_lcfgBuffer ); + SYSMi_CopyLCFGDataSettings(); //----------------------------------------------------- // 無線ON/OFFフラグをもとに、LEDを設定する。 @@ -328,8 +342,8 @@ TitleProperty *SYSM_ReadParameters( void ) } -// 本体設定データなどのメモリ展開。 -static void SYSMi_CopyLCFGData( u32 dst_addr ) +// HWInfoのメモリ展開。 +static void SYSMi_CopyLCFGDataHWInfo( u32 dst_addr ) { // HotStart時にも保持する必要のあるデータをランチャー用に移動するプリロードパラメータバッファにコピー。 MI_CpuCopy8( (void *)HW_PARAM_WIRELESS_FIRMWARE_DATA, (void *)(dst_addr + HW_PARAM_TWL_SETTINGS_DATA_SIZE), @@ -338,10 +352,17 @@ static void SYSMi_CopyLCFGData( u32 dst_addr ) // プリロードパラメータアドレスをランチャー向けに変更。 *(u32 *)HW_PRELOAD_PARAMETER_ADDR = dst_addr; - // 本体設定データ、HWノーマル情報、HWセキュア情報をメモリに展開しておく - MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) ); + // HWノーマル情報、HWセキュア情報をメモリに展開しておく MI_CpuCopyFast( LCFGi_GetHWN(), (void *)HW_PARAM_TWL_HW_NORMAL_INFO, sizeof(LCFGTWLHWNormalInfo) ); MI_CpuCopyFast( LCFGi_GetHWS(), (void *)HW_HW_SECURE_INFO, HW_HW_SECURE_INFO_END - HW_HW_SECURE_INFO ); +} + + +// 本体設定データのメモリ展開。 +static void SYSMi_CopyLCFGDataSettings( void ) +{ + // 本体設定データ + MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) ); // 本体設定データのLauncherStatus部分をクリアしておく { diff --git a/build/libraries_sysmenu/wds/ARM9/Makefile b/build/libraries_sysmenu/wds/ARM9/Makefile index 786f9620..256f37b0 100644 --- a/build/libraries_sysmenu/wds/ARM9/Makefile +++ b/build/libraries_sysmenu/wds/ARM9/Makefile @@ -30,7 +30,7 @@ TWL_PROC = ARM9 SUBDIRS = -SRCS = WDS.c +SRCS = WDS.c WDSWrapper.c TARGET_LIB = WDS$(TWL_LIBSUFFIX).a diff --git a/build/libraries_sysmenu/wds/ARM9/src/WDS.c b/build/libraries_sysmenu/wds/ARM9/src/WDS.c index 7ff03d1d..a4d3e497 100644 --- a/build/libraries_sysmenu/wds/ARM9/src/WDS.c +++ b/build/libraries_sysmenu/wds/ARM9/src/WDS.c @@ -1,3 +1,20 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: WDS.c + + Copyright 2007 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + //********************************************************************** /** // @file WDS.c @@ -8,7 +25,7 @@ // @version 01.00 // ***********************************************************************/ -#include "WDS.h" +#include #include #ifdef WDS_WITHDWC #include diff --git a/build/libraries_sysmenu/wds/ARM9/src/WDSWrapper.c b/build/libraries_sysmenu/wds/ARM9/src/WDSWrapper.c index 3ea93091..55750d4f 100644 --- a/build/libraries_sysmenu/wds/ARM9/src/WDSWrapper.c +++ b/build/libraries_sysmenu/wds/ARM9/src/WDSWrapper.c @@ -1,3 +1,20 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: WDS.c + + Copyright 2007 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + //********************************************************************** /** // @file WDSWrapper.c @@ -8,7 +25,7 @@ // @version 01.00 // ***********************************************************************/ -#include "WDSWrapper.h" +#include #ifdef WDS_WITHDWC #include #endif diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c index 428720c7..75687c21 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c @@ -257,9 +257,23 @@ int MachineSettingMain( void ) tp_select = SelectMenuByTP( &s_csr, &s_settingParam ); DrawMenu( s_csr, &s_settingParam ); +#if 0 if( pad.trg & PAD_BUTTON_START ) { OS_DoApplicationJump( NULL, OS_APP_JUMP_NORMAL ); + u8 *pBuffer = Alloc( LCFG_READ_TEMP ); + g_isValidTSD = FALSE; + if( pBuffer) { + g_isValidTSD = LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ] )pBuffer ); + Free( pBuffer ); + if( g_isValidTSD ) { + OS_TPrintf( "TSD Read succeeded.\n" ); + }else { + OS_TPrintf( "TSD Read failed.\n" ); + PrintfSJIS( 0, 22*8, TXT_COLOR_RED, "TSD Read failed.\n" ); + } + } } +#endif if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐 if( s_settingPos[ s_csr ].enable ) { diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/main.c b/build/systemMenu_RED/MachineSettings/ARM9/src/main.c index e2b3dafd..bfc8bb93 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/main.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/main.c @@ -89,12 +89,30 @@ void TwlMain(void) // :::::::::::::::::::::::::::::::::::::::::::::: // TWL設定データファイルの読み込み // :::::::::::::::::::::::::::::::::::::::::::::: - { - u8 *pBuffer = Alloc( LCFG_READ_TEMP ); - g_isValidTSD = FALSE; - if( pBuffer) { - g_isValidTSD = LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ] )pBuffer ); - Free( pBuffer ); + g_isValidTSD = TRUE; + { + u8 *pBuffer = Alloc( LCFG_READ_TEMP ); + if( pBuffer ) { + // NANDからTWL本体設定データをリード + BOOL isRead = LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ); + + // リード失敗ファイルが存在する場合は、ファイルをリカバリ + if( LCFG_RecoveryTWLSettings() ) { + if( isRead ) { + // ミラーデータのうち、一方でもリードできていたなら何もしない。 + }else { + // リードに完全に失敗していた場合は、フラッシュ壊れシーケンスへ。 + LCFG_TSD_SetFlagFinishedBrokenTWLSettings( FALSE ); + (void)LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); // LCFG_READ_TEMP > LCFG_WRITE_TEMP なので、pBufferをそのまま流用 + } + }else { + // リカバリ失敗時は、FALTALエラー + g_isValidTSD = FALSE; + } + Free( pBuffer ); + }else { + // メモリ確保ができなかった時は、FATALエラー + g_isValidTSD = FALSE; } } diff --git a/docs/繝。繝「繝ェ繝槭ャ繝誉繝ゥ繝ウ繝√Ε繝シ.vsd b/docs/繝。繝「繝ェ繝槭ャ繝誉繝ゥ繝ウ繝√Ε繝シ.vsd index 7eac76a2..29660afb 100644 Binary files a/docs/繝。繝「繝ェ繝槭ャ繝誉繝ゥ繝ウ繝√Ε繝シ.vsd and b/docs/繝。繝「繝ェ繝槭ャ繝誉繝ゥ繝ウ繝√Ε繝シ.vsd differ diff --git a/include/sysmenu/WDSWrapper.h b/include/sysmenu/WDSWrapper.h index 8d08ffa4..6818c81d 100644 --- a/include/sysmenu/WDSWrapper.h +++ b/include/sysmenu/WDSWrapper.h @@ -18,7 +18,7 @@ extern "C" { //----------------------------------------------------- // Include //----------------------------------------------------- -#include "WDS.h" +#include //----------------------------------------------------- // Macros