diff --git a/Data/Sys/GameSettings/GXE.ini b/Data/Sys/GameSettings/GXE.ini index 84c522725b..cbbcdadc33 100644 --- a/Data/Sys/GameSettings/GXE.ini +++ b/Data/Sys/GameSettings/GXE.ini @@ -2,6 +2,7 @@ [Core] # Values set here will override the main Dolphin settings. +FastDiscSpeed = True [EmuState] # The Emulation State. 1 is worst, 5 is best, 0 is not set. diff --git a/Source/Core/Core/Boot/Boot_BS2Emu.cpp b/Source/Core/Core/Boot/Boot_BS2Emu.cpp index 3ab6ed6c58..6ee859c73a 100644 --- a/Source/Core/Core/Boot/Boot_BS2Emu.cpp +++ b/Source/Core/Core/Boot/Boot_BS2Emu.cpp @@ -56,7 +56,10 @@ bool CBoot::EmulatedBS2_GC(bool skipAppLoader) // Write necessary values // Here we write values to memory that the apploader does not take care of. Game info goes // to 0x80000000 according to YAGCD 4.2. - DVDInterface::DVDRead(/*offset*/0x00000000, /*address*/0x00000000, 0x20, false); // write disc info + + // It's possible to boot DOL and ELF files without a disc inserted + if (DVDInterface::VolumeIsValid()) + DVDInterface::DVDRead(/*offset*/0x00000000, /*address*/0x00000000, 0x20, false); // write disc info PowerPC::HostWrite_U32(0x0D15EA5E, 0x80000020); // Booted from bootrom. 0xE5207C22 = booted from jtag PowerPC::HostWrite_U32(Memory::REALRAM_SIZE, 0x80000028); // Physical Memory Size (24MB on retail) @@ -81,6 +84,9 @@ bool CBoot::EmulatedBS2_GC(bool skipAppLoader) HLE::Patch(0x81300000, "OSReport"); // HLE OSReport for Apploader + if (!DVDInterface::VolumeIsValid()) + return false; + // Load Apploader to Memory - The apploader is hardcoded to begin at 0x2440 on the disc, // but the size can differ between discs. Compare with YAGCD chap 13. const DiscIO::IVolume& volume = DVDInterface::GetVolume(); diff --git a/Source/Core/DiscIO/DiscScrubber.cpp b/Source/Core/DiscIO/DiscScrubber.cpp index db68027f8c..1546abf0b5 100644 --- a/Source/Core/DiscIO/DiscScrubber.cpp +++ b/Source/Core/DiscIO/DiscScrubber.cpp @@ -95,6 +95,9 @@ bool SetupScrub(const std::string& filename, int block_size) m_BlocksPerCluster = CLUSTER_SIZE / m_BlockSize; m_Disc = CreateVolumeFromFilename(filename); + if (!m_Disc) + return false; + m_FileSize = m_Disc->GetSize(); u32 numClusters = (u32)(m_FileSize / CLUSTER_SIZE);