活線挿抜動作を禁止できるようにランチャーとhotswライブラリで対応中。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@542 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-01-29 13:02:42 +00:00
parent 0ed02f72b9
commit b80be7b1a1
14 changed files with 157 additions and 282 deletions

View File

@ -114,7 +114,7 @@ TwlSpMain(void)
PrintDebugInfo(); PrintDebugInfo();
// PXIコールバックの設定 // PXIコールバックの設定
PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback ); // PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback );
// ランチャーパラメター取得Cold/Hotスタート判定含む // ランチャーパラメター取得Cold/Hotスタート判定含む
ReadLauncherParameter(); ReadLauncherParameter();
@ -192,7 +192,17 @@ TwlSpMain(void)
BOOT_Init(); BOOT_Init();
// 活栓挿抜機能初期化 // 活栓挿抜機能初期化
// 【TODO:直接起動且つロード済みの場合、カードを読み込まないようにする事】 if( ( SYSM_GetLauncherParamBody()->v1.flags.isValid ) &&
( SYSM_GetLauncherParamBody()->v1.flags.bootType != LAUNCHER_BOOTTYPE_ROM ) &&
( SYSM_GetLauncherParamBody()->v1.bootTitleID )
) {
// ランチャーパラメータでダイレクトカードブート以外の指定がある時は、活線挿抜をOFFにする。
SYSMi_GetWork()->flags.common.isEnableHotSW = 0;
}else {
// それ以外の時は活線挿抜ON
SYSMi_GetWork()->flags.common.isEnableHotSW = 1;
}
HOTSW_Init(); HOTSW_Init();
while (TRUE) while (TRUE)

View File

@ -195,10 +195,27 @@ void HOTSW_Init(void)
* ----------------------------------------------------------------- */ * ----------------------------------------------------------------- */
BOOL HOTSW_Boot(void) BOOL HOTSW_Boot(void)
{ {
OSTick start;
s32 tempLockID; s32 tempLockID;
BOOL retval = TRUE; BOOL retval = TRUE;
OSTick start = OS_GetTick(); if( !SYSMi_GetWork()->flags.common.isEnableHotSW ) {
// [TODO:]ここのフラグセットは適当にしたので、あとでちゃんと流れを確認する。
#ifdef DEBUG_USED_CARD_SLOT_B_
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
#endif
return TRUE;
}
{
u16 id = (u16)OS_GetLockID();
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
SYSMi_GetWork()->flags.common.isBusyHotSW = 1;
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
OS_ReleaseLockID( id );
}
start = OS_GetTick();
// スロットがスワップされてたら元に戻す。 // スロットがスワップされてたら元に戻す。
if(reg_MI_MC1 & 0x8000){ if(reg_MI_MC1 & 0x8000){
@ -386,6 +403,20 @@ BOOL HOTSW_Boot(void)
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE; SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
#endif #endif
{
u16 id = (u16)OS_GetLockID();
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
SYSMi_GetWork()->flags.common.isBusyHotSW = 0;
if( SYSMi_GetWork()->flags.arm9.reqChangeHotSW ) {
SYSMi_GetWork()->flags.common.isEnableHotSW = SYSMi_GetWork()->flags.arm9.nextHotSWStatus;
SYSMi_GetWork()->flags.arm9.reqChangeHotSW = 0;
SYSMi_GetWork()->flags.arm9.nextHotSWStatus = 0;
// HOTSW_Finalize();
}
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
OS_ReleaseLockID( id );
}
return retval; return retval;
} }
@ -972,6 +1003,7 @@ static void SetMCSCR(void)
static void InterruptCallbackCard(void) static void InterruptCallbackCard(void)
{ {
// Mを 10 から 11 に遷移 // Mを 10 から 11 に遷移
// [TODO:]削除予定
reg_MI_MC1 = (u32)((reg_MI_MC1 & (~SLOT_STATUS_MODE_SELECT_MSK)) | SLOT_STATUS_MODE_11); reg_MI_MC1 = (u32)((reg_MI_MC1 & (~SLOT_STATUS_MODE_SELECT_MSK)) | SLOT_STATUS_MODE_11);
// カードブート用構造体の初期化 // カードブート用構造体の初期化

View File

@ -24,7 +24,9 @@ TARGET_PLATFORM = TWL
TWL_ARCHGEN = LIMITED TWL_ARCHGEN = LIMITED
TWL_PROC = ARM7 TWL_PROC = ARM7
SRCS = ../common/src/pxi.c SRCDIR = ../common/src
SRCS = status.c \
pxi.c
TARGET_LIB = libsysmenu_sp$(TWL_LIBSUFFIX).a TARGET_LIB = libsysmenu_sp$(TWL_LIBSUFFIX).a

View File

@ -33,6 +33,7 @@ SRCS = sysmenu_lib.c \
device.c \ device.c \
title.c \ title.c \
banner.c \ banner.c \
../common/src/status.c \
../common/src/pxi.c ../common/src/pxi.c

View File

@ -16,7 +16,7 @@
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
#include <twl.h> #include <twl.h>
#include <sysmenu/sysmenu_lib/ARM9/sysmenu_api.h> #include <sysmenu/sysmenu_lib/common/sysmenu_api.h>
#include <sysmenu/memorymap.h> #include <sysmenu/memorymap.h>
// define data----------------------------------------------------------- // define data-----------------------------------------------------------

View File

@ -25,9 +25,6 @@ extern void LCFG_VerifyAndRecoveryNTRSettings( void );
// function's prototype------------------------------------------------------- // function's prototype-------------------------------------------------------
static TitleProperty *SYSMi_CheckShortcutBoot( void ); static TitleProperty *SYSMi_CheckShortcutBoot( void );
static BOOL SYSMi_IsDebuggerBannerViewMode( void );
static int SYSMi_IsValidCard( void );
static BOOL SYSMi_CheckEntryAddress( void );
static void SYSMi_CheckCardCloneBoot( void ); static void SYSMi_CheckCardCloneBoot( void );
// global variable------------------------------------------------------------- // global variable-------------------------------------------------------------
@ -64,7 +61,8 @@ 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 );
// 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レジスタのチェックフラグのセット
} }
@ -243,134 +241,6 @@ static TitleProperty *SYSMi_CheckShortcutBoot( void )
} }
// ランチャーパラメータの取得
const LauncherParamBody *SYSM_GetLauncherParamBody( void )
{
return (const LauncherParamBody *)&SYSMi_GetWork()->launcherParam.body;
}
// ロゴデモスキップかどうかをセット
void SYSM_SetLogoDemoSkip( BOOL skip )
{
SYSMi_GetWork()->flags.common.isLogoSkip = skip;
}
// ロゴデモスキップか?
BOOL SYSM_IsLogoDemoSkip( void )
{
return (BOOL)SYSMi_GetWork()->flags.common.isLogoSkip;
}
// ISデバッガのバナービューモード起動かどうか
static BOOL SYSMi_IsDebuggerBannerViewMode( void )
{
#ifdef __IS_DEBUGGER_BUILD
return ( SYSMi_GetWork()->flags.common.isOnDebugger &&
SYSMi_IsValidCard() &&
SYSM_GetCardRomHeader()->dbgRomSize == 0 ) ? TRUE : FALSE;
#else
return FALSE;
#endif // __IS_DEBUGGER_BUILD
}
// TPリード可能状態か
BOOL SYSM_IsTPReadable( void )
{
return TRUE;
}
// TSD有効/無効をセット
void SYSM_SetValidTSD( BOOL valid )
{
SYSMi_GetWork()->flags.common.isValidTSD = valid;
}
// TSD有効
BOOL SYSM_IsValidTSD( void )
{
return (BOOL)SYSMi_GetWork()->flags.common.isValidTSD;
}
//======================================================================
//
// 各種チェック
//
//======================================================================
// 有効なTWL/NTRカードが差さっているか
BOOL SYSM_IsExistCard( void )
{
return (BOOL)SYSMi_GetWork()->flags.common.isExistCard;
}
// 検査用カードが差さっているか?
BOOL SYSM_IsInspectCard( void )
{
return ( SYSM_IsExistCard() && SYSM_GetCardRomHeader()->inspect_card );
}
// 有効なTWLカードが差さっているか
BOOL SYSM_IsTWLCard( void );
BOOL SYSM_IsTWLCard( void )
{
return ( SYSM_IsExistCard() && ( SYSM_GetCardRomHeader()->platform_code & PLATFORM_CODE_FLAG_TWL ) );
}
// 有効なNTRカードが差さっているか
BOOL SYSM_IsNTRCard( void );
BOOL SYSM_IsNTRCard( void )
{
return ( SYSM_IsExistCard() && ( SYSM_GetCardRomHeader()->platform_code == PLATFORM_CODE_NTR ) );
}
// NTR,TWLカード存在チェック 「リターン 1カード認識 0カードなし」
static int SYSMi_IsValidCard( void )
{
if( ( SYSM_GetCardRomHeader()->nintendo_logo_crc16 == 0xcf56 ) &&
( SYSM_GetCardRomHeader()->header_crc16 == SYSMi_GetWork()->cardHeaderCrc16 ) ) {
return TRUE; // NTR,TWLカードありNintendoロゴCRC、カードヘッダCRCが正しい場合
// ※Nintendoロゴデータのチェックは、特許の都合上、ロゴ表示ルーチン起動後に行います。
}else {
return FALSE; // NTR,TWLカードなし
}
}
// エントリアドレスの正当性チェック
static BOOL SYSMi_CheckEntryAddress( void )
{
// エントリアドレスがROM内登録エリアかAGBカートリッジエリアなら、無限ループに入る。
if( !( ( (u32)SYSM_GetCardRomHeader()->main_entry_address >= HW_MAIN_MEM ) &&
( (u32)SYSM_GetCardRomHeader()->main_entry_address < SYSM_ARM9_MMEM_ENTRY_ADDR_LIMIT )
) ||
!( ( ( (u32)SYSM_GetCardRomHeader()->sub_entry_address >= HW_MAIN_MEM ) &&
( (u32)SYSM_GetCardRomHeader()->sub_entry_address < SYSM_ARM7_LOAD_MMEM_LAST_ADDR ) ) ||
( ( (u32)SYSM_GetCardRomHeader()->sub_entry_address >= HW_WRAM ) &&
( (u32)SYSM_GetCardRomHeader()->sub_entry_address < SYSM_ARM7_LOAD_WRAM_LAST_ADDR ) )
)
) {
OS_TPrintf("entry address invalid.\n");
#ifdef __DEBUG_SECURITY_CODE
DispSingleColorScreen( SCREEN_YELLOW );
#endif
return FALSE;
}
OS_TPrintf("entry address valid.\n");
return TRUE;
}
// クローンブート判定 // クローンブート判定
static void SYSMi_CheckCardCloneBoot( void ) static void SYSMi_CheckCardCloneBoot( void )
{ {
@ -379,10 +249,6 @@ static void SYSMi_CheckCardCloneBoot( void )
u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000; u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000;
u32 file_offset = total_rom_size & 0xFFFFFE00; u32 file_offset = total_rom_size & 0xFFFFFE00;
if( !SYSMi_IsValidCard() ) {
return;
}
DC_FlushRange( buffp, BNR_IMAGE_SIZE ); DC_FlushRange( buffp, BNR_IMAGE_SIZE );
CARD_ReadRom( 4, (void *)file_offset, buffp, BNR_IMAGE_SIZE ); CARD_ReadRom( 4, (void *)file_offset, buffp, BNR_IMAGE_SIZE );

View File

@ -28,6 +28,7 @@
// function's prototype------------------------------------------------------- // function's prototype-------------------------------------------------------
static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst ); 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_EnableHotSW( BOOL enable );
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle ); static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle );
static void SYSMi_Relocate( void ); static void SYSMi_Relocate( void );
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle ); static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle );
@ -450,15 +451,6 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
} }
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 )
{ {
@ -466,7 +458,7 @@ 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(); SYSMi_EnableHotSW( FALSE );
// アプリ未ロード状態なら、ロード開始 // アプリ未ロード状態なら、ロード開始
if( !pBootTitle->flags.isAppLoadCompleted ) { if( !pBootTitle->flags.isAppLoadCompleted ) {
@ -645,3 +637,35 @@ void CheckDigest( void )
} }
} }
#endif #endif
// 活線挿抜有効/無効をセット
void SYSMi_EnableHotSW( BOOL enable )
{
enable = enable ? 1 : 0;
// 現在の値と同じなら何もせずリターン
if( SYSMi_GetWork()->flags.common.isEnableHotSW == enable ) {
return;
}
{
u16 id = (u16)OS_GetLockID();
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
if( !SYSMi_GetWork()->flags.common.isBusyHotSW ) {
// ARM7側がビジーでなければ、直接書き換え
SYSMi_GetWork()->flags.common.isEnableHotSW = enable;
}else {
// ARM7側がビジーなら、変更要求をしてARM7が値を書き換えてくれるのを待つ。
SYSMi_GetWork()->flags.arm9.reqChangeHotSW = 1;
SYSMi_GetWork()->flags.arm9.nextHotSWStatus = enable;
}
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
OS_ReleaseLockID( id );
}
// 値が変化するまでスリープして待つ。
while( SYSMi_GetWork()->flags.common.isEnableHotSW != enable ) {
OS_Sleep( 2 );
}
}

View File

@ -62,8 +62,22 @@ void SYSMi_CheckRTC( void );
// カードバナーリード※NTR-IPL2仕様 // カードバナーリード※NTR-IPL2仕様
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner ); BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner );
//-------------------------------------------------------
// Šˆ<C5A0>ü}”²
//-------------------------------------------------------
void SYSMi_EnableHotSW( BOOL enable );
#endif #endif
//=======================================================
//
// ARM9/ARM7¤ÊAPI
//
//=======================================================
BOOL SYSMi_IsDebuggerBannerViewMode( void );
BOOL SYSMi_CheckEntryAddress( void );
BOOL SYSMi_SendPXICommand( SYSMPXICommand command ); BOOL SYSMi_SendPXICommand( SYSMPXICommand command );
void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err ); void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err );

View File

@ -1,80 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: internal_api.h
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef SYSM_INTERNAL_API_H_
#define SYSM_INTERNAL_API_H_
#include <twl.h>
#ifdef __cplusplus
extern "C" {
#endif
//#define SYSM_LIB_NO_MESSAGE // Printf抑制スイッチ
#ifdef SYSM_LIB_NO_MESSAGE
#define OS_Printf( ... ) ((void)0)
#define OS_TPrintf( ... ) ((void)0)
#define OS_PutString( ... ) ((void)0)
#endif
#ifdef SDK_ARM9
//-------------------------------------------------------
// マウント情報セット
//-------------------------------------------------------
// ランチャー用
void SYSMi_SetLauncherMountInfo( void );
// 起動アプリ用
void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle );
//-------------------------------------------------------
// デバイス
//-------------------------------------------------------
// RTC補正
void SYSMi_WriteAdjustRTC( void );
// RTCチェック
void SYSMi_CheckRTC( void );
//-------------------------------------------------------
// バナー
//-------------------------------------------------------
// カードバナーリード※NTR-IPL2仕様
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner );
#endif // SDK_ARM9
//-------------------------------------------------------
// PXI
//-------------------------------------------------------
extern void SYSMi_SendPXICommand( SYSMPXICommand command );
extern void SYSMi_PXIFifoCallback( PXIFifoTag tag, u32 data, BOOL err );
#ifdef __cplusplus
}
#endif
#endif // SYSM_INTERNAL_API_H_

View File

@ -71,6 +71,7 @@ void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err )
#pragma unused( tag, err ) #pragma unused( tag, err )
SYSMPXIPacket packet; SYSMPXIPacket packet;
packet.raw = data; packet.raw = data;
#if 0
#ifdef SDK_ARM9 #ifdef SDK_ARM9
@ -112,5 +113,6 @@ void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err )
} }
} }
#endif // SDK_ARM9 #endif // SDK_ARM9
#endif
} }

View File

@ -18,8 +18,8 @@
SUBDIRS = \ SUBDIRS = \
../../../libraries_sysmenu/sysmenu \ ../../../libraries_sysmenu/sysmenu \
# ../../../libraries_sysmenu/hotsw \ ../../../libraries_sysmenu/hotsw \
# ../../../components/hyena.TWL ../../../components/hyena.TWL
# ../../../libraries_sysmenu/reloc_info \ # ../../../libraries_sysmenu/reloc_info \
# ../../../libraries_sysmenu/boot \ # ../../../libraries_sysmenu/boot \

View File

@ -18,10 +18,7 @@
#ifndef SYSM_SYSMENU_LIB_H_ #ifndef SYSM_SYSMENU_LIB_H_
#define SYSM_SYSMENU_LIB_H_ #define SYSM_SYSMENU_LIB_H_
#ifdef SDK_ARM9 #include <sysmenu/sysmenu_lib/common/sysmenu_api.h>
#include <sysmenu/sysmenu_lib/ARM9/sysmenu_api.h>
#endif // SDK_ARM9
#include <sysmenu/sysmenu_lib/common/sysmenu_work.h> #include <sysmenu/sysmenu_lib/common/sysmenu_work.h>

View File

@ -71,13 +71,17 @@ typedef enum AuthResult {
// global variable------------------------------------------------------ // global variable------------------------------------------------------
#ifdef SDK_ARM9
extern void *SYSM_Alloc( u32 size ); extern void *SYSM_Alloc( u32 size );
extern void SYSM_Free( void *ptr ); extern void SYSM_Free( void *ptr );
//extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用 //extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用
//extern void (*SYSM_Free)( void *ptr ); // 同上 //extern void (*SYSM_Free)( void *ptr ); // 同上
#endif
// function------------------------------------------------------------- // function-------------------------------------------------------------
#ifdef SDK_ARM9
// 初期化 // 初期化
extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); // 初期化。 extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); // 初期化。
extern void SYSM_SetArena( void ); // システムメニューのアリーナ初期化。OS_Initの後で呼んでください。 extern void SYSM_SetArena( void ); // システムメニューのアリーナ初期化。OS_Initの後で呼んでください。
@ -97,16 +101,6 @@ extern AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ); //
extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション
extern void SYSM_SetBackLightBrightness( u8 brightness ); // バックライトを制御(本体設定データへの値セーブも行う) extern void SYSM_SetBackLightBrightness( u8 brightness ); // バックライトを制御(本体設定データへの値セーブも行う)
// 状態チェック
extern BOOL SYSM_IsExistCard( void ); // TWL/NTRカードが差さっているかアプリは未認証状態
extern BOOL SYSM_IsInspectCard( void ); // 検査カードが差さっているか?
extern BOOL SYSM_IsTPReadable( void ); // TPリード可能か
extern BOOL SYSM_IsLogoDemoSkip( void ); // ロゴデモ飛ばし状態か?
extern void SYSM_SetLogoDemoSkip( BOOL skip ); // ロゴデモ飛ばし状態フラグを設定する。
extern BOOL SYSM_IsValidTSD( void ); // TWL設定データは有効か
extern void SYSM_SetValidTSD( BOOL valid ); // TWL設定データの有効無効フラグを設定する。
extern const LauncherParamBody *SYSM_GetLauncherParamBody( void ); // リセットパラメータの取得
// Nintendoロゴ制御 // Nintendoロゴ制御
extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // Nintendoロゴデータのチェック extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // Nintendoロゴデータのチェック
extern void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_2D形式でロードpTempBufferには0x700bytes必要) extern void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_2D形式でロードpTempBufferには0x700bytes必要)
@ -119,6 +113,18 @@ extern s64 SYSM_CalcRTCOffset( RTCDate *pNewDate, RTCTime *pNewTime ); // RTC
extern u32 SYSM_GetDayNum( u32 year, u32 month ); // 指定された年・月の日数を取得する extern u32 SYSM_GetDayNum( u32 year, u32 month ); // 指定された年・月の日数を取得する
extern BOOL SYSM_IsLeapYear100( u32 year ); // 指定された年がうるう年か調べる extern BOOL SYSM_IsLeapYear100( u32 year ); // 指定された年がうるう年か調べる
#endif
// 状態チェック
extern BOOL SYSM_IsExistCard( void ); // TWL/NTRカードが差さっているかアプリは未認証状態
extern BOOL SYSM_IsInspectCard( void ); // 検査カードが差さっているか?
extern BOOL SYSM_IsTPReadable( void ); // TPリード可能か
extern BOOL SYSM_IsLogoDemoSkip( void ); // ロゴデモ飛ばし状態か?
extern void SYSM_SetLogoDemoSkip( BOOL skip ); // ロゴデモ飛ばし状態フラグを設定する。
extern BOOL SYSM_IsValidTSD( void ); // TWL設定データは有効か
extern void SYSM_SetValidTSD( BOOL valid ); // TWL設定データの有効無効フラグを設定する。
extern const LauncherParamBody *SYSM_GetLauncherParamBody( void ); // リセットパラメータの取得
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -99,29 +99,30 @@ typedef struct SYSM_work {
vu32 isBrokenHWNormalInfo :1; // HWーマル情報が破損している。 vu32 isBrokenHWNormalInfo :1; // HWーマル情報が破損している。
vu32 isBrokenHWSecureInfo :1; // HWセキュア情報が破損している。 vu32 isBrokenHWSecureInfo :1; // HWセキュア情報が破損している。
vu32 isResetRTC :1; // RTCリセット発生 vu32 isResetRTC :1; // RTCリセット発生
vu16 isEnableHotSW :1; // 活線挿抜有効?
vu16 isBusyHotSW :1; // 活線挿抜処理中?
#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 :14;
#else #else
vu32 rsv :19; vu32 rsv :16;
#endif #endif
}common; }common;
struct { struct {
vu16 isEnableHotSW :1; vu16 reqChangeHotSW :1;
vu16 nextHotSWStatus :1;
vu16 rsv:15; vu16 rsv:15;
}arm9; }arm9;
struct { struct {
vu16 isEnableHotSW :1; vu16 rsv:16;
vu16 isBusyHotSW :1;
vu16 disableHotSW_REQ :1;
vu16 rsv:13;
}arm7; }arm7;
}flags; }flags;
u16 cardHeaderCrc16; // カード検出時に算出したROMヘッダCRC16ARM9側でコピーして使用する側 u16 cardHeaderCrc16; // カード検出時に算出したROMヘッダCRC16ARM9側でコピーして使用する側
u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16ARM7側ライブラリでダイレクトに書き換わる側 u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16ARM7側ライブラリでダイレクトに書き換わる側
OSLockWord lockCardRsc; // カードリソース排他制御用 OSLockWord lockCardRsc; // カードリソース排他制御用
OSLockWord lockHotSW; // カードリソース排他制御用
int cloneBootMode; int cloneBootMode;
u32 nCardID; // カードID u32 nCardID; // カードID
u32 gameCommondParam; // NTRのゲームコマンドパラメータ(NTRのROMヘッダのゲームコマンドパラメータに上書きする) u32 gameCommondParam; // NTRのゲームコマンドパラメータ(NTRのROMヘッダのゲームコマンドパラメータに上書きする)