mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・カードレジスタのスワップとカードIDのシステム領域へのセットを、カードブートの時
のみ行うよう修正。 ・アプリブート時のマウント情報設定への対応。 ・ランチャーは、自身の起動時にマウント情報を自分でセットするようにする。 ・暫定対策:全ドライブをRW可能にしている。 ・暫定対策:FS不具合回避のため、"nand:"を'F'ドライブに設定。 ・MachineSettingsとPictoChatでのnand_app_hack.hを使用したFSの暫定 NAND対応を削除。 これに伴い、nand_app_hack.hも削除。 ・NANDアプリ読み込み時のリストバグ修正。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@272 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
eaaa5c04c8
commit
fd9112d120
@ -44,23 +44,6 @@ void BOOT_Init( void )
|
||||
BOOL BOOT_WaitStart( void )
|
||||
{
|
||||
if( (reg_PXI_MAINPINTF & 0x000f ) == 0x000f ) {
|
||||
// メモリクリアリストの設定
|
||||
static u32 clr_list[] =
|
||||
{
|
||||
SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END - SYSM_OWN_ARM7_MMEM_ADDR,
|
||||
SYSM_OWN_ARM9_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR_END - SYSM_OWN_ARM9_MMEM_ADDR,
|
||||
SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR,
|
||||
SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR,
|
||||
#ifdef ISDBG_MB_CHILD_
|
||||
HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600),
|
||||
HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20),
|
||||
#endif
|
||||
HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED,
|
||||
HW_ARENA_INFO_BUF, HW_ROM_HEADER_BUF - HW_ARENA_INFO_BUF,
|
||||
HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9,
|
||||
NULL
|
||||
};
|
||||
|
||||
(void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。
|
||||
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
|
||||
/*
|
||||
@ -77,7 +60,25 @@ BOOL BOOT_WaitStart( void )
|
||||
reg_PXI_MAINPINTF = MAINP_SEND_IF | 0x0100; // ARM9に対してブートするようIRQで要求+ARM7のステートを1にする。
|
||||
|
||||
// SDK共通リブート
|
||||
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list );
|
||||
{
|
||||
// メモリクリアリストの設定
|
||||
static u32 clr_list[] =
|
||||
{
|
||||
SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END - SYSM_OWN_ARM7_MMEM_ADDR,
|
||||
SYSM_OWN_ARM9_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR_END - SYSM_OWN_ARM9_MMEM_ADDR,
|
||||
SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR,
|
||||
SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR,
|
||||
#ifdef ISDBG_MB_CHILD_
|
||||
HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600),
|
||||
HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20),
|
||||
#endif
|
||||
HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED,
|
||||
HW_ARENA_INFO_BUF, HW_ROM_HEADER_BUF - HW_ARENA_INFO_BUF,
|
||||
HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9,
|
||||
NULL
|
||||
};
|
||||
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list );
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
@ -90,11 +91,13 @@ static void BOOTi_ClearREG_RAM( void )
|
||||
MI_StopDma( (u16)i );
|
||||
}
|
||||
|
||||
if( SYSMi_GetWork()->isCardBoot ) {
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
reg_MI_MC_SWP = 0x80; // カードスロットのスワップ
|
||||
reg_MI_MC_SWP = 0x80; // カードスロットのスワップ
|
||||
#endif
|
||||
*(u32 *)HW_BOOT_CHECK_INFO_BUF = SYSMi_GetWork()->nCardID; // カード抜けチェックバッファにカードIDをセット
|
||||
*(u32 *)HW_RED_RESERVED = SYSMi_GetWork()->nCardID;
|
||||
*(u32 *)HW_BOOT_CHECK_INFO_BUF = SYSMi_GetWork()->nCardID; // カード抜けチェックバッファにカードIDをセット
|
||||
*(u32 *)HW_RED_RESERVED = SYSMi_GetWork()->nCardID;
|
||||
}
|
||||
|
||||
// レジスタのクリア
|
||||
SVC_CpuClearFast( 0x0000, (void*)(HW_REG_BASE + 0x0b0), (0x13c - 0x0b0) );
|
||||
|
||||
@ -54,14 +54,6 @@ static void ie_subphandler( void )
|
||||
// ブート準備をして、ARM7からの通知を待つ。
|
||||
void BOOT_Ready( void )
|
||||
{
|
||||
// メモリクリアリストの設定
|
||||
static u32 clr_list[] =
|
||||
{
|
||||
HW_ITCM, HW_ITCM_SIZE,
|
||||
//HW_DTCM, HW_DTCM_SIZE,
|
||||
NULL
|
||||
};
|
||||
|
||||
int i;
|
||||
|
||||
// エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。
|
||||
@ -98,8 +90,20 @@ void BOOT_Ready( void )
|
||||
reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01;
|
||||
}
|
||||
|
||||
// ROMヘッダバッファをコピー
|
||||
MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
|
||||
// SDK共通リブート
|
||||
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list );
|
||||
{
|
||||
// メモリクリアリストの設定
|
||||
static u32 clr_list[] =
|
||||
{
|
||||
HW_ITCM, HW_ITCM_SIZE,
|
||||
//HW_DTCM, HW_DTCM_SIZE,
|
||||
NULL
|
||||
};
|
||||
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -27,29 +27,54 @@
|
||||
// extern data-----------------------------------------------------------------
|
||||
|
||||
// function's prototype--------------------------------------------------------
|
||||
void SYSM_SetBootSRLPath( NAMTitleId titleID );
|
||||
void SYSM_SetMountInfo( NAMTitleId titleID );
|
||||
void SYSMi_SetLauncherMountInfo( void );
|
||||
void SYSM_SetBootAppMountInfo( NAMTitleId titleID );
|
||||
|
||||
static void SYSMi_ModifySaveDataMount( NAMTitleId titleID );
|
||||
|
||||
// global variable-------------------------------------------------------------
|
||||
|
||||
// static variable-------------------------------------------------------------
|
||||
static void SYSMi_SetBootSRLPath( NAMTitleId titleID );
|
||||
static void SYSMi_SetMountInfoCore( const OSMountInfo *pSrc );
|
||||
|
||||
// const data------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
|
||||
※現在、SDKのFATFSバグ回避のため、突貫で"nand:"を"F:"ドライブにしている。
|
||||
(NAND2KBリード問題対策が、"F"ドライブのみでの対応になっているため。)
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// デフォルトマウント情報リスト
|
||||
OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = {
|
||||
// drive device target pertitionIdx resource userPermission rsvA B archive path
|
||||
{ 'A', OS_MOUNT_DEVICE_SD, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "sdmc", "/" },
|
||||
{ 'B', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, 0, 0, 0, "nand", "/" }, // ユーザーはこのアーカイブを使えない(RW不可)
|
||||
{ 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, 0, 0, 0, "nand2", "/" }, // ユーザーはこのアーカイブを使えない(RW不可)
|
||||
// { 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R), 0, 0, "nand", "/" }, // ユーザーはこのアーカイブではWrite不可
|
||||
// { 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R), 0, 0, "nand2", "/" }, // ユーザーはこのアーカイブではWrite不可
|
||||
{ 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand", "/" }, // ユーザーはこのアーカイブではWrite不可
|
||||
{ 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand2", "/" }, // ユーザーはこのアーカイブではWrite不可
|
||||
{ 'D', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "shared2", "nand2:/shared2" },
|
||||
{ 'E', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "photo", "nand2:/photo" },
|
||||
{ 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPrv", NULL },
|
||||
{ 'G', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPub", NULL },
|
||||
{ 'G', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPrv", NULL },
|
||||
{ 'H', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPub", NULL },
|
||||
};
|
||||
|
||||
// ランチャーマウント情報
|
||||
const OSMountInfo s_launcherMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = {
|
||||
// drive device target pertitionIdx resource userPermission rsvA B archive path
|
||||
{ 'A', OS_MOUNT_DEVICE_SD, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "sdmc", "/" },
|
||||
{ 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand", "/" }, // ランチャーはここもアクセス可
|
||||
{ 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand2", "/" }, // 同上
|
||||
{ 'D', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "shared2", "nand2:/shared2" },
|
||||
{ 'E', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "photo", "nand2:/photo" },
|
||||
{ 0, OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPrv", NULL },
|
||||
{ 0, OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPub", NULL },
|
||||
};
|
||||
|
||||
|
||||
|
||||
// ============================================================================
|
||||
//
|
||||
@ -57,53 +82,76 @@ OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = {
|
||||
//
|
||||
// ============================================================================
|
||||
|
||||
// 起動SRLパスをシステム領域にセット
|
||||
void SYSM_SetBootSRLPath( NAMTitleId titleID )
|
||||
// ランチャーのマウント情報セット
|
||||
void SYSMi_SetLauncherMountInfo( void )
|
||||
{
|
||||
char path[ FS_FILE_NAME_MAX ];
|
||||
|
||||
// タイトルIDが"0"の時は、ROMと判断する(DSダウンロードプレイの時の挙動は未実装。。。)
|
||||
if( titleID ) {
|
||||
NAM_GetTitleBootContentPath( path, titleID );
|
||||
}else {
|
||||
STD_StrCpy( path, (const char*)"rom:" );
|
||||
}
|
||||
|
||||
STD_CopyLStringZeroFill( (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, path, OS_MOUNT_PATH_LEN );
|
||||
OS_TPrintf( "boot path : %s\n", (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF );
|
||||
// ※とりあえず自身はROMブートで。(後で修正)
|
||||
// SYSMi_SetBootSRLPath( 0 ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。
|
||||
SYSMi_SetMountInfoCore( &s_launcherMountList[0] );
|
||||
}
|
||||
|
||||
|
||||
// システム領域に、ブートするアプリのマウント情報を登録する
|
||||
void SYSM_SetMountInfo( NAMTitleId titleID )
|
||||
void SYSM_SetBootAppMountInfo( NAMTitleId titleID )
|
||||
{
|
||||
// マウント情報の整理
|
||||
SYSMi_ModifySaveDataMount( titleID ); // セーブデータ
|
||||
// SDは全アプリ解放で良い?
|
||||
// PHOTOは全アプリに解放で良い?
|
||||
SYSMi_SetBootSRLPath( titleID ); // 起動アプリのSRLパスをセット
|
||||
SYSMi_ModifySaveDataMount( titleID ); // セーブデータ有無によるマウント情報の編集
|
||||
/*
|
||||
※※ 注意 ※※
|
||||
MountInfoは、FSで直接参照してアクセス許可状態を判定しているため、ここにアプリ用のデータをセットすると、
|
||||
その後はパーミッションの都合上FSライブラリおよびFSを使用したESやNAMライブラリが全く使用できなくなる。(今後パーミッション仕様については変更される可能性あり)
|
||||
よって、内部でFSライブラリを使用する処理は、本処理の前に完了しておく必要がある。
|
||||
*/
|
||||
SYSMi_SetMountInfoCore( (const OSMountInfo *)&s_defaultMountList[0] ); // マウント情報のセット
|
||||
}
|
||||
|
||||
|
||||
// 起動SRLパスをシステム領域にセット
|
||||
static void SYSMi_SetBootSRLPath( NAMTitleId titleID )
|
||||
{
|
||||
static char path[ FS_FILE_NAME_MAX ];
|
||||
|
||||
// マウント情報をシステム領域に書き込み
|
||||
{
|
||||
OSMountInfo *pSrc = s_defaultMountList;
|
||||
OSMountInfo *pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
|
||||
int i;
|
||||
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
|
||||
if( pSrc->drive[ 0 ] ) {
|
||||
MI_CpuCopyFast( pSrc, pDst, sizeof(OSMountInfo) );
|
||||
pDst++;
|
||||
}
|
||||
pSrc++;
|
||||
MI_CpuClear8( path, FS_FILE_NAME_MAX );
|
||||
|
||||
// タイトルIDが"0"の時は、ROMと判断する(DSダウンロードプレイの時の挙動は未実装。。。)
|
||||
if( titleID ) {
|
||||
if( NAM_GetTitleBootContentPath( path, titleID ) != NAM_OK ) {
|
||||
OS_TPrintf( "ERROR: BootContentPath Get failed.\n" );
|
||||
}
|
||||
#if 0
|
||||
pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
|
||||
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
|
||||
OS_TPrintf( "mount path : %s\n", pDst->path );
|
||||
}else {
|
||||
// STD_StrCpy( path, (const char*)"rom:" ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。
|
||||
}
|
||||
|
||||
STD_CopyLStringZeroFill( (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, path, OS_MOUNT_PATH_LEN );
|
||||
// OS_TPrintf( "boot path : %s\n", (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF ); // ※今はOS_Init前で呼ばれるので、Printfできない。
|
||||
}
|
||||
|
||||
|
||||
// マウント情報をシステム領域に書き込み
|
||||
static void SYSMi_SetMountInfoCore( const OSMountInfo *pSrc )
|
||||
{
|
||||
OSMountInfo *pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
|
||||
int i;
|
||||
|
||||
MI_CpuClearFast( (void *)HW_TWL_FS_MOUNT_INFO_BUF, HW_TWL_FS_BOOT_SRL_PATH_BUF - HW_TWL_FS_MOUNT_INFO_BUF );
|
||||
|
||||
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
|
||||
if( pSrc->drive[ 0 ] ) {
|
||||
MI_CpuCopyFast( pSrc, pDst, sizeof(OSMountInfo) );
|
||||
pDst++;
|
||||
}
|
||||
#endif
|
||||
pSrc++;
|
||||
}
|
||||
#if 0
|
||||
pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
|
||||
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
|
||||
OS_TPrintf( "mount path : %s\n", pDst->path );
|
||||
pDst++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// タイトルIDをもとにセーブデータ有無を判定して、マウント情報を編集する。
|
||||
static void SYSMi_ModifySaveDataMount( NAMTitleId titleID )
|
||||
{
|
||||
@ -116,13 +164,13 @@ static void SYSMi_ModifySaveDataMount( NAMTitleId titleID )
|
||||
|
||||
// セーブデータのファイルパスを取得
|
||||
NAM_GetTitleSaveFilePath( saveFilePath[ 1 ], saveFilePath[ 0 ], titleID );
|
||||
|
||||
// 結果を元にマウント情報を編集。
|
||||
for( i = 0; i < 2; i++ ) {
|
||||
FSFile file[1];
|
||||
FS_InitFile( file );
|
||||
// ※現在は、セーブファイルを開けるかどうかでセーブファイル有無を確認。
|
||||
// 最終的にはTMDもしくはROMヘッダの値を参照。ROMヘッダの方が簡単で速いか?
|
||||
|
||||
if( FS_OpenFileEx( file, saveFilePath[ i ], FS_FILEMODE_R) ) {
|
||||
FS_CloseFile( file );
|
||||
STD_CopyLStringZeroFill( pMountTgt->path, saveFilePath[ i ], OS_MOUNT_PATH_LEN );
|
||||
@ -138,3 +186,56 @@ static void SYSMi_ModifySaveDataMount( NAMTitleId titleID )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
static void SYSMi_ModifySaveDataMount2( NAMTitleId titleID, ROM_Header_Short *pROMH )
|
||||
{
|
||||
int i;
|
||||
OSMountInfo *pMountTgt = &s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ];
|
||||
u32 *pROMHSaveDataSize = &pROMH->public_save_data_size;
|
||||
|
||||
if( titleID ) {
|
||||
// タイトルIDが指定されているNANDアプリの場合は、セーブデータ有無を判定して、パスをセット
|
||||
char saveFilePath[ 2 ][ FS_FILE_NAME_MAX ];
|
||||
|
||||
// セーブデータのファイルパスを取得
|
||||
NAM_GetTitleSaveFilePath( saveFilePath[ 1 ], saveFilePath[ 0 ], titleID );
|
||||
|
||||
// 結果を元にマウント情報を編集。
|
||||
for( i = 0; i < 2; i++ ) {
|
||||
BOOL isFind = FALSE;
|
||||
// ROMヘッダにセーブデータサイズの記載があるなら
|
||||
if( *pROMHSaveDataSize++ ) {
|
||||
FSFile file[1];
|
||||
FS_InitFile( file );
|
||||
// セーブファイルを開けるならOK。
|
||||
if( FS_OpenFileEx( file, saveFilePath[ i ], FS_FILEMODE_R) ) {
|
||||
FS_CloseFile( file );
|
||||
isFind = TRUE;
|
||||
}
|
||||
// ※ランチャーでセーブデータファイルのリカバリまでやる?
|
||||
#if 0
|
||||
else if( FS_CreateFile( saveFilePath[ i ], FS_PERMIT_R | FS_PERMIT_W ) &&
|
||||
FS_SetFileLength( file, *pROMHSaveDataSize ) ) {
|
||||
FS_CloseFile( file );
|
||||
isFind = TRUE;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if( isFind ) {
|
||||
STD_CopyLStringZeroFill( pMountTgt->path, saveFilePath[ i ], OS_MOUNT_PATH_LEN );
|
||||
}else {
|
||||
pMountTgt->drive[ 0 ] = 0;
|
||||
}
|
||||
pMountTgt++;
|
||||
}
|
||||
}else {
|
||||
// タイトルID指定なしのカードアプリの場合は、セーブデータ無効
|
||||
for( i = 0; i < 2; i++ ) {
|
||||
pMountTgt->drive[ 0 ] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
#include "spi.h"
|
||||
|
||||
// define data-----------------------------------------------------------------
|
||||
#define CARD_BANNER_INDEX ( LAUNCHER_TITLE_LIST_NUM - 1 )
|
||||
|
||||
typedef struct BannerCheckParam {
|
||||
u8 *pSrc;
|
||||
@ -28,8 +29,8 @@ typedef struct BannerCheckParam {
|
||||
}BannerCheckParam;
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
extern void SYSM_SetMountInfo( NAMTitleId titleID ); // マウント情報のセット
|
||||
extern void SYSM_SetBootSRLPath( NAMTitleId titleID ); // SRL起動パスのセット
|
||||
extern void SYSMi_SetLauncherMountInfo( void );
|
||||
extern void SYSM_SetBootAppMountInfo( NAMTitleId titleID ); // マウント情報のセット
|
||||
|
||||
// function's prototype-------------------------------------------------------
|
||||
static TitleProperty *SYSMi_CheckShortcutBoot( void );
|
||||
@ -141,6 +142,9 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
||||
pSysm = SYSMi_GetWork();
|
||||
#endif /* SYSM_DEBUG_ */
|
||||
|
||||
// ランチャーのマウント情報セット
|
||||
SYSMi_SetLauncherMountInfo();
|
||||
|
||||
// ARM7コンポーネント用プロテクションユニット領域変更
|
||||
OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB );
|
||||
|
||||
@ -307,10 +311,10 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
||||
|
||||
// バナーデータのリード
|
||||
if( SYSM_GetCardRomHeader()->banner_offset &&
|
||||
SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ 0 ] ) ) {
|
||||
pTitleList_Card->pBanner = &s_bannerBuf[ 0 ];
|
||||
SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ CARD_BANNER_INDEX ] ) ) {
|
||||
pTitleList_Card->pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
|
||||
}else {
|
||||
MI_CpuClearFast( &s_bannerBuf[ 0 ], sizeof(TWLBannerFile) );
|
||||
MI_CpuClearFast( &s_bannerBuf[ CARD_BANNER_INDEX ], sizeof(TWLBannerFile) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -363,9 +367,13 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
|
||||
int l;
|
||||
int gotten;
|
||||
NAMTitleId titleIdArray[ LAUNCHER_TITLE_LIST_NUM ];
|
||||
gotten = NAM_GetTitleList( &titleIdArray[ 1 ], LAUNCHER_TITLE_LIST_NUM - 1 ) + 1;
|
||||
|
||||
for(l=1;l<gotten;l++)
|
||||
if( listNum > LAUNCHER_TITLE_LIST_NUM ) {
|
||||
OS_TPrintf( "Warning: TitleList_Nand num over LAUNCHER_TITLE_LIST_NUM(%d)\n", LAUNCHER_TITLE_LIST_NUM );
|
||||
}
|
||||
gotten = NAM_GetTitleList( &titleIdArray[ 0 ], LAUNCHER_TITLE_LIST_NUM - 1 );
|
||||
|
||||
for(l=0;l<gotten;l++)
|
||||
{
|
||||
//ヘッダからバナーを読み込む
|
||||
FSFile file[1];
|
||||
@ -429,26 +437,18 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
|
||||
titleIdArray[l] = 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
for(l=1;l<listNum;l++)
|
||||
{
|
||||
pTitleList_Nand[l].titleID = 0;
|
||||
pTitleList_Nand[l].pBanner = 0;
|
||||
}
|
||||
#else
|
||||
// カードアプリ部分を除いたリストクリア
|
||||
MI_CpuClearFast( &pTitleList_Nand[ 1 ], sizeof(TitleProperty) * ( listNum - 1 ) );
|
||||
#endif
|
||||
|
||||
listNum = (gotten<listNum) ? gotten : listNum;
|
||||
|
||||
for(l=1;l<listNum;l++)
|
||||
for(l=0;l<listNum;l++)
|
||||
{
|
||||
pTitleList_Nand[l].titleID = titleIdArray[l];
|
||||
pTitleList_Nand[l].pBanner = &s_bannerBuf[l];
|
||||
pTitleList_Nand[l+1].titleID = titleIdArray[l];
|
||||
pTitleList_Nand[l+1].pBanner = &s_bannerBuf[l];
|
||||
if( titleIdArray[l] ) {
|
||||
pTitleList_Nand[l].flags.isValid = TRUE;
|
||||
pTitleList_Nand[l].flags.media = TITLE_MEDIA_NAND;
|
||||
pTitleList_Nand[l+1].flags.isValid = TRUE;
|
||||
pTitleList_Nand[l+1].flags.media = TITLE_MEDIA_NAND;
|
||||
}
|
||||
}
|
||||
// return : *TitleProperty Array
|
||||
@ -657,7 +657,7 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
||||
void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
|
||||
{
|
||||
#define THREAD_PRIO 17
|
||||
#define STACK_SIZE 5120 // 適当
|
||||
#define STACK_SIZE 0xc00
|
||||
static u64 stack[ STACK_SIZE / sizeof(u64) ];
|
||||
|
||||
// アプリ未ロード状態なら、ロード開始
|
||||
@ -671,6 +671,10 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
|
||||
SYSMi_Relocate();
|
||||
SYSMi_GetWork()->isLoadSucceeded = TRUE;
|
||||
}
|
||||
|
||||
if( pBootTitle->flags.media == TITLE_MEDIA_CARD ) {
|
||||
SYSMi_GetWork()->isCardBoot = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -739,8 +743,7 @@ AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle )
|
||||
|
||||
|
||||
// マウント情報の登録
|
||||
SYSM_SetMountInfo ( pBootTitle->titleID );
|
||||
SYSM_SetBootSRLPath( pBootTitle->titleID );
|
||||
SYSM_SetBootAppMountInfo ( pBootTitle->titleID );
|
||||
|
||||
BOOT_Ready(); // never return.
|
||||
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
#include <twl.h>
|
||||
#include "misc.h"
|
||||
#include "MachineSetting.h"
|
||||
#include "nand_app_hack.h"
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
|
||||
@ -79,12 +78,6 @@ void TwlMain(void)
|
||||
SYSM_CaribrateTP();
|
||||
}
|
||||
|
||||
{
|
||||
// ファイルシステム切り替え応急処置
|
||||
// FS_IdentifyTitle(0x4d534554);//MSET
|
||||
FS_IdentifyTitle(0x5445534d);//TESM ※今はmakerom.TWLのバグで逆になっている。
|
||||
}
|
||||
|
||||
InitBG();
|
||||
GetAndDrawRTCData( &g_rtcDraw, TRUE );
|
||||
MachineSettingInit();
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
#include <twl.h>
|
||||
#include "misc.h"
|
||||
#include "PictoChat.h"
|
||||
#include "nand_app_hack.h"
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
|
||||
@ -61,12 +60,6 @@ void TwlMain(void)
|
||||
// システムの初期化------------------
|
||||
InitAllocator();
|
||||
|
||||
{
|
||||
// ファイルシステム切り替え応急処置
|
||||
// FS_IdentifyTitle(0x50434854);//PCHT
|
||||
FS_IdentifyTitle(0x54484350);//THCP ※今はmakerom.TWLのバグで逆になっている。
|
||||
}
|
||||
|
||||
InitBG();
|
||||
PictoChatInit();
|
||||
// メインループ----------------------------
|
||||
|
||||
Binary file not shown.
@ -1,63 +0,0 @@
|
||||
|
||||
// とにかく.appファイル内のSRLを直接読み込むコールバック
|
||||
//#define WAD_SRL_OFFSET 0x12C0
|
||||
#define WAD_SRL_OFFSET 0
|
||||
static FSResult ReadFromWad(FSArchive *arc, void *buffer, u32 offset, u32 length)
|
||||
{
|
||||
FSFile *file = (FSFile *)FS_GetArchiveBase(arc);
|
||||
(void)FS_SeekFile(file, (int)(WAD_SRL_OFFSET + offset), FS_SEEK_SET);
|
||||
return (FS_ReadFile(file, buffer, (int)length) >= 0) ?
|
||||
FS_RESULT_SUCCESS : FS_GetResultCode(file);
|
||||
}
|
||||
// 指定のタイトルIDで起動したNANDアプリであると仮定して"rom"アーカイブを置換
|
||||
static BOOL FS_IdentifyTitle(u32 titleLo)
|
||||
{
|
||||
BOOL retval = FALSE;
|
||||
static struct
|
||||
{
|
||||
BOOL initialized;
|
||||
FSFile file[1];
|
||||
}
|
||||
context;
|
||||
if (!context.initialized)
|
||||
{
|
||||
context.initialized = TRUE;
|
||||
// if (OS_GetBootType() == OS_BOOTTYPE_NAND)
|
||||
{
|
||||
char path[FS_ENTRY_LONGNAME_MAX];
|
||||
/* STD_TSPrintf(path, "nand:/title_e/00010001/%02X%02X%02X%02X/content/12123434.app",
|
||||
((titleLo / 1000) % 10) + '0',
|
||||
((titleLo / 100) % 10) + '0',
|
||||
((titleLo / 10) % 10) + '0',
|
||||
((titleLo / 1) % 10) + '0');
|
||||
*/
|
||||
STD_TSPrintf(path, "nand:/title/00010001/%08X/content/12123434.app", titleLo );
|
||||
if (!FS_IsAvailable())
|
||||
{
|
||||
FS_Init(FS_DMA_NOT_USE);
|
||||
}
|
||||
if (FS_OpenFileEx(context.file, path, FS_FILEMODE_R))
|
||||
{
|
||||
CARDRomHeader header[1];
|
||||
(void)FS_SeekFile(context.file, (int)(WAD_SRL_OFFSET + 0), FS_SEEK_SET);
|
||||
if (FS_ReadFile(context.file, header, sizeof(header)) == sizeof(header))
|
||||
{
|
||||
FSArchive *arc = FS_FindArchive("rom", 3);
|
||||
(void)FS_UnloadArchive(arc);
|
||||
if (FS_LoadArchive(arc, (u32)context.file,
|
||||
header->fat.offset, header->fat.length,
|
||||
header->fnt.offset, header->fnt.length,
|
||||
ReadFromWad, NULL))
|
||||
{
|
||||
retval = TRUE;
|
||||
}
|
||||
}
|
||||
if (!retval)
|
||||
{
|
||||
(void)FS_CloseFile(context.file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
@ -102,13 +102,14 @@ typedef struct SYSM_work {
|
||||
vu16 isOnDebugger :1; // デバッガ動作か?
|
||||
vu16 isExistCard :1; // 有効なNTR/TWLカードが存在するか?
|
||||
vu16 isCardStateChanged :1; // カード状態更新フラグ
|
||||
vu16 isLoadSucceeded :1;
|
||||
vu16 isLoadSucceeded :1; // アプリロード完了?
|
||||
vu16 isCardBoot :1; // カードブートか?
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
vu16 isValidCardBanner :1;
|
||||
vu16 is1stCardChecked :1;
|
||||
vu16 rsv :5;
|
||||
vu16 rsv :4;
|
||||
#else
|
||||
vu16 rsv :7;
|
||||
vu16 rsv :6;
|
||||
#endif
|
||||
|
||||
u16 cardHeaderCrc16; // カード検出時に算出したROMヘッダCRC16(ARM9側でコピーして使用する側)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user