mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・起動時にNANDアプリを調べ、特定のGameCode(今のところNTRJ)のNANDアプリがあった場合は、そのアプリをダイレクトブートさせる
・上記のアプリがない場合は、通常通りランチャ起動 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20081031_TwlCard_Tester@2657 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
f52700d03f
commit
9f52d8fb4e
@ -94,10 +94,10 @@ static BOOL isTwlModeLoad(void);
|
||||
static HotSwState ReadSecureModeCardData(void);
|
||||
static void ClearCardFlgs(void);
|
||||
|
||||
static void FinalizeHotSw(HotSwCardState state);
|
||||
static void ForceNitroModeToFinalize(void);
|
||||
static void FinalizeHotSw(HotSwCardState state, BOOL forceNtrMode);
|
||||
static void ForceNitroModeToFinalize(BOOL forceNtrMode);
|
||||
static void ForceNormalModeToFinalize(void);
|
||||
static BOOL ChangeCardMode(BOOL isApplicationJump);
|
||||
static BOOL ChangeCardMode(BOOL forceNtrMode);
|
||||
static void ClearCardIrq(void);
|
||||
static void ClearAllCardRegister(void);
|
||||
|
||||
@ -1653,7 +1653,7 @@ static void HotSwThread(void *arg)
|
||||
}
|
||||
|
||||
if( msg->finalize == TRUE && msg->ctrl == FALSE) {
|
||||
FinalizeHotSw( msg->state );
|
||||
FinalizeHotSw( msg->state , msg->forceNtrMode );
|
||||
}
|
||||
|
||||
#ifdef USE_WRAM_LOAD
|
||||
@ -1792,7 +1792,7 @@ static void ClearCardFlgs(void)
|
||||
|
||||
Description: アプリ起動時に、活線挿抜関係の後始末を行う。
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void FinalizeHotSw(HotSwCardState state)
|
||||
static void FinalizeHotSw(HotSwCardState state, BOOL forceNtrMode)
|
||||
{
|
||||
ROM_Header* rh = (void*)SYSM_APP_ROM_HEADER_BUF;
|
||||
static BOOL finalized = FALSE;
|
||||
@ -1835,7 +1835,7 @@ static void FinalizeHotSw(HotSwCardState state)
|
||||
|
||||
// Gameモードに移行
|
||||
case HOTSW_CARD_STATE_GAME_MODE:
|
||||
ForceNitroModeToFinalize();
|
||||
ForceNitroModeToFinalize( forceNtrMode );
|
||||
break;
|
||||
|
||||
// 状態キープ
|
||||
@ -1872,11 +1872,11 @@ final:
|
||||
|
||||
Description: カードタイプを見てGame Mode / Game2 Modeに移行させる。
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void ForceNitroModeToFinalize(void)
|
||||
static void ForceNitroModeToFinalize(BOOL forceNtrMode)
|
||||
{
|
||||
s_cbData.id_gam = 0;
|
||||
|
||||
if(!ChangeCardMode( FALSE )){
|
||||
if(!ChangeCardMode( forceNtrMode )){
|
||||
ClearAllCardRegister();
|
||||
McPowerOff();
|
||||
|
||||
@ -1919,7 +1919,7 @@ static void ForceNormalModeToFinalize(void)
|
||||
Description: RomHeader / Secure (Secure2) 領域を読んでCRCを計算・格納し、
|
||||
カードタイプを判別して Gameモード / Game2モードに移行させる
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL ChangeCardMode(BOOL isApplicationJump)
|
||||
static BOOL ChangeCardMode(BOOL forceNtrMode)
|
||||
{
|
||||
HotSwState state;
|
||||
|
||||
@ -1971,8 +1971,10 @@ static BOOL ChangeCardMode(BOOL isApplicationJump)
|
||||
// TWLカード → Game2モード
|
||||
// NTRカード → Gameモード
|
||||
// アプリジャンプ → Gameモード
|
||||
if(!isApplicationJump && s_cbData.id_nml & HOTSW_ROMID_TWLROM_MASK){
|
||||
if(!forceNtrMode && s_cbData.id_nml & HOTSW_ROMID_TWLROM_MASK){
|
||||
s_cbData.modeType = HOTSW_MODE2;
|
||||
|
||||
OS_PutString("---------- Game2 Mode...\n");
|
||||
|
||||
// ---------------------- Reset ----------------------
|
||||
McPowerOff();
|
||||
@ -1993,6 +1995,9 @@ static BOOL ChangeCardMode(BOOL isApplicationJump)
|
||||
// Secure SegmentのCRC16の計算と格納
|
||||
SYSMi_GetWork()->flags.hotsw.secure2CRC = SVC_GetCRC16( 65535, s_cbData.pSecure2SegBuf, SECURE_SEGMENT_SIZE );
|
||||
}
|
||||
else{
|
||||
OS_PutString("---------- Game Mode...\n");
|
||||
}
|
||||
|
||||
state = s_funcTable[s_isRomEmu].ChangeMode_S(&s_cbData);
|
||||
|
||||
@ -2297,6 +2302,8 @@ static void InterruptCallbackPxi(PXIFifoTag tag, u32 data, BOOL err)
|
||||
HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].value = d.msg.value;
|
||||
HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].state = (HotSwCardState)d.msg.cardState;
|
||||
|
||||
HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].forceNtrMode = (d.msg.forceNtrMode) ? TRUE : FALSE;
|
||||
|
||||
// メッセージ送信
|
||||
OS_SendMessage(&HotSwThreadData.hotswQueue, (OSMessage *)&HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
|
||||
@ -44,7 +44,7 @@ static BOOL s_ReadBusy;
|
||||
static OSIrqFunction s_HotswFuncTable[HOTSW_CALLBACK_FUNCTION_NUM];
|
||||
|
||||
static u16 s_CardLockID;
|
||||
|
||||
static BOOL s_ForceNtrMode;
|
||||
|
||||
// ===========================================================================
|
||||
// Function Describe
|
||||
@ -70,6 +70,9 @@ void HOTSW_Init()
|
||||
|
||||
// Busyフラグを落としておく
|
||||
s_ReadBusy = FALSE;
|
||||
|
||||
// 強制NTRモードフラグをOFF
|
||||
s_ForceNtrMode = FALSE;
|
||||
|
||||
// PXI初期化
|
||||
PXI_Init();
|
||||
@ -190,6 +193,9 @@ void HOTSW_FinalizeHotSWAsync( HotSwCardState cardState )
|
||||
msg.msg.finalize = TRUE;
|
||||
msg.msg.ctrl = FALSE;
|
||||
msg.msg.cardState= (u8)cardState;
|
||||
|
||||
// 新しく強制NTRモードフラグを追加。ARM7に通知
|
||||
msg.msg.forceNtrMode = s_ForceNtrMode;
|
||||
|
||||
while (PXI_SendWordByFifo(PXI_FIFO_TAG_HOTSW, msg.data, FALSE) != PXI_FIFO_SUCCESS)
|
||||
{
|
||||
@ -553,3 +559,14 @@ static CardDataReadState ReadPageGame(u32 start_addr, void* buf, u32 size)
|
||||
|
||||
return CARD_READ_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: HOTSW_SetForceNitroMode
|
||||
|
||||
Description: 強制的にNTRモードにカードを移行させるかどうかを設定
|
||||
*---------------------------------------------------------------------------*/
|
||||
void HOTSW_SetForceNitroMode(BOOL isNtrMode)
|
||||
{
|
||||
s_ForceNtrMode = isNtrMode;
|
||||
}
|
||||
@ -33,6 +33,8 @@
|
||||
#include <twl/na.h>
|
||||
#include "getSysMenuVersion.h"
|
||||
|
||||
#include <sysmenu/util_menuAppManager.h>
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
|
||||
// define data-----------------------------------------------------------------
|
||||
@ -342,27 +344,55 @@ void TwlMain( void )
|
||||
|
||||
// startŽžŠÔŒv‘ª5
|
||||
MEASURE_START(start);
|
||||
|
||||
// 「ダイレクトブートでない」なら
|
||||
if( !pBootTitle ) {
|
||||
// NAND & カードアプリリスト取得
|
||||
if( !SYSM_IsLogoDemoSkip() )
|
||||
{
|
||||
SYSM_MakeNandTitleListAsync(); // NANDアプリリストの作成(取得はしていないので注意)
|
||||
}else
|
||||
{
|
||||
sp_titleList = SYSM_GetNandTitleList();
|
||||
}
|
||||
}else
|
||||
{
|
||||
|
||||
// -------------- TWLカード検査用ランチャ --------------
|
||||
// ・ロゴデモはスキップ
|
||||
SYSM_SetLogoDemoSkip( TRUE );
|
||||
|
||||
// ・NANDアプリリスト作成関数は同期版を使う
|
||||
sp_titleList = SYSM_GetNandTitleList();
|
||||
|
||||
// アプリジャンプでない場合
|
||||
if( !pBootTitle ) {
|
||||
// 特定のNANDアプリがあるかどうかチェック
|
||||
u32 i;
|
||||
u32 index = 0;
|
||||
BOOL isCheckProgram = FALSE;
|
||||
|
||||
for(i = 0; i < LAUNCHER_TITLE_LIST_NUM; i++){
|
||||
TitleID_HiLo tempID = *(TitleID_HiLo *)(&sp_titleList[i].titleID);
|
||||
if(sp_titleList[i].titleID){
|
||||
// 特定のNANDアプリがあった場合は
|
||||
if(tempID.Lo[0] == 'J' && tempID.Lo[1] == 'R' && tempID.Lo[2] == 'T' && tempID.Lo[3] == 'N'){
|
||||
isCheckProgram = TRUE;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ・NANDアプリに検査プログラムがある → NANDアプリをダイレクトブート
|
||||
// ・NANDアプリに検査プログラムがない → ランチャ起動
|
||||
if(isCheckProgram){
|
||||
pBootTitle = &sp_titleList[index];
|
||||
pBootTitle->flags.isLogoSkip = TRUE;
|
||||
}
|
||||
}
|
||||
// アプリジャンプの場合
|
||||
else {
|
||||
// ・検査プログラム起動かつカードをNTRモードに移行
|
||||
HOTSW_SetForceNitroMode(TRUE);
|
||||
|
||||
// アプリに引き渡すタイトルリスト作成用情報の作成
|
||||
if( !pBootTitle->flags.isLogoSkip )
|
||||
{
|
||||
SYSM_MakeNandTitleListMakerInfoAsync(); // アプリに引き渡すタイトルリスト作成用情報の作成
|
||||
SYSM_MakeNandTitleListMakerInfoAsync();
|
||||
}else
|
||||
{
|
||||
SYSM_MakeNandTitleListMakerInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
// -----------------------------------------------------
|
||||
|
||||
// endŽžŠÔŒv‘ª5
|
||||
MEASURE_RESULT( start, "GetNandTitleList : %dms\n" );
|
||||
|
||||
|
||||
@ -72,8 +72,9 @@ typedef union HotSwPxiMessageForArm7{
|
||||
u32 ctrl :1;
|
||||
u32 finalize :1;
|
||||
u32 read :1;
|
||||
u32 forceNtrMode :1;
|
||||
u32 cardState:8;
|
||||
u32 :20;
|
||||
u32 :19;
|
||||
} msg;
|
||||
u32 data;
|
||||
} HotSwPxiMessageForArm7;
|
||||
@ -97,6 +98,7 @@ typedef struct HotSwMessageForArm7{
|
||||
BOOL ctrl;
|
||||
BOOL finalize;
|
||||
BOOL read;
|
||||
BOOL forceNtrMode;
|
||||
HotSwMessageType type;
|
||||
HotSwCardState state;
|
||||
} HotSwMessageForArm7;
|
||||
@ -140,6 +142,9 @@ BOOL HOTSW_isFinalized(void);
|
||||
// 活線挿抜処理中かどうかを返す
|
||||
BOOL HOTSW_isBusyHotSW(void);
|
||||
|
||||
// 強制NTRモード移行かどうかを設定(TWLカード検査用ランチャ用関数)
|
||||
void HOTSW_SetForceNitroMode(BOOL isNtrMode);
|
||||
|
||||
#ifdef USE_WRAM_LOAD
|
||||
// 活栓挿抜処理の初期化
|
||||
void HOTSW_Init();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user