From 5f795b0782e1a88728de1e6329c0c8a2a9c095a5 Mon Sep 17 00:00:00 2001 From: cottonvibes Date: Mon, 17 May 2010 19:42:27 +0000 Subject: [PATCH] re-enabled USE_HOSTFS, and made it so that it detects when "pcsx2hostfs_ldr.elf" is not found, gives an error msg, and then continues loading the elf file without hostfs support... git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3037 96395faa-99c1-11dd-bbfe-3dabce05a288 --- pcsx2/Elfheader.cpp | 71 ++++++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/pcsx2/Elfheader.cpp b/pcsx2/Elfheader.cpp index 05bded559b..3d1a30339c 100644 --- a/pcsx2/Elfheader.cpp +++ b/pcsx2/Elfheader.cpp @@ -25,7 +25,7 @@ u32 ElfCRC; u32 ElfEntry; // uncomment this to enable pcsx2hostfs loading when using "load elf" -//#define USE_HOSTFS +#define USE_HOSTFS #if 0 // fixme: ELF command line option system. @@ -430,30 +430,35 @@ void ElfObject::loadHeaders() // // Throws exceptions on errors. Not called if not skipping the bios. // -#ifdef USE_HOSTFS void loadElfFile(const wxString& _filename) -#else -void loadElfFile(const wxString& filename) -#endif { ScopedPtr elfptr; - -#ifdef USE_HOSTFS wxString filename = _filename; - wxString parameters = _filename; // -#endif - + if (filename.IsEmpty()) return; - Console.WriteLn( L"loadElfFile: " + filename ); #ifdef USE_HOSTFS - parameters = filename; - filename = wxT("pcsx2hostfs_ldr.elf"); -#endif + wxString parameters = filename; + bool bHostFs = true; + + filename = wxT("pcsx2hostfs_ldr.elf"); + int fSize = Path::GetFileSize(filename); + if (fSize == -1) { + wxString error1 = L"Error! pcsx2hostfs_ldr.elf was not found!"; + wxString error2 = L"\n\nAttempting to load elf file without hostfs support..."; + Console.Error(error1); + Msgbox::Alert(error1 + error2); + bHostFs = false; + filename = parameters; + elfptr = new ElfObject(filename, Path::GetFileSize(filename)); + } + else { + elfptr = new ElfObject(filename, fSize); + filename = wxT("host:pcsx2hostfs_ldr.elf"); + } +#else elfptr = new ElfObject(filename, Path::GetFileSize(filename)); -#ifdef USE_HOSTFS - filename = wxT("host:pcsx2hostfs_ldr.elf"); #endif if (!elfptr->hasProgramHeaders()) @@ -469,30 +474,30 @@ void loadElfFile(const wxString& filename) elfptr.Delete(); //2002-09-19 (Florin) - //args_ptr = 0xFFFFFFFF; //big value, searching for minimum [used by parseCommandLine] + //args_ptr = 0xFFFFFFFF; // big value, searching for minimum [used by parseCommandLine] cpuRegs.pc = ElfEntry; //set pc to proper place ELF_LOG( "PC set to: %8.8lx", cpuRegs.pc ); cpuRegs.GPR.n.sp.UL[0] = 0x81f00000; cpuRegs.GPR.n.gp.UL[0] = 0x81f80000; // might not be 100% ok - //cpuRegs.GPR.n.a0.UL[0] = parseCommandLine( filename ); // see #ifdef'd out parseCommendLine for details. + //cpuRegs.GPR.n.a0.UL[0] = parseCommandLine( filename ); // see #ifdef'd out parseCommendLine for details. #ifdef USE_HOSTFS - - //HACK!!!!!!!!!!!!! - uptr params_addr = 0x1FFFC00; // elf loader will check this address for params - s8* params_ptr = (s8*)PSM(params_addr); - s8* params_magic = params_ptr + 0; - s8* params_argc = params_ptr + 4; - s8* params_argv = params_ptr + 8; - *(u32*)params_magic = 'PS2E'; - *(u32*)params_argc = 2; - strcpy(params_argv,filename.ToAscii()); - params_argv += strlen(params_argv)+1; - strcpy(params_argv,parameters.ToAscii()); - params_argv += strlen(params_argv)+1; - strcpy(params_argv,""); - + if (bHostFs) { + //HACK!!!!!!!!!!!!! + uptr params_addr = 0x1FFFC00; // elf loader will check this address for params + s8* params_ptr = (s8*)PSM(params_addr); + s8* params_magic = params_ptr + 0; + s8* params_argc = params_ptr + 4; + s8* params_argv = params_ptr + 8; + *(u32*)params_magic = 'PS2E'; + *(u32*)params_argc = 2; + strcpy(params_argv,filename.ToAscii()); + params_argv += strlen(params_argv)+1; + strcpy(params_argv,parameters.ToAscii()); + params_argv += strlen(params_argv)+1; + strcpy(params_argv,""); + } #endif return;