diff --git a/Makefile.full b/Makefile.full index 7d9258ef..b586c89b 100644 --- a/Makefile.full +++ b/Makefile.full @@ -24,6 +24,7 @@ export TWL_ARCHGEN = ALL SUBDIRS = \ $(ROOT)/build/libraries/reboot \ + $(ROOT)/build/demos/gx/UnitTours/DEMOLib \ $(TWLSYSTEM_ROOT) \ build diff --git a/build/buildtools/commondefs.sysmenu b/build/buildtools/commondefs.sysmenu index b2d43b7f..e060ccb1 100644 --- a/build/buildtools/commondefs.sysmenu +++ b/build/buildtools/commondefs.sysmenu @@ -66,14 +66,14 @@ SYSMENU_LIBS ?= \ libmbloader$(TWL_LIBSUFFIX).a \ libacsign$(TWL_LIBSUFFIX).a \ libboot$(TWL_LIBSUFFIX).a \ -# libcardboot$(TWL_LIBSUFFIX).a else # ($(CODEGEN_PROC),ARM7) SYSMENU_LIBS ?= \ + libsysmenu_sp$(TWL_LIBSUFFIX).a \ libmbloader_sp$(TWL_LIBSUFFIX).a \ libboot_sp$(TWL_LIBSUFFIX).a \ - libcardboot_sp$(TWL_LIBSUFFIX).a + libhotsw_sp$(TWL_LIBSUFFIX).a endif diff --git a/build/components/hyena.TWL/Makefile b/build/components/hyena.TWL/Makefile index 47b0a651..df7b8e20 100644 --- a/build/components/hyena.TWL/Makefile +++ b/build/components/hyena.TWL/Makefile @@ -72,7 +72,8 @@ INSTALL_TARGETS = $(BINDIR)/$(TARGET_NAME).tef \ INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE) -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include +LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include \ + $(SYSMENU_ROOT)/build/libraries_sysmenu/sysmenu/common/include LLIBRARIES += libwl_sp.TWL.LTD.a LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) diff --git a/build/components/hyena.TWL/hyena.lsf b/build/components/hyena.TWL/hyena.lsf index 8585b7d5..49b3dd08 100644 --- a/build/components/hyena.TWL/hyena.lsf +++ b/build/components/hyena.TWL/hyena.lsf @@ -56,9 +56,9 @@ Autoload WRAM libmcu_sp$(LIBSUFFIX).a \ libboot_sp$(LIBSUFFIX).a \ libreboot_sp$(LIBSUFFIX).a \ - libcardboot_sp$(LIBSUFFIX).a \ - libreloc_info_sp$(LIBSUFFIX).a - + libhotsw_sp$(LIBSUFFIX).a \ + libreloc_info_sp$(LIBSUFFIX).a \ + libsysmenu_sp$(LIBSUFFIX).a Library libsdio_sp$(LIBSUFFIX).a diff --git a/build/components/hyena.TWL/src/main.c b/build/components/hyena.TWL/src/main.c index bc024081..e6de4472 100644 --- a/build/components/hyena.TWL/src/main.c +++ b/build/components/hyena.TWL/src/main.c @@ -37,6 +37,7 @@ #include #include #include "nvram_sp.h" +#include "internal_api.h" /*---------------------------------------------------------------------------* 定数定義 @@ -112,6 +113,9 @@ TwlSpMain(void) OS_InitTick(); PrintDebugInfo(); + // PXIコールバックの設定 + PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback ); + // ランチャーパラメター取得(Cold/Hotスタート判定含む) ReadLauncherParameter(); @@ -123,7 +127,7 @@ TwlSpMain(void) // [TODO:] カード電源ONして、ROMヘッダのみリード&チェックくらいはやっておきたい - SYSMi_GetWork()->isARM9Start = TRUE; // [TODO:] HW_RED_RESERVEDはNANDファームでクリアしておいて欲しい + SYSMi_GetWork()->flags.common.isARM9Start = TRUE; // [TODO:] HW_RED_RESERVEDはNANDファームでクリアしておいて欲しい // ヒープ領域設定 { @@ -247,7 +251,7 @@ static void ResetRTC( void ) // リセット実行 stat1.reset = 1; RTC_WriteStatus1( &stat1 ); - SYSMi_GetWork()->isResetRTC = TRUE; + SYSMi_GetWork()->flags.common.isResetRTC = TRUE; } } @@ -256,8 +260,8 @@ static void ResetRTC( void ) void ReadLauncherParameter( void ) { BOOL hot; - SYSMi_GetWork()->isValidLauncherParam = OS_ReadLauncherParameter( (LauncherParam *)&(SYSMi_GetWork()->launcherParam), &hot ); - SYSMi_GetWork()->isHotStart = hot; + SYSMi_GetWork()->flags.common.isValidLauncherParam = OS_ReadLauncherParameter( (LauncherParam *)&(SYSMi_GetWork()->launcherParam), &hot ); + SYSMi_GetWork()->flags.common.isHotStart = hot; // メインメモリのリセットパラメータをクリアしておく MI_CpuClear32( SYSMi_GetLauncherParamAddr(), 0x100 ); } @@ -618,7 +622,7 @@ extern u16 WMSP_GetAllowedChannel(u16 bitField); *---------------------------------------------------------------------------*/ static void ReadUserInfo(void) { - u8 *p; + u8 *p = OS_GetSystemWork()->nvramUserInfo; // 無線MACアドレスをユーザー情報の後ろに展開 { @@ -668,3 +672,4 @@ VBlankIntr(void) PM_SelfBlinkProc(); } } + diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index 4ab68a5f..c0813d4d 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -213,7 +213,7 @@ BOOL BOOT_WaitStart( void ) static void BOOTi_ClearREG_RAM( void ) { - if( SYSMi_GetWork()->isCardBoot ) { + if( SYSMi_GetWork()->flags.common.isCardBoot ) { #ifdef DEBUG_USED_CARD_SLOT_B_ reg_MI_MC_SWP = 0x80; // カードスロットのスワップ #endif diff --git a/build/libraries_sysmenu/hotsw/ARM7/Makefile b/build/libraries_sysmenu/hotsw/ARM7/Makefile index 2b752477..cd874b52 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/Makefile +++ b/build/libraries_sysmenu/hotsw/ARM7/Makefile @@ -31,7 +31,7 @@ INCDIR = ./include SRCS = blowfish.c hotsw.c ds_blowfish_table.c dsCardType1.c dsCardType2.c romEmulation.c customNDma.c -TARGET_LIB = libcardboot_sp$(TWL_LIBSUFFIX).a +TARGET_LIB = libhotsw_sp$(TWL_LIBSUFFIX).a include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 9cbd8d22..1d2e73ec 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -180,7 +180,7 @@ void HOTSW_Init(void) else{ OS_PutString("No Card...\n"); #ifdef DEBUG_USED_CARD_SLOT_B_ - SYSMi_GetWork()->is1stCardChecked = TRUE; + SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE; #endif } } @@ -297,8 +297,8 @@ BOOL HOTSW_Boot(void) retval = FALSE; } - SYSMi_GetWork()->isExistCard = retval; - SYSMi_GetWork()->isCardStateChanged = TRUE; // 本当は挿抜単位でここを立てる。 + SYSMi_GetWork()->flags.common.isExistCard = retval; + SYSMi_GetWork()->flags.common.isCardStateChanged = TRUE; // 本当は挿抜単位でここを立てる。 (void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM9と排他制御する OS_ReleaseLockID( id ); @@ -376,10 +376,10 @@ BOOL HOTSW_Boot(void) // [TODO:]暫定処置。ちゃんとした流れでLauncher側に渡すようにする。 MI_CpuCopy8( HOTSW_GetRomEmulationBuffer(), &SYSMi_GetWork()->romEmuInfo, ROM_EMULATION_DATA_SIZE ); - SYSMi_GetWork()->isOnDebugger = s_cbData.debuggerFlg; + SYSMi_GetWork()->flags.common.isOnDebugger = s_cbData.debuggerFlg; #ifdef DEBUG_USED_CARD_SLOT_B_ - SYSMi_GetWork()->is1stCardChecked = TRUE; + SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE; #endif return retval; @@ -412,7 +412,7 @@ void HOTSW_LoadStaticModule(void) s_cbData.pBootSegBuf->rh.s.banner_offset, (u32 *)SYSM_CARD_BANNER_BUF, sizeof(TWLBannerFile) ); - SYSMi_GetWork()->isValidCardBanner = TRUE; + SYSMi_GetWork()->flags.common.isValidCardBanner = TRUE; } #endif diff --git a/build/libraries_sysmenu/sysmenu/ARM7/Makefile b/build/libraries_sysmenu/sysmenu/ARM7/Makefile new file mode 100644 index 00000000..57e11b38 --- /dev/null +++ b/build/libraries_sysmenu/sysmenu/ARM7/Makefile @@ -0,0 +1,45 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: TwlIPL +# File: Makefile +# +# 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$ +#---------------------------------------------------------------------------- + +SUBDIRS = + +#---------------------------------------------------------------------------- +TARGET_FIRM = SYSTEMMENU +TARGET_PLATFORM = TWL +TWL_ARCHGEN = LIMITED +TWL_PROC = ARM7 + +SRCS = ../common/src/pxi.c + +TARGET_LIB = libsysmenu_sp$(TWL_LIBSUFFIX).a + +include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs + +INSTALL_TARGETS = $(TARGETS) +INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR) + +LINCLUDES = $(SYSMENU_ROOT)/build/libraries_sysmenu/sysmenu/common/include + + +#---------------------------------------------------------------------------- + +do-build: $(TARGETS) + +include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules + +#===== End of Makefile ===== diff --git a/build/libraries_sysmenu/sysmenu/ARM9/Makefile b/build/libraries_sysmenu/sysmenu/ARM9/Makefile index 0e1b425e..27d0ed85 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/Makefile +++ b/build/libraries_sysmenu/sysmenu/ARM9/Makefile @@ -32,7 +32,8 @@ SRCS = sysmenu_lib.c \ mountInfo.c \ device.c \ title.c \ - banner.c + banner.c \ + ../common/src/pxi.c TARGET_LIB = libsysmenu$(TWL_LIBSUFFIX).a @@ -44,8 +45,8 @@ INSTALL_TARGETS = $(TARGETS) INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR) LINCLUDES = $(ROOT)/build/libraries/mb/common/include \ - $(ROOT)/build/libraries/spi/ARM9/include \ - + $(ROOT)/build/libraries/spi/ARM9/include \ + $(SYSMENU_ROOT)/build/libraries_sysmenu/sysmenu/common/include #---------------------------------------------------------------------------- diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c b/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c index 2d239f7b..a32b138d 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/banner.c @@ -63,11 +63,11 @@ BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner ) return isRead; #else #pragma unused(bannerOffset) - if( SYSMi_GetWork()->isValidCardBanner ) { + if( SYSMi_GetWork()->flags.common.isValidCardBanner ) { DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 ); MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) ); } - return (BOOL)SYSMi_GetWork()->isValidCardBanner; + return (BOOL)SYSMi_GetWork()->flags.common.isValidCardBanner; #endif } diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/device.c b/build/libraries_sysmenu/sysmenu/ARM9/src/device.c index 93b732ad..04de3aa9 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/device.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/device.c @@ -95,7 +95,7 @@ void SYSMi_CheckRTC( void ) !SYSM_CheckRTCTime( &time ) #ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。 || - SYSMi_GetWork()->isResetRTC + SYSMi_GetWork()->flags.common.isResetRTC #endif ) { // RTCの異常を検出したら、rtc入力フラグ&rtcOffsetを0にしてNVRAMに書き込み。 OS_TPrintf("\"RTC reset\" or \"Illegal RTC data\" detect!\n"); diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c b/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c index 7d52a461..af0699c8 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c @@ -196,7 +196,7 @@ static void SYSMi_ModifySaveDataMount( LauncherBootType bootType, NAMTitleId tit ( titleID & TITLEID_MEDIA_NAND_FLAG ) ) || ( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時 ( titleID & TITLEID_MEDIA_NAND_FLAG ) && - ( SYSMi_GetWork()->isOnDebugger ) ) + ( SYSMi_GetWork()->flags.common.isOnDebugger ) ) ) { char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ]; u32 saveDataSize[ 2 ]; @@ -240,7 +240,7 @@ static void SYSMi_ModifySaveDataMountForLauncher( LauncherBootType bootType, NAM ( titleID & TITLEID_MEDIA_NAND_FLAG ) ) || ( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時 ( titleID & TITLEID_MEDIA_NAND_FLAG ) && - ( SYSMi_GetWork()->isOnDebugger ) ) + ( SYSMi_GetWork()->flags.common.isOnDebugger ) ) ) { char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ]; u32 saveDataSize[ 2 ]; diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 380bc5b5..befa5231 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -34,10 +34,11 @@ static void SYSMi_CheckCardCloneBoot( void ); void *(*SYSMi_Alloc)( u32 size ); void (*SYSMi_Free )( void *ptr ); +#define SYSM_DEBUG_ #ifdef SYSM_DEBUG_ SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用 +ROM_Header_Short *pRomHeader; #endif - // static variable------------------------------------------------------------- // const data------------------------------------------------------------------ @@ -53,6 +54,7 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ) { #ifdef SYSM_DEBUG_ pSysm = SYSMi_GetWork(); + pRomHeader = (ROM_Header_Short *)0x027fc000; #endif /* SYSM_DEBUG_ */ // ランチャーのマウント情報セット @@ -62,6 +64,7 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ) OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB ); SYSM_SetAllocFunc( pAlloc, pFree ); + PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback ); reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット } @@ -113,12 +116,12 @@ TitleProperty *SYSM_ReadParameters( void ) u8 brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX; // ARM7のリセットパラメータ取得が完了するのを待つ - while( !SYSMi_GetWork()->isARM9Start ) { + while( !SYSMi_GetWork()->flags.common.isARM9Start ) { SVC_WaitByLoop( 0x1000 ); } #ifdef DEBUG_USED_CARD_SLOT_B_ // ARM7のカードチェック完了を待つ - while( !SYSMi_GetWork()->is1stCardChecked ) { + while( !SYSMi_GetWork()->flags.common.is1stCardChecked ) { SVC_WaitByLoop( 0x1000 ); } #endif @@ -151,13 +154,13 @@ TitleProperty *SYSM_ReadParameters( void ) // ノーマル情報リード if( !LCFG_ReadHWNormalInfo() ) { OS_TPrintf( "HW Normal Info Broken!\n" ); - SYSMi_GetWork()->isBrokenHWNormalInfo = TRUE; + SYSMi_GetWork()->flags.common.isBrokenHWNormalInfo = TRUE; } // セキュア情報リード if( !LCFG_ReadHWSecureInfo() ) { OS_TPrintf( "HW Secure Info Broken!\n" ); - SYSMi_GetWork()->isBrokenHWSecureInfo = TRUE; - SYSMi_GetWork()->isFatalError = TRUE; + SYSMi_GetWork()->flags.common.isBrokenHWSecureInfo = TRUE; + SYSMi_GetWork()->flags.common.isFatalError = TRUE; } //----------------------------------------------------- @@ -200,7 +203,7 @@ static TitleProperty *SYSMi_CheckShortcutBoot( void ) // 検査カード起動 //----------------------------------------------------- if( SYSM_IsExistCard() ) { - if( ( SYSMi_GetWork()->isOnDebugger && // ISデバッガが有効かつJTAGがまだ有効でない時 + if( ( SYSMi_GetWork()->flags.common.isOnDebugger && // ISデバッガが有効かつJTAGがまだ有効でない時 !( *(u8 *)( HW_SYS_CONF_BUF + HWi_WSYS09_OFFSET ) & HWi_WSYS09_JTAG_CPUJE_MASK ) ) || SYSM_IsInspectCard() || ( ( PAD_Read() & PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) == @@ -250,14 +253,14 @@ const LauncherParamBody *SYSM_GetLauncherParamBody( void ) // ロゴデモスキップかどうかをセット void SYSM_SetLogoDemoSkip( BOOL skip ) { - SYSMi_GetWork()->isLogoSkip = skip; + SYSMi_GetWork()->flags.common.isLogoSkip = skip; } // ロゴデモスキップか? BOOL SYSM_IsLogoDemoSkip( void ) { - return (BOOL)SYSMi_GetWork()->isLogoSkip; + return (BOOL)SYSMi_GetWork()->flags.common.isLogoSkip; } @@ -265,7 +268,7 @@ BOOL SYSM_IsLogoDemoSkip( void ) static BOOL SYSMi_IsDebuggerBannerViewMode( void ) { #ifdef __IS_DEBUGGER_BUILD - return ( SYSMi_GetWork()->isOnDebugger && + return ( SYSMi_GetWork()->flags.common.isOnDebugger && SYSMi_IsValidCard() && SYSM_GetCardRomHeader()->dbgRomSize == 0 ) ? TRUE : FALSE; #else @@ -284,14 +287,14 @@ BOOL SYSM_IsTPReadable( void ) // TSD有効/無効をセット void SYSM_SetValidTSD( BOOL valid ) { - SYSMi_GetWork()->isValidTSD = valid; + SYSMi_GetWork()->flags.common.isValidTSD = valid; } // TSD有効? BOOL SYSM_IsValidTSD( void ) { - return (BOOL)SYSMi_GetWork()->isValidTSD; + return (BOOL)SYSMi_GetWork()->flags.common.isValidTSD; } @@ -304,7 +307,7 @@ BOOL SYSM_IsValidTSD( void ) // 有効なTWL/NTRカードが差さっているか? BOOL SYSM_IsExistCard( void ) { - return (BOOL)SYSMi_GetWork()->isExistCard; + return (BOOL)SYSMi_GetWork()->flags.common.isExistCard; } @@ -385,9 +388,9 @@ static void SYSMi_CheckCardCloneBoot( void ) buffp += total_rom_size & 0x000001FF; if( *buffp++ == 'a' && *buffp == 'c' ) { - SYSMi_GetWork()->cloneBootMode = CLONE_BOOT_MODE; + SYSMi_GetWork()->flags.common.cloneBootMode = CLONE_BOOT_MODE; }else { - SYSMi_GetWork()->cloneBootMode = OTHER_BOOT_MODE; + SYSMi_GetWork()->flags.common.cloneBootMode = OTHER_BOOT_MODE; } #endif } diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 1f137c2a..ab717dcf 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -26,6 +26,7 @@ // extern data----------------------------------------------------------------- // function's prototype------------------------------------------------------- +static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst ); static s32 ReadFile( FSFile* pf, void* buffer, s32 size ); static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle ); static void SYSMi_Relocate( void ); @@ -56,19 +57,19 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ) { BOOL retval = FALSE; - if( SYSMi_GetWork()->isCardStateChanged ) { + if( SYSMi_GetWork()->flags.common.isCardStateChanged ) { MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) ); // ROMヘッダバッファのコピー if( SYSM_IsExistCard() ) { u16 id = (u16)OS_GetLockID(); - (void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する + (void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する DC_InvalidateRange( (void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE ); // キャッシュケア MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BAK, (void *)SYSM_CARD_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE ); // ROMヘッダコピー - SYSMi_GetWork()->cardHeaderCrc16 = SYSMi_GetWork()->cardHeaderCrc16; // ROMヘッダCRCコピー - SYSMi_GetWork()->isCardStateChanged = FALSE; // カード情報更新フラグを落とす - (void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する + SYSMi_GetWork()->cardHeaderCrc16 = SYSMi_GetWork()->cardHeaderCrc16; // ROMヘッダCRCコピー + SYSMi_GetWork()->flags.common.isCardStateChanged = FALSE; // カード情報更新フラグを落とす + (void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する OS_ReleaseLockID( id ); pTitleList_Card->flags.isValid = TRUE; @@ -103,96 +104,55 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum ) // とりあえずALL OSTick start; int l; - int gotten; - NAMTitleId titleIdArray[ LAUNCHER_TITLE_LIST_NUM ]; + int getNum; + int validNum = 0; + NAMTitleId titleIDArray[ LAUNCHER_TITLE_LIST_NUM ]; + NAMTitleId *pTitleIDList = NULL; + if( listNum > LAUNCHER_TITLE_LIST_NUM ) { OS_TPrintf( "Warning: TitleList_Nand num over LAUNCHER_TITLE_LIST_NUM(%d)\n", LAUNCHER_TITLE_LIST_NUM ); } - - start = OS_GetTick(); - gotten = NAM_GetTitleList( &titleIdArray[ 0 ], LAUNCHER_TITLE_LIST_NUM - 1 ); - OS_TPrintf( "NAM_GetTitleList : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); - start = OS_GetTick(); - gotten = NAM_GetNumTitles(); // [TODO:]本来だったら必要ないが、現在はNAM_GetTitleListがアプリ個数をちゃんと返してくれないので。 - OS_TPrintf( "NAM_GetNumTitles : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); - for(l=0;lisLoadSucceeded = TRUE; + SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE; } +static void SYSMi_DisableHotSW( void ) +{ + if( SYSMi_GetWork()->flags.arm7.isEnableHotSW && + SYSMi_GetWork()->flags.arm9.isEnableHotSW ) { + return; + } + SYSMi_SendPXICommand( SYSM_PXI_COMM_DISABLE_HOTSW ); +} + // 指定タイトルを別スレッドでロード開始する void SYSM_StartLoadTitle( TitleProperty *pBootTitle ) { @@ -429,24 +466,26 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle ) #define STACK_SIZE 0xc00 static u64 stack[ STACK_SIZE / sizeof(u64) ]; + SYSMi_DisableHotSW(); + // アプリ未ロード状態なら、ロード開始 if( !pBootTitle->flags.isAppLoadCompleted ) { - SYSMi_GetWork()->isLoadSucceeded = FALSE; + SYSMi_GetWork()->flags.common.isLoadSucceeded = FALSE; OS_InitThread(); OS_CreateThread( &s_thread, (void (*)(void *))SYSMi_LoadTitleThreadFunc, (void*)pBootTitle, stack+STACK_SIZE/sizeof(u64), STACK_SIZE,THREAD_PRIO ); OS_WakeupThreadDirect( &s_thread ); }else if( pBootTitle->flags.isAppRelocate ) { // アプリロード済みで、再配置要求ありなら、再配置(カードのみ対応) SYSMi_Relocate(); - SYSMi_GetWork()->isLoadSucceeded = TRUE; + SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE; }else { // アプリロード済みで、再配置要求なし - SYSMi_GetWork()->isLoadSucceeded = TRUE; + SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE; } if( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM ) { - SYSMi_GetWork()->isCardBoot = TRUE; + SYSMi_GetWork()->flags.common.isCardBoot = TRUE; }else if(pBootTitle->flags.isAppLoadCompleted) { // カードブートでなく、ロード済みの場合、再配置情報をランチャーパラメタから読み込み @@ -533,7 +572,7 @@ AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ) return AUTH_RESULT_PROCESSING; } // ロード成功? - if( SYSMi_GetWork()->isLoadSucceeded == FALSE ) + if( SYSMi_GetWork()->flags.common.isLoadSucceeded == FALSE ) { return AUTH_RESULT_TITLE_LOAD_FAILED; } @@ -594,4 +633,15 @@ static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle ) return TRUE; } - +#if 0 +void CheckDigest( void ) +{ + int i; + for( i = 0; i < 4; i++ ) { + if( SYSMi_GetWork()->reloc_info[ i ].src ) { + + }else { + } + } +} +#endif diff --git a/build/libraries_sysmenu/sysmenu/Makefile b/build/libraries_sysmenu/sysmenu/Makefile index 9f833282..be4cc462 100644 --- a/build/libraries_sysmenu/sysmenu/Makefile +++ b/build/libraries_sysmenu/sysmenu/Makefile @@ -23,7 +23,7 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs #---------------------------------------------------------------------------- -SUBDIRS = ARM9 +SUBDIRS = ARM9 ARM7 #---------------------------------------------------------------------------- diff --git a/build/libraries_sysmenu/sysmenu/ARM9/include/internal_api.h b/build/libraries_sysmenu/sysmenu/common/include/internal_api.h similarity index 88% rename from build/libraries_sysmenu/sysmenu/ARM9/include/internal_api.h rename to build/libraries_sysmenu/sysmenu/common/include/internal_api.h index c6436318..e4181aa1 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/include/internal_api.h +++ b/build/libraries_sysmenu/sysmenu/common/include/internal_api.h @@ -32,7 +32,7 @@ extern "C" { #define OS_PutString( ... ) ((void)0) #endif - +#ifdef SDK_ARM9 //------------------------------------------------------- // マウント情報セット //------------------------------------------------------- @@ -62,6 +62,11 @@ void SYSMi_CheckRTC( void ); // カードバナーリード(※NTR-IPL2仕様) BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner ); +#endif + +BOOL SYSMi_SendPXICommand( SYSMPXICommand command ); +void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err ); + #ifdef __cplusplus } diff --git a/build/libraries_sysmenu/sysmenu/common/internal_api.h b/build/libraries_sysmenu/sysmenu/common/internal_api.h new file mode 100644 index 00000000..dbffe75c --- /dev/null +++ b/build/libraries_sysmenu/sysmenu/common/internal_api.h @@ -0,0 +1,80 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: internal_api.h + + 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$ + *---------------------------------------------------------------------------*/ + +#ifndef SYSM_INTERNAL_API_H_ +#define SYSM_INTERNAL_API_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +//#define SYSM_LIB_NO_MESSAGE // Printf抑制スイッチ + +#ifdef SYSM_LIB_NO_MESSAGE +#define OS_Printf( ... ) ((void)0) +#define OS_TPrintf( ... ) ((void)0) +#define OS_PutString( ... ) ((void)0) +#endif + +#ifdef SDK_ARM9 +//------------------------------------------------------- +// マウント情報セット +//------------------------------------------------------- + +// ランチャー用 +void SYSMi_SetLauncherMountInfo( void ); + +// 起動アプリ用 +void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle ); + + +//------------------------------------------------------- +// デバイス +//------------------------------------------------------- + +// RTC補正 +void SYSMi_WriteAdjustRTC( void ); + +// RTCチェック +void SYSMi_CheckRTC( void ); + + +//------------------------------------------------------- +// バナー +//------------------------------------------------------- + +// カードバナーリード(※NTR-IPL2仕様) +BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner ); + +#endif // SDK_ARM9 + + +//------------------------------------------------------- +// PXI +//------------------------------------------------------- + +extern void SYSMi_SendPXICommand( SYSMPXICommand command ); +extern void SYSMi_PXIFifoCallback( PXIFifoTag tag, u32 data, BOOL err ); + + +#ifdef __cplusplus +} +#endif + +#endif // SYSM_INTERNAL_API_H_ diff --git a/build/libraries_sysmenu/sysmenu/common/src/pxi.c b/build/libraries_sysmenu/sysmenu/common/src/pxi.c new file mode 100644 index 00000000..d26b7d19 --- /dev/null +++ b/build/libraries_sysmenu/sysmenu/common/src/pxi.c @@ -0,0 +1,116 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: pxi.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$ + *---------------------------------------------------------------------------*/ + +#include +#include +#include "internal_api.h" + +// define data----------------------------------------------------------------- +#define SYSM_PXI_COMM_STAT_REQ 0 +#define SYSM_PXI_COMM_STAT_ACK 1 + +// PXIコマンド +typedef union SYSMPXIPacket { + struct { + u16 data; + u16 command : 14; + u16 stat : 2; + }; + u32 raw; +}SYSMPXIPacket; + + +// extern data----------------------------------------------------------------- +// function's prototype------------------------------------------------------- +// global variable------------------------------------------------------------- +// static variable------------------------------------------------------------- +static volatile BOOL s_sending = FALSE; +// const data------------------------------------------------------------------ + +// PXIコマンド送信 +BOOL SYSMi_SendPXICommand( SYSMPXICommand command ) +{ + SYSMPXIPacket packet; + + OSIntrMode saved = OS_DisableInterrupts(); + if( s_sending ) { + OS_RestoreInterrupts( saved ); + return FALSE; + } + s_sending = TRUE; + OS_RestoreInterrupts( saved ); + + packet.stat = SYSM_PXI_COMM_STAT_REQ; + packet.command = (u16)command; + packet.data = 0; + + while( PXI_SendWordByFifo( SYSMENU_PXI_FIFO_TAG, packet.raw, 0 ) < 0 ) {} + + while( s_sending ) { + OS_WaitAnyIrq(); + } + return TRUE; +} + +void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err ) +{ +#pragma unused( tag, err ) + SYSMPXIPacket packet; + packet.raw = data; + +#ifdef SDK_ARM9 + + s_sending = FALSE; + + if( packet.stat == SYSM_PXI_COMM_STAT_ACK ) { + switch( data ) { + case SYSM_PXI_COMM_DISABLE_HOTSW: + SYSMi_GetWork()->flags.arm9.isEnableHotSW = 0; + break; + default: + break; + } + }else { // SYSM_PXI_COMM_STAT_REQ + switch( data ) { + default: + break; + } + } +#else // !SDK_ARM9 + + if( packet.stat == SYSM_PXI_COMM_STAT_REQ ) { + switch( data ) { + case SYSM_PXI_COMM_DISABLE_HOTSW: + if( SYSMi_GetWork()->flags.arm7.isBusyHotSW ) { + SYSMi_GetWork()->flags.arm7.disableHotSW_REQ = 1; + }else { + SYSMi_GetWork()->flags.arm7.isEnableHotSW = 0; + // PXIで返信 + } + break; + default: + break; + } + }else { // SYSM_PXI_COMM_STAT_ACK + switch( data ) { + default: + break; + } + } +#endif // SDK_ARM9 +} + diff --git a/build/nandfirm/menu-launcher/ARM9/main.c b/build/nandfirm/menu-launcher/ARM9/main.c index 6317ecf5..4db0966d 100644 --- a/build/nandfirm/menu-launcher/ARM9/main.c +++ b/build/nandfirm/menu-launcher/ARM9/main.c @@ -138,7 +138,7 @@ static BOOL TryResolveSrl(void) OS_TPrintf("Failed to load HWSecureInfo.\n"); return FALSE; } - LCFG_THW_GetLauncherGameCode( (u8*)&titleId ); + LCFG_THW_GetLauncherTitleID_Lo( (u8*)&titleId ); // 4: after LCFG_ReadHWSecureInfo PUSH_PROFILE(); diff --git a/build/nandfirm/menu-launcher2/ARM9/main.c b/build/nandfirm/menu-launcher2/ARM9/main.c index 9abb92b9..64def192 100644 --- a/build/nandfirm/menu-launcher2/ARM9/main.c +++ b/build/nandfirm/menu-launcher2/ARM9/main.c @@ -139,7 +139,7 @@ static BOOL TryResolveSrl(void) OS_TPrintf("Failed to load HWSecureInfo.\n"); return FALSE; } - LCFG_THW_GetLauncherGameCode( (u8*)&titleId ); + LCFG_THW_GetLauncherTitleID_Lo( (u8*)&titleId ); // 4: after LCFG_ReadHWSecureInfo PUSH_PROFILE(); diff --git a/build/systemMenu_RED/HWInfoWriter/ARM9/src/HWInfoWriter.c b/build/systemMenu_RED/HWInfoWriter/ARM9/src/HWInfoWriter.c index a8abf3d1..9ff771c7 100644 --- a/build/systemMenu_RED/HWInfoWriter/ARM9/src/HWInfoWriter.c +++ b/build/systemMenu_RED/HWInfoWriter/ARM9/src/HWInfoWriter.c @@ -134,7 +134,6 @@ static const char *strLauncherGameCode[] = { // HW情報ライターの初期化 void HWInfoWriterInit( void ) { - u8 gameCode[ 5 ] = { 0, 0, 0, 0, 0 }; GX_DispOff(); GXS_DispOff(); @@ -154,8 +153,15 @@ void HWInfoWriterInit( void ) OS_TPrintf( "region = %d\n", LCFG_THW_GetRegion() ); PrintfSJISSub( 2 * 8, 16 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ LCFG_THW_GetRegion() ] ); PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "SerialNo = %s", LCFG_THW_GetSerialNoPtr() ); -// LCFG_THW_GetLauncherGameCode( gameCode ); -// PrintfSJISSub( 2 * 8, 20 * 8, TXT_COLOR_BLACK, "LauncherGameCode = %s", gameCode ); + if ( 1 ) + { + int i; + u8 titleID_Lo[ 4 ]; + u8 gameCode[ 5 ] = { 0, 0, 0, 0, 0 }; + LCFG_THW_GetLauncherTitleID_Lo( titleID_Lo ); + for( i = 0; i < 4; i++ ) gameCode[ i ] = titleID_Lo[ 4 - i - 1 ]; + PrintfSJISSub( 2 * 8, 20 * 8, TXT_COLOR_BLACK, "LauncherTitleID_Lo = %s", gameCode ); + } s_region_old = LCFG_THW_GetRegion(); s_csr = 0; DrawMenu( s_csr, &s_writerParam ); @@ -410,8 +416,13 @@ static BOOL WriteHWSecureInfoFile( u8 region ) LCFG_THW_SetSerialNo( serialNo ); } - // ランチャーゲームコード - LCFG_THW_SetLauncherGameCode( (const u8 *)strLauncherGameCode[ region ] ); + // ランチャーTitleID_Loのセット + { + int i; + u8 titleID_Lo[4]; + for( i = 0; i < 4; i++ ) titleID_Lo[ i ] = (u8)strLauncherGameCode[ region ][ 4 - i - 1 ]; + LCFG_THW_SetLauncherTitleID_Lo( (const u8 *)titleID_Lo ); + } // ライト if( isWrite && diff --git a/build/systemMenu_RED/NandInitializer/ARM7.TWL/main.lsf b/build/systemMenu_RED/NandInitializer/ARM7.TWL/main.lsf index aef8842e..4329ad01 100644 --- a/build/systemMenu_RED/NandInitializer/ARM7.TWL/main.lsf +++ b/build/systemMenu_RED/NandInitializer/ARM7.TWL/main.lsf @@ -55,9 +55,7 @@ Autoload WRAM libmicex_sp$(LIBSUFFIX).a \ libmcu_sp$(LIBSUFFIX).a \ - Library libsdio_hcd_twl$(LIBSUFFIX).a \ - libsdio_busdriver$(LIBSUFFIX).a \ - libsdio_lib$(LIBSUFFIX).a \ + Library libsdio_sp$(LIBSUFFIX).a Object * (.etable) Object * (.wram) @@ -143,10 +141,9 @@ Ltdautoload LTDMAIN Object * (.ltdmain) Library libnvram_sp$(LIBSUFFIX).a Library librtc_sp$(LIBSUFFIX).a - Library librompatch_sp$(LIBSUFFIX).a \ - libwm_sp$(LIBSUFFIX).a \ + Library libwm_sp$(LIBSUFFIX).a \ libnwm_sp$(LIBSUFFIX).a \ - libARM7athdrv$(LIBSUFFIX).a \ + libathdrv_sp$(LIBSUFFIX).a \ libwvr_sp$(LIBSUFFIX).a \ libwl_sp$(LIBSUFFIX).a Library libfatfs_sp$(LIBSUFFIX).a \ diff --git a/build/systemMenu_RED/NandInitializer/ARM9.TWL/src/process_hw_info.c b/build/systemMenu_RED/NandInitializer/ARM9.TWL/src/process_hw_info.c index cd3e82b0..5bc5dee8 100644 --- a/build/systemMenu_RED/NandInitializer/ARM9.TWL/src/process_hw_info.c +++ b/build/systemMenu_RED/NandInitializer/ARM9.TWL/src/process_hw_info.c @@ -605,7 +605,7 @@ static BOOL WriteHWSecureInfoFile( u8 region ) } // ランチャーゲームコード - LCFG_THW_SetLauncherGameCode( (const u8 *)strLauncherGameCode[ region ] ); + LCFG_THW_SetLauncherTitleID_Lo( (const u8 *)strLauncherGameCode[ region ] ); // ライト if( isWrite && diff --git a/build/tests/AppliCooperation/CooperationA/ARM9/src/CooperationA.c b/build/tests/AppliCooperation/CooperationA/ARM9/src/CooperationA.c index 5150591d..9c7a60ac 100644 --- a/build/tests/AppliCooperation/CooperationA/ARM9/src/CooperationA.c +++ b/build/tests/AppliCooperation/CooperationA/ARM9/src/CooperationA.c @@ -515,7 +515,7 @@ static void MenuScene(void) // 初期化 void CooperationAInit( void ) { - ChangeUserColor( TSD_GetUserColor() ); + ChangeUserColor( LCFG_TSD_GetUserColor() ); s_work.parameter[0] = 0; MenuInit(); diff --git a/build/tests/AppliCooperation/CooperationA/ARM9/src/main.c b/build/tests/AppliCooperation/CooperationA/ARM9/src/main.c index e87a40b7..630b3ab8 100644 --- a/build/tests/AppliCooperation/CooperationA/ARM9/src/main.c +++ b/build/tests/AppliCooperation/CooperationA/ARM9/src/main.c @@ -75,8 +75,8 @@ void TwlMain(void) // :::::::::::::::::::::::::::::::::::::::::::::: // TWL設定データファイルの読み込み // :::::::::::::::::::::::::::::::::::::::::::::: - (void)THW_ReadSecureInfo(); - g_isValidTSD = SYSM_ReadTWLSettingsFile(); + (void)LCFG_ReadHWSecureInfo(); + g_isValidTSD = LCFG_ReadTWLSettings(); if( g_isValidTSD ) { SYSM_CaribrateTP(); } diff --git a/build/tests/AppliCooperation/CooperationB/ARM9/src/CooperationB.c b/build/tests/AppliCooperation/CooperationB/ARM9/src/CooperationB.c index 88336125..5bd3e3b6 100644 --- a/build/tests/AppliCooperation/CooperationB/ARM9/src/CooperationB.c +++ b/build/tests/AppliCooperation/CooperationB/ARM9/src/CooperationB.c @@ -181,7 +181,7 @@ static void MenuScene(void) // 初期化 void CooperationBInit( void ) { - ChangeUserColor( TSD_GetUserColor() ); + ChangeUserColor( LCFG_TSD_GetUserColor() ); s_parameter[0] = 0; MenuInit(); } diff --git a/build/tests/AppliCooperation/CooperationB/ARM9/src/main.c b/build/tests/AppliCooperation/CooperationB/ARM9/src/main.c index d4fa27b5..47313273 100644 --- a/build/tests/AppliCooperation/CooperationB/ARM9/src/main.c +++ b/build/tests/AppliCooperation/CooperationB/ARM9/src/main.c @@ -75,8 +75,8 @@ void TwlMain(void) // :::::::::::::::::::::::::::::::::::::::::::::: // TWL設定データファイルの読み込み // :::::::::::::::::::::::::::::::::::::::::::::: - (void)THW_ReadSecureInfo(); - g_isValidTSD = SYSM_ReadTWLSettingsFile(); + (void)LCFG_ReadHWSecureInfo(); + g_isValidTSD = LCFG_ReadTWLSettings(); if( g_isValidTSD ) { SYSM_CaribrateTP(); } diff --git a/build/tests/AppliCooperation/CooperationC/ARM9/src/CooperationC.c b/build/tests/AppliCooperation/CooperationC/ARM9/src/CooperationC.c index 47e542c3..e689da91 100644 --- a/build/tests/AppliCooperation/CooperationC/ARM9/src/CooperationC.c +++ b/build/tests/AppliCooperation/CooperationC/ARM9/src/CooperationC.c @@ -515,7 +515,7 @@ static void MenuScene(void) // 初期化 void CooperationCInit( void ) { - ChangeUserColor( TSD_GetUserColor() ); + ChangeUserColor( LCFG_TSD_GetUserColor() ); s_work.parameter[0] = 0; MenuInit(); diff --git a/build/tests/AppliCooperation/CooperationC/ARM9/src/main.c b/build/tests/AppliCooperation/CooperationC/ARM9/src/main.c index eae44518..e3919b0b 100644 --- a/build/tests/AppliCooperation/CooperationC/ARM9/src/main.c +++ b/build/tests/AppliCooperation/CooperationC/ARM9/src/main.c @@ -75,8 +75,8 @@ void TwlMain(void) // :::::::::::::::::::::::::::::::::::::::::::::: // TWL設定データファイルの読み込み // :::::::::::::::::::::::::::::::::::::::::::::: - (void)THW_ReadSecureInfo(); - g_isValidTSD = SYSM_ReadTWLSettingsFile(); + (void)LCFG_ReadHWSecureInfo(); + g_isValidTSD = LCFG_ReadTWLSettings(); if( g_isValidTSD ) { SYSM_CaribrateTP(); } diff --git a/build/tests/ExecPreLoadedApp/ARM9/src/ExecPreLoadedApp.c b/build/tests/ExecPreLoadedApp/ARM9/src/ExecPreLoadedApp.c index b86adc2f..87a7ee78 100644 --- a/build/tests/ExecPreLoadedApp/ARM9/src/ExecPreLoadedApp.c +++ b/build/tests/ExecPreLoadedApp/ARM9/src/ExecPreLoadedApp.c @@ -127,7 +127,7 @@ static BOOL LoadTitle( NAMTitleId bootTitleID ) return FALSE; } - SYSMi_GetWork()->isLoadSucceeded = TRUE; + SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE; return TRUE; } @@ -200,7 +200,7 @@ static void MenuScene(void) // 初期化 void ExecPreLoadedAppInit( void ) { - ChangeUserColor( TSD_GetUserColor() ); + ChangeUserColor( LCFG_TSD_GetUserColor() ); MenuInit(); } diff --git a/build/tests/ExecPreLoadedApp/ARM9/src/main.c b/build/tests/ExecPreLoadedApp/ARM9/src/main.c index d7ea4285..615fb39c 100644 --- a/build/tests/ExecPreLoadedApp/ARM9/src/main.c +++ b/build/tests/ExecPreLoadedApp/ARM9/src/main.c @@ -75,8 +75,8 @@ void TwlMain(void) // :::::::::::::::::::::::::::::::::::::::::::::: // TWL設定データファイルの読み込み // :::::::::::::::::::::::::::::::::::::::::::::: - (void)THW_ReadSecureInfo(); - g_isValidTSD = SYSM_ReadTWLSettingsFile(); + (void)LCFG_ReadHWSecureInfo(); + g_isValidTSD = LCFG_ReadTWLSettings(); if( g_isValidTSD ) { SYSM_CaribrateTP(); } diff --git a/build/tests/RelocateChecker/ARM7/hyena_rc.lsf b/build/tests/RelocateChecker/ARM7/hyena_rc.lsf index cd4ad3c8..9b93cca6 100644 --- a/build/tests/RelocateChecker/ARM7/hyena_rc.lsf +++ b/build/tests/RelocateChecker/ARM7/hyena_rc.lsf @@ -57,7 +57,7 @@ Autoload WRAM libmcu_sp$(LIBSUFFIX).a \ libboot_sp$(LIBSUFFIX).a \ libreboot_sp$(LIBSUFFIX).a \ - libcardboot_sp$(LIBSUFFIX).a \ + libhotsw_sp$(LIBSUFFIX).a \ Library libsdio_sp$(LIBSUFFIX).a diff --git a/build/tests/RelocateChecker/ARM7/hyena_rc5.lsf b/build/tests/RelocateChecker/ARM7/hyena_rc5.lsf index 5ffa3bbc..84b1c92f 100644 --- a/build/tests/RelocateChecker/ARM7/hyena_rc5.lsf +++ b/build/tests/RelocateChecker/ARM7/hyena_rc5.lsf @@ -50,7 +50,7 @@ Static $(TARGET_NAME) libmcu_sp$(LIBSUFFIX).a \ libboot_sp$(LIBSUFFIX).a \ libreboot_sp$(LIBSUFFIX).a \ - libcardboot_sp$(LIBSUFFIX).a \ + libhotsw_sp$(LIBSUFFIX).a \ Library libsdio_sp$(LIBSUFFIX).a diff --git a/build/tests/RelocateChecker/ARM7/src/main.c b/build/tests/RelocateChecker/ARM7/src/main.c index 30a9c340..df0df5ce 100644 --- a/build/tests/RelocateChecker/ARM7/src/main.c +++ b/build/tests/RelocateChecker/ARM7/src/main.c @@ -123,7 +123,7 @@ TwlSpMain(void) // [TODO:] カード電源ONして、ROMヘッダのみリード&チェックくらいはやっておきたい - SYSMi_GetWork()->isARM9Start = TRUE; // [TODO:] HW_RED_RESERVEDはNANDファームでクリアしておいて欲しい + SYSMi_GetWork()->flags.common.isARM9Start = TRUE; // [TODO:] HW_RED_RESERVEDはNANDファームでクリアしておいて欲しい // ヒープ領域設定 { @@ -240,9 +240,9 @@ void ReadLauncherParameter( void ) ( SYSMi_GetMCUFreeRegisterValue() == 0 ) ) { // "JTAG有効"か"マイコンフリーレジスタ値=0"ならColdスタート u8 data = 1; MCU_SetFreeRegisters( MCU_RESET_VALUE_OFS, &data, MCU_RESET_VALUE_LEN ); // マイコンフリーレジスタにホットスタートフラグをセット - SYSMi_GetWork()->isHotStart = FALSE; + SYSMi_GetWork()->flags.common.isHotStart = FALSE; }else { - SYSMi_GetWork()->isHotStart = TRUE; + SYSMi_GetWork()->flags.common.isHotStart = TRUE; // ランチャーパラメータ有効判定 if( ( STD_StrNCmp( (const char *)&SYSMi_GetLauncherParamAddr()->header.magicCode, SYSM_LAUNCHER_PARAM_MAGIC_CODE, @@ -252,7 +252,7 @@ void ReadLauncherParameter( void ) ) { // ランチャーパラメータが有効なら、ワークに退避 MI_CpuCopy32 ( SYSMi_GetLauncherParamAddr(), &SYSMi_GetWork()->launcherParam, sizeof(LauncherParam) ); - SYSMi_GetWork()->isValidLauncherParam = TRUE; + SYSMi_GetWork()->flags.common.isValidLauncherParam = TRUE; } } // メインメモリのランチャーパラメータをクリアしておく diff --git a/doc/TWLBanner.xls b/doc/TWLBanner.xls index 972697b6..0ddbe23a 100644 Binary files a/doc/TWLBanner.xls and b/doc/TWLBanner.xls differ diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h index 5cb08fc2..5f46c2b3 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h @@ -29,7 +29,7 @@ extern "C" { #endif // define data ------------------------------------ -#define TITLE_ID_LAUNCHER ( 0x0003000752434e4cLLU ) +#define TITLE_ID_LAUNCHER ( 0x000300074c4e4352LLU ) #define CLONE_BOOT_MODE 1 #define OTHER_BOOT_MODE 2 @@ -40,11 +40,21 @@ typedef struct TitleID_HiLo { u32 Hi; }TitleID_HiLo; + //---------------------------------------------------------------------- -// データ型定義 +// PXIコマンド +//---------------------------------------------------------------------- +#define SYSMENU_PXI_FIFO_TAG PXI_FIFO_TAG_USER_0 + +typedef enum SYSMPXICommand { + SYSM_PXI_COMM_DISABLE_HOTSW = 1 +}SYSMPXICommand; + +//---------------------------------------------------------------------- +// ROMエミュレーション情報 //---------------------------------------------------------------------- #define ISD_ROM_EMULATION_INFO_SIZE 0x20 // ROMエミュレーションデータサイズ -#define ISD_ROM_EMULATION_INFO_MAGIC_CODE 0x444c5754 +#define ISD_ROM_EMULATION_INFO_MAGIC_CODE 0x444c5754 // "TWLD"の文字列 // ISデバッガROMエミュレーション情報 typedef struct ISD_RomEmuInfo { @@ -67,30 +77,47 @@ typedef struct ISD_RomEmuInfo { }ISD_RomEmuInfo; +//---------------------------------------------------------------------- +// SYSMワーク +//---------------------------------------------------------------------- // SYSM共有ワーク構造体 typedef struct SYSM_work { Relocate_Info romRelocateInfo[RELOCATE_INFO_NUM]; // ROM再配置情報(arm9,arm7それぞれltdとflxで最大4つ) - vu32 isFatalError :1; // FATALエラー - vu32 isARM9Start :1; // ARM9スタートフラグ - vu32 isHotStart :1; // Hot/Coldスタート判定 - vu32 isValidLauncherParam :1; // リセットパラメータ有効 - vu32 isValidTSD :1; // NITRO設定データ無効フラグ - vu32 isLogoSkip :1; // ロゴデモスキップ - vu32 isOnDebugger :1; // デバッガ動作か? - vu32 isExistCard :1; // 有効なNTR/TWLカードが存在するか? - vu32 isCardStateChanged :1; // カード状態更新フラグ - vu32 isLoadSucceeded :1; // アプリロード完了? - vu32 isCardBoot :1; // カードブートか? - vu32 isBrokenHWNormalInfo :1; // HWノーマル情報が破損している。 - vu32 isBrokenHWSecureInfo :1; // HWセキュア情報が破損している。 - vu32 isResetRTC :1; // RTCリセット発生 + struct { + struct { + vu32 isFatalError :1; // FATALエラー + vu32 isARM9Start :1; // ARM9スタートフラグ + vu32 isHotStart :1; // Hot/Coldスタート判定 + vu32 isValidLauncherParam :1; // リセットパラメータ有効 + vu32 isValidTSD :1; // NITRO設定データ無効フラグ + vu32 isLogoSkip :1; // ロゴデモスキップ + vu32 isOnDebugger :1; // デバッガ動作か? + vu32 isExistCard :1; // 有効なNTR/TWLカードが存在するか? + vu32 isCardStateChanged :1; // カード状態更新フラグ + vu32 isLoadSucceeded :1; // アプリロード完了? + vu32 isCardBoot :1; // カードブートか? + vu32 isBrokenHWNormalInfo :1; // HWノーマル情報が破損している。 + vu32 isBrokenHWSecureInfo :1; // HWセキュア情報が破損している。 + vu32 isResetRTC :1; // RTCリセット発生 #ifdef DEBUG_USED_CARD_SLOT_B_ - vu32 isValidCardBanner :1; - vu32 is1stCardChecked :1; - vu32 rsv :17; + vu32 isValidCardBanner :1; + vu32 is1stCardChecked :1; + vu32 rsv :17; #else - vu32 rsv :19; + vu32 rsv :19; #endif + }common; + struct { + vu16 isEnableHotSW :1; + vu16 rsv:15; + }arm9; + struct { + vu16 isEnableHotSW :1; + vu16 isBusyHotSW :1; + vu16 disableHotSW_REQ :1; + vu16 rsv:13; + }arm7; + }flags; u16 cardHeaderCrc16; // カード検出時に算出したROMヘッダCRC16(ARM9側でコピーして使用する側) u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16(ARM7側ライブラリでダイレクトに書き換わる側) @@ -124,6 +151,7 @@ typedef struct SDKBootCheckInfo{ }SDKBootCheckInfo; + //---------------------------------------------------------------------- // SYSM共有ワーク領域のアドレス獲得 //----------------------------------------------------------------------