From 9ba08bec0f7c981eeef0266daf7632f1eae99c06 Mon Sep 17 00:00:00 2001 From: "crediar@rypp.net" Date: Wed, 2 Jul 2014 08:34:53 +0000 Subject: [PATCH] *Added the FatFS link map feature which should greatly decrease load times git-svn-id: svn://localhost/Users/andi/Downloads/code/trunk@41 be6c1b03-d731-4111-a574-e37d80d43941 --- DVD.c | 33 +++++++++++++++++++++++++-------- global.h | 2 +- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/DVD.c b/DVD.c index 3172576..b7b7143 100644 --- a/DVD.c +++ b/DVD.c @@ -13,15 +13,28 @@ u8 HardDriveConnected; FATFS fatfs; static u8 *FSTable ALIGNED(32); -u32 ApploaderSize=0; -u32 dolOffset=0; -u32 FSTableSize=0; -u32 FSTableOffset=0; -u32 FCEntry=0; +u32 ApploaderSize = 0; +u32 dolOffset = 0; +u32 FSTableSize = 0; +u32 FSTableOffset = 0; + +u32 FCEntry=0; FileCache FC[FILECACHE_MAX]; -u32 FCState[FILECACHE_MAX]; +u32 FCState[FILECACHE_MAX]; +DWORD LTable[0x1D0]; +static void DVDCreateLinkMap( FIL *File ) +{ + GameFile.cltbl = LTable; + GameFile.cltbl[0] = sizeof(LTable); + + s32 fres = f_lseek( &GameFile, CREATE_LINKMAP ); + if( fres == FR_NOT_ENOUGH_CORE ) + { + GameFile.cltbl = NULL; + } +} void DVDInit( void ) { int i=0; @@ -135,6 +148,8 @@ s32 DVDSelectGame( void ) return -3; } + DVDCreateLinkMap(&GameFile); + f_lseek( &GameFile, 0 ); f_read( &GameFile, (void*)0, 0x20, &read ); @@ -311,9 +326,11 @@ void FSTRead( char *Buffer, u32 Length, u32 Offset ) f_open( &(FC[FCEntry].File), Path, FA_READ ); - FC[FCEntry].Size = fe[i].FileLength; + FC[FCEntry].Size = fe[i].FileLength; FC[FCEntry].Offset = fe[i].FileOffset; - FCState[FCEntry] = 0x23; + FCState[FCEntry] = 0x23; + + DVDCreateLinkMap(&(FC[FCEntry].File)); f_lseek( &(FC[FCEntry].File), nOffset ); f_read( &(FC[FCEntry].File), Buffer, Length, &read ); diff --git a/global.h b/global.h index 767cc2b..ea9aeb2 100644 --- a/global.h +++ b/global.h @@ -15,7 +15,7 @@ #define PADHOOK 1 #define CONFIG_VERSION 0x00000002 -#define DM_VERSION 0x0002000a +#define DM_VERSION 0x0002000B #define DI_SUCCESS 1 #define DI_ERROR 2