活線挿抜動作を禁止できるようにランチャーと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();
// PXIコールバックの設定
PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback );
// PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback );
// ランチャーパラメター取得Cold/Hotスタート判定含む
ReadLauncherParameter();
@ -192,7 +192,17 @@ TwlSpMain(void)
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();
while (TRUE)

View File

@ -195,10 +195,27 @@ void HOTSW_Init(void)
* ----------------------------------------------------------------- */
BOOL HOTSW_Boot(void)
{
OSTick start;
s32 tempLockID;
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){
@ -385,7 +402,21 @@ BOOL HOTSW_Boot(void)
#ifdef DEBUG_USED_CARD_SLOT_B_
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
#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;
}
@ -972,6 +1003,7 @@ static void SetMCSCR(void)
static void InterruptCallbackCard(void)
{
// Mを 10 から 11 に遷移
// [TODO:]削除予定
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_PROC = ARM7
SRCS = ../common/src/pxi.c
SRCDIR = ../common/src
SRCS = status.c \
pxi.c
TARGET_LIB = libsysmenu_sp$(TWL_LIBSUFFIX).a

View File

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

View File

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

View File

@ -25,9 +25,6 @@ extern void LCFG_VerifyAndRecoveryNTRSettings( void );
// function's prototype-------------------------------------------------------
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 );
// global variable-------------------------------------------------------------
@ -64,7 +61,8 @@ 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 );
// PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback );
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 )
{
@ -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 file_offset = total_rom_size & 0xFFFFFE00;
if( !SYSMi_IsValidCard() ) {
return;
}
DC_FlushRange( buffp, BNR_IMAGE_SIZE );
CARD_ReadRom( 4, (void *)file_offset, buffp, BNR_IMAGE_SIZE );

View File

@ -28,6 +28,7 @@
// function's prototype-------------------------------------------------------
static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst );
static s32 ReadFile( FSFile* pf, void* buffer, s32 size );
static void SYSMi_EnableHotSW( BOOL enable );
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle );
static void SYSMi_Relocate( void );
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 )
{
@ -466,7 +458,7 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
#define STACK_SIZE 0xc00
static u64 stack[ STACK_SIZE / sizeof(u64) ];
SYSMi_DisableHotSW();
SYSMi_EnableHotSW( FALSE );
// アプリ未ロード状態なら、ロード開始
if( !pBootTitle->flags.isAppLoadCompleted ) {
@ -645,3 +637,35 @@ void CheckDigest( void )
}
}
#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仕様
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner );
//-------------------------------------------------------
// Šˆ<C5A0>ü}”²
//-------------------------------------------------------
void SYSMi_EnableHotSW( BOOL enable );
#endif
//=======================================================
//
// ARM9/ARM7¤ÊAPI
//
//=======================================================
BOOL SYSMi_IsDebuggerBannerViewMode( void );
BOOL SYSMi_CheckEntryAddress( void );
BOOL SYSMi_SendPXICommand( SYSMPXICommand command );
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 )
SYSMPXIPacket packet;
packet.raw = data;
#if 0
#ifdef SDK_ARM9
@ -112,5 +113,6 @@ void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err )
}
}
#endif // SDK_ARM9
#endif
}

View File

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

View File

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

View File

@ -71,13 +71,17 @@ typedef enum AuthResult {
// global variable------------------------------------------------------
#ifdef SDK_ARM9
extern void *SYSM_Alloc( u32 size );
extern void SYSM_Free( void *ptr );
//extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用
//extern void (*SYSM_Free)( void *ptr ); // 同上
#endif
// function-------------------------------------------------------------
#ifdef SDK_ARM9
// 初期化
extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); // 初期化。
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_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ロゴ制御
extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // Nintendoロゴデータのチェック
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 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
}

View File

@ -85,53 +85,54 @@ typedef struct SYSM_work {
Relocate_Info romRelocateInfo[RELOCATE_INFO_NUM]; // ROM再配置情報arm9,arm7それぞれltdとflxで最大4つ
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リセット発生
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リセット発生
vu16 isEnableHotSW :1; // 活線挿抜有効?
vu16 isBusyHotSW :1; // 活線挿抜処理中?
#ifdef DEBUG_USED_CARD_SLOT_B_
vu32 isValidCardBanner :1;
vu32 is1stCardChecked :1;
vu32 rsv :17;
vu32 isValidCardBanner :1;
vu32 is1stCardChecked :1;
vu32 rsv :14;
#else
vu32 rsv :19;
vu32 rsv :16;
#endif
}common;
struct {
vu16 isEnableHotSW :1;
vu16 rsv:15;
vu16 reqChangeHotSW :1;
vu16 nextHotSWStatus :1;
vu16 rsv:15;
}arm9;
struct {
vu16 isEnableHotSW :1;
vu16 isBusyHotSW :1;
vu16 disableHotSW_REQ :1;
vu16 rsv:13;
vu16 rsv:16;
}arm7;
}flags;
u16 cardHeaderCrc16; // カード検出時に算出したROMヘッダCRC16ARM9側でコピーして使用する側
u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16ARM7側ライブラリでダイレクトに書き換わる側
OSLockWord lockCardRsc; // カードリソース排他制御用
int cloneBootMode;
u32 nCardID; // カードID
u32 gameCommondParam; // NTRのゲームコマンドパラメータ(NTRのROMヘッダのゲームコマンドパラメータに上書きする)
u16 cardHeaderCrc16; // カード検出時に算出したROMヘッダCRC16ARM9側でコピーして使用する側
u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16ARM7側ライブラリでダイレクトに書き換わる側
OSLockWord lockCardRsc; // カードリソース排他制御用
OSLockWord lockHotSW; // カードリソース排他制御用
int cloneBootMode;
u32 nCardID; // カードID
u32 gameCommondParam; // NTRのゲームコマンドパラメータ(NTRのROMヘッダのゲームコマンドパラメータに上書きする)
LauncherParam launcherParam;
ISD_RomEmuInfo romEmuInfo;
LauncherParam launcherParam;
ISD_RomEmuInfo romEmuInfo;
// NTR-IPL2のレガシー 最終的には消すと思う
BOOL enableCardNormalOnly;
u8 rtcStatus;
BOOL enableCardNormalOnly;
u8 rtcStatus;
}SYSM_work;
// NTRにおける仕様を継承する必要のあるワーク