From d3f78a78c357eb3b9bc84a6974ca3109db8b2a92 Mon Sep 17 00:00:00 2001 From: kamikawa Date: Thu, 17 Apr 2008 02:04:39 +0000 Subject: [PATCH] =?UTF-8?q?Host=20I/O=20=E3=82=92=E4=BD=BF=E3=81=86?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=81=AF=E3=80=80=EF=BC=A6=EF=BC=B3=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=81=8C=E3=83=AF=E3=82=A4=E3=83=89=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=88=97=E3=82=92=E6=89=B1=E3=81=88=E3=81=AA=E3=81=84=E3=81=A8?= =?UTF-8?q?=E3=81=84=E3=81=86=E5=A3=81=E3=81=AB=E3=81=B6=E3=81=A1=E5=BD=93?= =?UTF-8?q?=E3=81=9F=E3=82=8A=E6=96=AD=E5=BF=B5=E3=80=82FS=5FCreateFileFro?= =?UTF-8?q?mRom=E3=82=92=E4=BD=BF=E3=81=86=E6=96=B9=E6=B3=95=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=80=82?= 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/trunk@1168 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../ImportJump/ARM9.TWL/include/ImportJump.h | 70 +++++++++++++++++++ .../ImportJump/ARM9.TWL/include/import.h | 2 +- .../ImportJump/ARM9.TWL/main.rsf | 8 +-- .../ImportJump/ARM9.TWL/src/import.c | 28 ++++---- .../ImportJump/ARM9.TWL/src/main.c | 54 ++++++++------ 5 files changed, 120 insertions(+), 42 deletions(-) create mode 100644 build/systemMenu_RED/ImportJump/ARM9.TWL/include/ImportJump.h diff --git a/build/systemMenu_RED/ImportJump/ARM9.TWL/include/ImportJump.h b/build/systemMenu_RED/ImportJump/ARM9.TWL/include/ImportJump.h new file mode 100644 index 00000000..cd02e994 --- /dev/null +++ b/build/systemMenu_RED/ImportJump/ARM9.TWL/include/ImportJump.h @@ -0,0 +1,70 @@ +/*---------------------------------------------------------------------------* + Project: ImportJump + File: import.h + + Copyright 2008 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 IMPORT_JUMP_H_ +#define IMPORT_JUMP_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/*===========================================================================*/ + +#include + +/*---------------------------------------------------------------------------* + 型定義 + *---------------------------------------------------------------------------*/ + +typedef struct _ImportJumpSetting +{ + u32 magicCode; // = TWLD + u32 clearPublicSaveData :1; // publicセーブデータをクリアする(デフォルトOFF) + u32 clearPrivateSaveData :1; // privareセーブデータをクリアする(デフォルトOFF) + u32 clearSaveBannerFile:1; // セーブバナーファイルをクリアする(デフォルトOFF) + u32 importTad:1; // パスで指定されたTADファイルをインポートするか(TADの更新有無に依存) + u32 rsv :28; // 予約 + u32 tadLength; // TADファイルの長さ +} ImportJump; + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ + +// TADファイル配置アドレス +#define IMPORT_TAD_ADDRESS 0x00800000 + +/*---------------------------------------------------------------------------* + 関数定義 + *---------------------------------------------------------------------------*/ + +inline ImportJump* GetImportJumpSetting(void) +{ + return (ImportJump *)0x0dfc0000; +} + +/*===========================================================================*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* IMPORT_JUMP_H_ */ + +/*---------------------------------------------------------------------------* + End of file + *---------------------------------------------------------------------------*/ diff --git a/build/systemMenu_RED/ImportJump/ARM9.TWL/include/import.h b/build/systemMenu_RED/ImportJump/ARM9.TWL/include/import.h index b580f4f8..7a0696a1 100644 --- a/build/systemMenu_RED/ImportJump/ARM9.TWL/include/import.h +++ b/build/systemMenu_RED/ImportJump/ARM9.TWL/include/import.h @@ -34,7 +34,7 @@ extern "C" { 関数定義 *---------------------------------------------------------------------------*/ -BOOL kamiImportTad(char* path, NAMTitleId* pTitleId); +BOOL kamiImportTad(NAMTitleId* pTitleId); /*===========================================================================*/ diff --git a/build/systemMenu_RED/ImportJump/ARM9.TWL/main.rsf b/build/systemMenu_RED/ImportJump/ARM9.TWL/main.rsf index 53c36f5b..41ca92ee 100644 --- a/build/systemMenu_RED/ImportJump/ARM9.TWL/main.rsf +++ b/build/systemMenu_RED/ImportJump/ARM9.TWL/main.rsf @@ -78,13 +78,7 @@ Property # # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] # - #RomSize 128M - #RomSize 256M - # TADの最大サイズがおそらく48MByte = 384Mbitなどになるため - # RomSize はそれ以上にしておく必要がある。そうしないと - # FS_ReadFile で tad ファイルをリードしにいった場合に - # out of range エラーが発生する - RomSize 512M + RomSize 64M # # ROM PADDING: TRUE if finalrom diff --git a/build/systemMenu_RED/ImportJump/ARM9.TWL/src/import.c b/build/systemMenu_RED/ImportJump/ARM9.TWL/src/import.c index 09754081..bbeab814 100644 --- a/build/systemMenu_RED/ImportJump/ARM9.TWL/src/import.c +++ b/build/systemMenu_RED/ImportJump/ARM9.TWL/src/import.c @@ -26,7 +26,7 @@ #include "import.h" #include "TWLHWInfo_api.h" #include "graphics.h" - +#include "ImportJump.h" /*---------------------------------------------------------------------------* 型定義 @@ -69,14 +69,25 @@ static void UpdateNandBoxCount( void ); Returns: None. *---------------------------------------------------------------------------*/ -BOOL kamiImportTad(char* path, NAMTitleId* pTitleId) +BOOL kamiImportTad(NAMTitleId* pTitleId) { NAMTadInfo tadInfo; OSThread thread; s32 nam_result; + FSFile file; + + // ファイル初期化 + FS_InitFile(&file); + + // CARD-ROM 領域を一時的なファイルとみなしそのファイルを開きます。 + if (!FS_CreateFileFromRom(&file, IMPORT_TAD_ADDRESS, GetImportJumpSetting()->tadLength)) + { + OS_Warning(" Fail : FS_CreateFileFromRom\n"); + return FALSE; + } // tadファイルの情報取得 - if (NAM_ReadTadInfo(&tadInfo, path) != NAM_OK) + if (NAM_ReadTadInfoWithFile(&tadInfo, &file) != NAM_OK) { OS_Warning(" Fail! : NAM_ReadTadInfo\n"); return FALSE; @@ -84,14 +95,7 @@ BOOL kamiImportTad(char* path, NAMTitleId* pTitleId) // 後でアプリジャンプするTitleIdをここで読み取っておく *pTitleId = tadInfo.titleInfo.titleId; -/* - // Not Launch なら失敗 - if (tadInfo.titleInfo.titleId & TITLE_ID_NOT_LAUNCH_FLAG_MASK) - { - OS_Warning(" Fail! : NOT_LAUNCH_FLAG is specified in rsf file\n"); - return FALSE; - } -*/ + // Data Only なら失敗 if (tadInfo.titleInfo.titleId & TITLE_ID_DATA_ONLY_FLAG_MASK) { @@ -119,7 +123,7 @@ BOOL kamiImportTad(char* path, NAMTitleId* pTitleId) OS_WakeupThreadDirect(&thread); // Import開始 - nam_result = NAM_ImportTad( path ); + nam_result = NAM_ImportTadWithFile( &file ); // 進捗スレッドの自力終了を待つ while (sNowImport){}; diff --git a/build/systemMenu_RED/ImportJump/ARM9.TWL/src/main.c b/build/systemMenu_RED/ImportJump/ARM9.TWL/src/main.c index 6bcda7b7..87034e79 100644 --- a/build/systemMenu_RED/ImportJump/ARM9.TWL/src/main.c +++ b/build/systemMenu_RED/ImportJump/ARM9.TWL/src/main.c @@ -24,33 +24,22 @@ #include "import.h" #include "graphics.h" #include "hwi.h" - - -#define DEBUG_TARGET_TAD_FILE_PATH "hostio:/c:/TwlIPL/build/systemMenu_RED/MachineSettings/ARM9/bin/ARM9-TS.LTD/Release/HNBA.Release.tad" - - -extern void HWInfoWriterInit( void ); -extern void FS_MountHostIO(const char *basepath); +#include "ImportJump.h" /*---------------------------------------------------------------------------* 内部変数定義 *---------------------------------------------------------------------------*/ static NAMTitleId titleId; +char sTadPath[FS_ENTRY_LONGNAME_MAX]; /*---------------------------------------------------------------------------* 内部関数定義 *---------------------------------------------------------------------------*/ static void VBlankIntr(void); static void InitAllocation(void); - -// 現時点ではカード割り込みをHIO通知に使用しているようなので -// カード抜け誤検出を無視するようにしてテストを作成している。 -static BOOL IgnoreRemoval(void) -{ - OS_TWarning("detected CARD-removal!(miss-notification from debugger Host-I/O)\n"); - return FALSE; -} +static BOOL IgnoreRemoval(void); +extern void FS_MountHostIO(const char *basepath); /*---------------------------------------------------------------------------* Name: TwlMain @@ -64,6 +53,16 @@ static BOOL IgnoreRemoval(void) void TwlMain() { + // OS_Initより前に実行する + { + // SRLの後方に配置したTADファイルにアクセス可能にするために + // カードアクセスのハッシュチェックを無効化する + const CARDRomHeaderTWL *header = (const CARDRomHeaderTWL *)HW_TWL_ROM_HEADER_BUF; + *(u32 *)header->digest_tabel2_digest = 0x00000000; + // デバッガ情報を読み取るため拡張メモリを有効にする + OS_EnableMainExArena(); + } + OS_Init(); OS_InitArena(); PXI_Init(); @@ -94,12 +93,6 @@ TwlMain() // initialize file-system FS_Init(FS_DMA_NOT_USE); - // HostI/Oをマウント。 - { - CARD_SetPulledOutCallback(IgnoreRemoval); - FS_MountHostIO("c:"); - } - // NAMライブラリ初期化 NAM_Init( OS_AllocFromMain, OS_FreeToMain); @@ -131,12 +124,13 @@ TwlMain() } // TADのインポート開始 - if (kamiImportTad(DEBUG_TARGET_TAD_FILE_PATH, &titleId)) + if (kamiImportTad(&titleId)) { // インポートに成功したならアプリジャンプ OS_DoApplicationJump( titleId, OS_APP_JUMP_NORMAL ); } + // アプリジャンプに成功したならここへは到達しない while(1){}; } @@ -178,3 +172,19 @@ static void InitAllocation(void) hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); } +/*---------------------------------------------------------------------------* + Name: IgnoreRemoval + + Description: カード抜けコールバック + + Arguments: None. + + Returns: None. + *---------------------------------------------------------------------------*/ +// 現時点ではカード割り込みをHIO通知に使用しているようなので +// カード抜け誤検出を無視するようにしてテストを作成している。 +static BOOL IgnoreRemoval(void) +{ + OS_TWarning("detected CARD-removal!(miss-notification from debugger Host-I/O)\n"); + return FALSE; +}