mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・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:
parent
9a21a243a4
commit
e0b3985431
@ -24,6 +24,7 @@ export TWL_ARCHGEN = ALL
|
||||
|
||||
SUBDIRS = \
|
||||
$(ROOT)/build/libraries/reboot \
|
||||
$(ROOT)/build/demos/gx/UnitTours/DEMOLib \
|
||||
$(TWLSYSTEM_ROOT) \
|
||||
build
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
45
build/libraries_sysmenu/sysmenu/ARM7/Makefile
Normal file
45
build/libraries_sysmenu/sysmenu/ARM7/Makefile
Normal 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 =====
|
||||
@ -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
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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 ];
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -23,7 +23,7 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9
|
||||
SUBDIRS = ARM9 ARM7
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
80
build/libraries_sysmenu/sysmenu/common/internal_api.h
Normal file
80
build/libraries_sysmenu/sysmenu/common/internal_api.h
Normal 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_
|
||||
116
build/libraries_sysmenu/sysmenu/common/src/pxi.c
Normal file
116
build/libraries_sysmenu/sysmenu/common/src/pxi.c
Normal 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
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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 &&
|
||||
|
||||
@ -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 \
|
||||
|
||||
@ -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 &&
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -181,7 +181,7 @@ static void MenuScene(void)
|
||||
// <20>‰Šú‰»
|
||||
void CooperationBInit( void )
|
||||
{
|
||||
ChangeUserColor( TSD_GetUserColor() );
|
||||
ChangeUserColor( LCFG_TSD_GetUserColor() );
|
||||
s_parameter[0] = 0;
|
||||
MenuInit();
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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.
@ -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共有ワーク領域のアドレス獲得
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
Loading…
Reference in New Issue
Block a user