From 99667e44abe40d7cca205a2fc7aa7ef370f81b7c Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Tue, 6 Nov 2007 08:18:31 +0000 Subject: [PATCH] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E7=94=BB=E9=9D=A2=E3=81=A8Pi?= =?UTF-8?q?ctoChat=E3=80=81=E3=81=9D=E3=82=8C=E3=81=9E=E3=82=8C=E3=81=ABNM?= =?UTF-8?q?enu=E3=81=8B=E3=82=89=E8=B5=B7=E5=8B=95=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=81=9F=E3=82=81=E3=81=AE=E5=BF=9C=E6=80=A5=E6=8E=AA=E7=BD=AE?= =?UTF-8?q?=E3=82=92=E9=81=A9=E7=94=A8?= 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@105 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../MachineSettings/ARM9/src/main.c | 6 ++ .../systemMenu_RED/PictoChat/ARM9/src/main.c | 6 ++ include/nand_app_hack.h | 61 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 include/nand_app_hack.h diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/main.c b/build/systemMenu_RED/MachineSettings/ARM9/src/main.c index 4d2fb393..32921511 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/main.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/main.c @@ -18,6 +18,7 @@ #include #include "misc.h" #include "MachineSetting.h" +#include "nand_app_hack.h" // extern data----------------------------------------------------------------- @@ -73,6 +74,11 @@ void TwlMain(void) if( SYSM_ReadTWLSettingsFile() ) { SYSM_CaribrateTP(); } + + { + // ファイルシステム切り替え応急処置 + FS_IdentifyTitle(0x4d534554);//MSET + } InitBG(); GetAndDrawRTCData( &g_rtcDraw, TRUE ); diff --git a/build/systemMenu_RED/PictoChat/ARM9/src/main.c b/build/systemMenu_RED/PictoChat/ARM9/src/main.c index 9c9a10ba..371d415a 100644 --- a/build/systemMenu_RED/PictoChat/ARM9/src/main.c +++ b/build/systemMenu_RED/PictoChat/ARM9/src/main.c @@ -18,6 +18,7 @@ #include #include "misc.h" #include "PictoChat.h" +#include "nand_app_hack.h" // extern data----------------------------------------------------------------- @@ -61,6 +62,11 @@ void TwlMain(void) InitAllocator(); CMN_InitFileSystem( &g_allocator ); + { + // ファイルシステム切り替え応急処置 + FS_IdentifyTitle(0x50434854);//PCHT + } + InitBG(); PictoChatInit(); // メインループ---------------------------- diff --git a/include/nand_app_hack.h b/include/nand_app_hack.h new file mode 100644 index 00000000..414e710d --- /dev/null +++ b/include/nand_app_hack.h @@ -0,0 +1,61 @@ + +// とにかく.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'); + 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; +}