mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
Host I/O を使う方法は FS関数がワイド文字列を扱えないという壁にぶち当たり断念。FS_CreateFileFromRomを使う方法に変更。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1168 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
fe3343bc33
commit
d3f78a78c3
@ -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 <nitro.h>
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
型定義
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
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
|
||||
*---------------------------------------------------------------------------*/
|
||||
@ -34,7 +34,7 @@ extern "C" {
|
||||
ЉЦђ”’и‹`
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
BOOL kamiImportTad(char* path, NAMTitleId* pTitleId);
|
||||
BOOL kamiImportTad(NAMTitleId* pTitleId);
|
||||
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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){};
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user