・HWInfoWriterのランチャーTitleID_Loをビッグエンディアンに修正。

・TwlBanner.xlsドキュメント更新。
・NANDアプリリスト取得時に、TitleID_Hiの値によって取捨選択を行うよう変更。
・PXIを使ってARM9からHotSWを制御できるようにしようと試み中。
・SYSM_workのフラグ構成を修正。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@539 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-01-29 08:34:32 +00:00
parent 9a21a243a4
commit e0b3985431
37 changed files with 530 additions and 187 deletions

View File

@ -24,6 +24,7 @@ export TWL_ARCHGEN = ALL
SUBDIRS = \
$(ROOT)/build/libraries/reboot \
$(ROOT)/build/demos/gx/UnitTours/DEMOLib \
$(TWLSYSTEM_ROOT) \
build

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -37,6 +37,7 @@
#include <twl/hw/common/mmap_wramEnv.h>
#include <sysmenu.h>
#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();
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 =====

View File

@ -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
#----------------------------------------------------------------------------

View File

@ -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
}

View File

@ -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");

View File

@ -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 ];

View File

@ -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
}

View File

@ -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;l<gotten;l++)
{
//ヘッダからバナーを読み込む
FSFile file[1];
BOOL bSuccess;
static const int PATH_LENGTH=1024;
char path[PATH_LENGTH];
static u8 header[HW_TWL_ROM_HEADER_BUF_SIZE] ATTRIBUTE_ALIGN(32);
s32 readLen;
s32 offset;
start = OS_GetTick();
readLen = NAM_GetTitleBootContentPathFast(path, titleIdArray[l]);
OS_TPrintf( "NAM_GetTitleBootContentPath : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
if(readLen != NAM_OK){
OS_TPrintf("NAM_GetTitleBootContentPath failed %d,%lld,%d\n",l,titleIdArray[l],readLen);
}
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
if( ! bSuccess )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant open file %s\n",path);
return -1;
}
// バナーデータオフセットを読み込む
bSuccess = FS_SeekFile(file, 0x68, FS_SEEK_SET);
if( ! bSuccess )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(0)\n");
FS_CloseFile(file);
return -1;
}
readLen = FS_ReadFile(file, &offset, sizeof(offset));
if( readLen != sizeof(offset) )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant read file\n");
FS_CloseFile(file);
return -1;
}
bSuccess = FS_SeekFile(file, offset, FS_SEEK_SET);
if( ! bSuccess )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(offset)\n");
FS_CloseFile(file);
return -1;
}
readLen = ReadFile(file, &s_bannerBuf[l], (s32)sizeof(TWLBannerFile));
if( readLen != (s32)sizeof(TWLBannerFile) )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant read file2\n");
FS_CloseFile(file);
return -1;
}
FS_CloseFile(file);
// インストールされているタイトルの取得
start = OS_GetTick();
getNum = NAM_GetNumTitles();
OS_TPrintf( "NAM_GetNumTitles : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
pTitleIDList = SYSM_Alloc( sizeof(NAMTitleId) * getNum );
if( pTitleIDList == NULL ) {
OS_TPrintf( "%s: alloc error.\n", __FUNCTION__ );
return 0;
}
for(l=gotten;l<LAUNCHER_TITLE_LIST_NUM;l++)
{
// 念のため0にクリア
titleIdArray[l] = 0;
start = OS_GetTick();
(void)NAM_GetTitleList( pTitleIDList, (u32)getNum );
OS_TPrintf( "NAM_GetTitleList : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
// 取得したタイトルがローンチ対象かどうかをチェック
for( l = 0; l < getNum; l++ ) {
// "Not Launch"でない かつ "Data Only"でない なら有効なタイトルとしてリストに追加
if( ( pTitleIDList[ l ] & ( TITLE_ID_NOT_LAUNCH_FLAG_MASK | TITLE_ID_DATA_ONLY_FLAG_MASK ) ) == 0 ) {
titleIDArray[ validNum ] = pTitleIDList[ l ];
SYSMi_ReadBanner_NAND( pTitleIDList[ l ], (u8 *)&s_bannerBuf[ validNum ] );
validNum++;
}
}
// カードアプリ部分を除いたリストクリア
SYSM_Free( pTitleIDList );
// 念のため残り領域を0クリア
for( l = validNum; l < LAUNCHER_TITLE_LIST_NUM; l++ ) {
titleIDArray[ l ] = 0;
}
// 最終リストに対して、カードアプリ部分を除いた部分をクリア
MI_CpuClearFast( &pTitleList_Nand[ 1 ], sizeof(TitleProperty) * ( listNum - 1 ) );
listNum = (gotten<listNum) ? gotten : listNum;
listNum = ( validNum < listNum ) ? validNum : listNum;
for(l=0;l<listNum;l++)
{
pTitleList_Nand[l+1].titleID = titleIdArray[l];
pTitleList_Nand[l+1].titleID = titleIDArray[l];
pTitleList_Nand[l+1].pBanner = &s_bannerBuf[l];
if( titleIdArray[l] ) {
if( titleIDArray[l] ) {
pTitleList_Nand[l+1].flags.isValid = TRUE;
pTitleList_Nand[l+1].flags.bootType = LAUNCHER_BOOTTYPE_NAND;
}
@ -201,6 +161,74 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
return listNum;
}
static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst )
{
#define PATH_LENGTH 1024
OSTick start;
FSFile file[1];
BOOL bSuccess;
char path[PATH_LENGTH];
s32 readLen;
s32 offset;
start = OS_GetTick();
readLen = NAM_GetTitleBootContentPathFast( path, titleID );
OS_TPrintf( "NAM_GetTitleBootContentPath : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
// ファイルパスを取得
if(readLen != NAM_OK){
OS_TPrintf("NAM_GetTitleBootContentPath failed %lld,%d\n", titleID, readLen );
}
// ファイルオープン
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
if( ! bSuccess )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant open file %s\n",path);
return FALSE;
}
// ROMヘッダのバナーデータオフセットを読み込む
bSuccess = FS_SeekFile(file, 0x68, FS_SEEK_SET);
if( ! bSuccess )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(0)\n");
FS_CloseFile(file);
return FALSE;
}
readLen = FS_ReadFile(file, &offset, sizeof(offset));
if( readLen != sizeof(offset) )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant read file\n");
FS_CloseFile(file);
return FALSE;
}
// バナーが存在する場合のみリード
if( offset ) {
bSuccess = FS_SeekFile(file, offset, FS_SEEK_SET);
if( ! bSuccess )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(offset)\n");
FS_CloseFile(file);
return FALSE;
}
readLen = ReadFile( file, pDst, (s32)sizeof(TWLBannerFile) );
if( readLen != (s32)sizeof(TWLBannerFile) )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant read file2\n");
FS_CloseFile(file);
return FALSE;
}
}else {
// バナーが存在しない場合はバッファクリア
MI_CpuClearFast( pDst, sizeof(TWLBannerFile) );
}
FS_CloseFile(file);
return TRUE;
}
// 指定ファイルリード
static s32 ReadFile(FSFile* pf, void* buffer, s32 size)
@ -418,10 +446,19 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
// ROMヘッダバッファをコピー
MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
SYSMi_GetWork()->isLoadSucceeded = 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

View File

@ -23,7 +23,7 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = ARM9
SUBDIRS = ARM9 ARM7
#----------------------------------------------------------------------------

View File

@ -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
}

View File

@ -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 <twl.h>
#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_

View File

@ -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 <twl.h>
#include <sysmenu.h>
#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
}

View File

@ -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();

View File

@ -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();

View File

@ -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 &&

View File

@ -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 \

View File

@ -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 &&

View File

@ -515,7 +515,7 @@ static void MenuScene(void)
// <20>‰Šú‰»
void CooperationAInit( void )
{
ChangeUserColor( TSD_GetUserColor() );
ChangeUserColor( LCFG_TSD_GetUserColor() );
s_work.parameter[0] = 0;
MenuInit();

View File

@ -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();
}

View File

@ -181,7 +181,7 @@ static void MenuScene(void)
// <20>‰Šú‰»
void CooperationBInit( void )
{
ChangeUserColor( TSD_GetUserColor() );
ChangeUserColor( LCFG_TSD_GetUserColor() );
s_parameter[0] = 0;
MenuInit();
}

View File

@ -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();
}

View File

@ -515,7 +515,7 @@ static void MenuScene(void)
// <20>‰Šú‰»
void CooperationCInit( void )
{
ChangeUserColor( TSD_GetUserColor() );
ChangeUserColor( LCFG_TSD_GetUserColor() );
s_work.parameter[0] = 0;
MenuInit();

View File

@ -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();
}

View File

@ -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)
// <20>‰Šú‰»
void ExecPreLoadedAppInit( void )
{
ChangeUserColor( TSD_GetUserColor() );
ChangeUserColor( LCFG_TSD_GetUserColor() );
MenuInit();
}

View File

@ -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();
}

View File

@ -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

View File

@ -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

View File

@ -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;
}
}
// メインメモリのランチャーパラメータをクリアしておく

Binary file not shown.

View File

@ -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ヘッダCRC16ARM9側でコピーして使用する側
u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16ARM7側ライブラリでダイレクトに書き換わる側
@ -124,6 +151,7 @@ typedef struct SDKBootCheckInfo{
}SDKBootCheckInfo;
//----------------------------------------------------------------------
// SYSM共有ワーク領域のアドレス獲得
//----------------------------------------------------------------------