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 = \
|
SUBDIRS = \
|
||||||
$(ROOT)/build/libraries/reboot \
|
$(ROOT)/build/libraries/reboot \
|
||||||
|
$(ROOT)/build/demos/gx/UnitTours/DEMOLib \
|
||||||
$(TWLSYSTEM_ROOT) \
|
$(TWLSYSTEM_ROOT) \
|
||||||
build
|
build
|
||||||
|
|
||||||
|
|||||||
@ -66,14 +66,14 @@ SYSMENU_LIBS ?= \
|
|||||||
libmbloader$(TWL_LIBSUFFIX).a \
|
libmbloader$(TWL_LIBSUFFIX).a \
|
||||||
libacsign$(TWL_LIBSUFFIX).a \
|
libacsign$(TWL_LIBSUFFIX).a \
|
||||||
libboot$(TWL_LIBSUFFIX).a \
|
libboot$(TWL_LIBSUFFIX).a \
|
||||||
# libcardboot$(TWL_LIBSUFFIX).a
|
|
||||||
|
|
||||||
else # ($(CODEGEN_PROC),ARM7)
|
else # ($(CODEGEN_PROC),ARM7)
|
||||||
|
|
||||||
SYSMENU_LIBS ?= \
|
SYSMENU_LIBS ?= \
|
||||||
|
libsysmenu_sp$(TWL_LIBSUFFIX).a \
|
||||||
libmbloader_sp$(TWL_LIBSUFFIX).a \
|
libmbloader_sp$(TWL_LIBSUFFIX).a \
|
||||||
libboot_sp$(TWL_LIBSUFFIX).a \
|
libboot_sp$(TWL_LIBSUFFIX).a \
|
||||||
libcardboot_sp$(TWL_LIBSUFFIX).a
|
libhotsw_sp$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@ -72,7 +72,8 @@ INSTALL_TARGETS = $(BINDIR)/$(TARGET_NAME).tef \
|
|||||||
|
|
||||||
INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE)
|
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
|
LLIBRARIES += libwl_sp.TWL.LTD.a
|
||||||
LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES)
|
LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES)
|
||||||
|
|
||||||
|
|||||||
@ -56,9 +56,9 @@ Autoload WRAM
|
|||||||
libmcu_sp$(LIBSUFFIX).a \
|
libmcu_sp$(LIBSUFFIX).a \
|
||||||
libboot_sp$(LIBSUFFIX).a \
|
libboot_sp$(LIBSUFFIX).a \
|
||||||
libreboot_sp$(LIBSUFFIX).a \
|
libreboot_sp$(LIBSUFFIX).a \
|
||||||
libcardboot_sp$(LIBSUFFIX).a \
|
libhotsw_sp$(LIBSUFFIX).a \
|
||||||
libreloc_info_sp$(LIBSUFFIX).a
|
libreloc_info_sp$(LIBSUFFIX).a \
|
||||||
|
libsysmenu_sp$(LIBSUFFIX).a
|
||||||
|
|
||||||
Library libsdio_sp$(LIBSUFFIX).a
|
Library libsdio_sp$(LIBSUFFIX).a
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,7 @@
|
|||||||
#include <twl/hw/common/mmap_wramEnv.h>
|
#include <twl/hw/common/mmap_wramEnv.h>
|
||||||
#include <sysmenu.h>
|
#include <sysmenu.h>
|
||||||
#include "nvram_sp.h"
|
#include "nvram_sp.h"
|
||||||
|
#include "internal_api.h"
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
定数定義
|
定数定義
|
||||||
@ -112,6 +113,9 @@ TwlSpMain(void)
|
|||||||
OS_InitTick();
|
OS_InitTick();
|
||||||
PrintDebugInfo();
|
PrintDebugInfo();
|
||||||
|
|
||||||
|
// PXIコールバックの設定
|
||||||
|
PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback );
|
||||||
|
|
||||||
// ランチャーパラメター取得(Cold/Hotスタート判定含む)
|
// ランチャーパラメター取得(Cold/Hotスタート判定含む)
|
||||||
ReadLauncherParameter();
|
ReadLauncherParameter();
|
||||||
|
|
||||||
@ -123,7 +127,7 @@ TwlSpMain(void)
|
|||||||
|
|
||||||
// [TODO:] カード電源ONして、ROMヘッダのみリード&チェックくらいはやっておきたい
|
// [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;
|
stat1.reset = 1;
|
||||||
RTC_WriteStatus1( &stat1 );
|
RTC_WriteStatus1( &stat1 );
|
||||||
SYSMi_GetWork()->isResetRTC = TRUE;
|
SYSMi_GetWork()->flags.common.isResetRTC = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,8 +260,8 @@ static void ResetRTC( void )
|
|||||||
void ReadLauncherParameter( void )
|
void ReadLauncherParameter( void )
|
||||||
{
|
{
|
||||||
BOOL hot;
|
BOOL hot;
|
||||||
SYSMi_GetWork()->isValidLauncherParam = OS_ReadLauncherParameter( (LauncherParam *)&(SYSMi_GetWork()->launcherParam), &hot );
|
SYSMi_GetWork()->flags.common.isValidLauncherParam = OS_ReadLauncherParameter( (LauncherParam *)&(SYSMi_GetWork()->launcherParam), &hot );
|
||||||
SYSMi_GetWork()->isHotStart = hot;
|
SYSMi_GetWork()->flags.common.isHotStart = hot;
|
||||||
// メインメモリのリセットパラメータをクリアしておく
|
// メインメモリのリセットパラメータをクリアしておく
|
||||||
MI_CpuClear32( SYSMi_GetLauncherParamAddr(), 0x100 );
|
MI_CpuClear32( SYSMi_GetLauncherParamAddr(), 0x100 );
|
||||||
}
|
}
|
||||||
@ -618,7 +622,7 @@ extern u16 WMSP_GetAllowedChannel(u16 bitField);
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static void ReadUserInfo(void)
|
static void ReadUserInfo(void)
|
||||||
{
|
{
|
||||||
u8 *p;
|
u8 *p = OS_GetSystemWork()->nvramUserInfo;
|
||||||
|
|
||||||
// 無線MACアドレスをユーザー情報の後ろに展開
|
// 無線MACアドレスをユーザー情報の後ろに展開
|
||||||
{
|
{
|
||||||
@ -668,3 +672,4 @@ VBlankIntr(void)
|
|||||||
PM_SelfBlinkProc();
|
PM_SelfBlinkProc();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -213,7 +213,7 @@ BOOL BOOT_WaitStart( void )
|
|||||||
|
|
||||||
static void BOOTi_ClearREG_RAM( void )
|
static void BOOTi_ClearREG_RAM( void )
|
||||||
{
|
{
|
||||||
if( SYSMi_GetWork()->isCardBoot ) {
|
if( SYSMi_GetWork()->flags.common.isCardBoot ) {
|
||||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||||
reg_MI_MC_SWP = 0x80; // カードスロットのスワップ
|
reg_MI_MC_SWP = 0x80; // カードスロットのスワップ
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -31,7 +31,7 @@ INCDIR = ./include
|
|||||||
|
|
||||||
SRCS = blowfish.c hotsw.c ds_blowfish_table.c dsCardType1.c dsCardType2.c romEmulation.c customNDma.c
|
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
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
|
|||||||
@ -180,7 +180,7 @@ void HOTSW_Init(void)
|
|||||||
else{
|
else{
|
||||||
OS_PutString("No Card...\n");
|
OS_PutString("No Card...\n");
|
||||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||||
SYSMi_GetWork()->is1stCardChecked = TRUE;
|
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -297,8 +297,8 @@ BOOL HOTSW_Boot(void)
|
|||||||
retval = FALSE;
|
retval = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSMi_GetWork()->isExistCard = retval;
|
SYSMi_GetWork()->flags.common.isExistCard = retval;
|
||||||
SYSMi_GetWork()->isCardStateChanged = TRUE; // 本当は挿抜単位でここを立てる。
|
SYSMi_GetWork()->flags.common.isCardStateChanged = TRUE; // 本当は挿抜単位でここを立てる。
|
||||||
|
|
||||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM9と排他制御する
|
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM9と排他制御する
|
||||||
OS_ReleaseLockID( id );
|
OS_ReleaseLockID( id );
|
||||||
@ -376,10 +376,10 @@ BOOL HOTSW_Boot(void)
|
|||||||
|
|
||||||
// [TODO:]暫定処置。ちゃんとした流れでLauncher側に渡すようにする。
|
// [TODO:]暫定処置。ちゃんとした流れでLauncher側に渡すようにする。
|
||||||
MI_CpuCopy8( HOTSW_GetRomEmulationBuffer(), &SYSMi_GetWork()->romEmuInfo, ROM_EMULATION_DATA_SIZE );
|
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_
|
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||||
SYSMi_GetWork()->is1stCardChecked = TRUE;
|
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
@ -412,7 +412,7 @@ void HOTSW_LoadStaticModule(void)
|
|||||||
s_cbData.pBootSegBuf->rh.s.banner_offset,
|
s_cbData.pBootSegBuf->rh.s.banner_offset,
|
||||||
(u32 *)SYSM_CARD_BANNER_BUF,
|
(u32 *)SYSM_CARD_BANNER_BUF,
|
||||||
sizeof(TWLBannerFile) );
|
sizeof(TWLBannerFile) );
|
||||||
SYSMi_GetWork()->isValidCardBanner = TRUE;
|
SYSMi_GetWork()->flags.common.isValidCardBanner = TRUE;
|
||||||
}
|
}
|
||||||
#endif
|
#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 \
|
mountInfo.c \
|
||||||
device.c \
|
device.c \
|
||||||
title.c \
|
title.c \
|
||||||
banner.c
|
banner.c \
|
||||||
|
../common/src/pxi.c
|
||||||
|
|
||||||
|
|
||||||
TARGET_LIB = libsysmenu$(TWL_LIBSUFFIX).a
|
TARGET_LIB = libsysmenu$(TWL_LIBSUFFIX).a
|
||||||
@ -44,8 +45,8 @@ INSTALL_TARGETS = $(TARGETS)
|
|||||||
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
||||||
|
|
||||||
LINCLUDES = $(ROOT)/build/libraries/mb/common/include \
|
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;
|
return isRead;
|
||||||
#else
|
#else
|
||||||
#pragma unused(bannerOffset)
|
#pragma unused(bannerOffset)
|
||||||
if( SYSMi_GetWork()->isValidCardBanner ) {
|
if( SYSMi_GetWork()->flags.common.isValidCardBanner ) {
|
||||||
DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 );
|
DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 );
|
||||||
MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) );
|
MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) );
|
||||||
}
|
}
|
||||||
return (BOOL)SYSMi_GetWork()->isValidCardBanner;
|
return (BOOL)SYSMi_GetWork()->flags.common.isValidCardBanner;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -95,7 +95,7 @@ void SYSMi_CheckRTC( void )
|
|||||||
!SYSM_CheckRTCTime( &time )
|
!SYSM_CheckRTCTime( &time )
|
||||||
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
|
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
|
||||||
||
|
||
|
||||||
SYSMi_GetWork()->isResetRTC
|
SYSMi_GetWork()->flags.common.isResetRTC
|
||||||
#endif
|
#endif
|
||||||
) { // RTCの異常を検出したら、rtc入力フラグ&rtcOffsetを0にしてNVRAMに書き込み。
|
) { // RTCの異常を検出したら、rtc入力フラグ&rtcOffsetを0にしてNVRAMに書き込み。
|
||||||
OS_TPrintf("\"RTC reset\" or \"Illegal RTC data\" detect!\n");
|
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 ) ) ||
|
( titleID & TITLEID_MEDIA_NAND_FLAG ) ) ||
|
||||||
( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時
|
( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時
|
||||||
( titleID & TITLEID_MEDIA_NAND_FLAG ) &&
|
( titleID & TITLEID_MEDIA_NAND_FLAG ) &&
|
||||||
( SYSMi_GetWork()->isOnDebugger ) )
|
( SYSMi_GetWork()->flags.common.isOnDebugger ) )
|
||||||
) {
|
) {
|
||||||
char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ];
|
char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ];
|
||||||
u32 saveDataSize[ 2 ];
|
u32 saveDataSize[ 2 ];
|
||||||
@ -240,7 +240,7 @@ static void SYSMi_ModifySaveDataMountForLauncher( LauncherBootType bootType, NAM
|
|||||||
( titleID & TITLEID_MEDIA_NAND_FLAG ) ) ||
|
( titleID & TITLEID_MEDIA_NAND_FLAG ) ) ||
|
||||||
( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時
|
( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時
|
||||||
( titleID & TITLEID_MEDIA_NAND_FLAG ) &&
|
( titleID & TITLEID_MEDIA_NAND_FLAG ) &&
|
||||||
( SYSMi_GetWork()->isOnDebugger ) )
|
( SYSMi_GetWork()->flags.common.isOnDebugger ) )
|
||||||
) {
|
) {
|
||||||
char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ];
|
char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ];
|
||||||
u32 saveDataSize[ 2 ];
|
u32 saveDataSize[ 2 ];
|
||||||
|
|||||||
@ -34,10 +34,11 @@ static void SYSMi_CheckCardCloneBoot( void );
|
|||||||
void *(*SYSMi_Alloc)( u32 size );
|
void *(*SYSMi_Alloc)( u32 size );
|
||||||
void (*SYSMi_Free )( void *ptr );
|
void (*SYSMi_Free )( void *ptr );
|
||||||
|
|
||||||
|
#define SYSM_DEBUG_
|
||||||
#ifdef SYSM_DEBUG_
|
#ifdef SYSM_DEBUG_
|
||||||
SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用
|
SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用
|
||||||
|
ROM_Header_Short *pRomHeader;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// static variable-------------------------------------------------------------
|
// static variable-------------------------------------------------------------
|
||||||
|
|
||||||
// const data------------------------------------------------------------------
|
// const data------------------------------------------------------------------
|
||||||
@ -53,6 +54,7 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
|||||||
{
|
{
|
||||||
#ifdef SYSM_DEBUG_
|
#ifdef SYSM_DEBUG_
|
||||||
pSysm = SYSMi_GetWork();
|
pSysm = SYSMi_GetWork();
|
||||||
|
pRomHeader = (ROM_Header_Short *)0x027fc000;
|
||||||
#endif /* SYSM_DEBUG_ */
|
#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 );
|
OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB );
|
||||||
|
|
||||||
SYSM_SetAllocFunc( pAlloc, pFree );
|
SYSM_SetAllocFunc( pAlloc, pFree );
|
||||||
|
PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback );
|
||||||
|
|
||||||
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
|
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
|
||||||
}
|
}
|
||||||
@ -113,12 +116,12 @@ TitleProperty *SYSM_ReadParameters( void )
|
|||||||
u8 brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX;
|
u8 brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX;
|
||||||
|
|
||||||
// ARM7のリセットパラメータ取得が完了するのを待つ
|
// ARM7のリセットパラメータ取得が完了するのを待つ
|
||||||
while( !SYSMi_GetWork()->isARM9Start ) {
|
while( !SYSMi_GetWork()->flags.common.isARM9Start ) {
|
||||||
SVC_WaitByLoop( 0x1000 );
|
SVC_WaitByLoop( 0x1000 );
|
||||||
}
|
}
|
||||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||||
// ARM7のカードチェック完了を待つ
|
// ARM7のカードチェック完了を待つ
|
||||||
while( !SYSMi_GetWork()->is1stCardChecked ) {
|
while( !SYSMi_GetWork()->flags.common.is1stCardChecked ) {
|
||||||
SVC_WaitByLoop( 0x1000 );
|
SVC_WaitByLoop( 0x1000 );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -151,13 +154,13 @@ TitleProperty *SYSM_ReadParameters( void )
|
|||||||
// ノーマル情報リード
|
// ノーマル情報リード
|
||||||
if( !LCFG_ReadHWNormalInfo() ) {
|
if( !LCFG_ReadHWNormalInfo() ) {
|
||||||
OS_TPrintf( "HW Normal Info Broken!\n" );
|
OS_TPrintf( "HW Normal Info Broken!\n" );
|
||||||
SYSMi_GetWork()->isBrokenHWNormalInfo = TRUE;
|
SYSMi_GetWork()->flags.common.isBrokenHWNormalInfo = TRUE;
|
||||||
}
|
}
|
||||||
// セキュア情報リード
|
// セキュア情報リード
|
||||||
if( !LCFG_ReadHWSecureInfo() ) {
|
if( !LCFG_ReadHWSecureInfo() ) {
|
||||||
OS_TPrintf( "HW Secure Info Broken!\n" );
|
OS_TPrintf( "HW Secure Info Broken!\n" );
|
||||||
SYSMi_GetWork()->isBrokenHWSecureInfo = TRUE;
|
SYSMi_GetWork()->flags.common.isBrokenHWSecureInfo = TRUE;
|
||||||
SYSMi_GetWork()->isFatalError = TRUE;
|
SYSMi_GetWork()->flags.common.isFatalError = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
@ -200,7 +203,7 @@ static TitleProperty *SYSMi_CheckShortcutBoot( void )
|
|||||||
// 検査カード起動
|
// 検査カード起動
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
if( SYSM_IsExistCard() ) {
|
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 ) ) ||
|
!( *(u8 *)( HW_SYS_CONF_BUF + HWi_WSYS09_OFFSET ) & HWi_WSYS09_JTAG_CPUJE_MASK ) ) ||
|
||||||
SYSM_IsInspectCard() ||
|
SYSM_IsInspectCard() ||
|
||||||
( ( PAD_Read() & PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) ==
|
( ( PAD_Read() & PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) ==
|
||||||
@ -250,14 +253,14 @@ const LauncherParamBody *SYSM_GetLauncherParamBody( void )
|
|||||||
// ロゴデモスキップかどうかをセット
|
// ロゴデモスキップかどうかをセット
|
||||||
void SYSM_SetLogoDemoSkip( BOOL skip )
|
void SYSM_SetLogoDemoSkip( BOOL skip )
|
||||||
{
|
{
|
||||||
SYSMi_GetWork()->isLogoSkip = skip;
|
SYSMi_GetWork()->flags.common.isLogoSkip = skip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ロゴデモスキップか?
|
// ロゴデモスキップか?
|
||||||
BOOL SYSM_IsLogoDemoSkip( void )
|
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 )
|
static BOOL SYSMi_IsDebuggerBannerViewMode( void )
|
||||||
{
|
{
|
||||||
#ifdef __IS_DEBUGGER_BUILD
|
#ifdef __IS_DEBUGGER_BUILD
|
||||||
return ( SYSMi_GetWork()->isOnDebugger &&
|
return ( SYSMi_GetWork()->flags.common.isOnDebugger &&
|
||||||
SYSMi_IsValidCard() &&
|
SYSMi_IsValidCard() &&
|
||||||
SYSM_GetCardRomHeader()->dbgRomSize == 0 ) ? TRUE : FALSE;
|
SYSM_GetCardRomHeader()->dbgRomSize == 0 ) ? TRUE : FALSE;
|
||||||
#else
|
#else
|
||||||
@ -284,14 +287,14 @@ BOOL SYSM_IsTPReadable( void )
|
|||||||
// TSD有効/無効をセット
|
// TSD有効/無効をセット
|
||||||
void SYSM_SetValidTSD( BOOL valid )
|
void SYSM_SetValidTSD( BOOL valid )
|
||||||
{
|
{
|
||||||
SYSMi_GetWork()->isValidTSD = valid;
|
SYSMi_GetWork()->flags.common.isValidTSD = valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TSD有効?
|
// TSD有効?
|
||||||
BOOL SYSM_IsValidTSD( void )
|
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カードが差さっているか?
|
// 有効なTWL/NTRカードが差さっているか?
|
||||||
BOOL SYSM_IsExistCard( void )
|
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;
|
buffp += total_rom_size & 0x000001FF;
|
||||||
if( *buffp++ == 'a' && *buffp == 'c' ) {
|
if( *buffp++ == 'a' && *buffp == 'c' ) {
|
||||||
SYSMi_GetWork()->cloneBootMode = CLONE_BOOT_MODE;
|
SYSMi_GetWork()->flags.common.cloneBootMode = CLONE_BOOT_MODE;
|
||||||
}else {
|
}else {
|
||||||
SYSMi_GetWork()->cloneBootMode = OTHER_BOOT_MODE;
|
SYSMi_GetWork()->flags.common.cloneBootMode = OTHER_BOOT_MODE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
// extern data-----------------------------------------------------------------
|
// extern data-----------------------------------------------------------------
|
||||||
// function's prototype-------------------------------------------------------
|
// function's prototype-------------------------------------------------------
|
||||||
|
static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst );
|
||||||
static s32 ReadFile( FSFile* pf, void* buffer, s32 size );
|
static s32 ReadFile( FSFile* pf, void* buffer, s32 size );
|
||||||
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle );
|
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle );
|
||||||
static void SYSMi_Relocate( void );
|
static void SYSMi_Relocate( void );
|
||||||
@ -56,19 +57,19 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
|||||||
{
|
{
|
||||||
BOOL retval = FALSE;
|
BOOL retval = FALSE;
|
||||||
|
|
||||||
if( SYSMi_GetWork()->isCardStateChanged ) {
|
if( SYSMi_GetWork()->flags.common.isCardStateChanged ) {
|
||||||
|
|
||||||
MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) );
|
MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) );
|
||||||
|
|
||||||
// ROMヘッダバッファのコピー
|
// ROMヘッダバッファのコピー
|
||||||
if( SYSM_IsExistCard() ) {
|
if( SYSM_IsExistCard() ) {
|
||||||
u16 id = (u16)OS_GetLockID();
|
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 ); // キャッシュケア
|
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ヘッダコピー
|
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()->cardHeaderCrc16 = SYSMi_GetWork()->cardHeaderCrc16; // ROMヘッダCRCコピー
|
||||||
SYSMi_GetWork()->isCardStateChanged = FALSE; // カード情報更新フラグを落とす
|
SYSMi_GetWork()->flags.common.isCardStateChanged = FALSE; // カード情報更新フラグを落とす
|
||||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
|
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
|
||||||
OS_ReleaseLockID( id );
|
OS_ReleaseLockID( id );
|
||||||
|
|
||||||
pTitleList_Card->flags.isValid = TRUE;
|
pTitleList_Card->flags.isValid = TRUE;
|
||||||
@ -103,96 +104,55 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
|
|||||||
// とりあえずALL
|
// とりあえずALL
|
||||||
OSTick start;
|
OSTick start;
|
||||||
int l;
|
int l;
|
||||||
int gotten;
|
int getNum;
|
||||||
NAMTitleId titleIdArray[ LAUNCHER_TITLE_LIST_NUM ];
|
int validNum = 0;
|
||||||
|
NAMTitleId titleIDArray[ LAUNCHER_TITLE_LIST_NUM ];
|
||||||
|
NAMTitleId *pTitleIDList = NULL;
|
||||||
|
|
||||||
|
|
||||||
if( listNum > LAUNCHER_TITLE_LIST_NUM ) {
|
if( listNum > LAUNCHER_TITLE_LIST_NUM ) {
|
||||||
OS_TPrintf( "Warning: TitleList_Nand num over LAUNCHER_TITLE_LIST_NUM(%d)\n", 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++)
|
// インストールされているタイトルの取得
|
||||||
{
|
start = OS_GetTick();
|
||||||
//ヘッダからバナーを読み込む
|
getNum = NAM_GetNumTitles();
|
||||||
FSFile file[1];
|
OS_TPrintf( "NAM_GetNumTitles : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||||
BOOL bSuccess;
|
pTitleIDList = SYSM_Alloc( sizeof(NAMTitleId) * getNum );
|
||||||
static const int PATH_LENGTH=1024;
|
if( pTitleIDList == NULL ) {
|
||||||
char path[PATH_LENGTH];
|
OS_TPrintf( "%s: alloc error.\n", __FUNCTION__ );
|
||||||
static u8 header[HW_TWL_ROM_HEADER_BUF_SIZE] ATTRIBUTE_ALIGN(32);
|
return 0;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
for(l=gotten;l<LAUNCHER_TITLE_LIST_NUM;l++)
|
start = OS_GetTick();
|
||||||
{
|
(void)NAM_GetTitleList( pTitleIDList, (u32)getNum );
|
||||||
// 念のため0にクリア
|
OS_TPrintf( "NAM_GetTitleList : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||||
titleIdArray[l] = 0;
|
|
||||||
|
// 取得したタイトルがローンチ対象かどうかをチェック
|
||||||
|
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 ) );
|
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++)
|
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];
|
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.isValid = TRUE;
|
||||||
pTitleList_Nand[l+1].flags.bootType = LAUNCHER_BOOTTYPE_NAND;
|
pTitleList_Nand[l+1].flags.bootType = LAUNCHER_BOOTTYPE_NAND;
|
||||||
}
|
}
|
||||||
@ -201,6 +161,74 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
|
|||||||
return 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)
|
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ヘッダバッファをコピー
|
// ROMヘッダバッファをコピー
|
||||||
MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
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 )
|
void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
|
||||||
{
|
{
|
||||||
@ -429,24 +466,26 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
|
|||||||
#define STACK_SIZE 0xc00
|
#define STACK_SIZE 0xc00
|
||||||
static u64 stack[ STACK_SIZE / sizeof(u64) ];
|
static u64 stack[ STACK_SIZE / sizeof(u64) ];
|
||||||
|
|
||||||
|
SYSMi_DisableHotSW();
|
||||||
|
|
||||||
// アプリ未ロード状態なら、ロード開始
|
// アプリ未ロード状態なら、ロード開始
|
||||||
if( !pBootTitle->flags.isAppLoadCompleted ) {
|
if( !pBootTitle->flags.isAppLoadCompleted ) {
|
||||||
SYSMi_GetWork()->isLoadSucceeded = FALSE;
|
SYSMi_GetWork()->flags.common.isLoadSucceeded = FALSE;
|
||||||
OS_InitThread();
|
OS_InitThread();
|
||||||
OS_CreateThread( &s_thread, (void (*)(void *))SYSMi_LoadTitleThreadFunc, (void*)pBootTitle, stack+STACK_SIZE/sizeof(u64), STACK_SIZE,THREAD_PRIO );
|
OS_CreateThread( &s_thread, (void (*)(void *))SYSMi_LoadTitleThreadFunc, (void*)pBootTitle, stack+STACK_SIZE/sizeof(u64), STACK_SIZE,THREAD_PRIO );
|
||||||
OS_WakeupThreadDirect( &s_thread );
|
OS_WakeupThreadDirect( &s_thread );
|
||||||
}else if( pBootTitle->flags.isAppRelocate ) {
|
}else if( pBootTitle->flags.isAppRelocate ) {
|
||||||
// アプリロード済みで、再配置要求ありなら、再配置(カードのみ対応)
|
// アプリロード済みで、再配置要求ありなら、再配置(カードのみ対応)
|
||||||
SYSMi_Relocate();
|
SYSMi_Relocate();
|
||||||
SYSMi_GetWork()->isLoadSucceeded = TRUE;
|
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
// アプリロード済みで、再配置要求なし
|
// アプリロード済みで、再配置要求なし
|
||||||
SYSMi_GetWork()->isLoadSucceeded = TRUE;
|
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM ) {
|
if( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM ) {
|
||||||
SYSMi_GetWork()->isCardBoot = TRUE;
|
SYSMi_GetWork()->flags.common.isCardBoot = TRUE;
|
||||||
}else if(pBootTitle->flags.isAppLoadCompleted)
|
}else if(pBootTitle->flags.isAppLoadCompleted)
|
||||||
{
|
{
|
||||||
// カードブートでなく、ロード済みの場合、再配置情報をランチャーパラメタから読み込み
|
// カードブートでなく、ロード済みの場合、再配置情報をランチャーパラメタから読み込み
|
||||||
@ -533,7 +572,7 @@ AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle )
|
|||||||
return AUTH_RESULT_PROCESSING;
|
return AUTH_RESULT_PROCESSING;
|
||||||
}
|
}
|
||||||
// ロード成功?
|
// ロード成功?
|
||||||
if( SYSMi_GetWork()->isLoadSucceeded == FALSE )
|
if( SYSMi_GetWork()->flags.common.isLoadSucceeded == FALSE )
|
||||||
{
|
{
|
||||||
return AUTH_RESULT_TITLE_LOAD_FAILED;
|
return AUTH_RESULT_TITLE_LOAD_FAILED;
|
||||||
}
|
}
|
||||||
@ -594,4 +633,15 @@ static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle )
|
|||||||
return TRUE;
|
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)
|
#define OS_PutString( ... ) ((void)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SDK_ARM9
|
||||||
//-------------------------------------------------------
|
//-------------------------------------------------------
|
||||||
// マウント情報セット
|
// マウント情報セット
|
||||||
//-------------------------------------------------------
|
//-------------------------------------------------------
|
||||||
@ -62,6 +62,11 @@ void SYSMi_CheckRTC( void );
|
|||||||
// カードバナーリード(※NTR-IPL2仕様)
|
// カードバナーリード(※NTR-IPL2仕様)
|
||||||
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner );
|
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BOOL SYSMi_SendPXICommand( SYSMPXICommand command );
|
||||||
|
void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err );
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#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");
|
OS_TPrintf("Failed to load HWSecureInfo.\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
LCFG_THW_GetLauncherGameCode( (u8*)&titleId );
|
LCFG_THW_GetLauncherTitleID_Lo( (u8*)&titleId );
|
||||||
|
|
||||||
// 4: after LCFG_ReadHWSecureInfo
|
// 4: after LCFG_ReadHWSecureInfo
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|||||||
@ -139,7 +139,7 @@ static BOOL TryResolveSrl(void)
|
|||||||
OS_TPrintf("Failed to load HWSecureInfo.\n");
|
OS_TPrintf("Failed to load HWSecureInfo.\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
LCFG_THW_GetLauncherGameCode( (u8*)&titleId );
|
LCFG_THW_GetLauncherTitleID_Lo( (u8*)&titleId );
|
||||||
// 4: after LCFG_ReadHWSecureInfo
|
// 4: after LCFG_ReadHWSecureInfo
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
|
|||||||
@ -134,7 +134,6 @@ static const char *strLauncherGameCode[] = {
|
|||||||
// HW情報ライターの初期化
|
// HW情報ライターの初期化
|
||||||
void HWInfoWriterInit( void )
|
void HWInfoWriterInit( void )
|
||||||
{
|
{
|
||||||
u8 gameCode[ 5 ] = { 0, 0, 0, 0, 0 };
|
|
||||||
|
|
||||||
GX_DispOff();
|
GX_DispOff();
|
||||||
GXS_DispOff();
|
GXS_DispOff();
|
||||||
@ -154,8 +153,15 @@ void HWInfoWriterInit( void )
|
|||||||
OS_TPrintf( "region = %d\n", LCFG_THW_GetRegion() );
|
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, 16 * 8, TXT_COLOR_BLACK, "Region = %s", strRegion[ LCFG_THW_GetRegion() ] );
|
||||||
PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "SerialNo = %s", LCFG_THW_GetSerialNoPtr() );
|
PrintfSJISSub( 2 * 8, 18 * 8, TXT_COLOR_BLACK, "SerialNo = %s", LCFG_THW_GetSerialNoPtr() );
|
||||||
// LCFG_THW_GetLauncherGameCode( gameCode );
|
if ( 1 )
|
||||||
// PrintfSJISSub( 2 * 8, 20 * 8, TXT_COLOR_BLACK, "LauncherGameCode = %s", gameCode );
|
{
|
||||||
|
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_region_old = LCFG_THW_GetRegion();
|
||||||
s_csr = 0;
|
s_csr = 0;
|
||||||
DrawMenu( s_csr, &s_writerParam );
|
DrawMenu( s_csr, &s_writerParam );
|
||||||
@ -410,8 +416,13 @@ static BOOL WriteHWSecureInfoFile( u8 region )
|
|||||||
LCFG_THW_SetSerialNo( serialNo );
|
LCFG_THW_SetSerialNo( serialNo );
|
||||||
}
|
}
|
||||||
|
|
||||||
// ランチャーゲームコード
|
// ランチャーTitleID_Loのセット
|
||||||
LCFG_THW_SetLauncherGameCode( (const u8 *)strLauncherGameCode[ region ] );
|
{
|
||||||
|
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 &&
|
if( isWrite &&
|
||||||
|
|||||||
@ -55,9 +55,7 @@ Autoload WRAM
|
|||||||
libmicex_sp$(LIBSUFFIX).a \
|
libmicex_sp$(LIBSUFFIX).a \
|
||||||
libmcu_sp$(LIBSUFFIX).a \
|
libmcu_sp$(LIBSUFFIX).a \
|
||||||
|
|
||||||
Library libsdio_hcd_twl$(LIBSUFFIX).a \
|
Library libsdio_sp$(LIBSUFFIX).a
|
||||||
libsdio_busdriver$(LIBSUFFIX).a \
|
|
||||||
libsdio_lib$(LIBSUFFIX).a \
|
|
||||||
|
|
||||||
Object * (.etable)
|
Object * (.etable)
|
||||||
Object * (.wram)
|
Object * (.wram)
|
||||||
@ -143,10 +141,9 @@ Ltdautoload LTDMAIN
|
|||||||
Object * (.ltdmain)
|
Object * (.ltdmain)
|
||||||
Library libnvram_sp$(LIBSUFFIX).a
|
Library libnvram_sp$(LIBSUFFIX).a
|
||||||
Library librtc_sp$(LIBSUFFIX).a
|
Library librtc_sp$(LIBSUFFIX).a
|
||||||
Library librompatch_sp$(LIBSUFFIX).a \
|
Library libwm_sp$(LIBSUFFIX).a \
|
||||||
libwm_sp$(LIBSUFFIX).a \
|
|
||||||
libnwm_sp$(LIBSUFFIX).a \
|
libnwm_sp$(LIBSUFFIX).a \
|
||||||
libARM7athdrv$(LIBSUFFIX).a \
|
libathdrv_sp$(LIBSUFFIX).a \
|
||||||
libwvr_sp$(LIBSUFFIX).a \
|
libwvr_sp$(LIBSUFFIX).a \
|
||||||
libwl_sp$(LIBSUFFIX).a
|
libwl_sp$(LIBSUFFIX).a
|
||||||
Library libfatfs_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 &&
|
if( isWrite &&
|
||||||
|
|||||||
@ -515,7 +515,7 @@ static void MenuScene(void)
|
|||||||
// <20>‰Šú‰»
|
// <20>‰Šú‰»
|
||||||
void CooperationAInit( void )
|
void CooperationAInit( void )
|
||||||
{
|
{
|
||||||
ChangeUserColor( TSD_GetUserColor() );
|
ChangeUserColor( LCFG_TSD_GetUserColor() );
|
||||||
s_work.parameter[0] = 0;
|
s_work.parameter[0] = 0;
|
||||||
MenuInit();
|
MenuInit();
|
||||||
|
|
||||||
|
|||||||
@ -75,8 +75,8 @@ void TwlMain(void)
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルの読み込み
|
// TWL設定データファイルの読み込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)THW_ReadSecureInfo();
|
(void)LCFG_ReadHWSecureInfo();
|
||||||
g_isValidTSD = SYSM_ReadTWLSettingsFile();
|
g_isValidTSD = LCFG_ReadTWLSettings();
|
||||||
if( g_isValidTSD ) {
|
if( g_isValidTSD ) {
|
||||||
SYSM_CaribrateTP();
|
SYSM_CaribrateTP();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -181,7 +181,7 @@ static void MenuScene(void)
|
|||||||
// <20>‰Šú‰»
|
// <20>‰Šú‰»
|
||||||
void CooperationBInit( void )
|
void CooperationBInit( void )
|
||||||
{
|
{
|
||||||
ChangeUserColor( TSD_GetUserColor() );
|
ChangeUserColor( LCFG_TSD_GetUserColor() );
|
||||||
s_parameter[0] = 0;
|
s_parameter[0] = 0;
|
||||||
MenuInit();
|
MenuInit();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,8 +75,8 @@ void TwlMain(void)
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルの読み込み
|
// TWL設定データファイルの読み込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)THW_ReadSecureInfo();
|
(void)LCFG_ReadHWSecureInfo();
|
||||||
g_isValidTSD = SYSM_ReadTWLSettingsFile();
|
g_isValidTSD = LCFG_ReadTWLSettings();
|
||||||
if( g_isValidTSD ) {
|
if( g_isValidTSD ) {
|
||||||
SYSM_CaribrateTP();
|
SYSM_CaribrateTP();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -515,7 +515,7 @@ static void MenuScene(void)
|
|||||||
// <20>‰Šú‰»
|
// <20>‰Šú‰»
|
||||||
void CooperationCInit( void )
|
void CooperationCInit( void )
|
||||||
{
|
{
|
||||||
ChangeUserColor( TSD_GetUserColor() );
|
ChangeUserColor( LCFG_TSD_GetUserColor() );
|
||||||
s_work.parameter[0] = 0;
|
s_work.parameter[0] = 0;
|
||||||
MenuInit();
|
MenuInit();
|
||||||
|
|
||||||
|
|||||||
@ -75,8 +75,8 @@ void TwlMain(void)
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルの読み込み
|
// TWL設定データファイルの読み込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)THW_ReadSecureInfo();
|
(void)LCFG_ReadHWSecureInfo();
|
||||||
g_isValidTSD = SYSM_ReadTWLSettingsFile();
|
g_isValidTSD = LCFG_ReadTWLSettings();
|
||||||
if( g_isValidTSD ) {
|
if( g_isValidTSD ) {
|
||||||
SYSM_CaribrateTP();
|
SYSM_CaribrateTP();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -127,7 +127,7 @@ static BOOL LoadTitle( NAMTitleId bootTitleID )
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSMi_GetWork()->isLoadSucceeded = TRUE;
|
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ static void MenuScene(void)
|
|||||||
// <20>‰Šú‰»
|
// <20>‰Šú‰»
|
||||||
void ExecPreLoadedAppInit( void )
|
void ExecPreLoadedAppInit( void )
|
||||||
{
|
{
|
||||||
ChangeUserColor( TSD_GetUserColor() );
|
ChangeUserColor( LCFG_TSD_GetUserColor() );
|
||||||
MenuInit();
|
MenuInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -75,8 +75,8 @@ void TwlMain(void)
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルの読み込み
|
// TWL設定データファイルの読み込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)THW_ReadSecureInfo();
|
(void)LCFG_ReadHWSecureInfo();
|
||||||
g_isValidTSD = SYSM_ReadTWLSettingsFile();
|
g_isValidTSD = LCFG_ReadTWLSettings();
|
||||||
if( g_isValidTSD ) {
|
if( g_isValidTSD ) {
|
||||||
SYSM_CaribrateTP();
|
SYSM_CaribrateTP();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -57,7 +57,7 @@ Autoload WRAM
|
|||||||
libmcu_sp$(LIBSUFFIX).a \
|
libmcu_sp$(LIBSUFFIX).a \
|
||||||
libboot_sp$(LIBSUFFIX).a \
|
libboot_sp$(LIBSUFFIX).a \
|
||||||
libreboot_sp$(LIBSUFFIX).a \
|
libreboot_sp$(LIBSUFFIX).a \
|
||||||
libcardboot_sp$(LIBSUFFIX).a \
|
libhotsw_sp$(LIBSUFFIX).a \
|
||||||
|
|
||||||
Library libsdio_sp$(LIBSUFFIX).a
|
Library libsdio_sp$(LIBSUFFIX).a
|
||||||
|
|
||||||
|
|||||||
@ -50,7 +50,7 @@ Static $(TARGET_NAME)
|
|||||||
libmcu_sp$(LIBSUFFIX).a \
|
libmcu_sp$(LIBSUFFIX).a \
|
||||||
libboot_sp$(LIBSUFFIX).a \
|
libboot_sp$(LIBSUFFIX).a \
|
||||||
libreboot_sp$(LIBSUFFIX).a \
|
libreboot_sp$(LIBSUFFIX).a \
|
||||||
libcardboot_sp$(LIBSUFFIX).a \
|
libhotsw_sp$(LIBSUFFIX).a \
|
||||||
|
|
||||||
Library libsdio_sp$(LIBSUFFIX).a
|
Library libsdio_sp$(LIBSUFFIX).a
|
||||||
|
|
||||||
|
|||||||
@ -123,7 +123,7 @@ TwlSpMain(void)
|
|||||||
|
|
||||||
// [TODO:] カード電源ONして、ROMヘッダのみリード&チェックくらいはやっておきたい
|
// [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スタート
|
( SYSMi_GetMCUFreeRegisterValue() == 0 ) ) { // "JTAG有効"か"マイコンフリーレジスタ値=0"ならColdスタート
|
||||||
u8 data = 1;
|
u8 data = 1;
|
||||||
MCU_SetFreeRegisters( MCU_RESET_VALUE_OFS, &data, MCU_RESET_VALUE_LEN ); // マイコンフリーレジスタにホットスタートフラグをセット
|
MCU_SetFreeRegisters( MCU_RESET_VALUE_OFS, &data, MCU_RESET_VALUE_LEN ); // マイコンフリーレジスタにホットスタートフラグをセット
|
||||||
SYSMi_GetWork()->isHotStart = FALSE;
|
SYSMi_GetWork()->flags.common.isHotStart = FALSE;
|
||||||
}else {
|
}else {
|
||||||
SYSMi_GetWork()->isHotStart = TRUE;
|
SYSMi_GetWork()->flags.common.isHotStart = TRUE;
|
||||||
// ランチャーパラメータ有効判定
|
// ランチャーパラメータ有効判定
|
||||||
if( ( STD_StrNCmp( (const char *)&SYSMi_GetLauncherParamAddr()->header.magicCode,
|
if( ( STD_StrNCmp( (const char *)&SYSMi_GetLauncherParamAddr()->header.magicCode,
|
||||||
SYSM_LAUNCHER_PARAM_MAGIC_CODE,
|
SYSM_LAUNCHER_PARAM_MAGIC_CODE,
|
||||||
@ -252,7 +252,7 @@ void ReadLauncherParameter( void )
|
|||||||
) {
|
) {
|
||||||
// ランチャーパラメータが有効なら、ワークに退避
|
// ランチャーパラメータが有効なら、ワークに退避
|
||||||
MI_CpuCopy32 ( SYSMi_GetLauncherParamAddr(), &SYSMi_GetWork()->launcherParam, sizeof(LauncherParam) );
|
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
|
#endif
|
||||||
|
|
||||||
// define data ------------------------------------
|
// define data ------------------------------------
|
||||||
#define TITLE_ID_LAUNCHER ( 0x0003000752434e4cLLU )
|
#define TITLE_ID_LAUNCHER ( 0x000300074c4e4352LLU )
|
||||||
#define CLONE_BOOT_MODE 1
|
#define CLONE_BOOT_MODE 1
|
||||||
#define OTHER_BOOT_MODE 2
|
#define OTHER_BOOT_MODE 2
|
||||||
|
|
||||||
@ -40,11 +40,21 @@ typedef struct TitleID_HiLo {
|
|||||||
u32 Hi;
|
u32 Hi;
|
||||||
}TitleID_HiLo;
|
}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_SIZE 0x20 // ROMエミュレーションデータサイズ
|
||||||
#define ISD_ROM_EMULATION_INFO_MAGIC_CODE 0x444c5754
|
#define ISD_ROM_EMULATION_INFO_MAGIC_CODE 0x444c5754 // "TWLD"の文字列
|
||||||
|
|
||||||
// ISデバッガROMエミュレーション情報
|
// ISデバッガROMエミュレーション情報
|
||||||
typedef struct ISD_RomEmuInfo {
|
typedef struct ISD_RomEmuInfo {
|
||||||
@ -67,30 +77,47 @@ typedef struct ISD_RomEmuInfo {
|
|||||||
}ISD_RomEmuInfo;
|
}ISD_RomEmuInfo;
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// SYSMワーク
|
||||||
|
//----------------------------------------------------------------------
|
||||||
// SYSM共有ワーク構造体
|
// SYSM共有ワーク構造体
|
||||||
typedef struct SYSM_work {
|
typedef struct SYSM_work {
|
||||||
Relocate_Info romRelocateInfo[RELOCATE_INFO_NUM]; // ROM再配置情報(arm9,arm7それぞれltdとflxで最大4つ)
|
Relocate_Info romRelocateInfo[RELOCATE_INFO_NUM]; // ROM再配置情報(arm9,arm7それぞれltdとflxで最大4つ)
|
||||||
vu32 isFatalError :1; // FATALエラー
|
struct {
|
||||||
vu32 isARM9Start :1; // ARM9スタートフラグ
|
struct {
|
||||||
vu32 isHotStart :1; // Hot/Coldスタート判定
|
vu32 isFatalError :1; // FATALエラー
|
||||||
vu32 isValidLauncherParam :1; // リセットパラメータ有効
|
vu32 isARM9Start :1; // ARM9スタートフラグ
|
||||||
vu32 isValidTSD :1; // NITRO設定データ無効フラグ
|
vu32 isHotStart :1; // Hot/Coldスタート判定
|
||||||
vu32 isLogoSkip :1; // ロゴデモスキップ
|
vu32 isValidLauncherParam :1; // リセットパラメータ有効
|
||||||
vu32 isOnDebugger :1; // デバッガ動作か?
|
vu32 isValidTSD :1; // NITRO設定データ無効フラグ
|
||||||
vu32 isExistCard :1; // 有効なNTR/TWLカードが存在するか?
|
vu32 isLogoSkip :1; // ロゴデモスキップ
|
||||||
vu32 isCardStateChanged :1; // カード状態更新フラグ
|
vu32 isOnDebugger :1; // デバッガ動作か?
|
||||||
vu32 isLoadSucceeded :1; // アプリロード完了?
|
vu32 isExistCard :1; // 有効なNTR/TWLカードが存在するか?
|
||||||
vu32 isCardBoot :1; // カードブートか?
|
vu32 isCardStateChanged :1; // カード状態更新フラグ
|
||||||
vu32 isBrokenHWNormalInfo :1; // HWノーマル情報が破損している。
|
vu32 isLoadSucceeded :1; // アプリロード完了?
|
||||||
vu32 isBrokenHWSecureInfo :1; // HWセキュア情報が破損している。
|
vu32 isCardBoot :1; // カードブートか?
|
||||||
vu32 isResetRTC :1; // RTCリセット発生
|
vu32 isBrokenHWNormalInfo :1; // HWノーマル情報が破損している。
|
||||||
|
vu32 isBrokenHWSecureInfo :1; // HWセキュア情報が破損している。
|
||||||
|
vu32 isResetRTC :1; // RTCリセット発生
|
||||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||||
vu32 isValidCardBanner :1;
|
vu32 isValidCardBanner :1;
|
||||||
vu32 is1stCardChecked :1;
|
vu32 is1stCardChecked :1;
|
||||||
vu32 rsv :17;
|
vu32 rsv :17;
|
||||||
#else
|
#else
|
||||||
vu32 rsv :19;
|
vu32 rsv :19;
|
||||||
#endif
|
#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; // カード検出時に算出したROMヘッダCRC16(ARM9側でコピーして使用する側)
|
||||||
u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16(ARM7側ライブラリでダイレクトに書き換わる側)
|
u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16(ARM7側ライブラリでダイレクトに書き換わる側)
|
||||||
@ -124,6 +151,7 @@ typedef struct SDKBootCheckInfo{
|
|||||||
|
|
||||||
}SDKBootCheckInfo;
|
}SDKBootCheckInfo;
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// SYSM共有ワーク領域のアドレス獲得
|
// SYSM共有ワーク領域のアドレス獲得
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user