From 9f52d8fb4e12ab56e412fb2c4e0a61c2fadc3faa Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Tue, 4 Nov 2008 10:01:14 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=BB=E8=B5=B7=E5=8B=95=E6=99=82=E3=81=ABNA?= =?UTF-8?q?ND=E3=82=A2=E3=83=97=E3=83=AA=E3=82=92=E8=AA=BF=E3=81=B9?= =?UTF-8?q?=E3=80=81=E7=89=B9=E5=AE=9A=E3=81=AEGameCode(=E4=BB=8A=E3=81=AE?= =?UTF-8?q?=E3=81=A8=E3=81=93=E3=82=8D=EF=BC=AE=EF=BC=B4=EF=BC=B2=EF=BC=AA?= =?UTF-8?q?)=E3=81=AENAND=E3=82=A2=E3=83=97=E3=83=AA=E3=81=8C=E3=81=82?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AF=E3=80=81=E3=81=9D?= =?UTF-8?q?=E3=81=AE=E3=82=A2=E3=83=97=E3=83=AA=E3=82=92=E3=83=80=E3=82=A4?= =?UTF-8?q?=E3=83=AC=E3=82=AF=E3=83=88=E3=83=96=E3=83=BC=E3=83=88=E3=81=95?= =?UTF-8?q?=E3=81=9B=E3=82=8B=20=E3=83=BB=E4=B8=8A=E8=A8=98=E3=81=AE?= =?UTF-8?q?=E3=82=A2=E3=83=97=E3=83=AA=E3=81=8C=E3=81=AA=E3=81=84=E5=A0=B4?= =?UTF-8?q?=E5=90=88=E3=81=AF=E3=80=81=E9=80=9A=E5=B8=B8=E9=80=9A=E3=82=8A?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=83=81=E3=83=A3=E8=B5=B7=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20081031_TwlCard_Tester@2657 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../libraries_sysmenu/hotsw/ARM7/src/hotsw.c | 27 +++++---- .../hotsw/ARM9/src/hotsw_ctrl.c | 19 +++++- build/systemMenu_RED/Launcher/ARM9/src/main.c | 60 ++++++++++++++----- include/sysmenu/hotsw/common/hotsw.h | 7 ++- 4 files changed, 86 insertions(+), 27 deletions(-) diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 01b79d52..2532907e 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -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); diff --git a/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c b/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c index a94cc2e9..74806ae9 100644 --- a/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c +++ b/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c @@ -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; +} \ No newline at end of file diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index e1124701..59b4fbdd 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -33,6 +33,8 @@ #include #include "getSysMenuVersion.h" +#include + // extern data----------------------------------------------------------------- // define data----------------------------------------------------------------- @@ -342,27 +344,55 @@ void TwlMain( void ) // start時間計測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時間計測5 MEASURE_RESULT( start, "GetNandTitleList : %dms\n" ); diff --git a/include/sysmenu/hotsw/common/hotsw.h b/include/sysmenu/hotsw/common/hotsw.h index 972f050a..cef76b11 100644 --- a/include/sysmenu/hotsw/common/hotsw.h +++ b/include/sysmenu/hotsw/common/hotsw.h @@ -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();