Get rid of VolumeHandler
VolumeHandler is basically just a wrapper around a single IVolume object. This change moves that object to DVDInterface, moves the Read32 function to IVolume, and gets rid of the rest of VolumeHandler.
This commit is contained in:
parent
bcc434095d
commit
4cd00e366c
|
@ -14,7 +14,6 @@
|
|||
#include "Core/Core.h"
|
||||
#include "Core/Host.h"
|
||||
#include "Core/PatchEngine.h"
|
||||
#include "Core/VolumeHandler.h"
|
||||
#include "Core/Boot/Boot.h"
|
||||
#include "Core/Boot/Boot_DOL.h"
|
||||
#include "Core/Debugger/Debugger_SymbolMap.h"
|
||||
|
@ -35,9 +34,11 @@
|
|||
|
||||
void CBoot::Load_FST(bool _bIsWii)
|
||||
{
|
||||
if (!VolumeHandler::IsValid())
|
||||
if (!DVDInterface::VolumeIsValid())
|
||||
return;
|
||||
|
||||
const DiscIO::IVolume& volume = DVDInterface::GetVolume();
|
||||
|
||||
// copy first 20 bytes of disc to start of Mem 1
|
||||
DVDInterface::DVDRead(/*offset*/0, /*address*/0, /*length*/0x20, false);
|
||||
|
||||
|
@ -48,9 +49,9 @@ void CBoot::Load_FST(bool _bIsWii)
|
|||
if (_bIsWii)
|
||||
shift = 2;
|
||||
|
||||
u32 fstOffset = VolumeHandler::Read32(0x0424, _bIsWii) << shift;
|
||||
u32 fstSize = VolumeHandler::Read32(0x0428, _bIsWii) << shift;
|
||||
u32 maxFstSize = VolumeHandler::Read32(0x042c, _bIsWii) << shift;
|
||||
u32 fstOffset = volume.Read32(0x0424, _bIsWii) << shift;
|
||||
u32 fstSize = volume.Read32(0x0428, _bIsWii) << shift;
|
||||
u32 maxFstSize = volume.Read32(0x042c, _bIsWii) << shift;
|
||||
|
||||
u32 arenaHigh = ROUND_DOWN(0x817FFFFF - maxFstSize, 0x20);
|
||||
Memory::Write_U32(arenaHigh, 0x00000034);
|
||||
|
@ -229,33 +230,30 @@ bool CBoot::BootUp()
|
|||
// GCM and Wii
|
||||
case SCoreStartupParameter::BOOT_ISO:
|
||||
{
|
||||
std::unique_ptr<DiscIO::IVolume> pVolume(DiscIO::CreateVolumeFromFilename(_StartupPara.m_strFilename));
|
||||
if (pVolume == nullptr)
|
||||
DVDInterface::SetVolumeName(_StartupPara.m_strFilename);
|
||||
DVDInterface::SetDiscInside(DVDInterface::VolumeIsValid());
|
||||
if (!DVDInterface::VolumeIsValid())
|
||||
break;
|
||||
|
||||
if (pVolume->IsWiiDisc() != _StartupPara.bWii)
|
||||
const DiscIO::IVolume& pVolume = DVDInterface::GetVolume();
|
||||
|
||||
if (pVolume.IsWiiDisc() != _StartupPara.bWii)
|
||||
{
|
||||
PanicAlertT("Warning - starting ISO in wrong console mode!");
|
||||
}
|
||||
|
||||
// setup the map from ISOFile ID
|
||||
VolumeHandler::SetVolumeName(_StartupPara.m_strFilename);
|
||||
|
||||
std::string unique_id = VolumeHandler::GetVolume()->GetUniqueID();
|
||||
std::string unique_id = DVDInterface::GetVolume().GetUniqueID();
|
||||
if (unique_id.size() >= 4)
|
||||
VideoInterface::SetRegionReg(unique_id.at(3));
|
||||
|
||||
DVDInterface::SetDiscInside(VolumeHandler::IsValid());
|
||||
|
||||
u32 tmd_size;
|
||||
std::unique_ptr<u8[]> tmd_buf = pVolume->GetTMD(&tmd_size);
|
||||
std::unique_ptr<u8[]> tmd_buf = pVolume.GetTMD(&tmd_size);
|
||||
if (tmd_size)
|
||||
{
|
||||
WII_IPC_HLE_Interface::ES_DIVerify(tmd_buf.get(), tmd_size);
|
||||
}
|
||||
|
||||
|
||||
_StartupPara.bWii = VolumeHandler::IsWiiDisc();
|
||||
_StartupPara.bWii = pVolume.IsWiiDisc();
|
||||
|
||||
// HLE BS2 or not
|
||||
if (_StartupPara.bHLE_BS2)
|
||||
|
@ -311,20 +309,20 @@ bool CBoot::BootUp()
|
|||
{
|
||||
BS2Success = EmulatedBS2(dolWii);
|
||||
}
|
||||
else if (!VolumeHandler::IsWiiDisc() && !_StartupPara.m_strDefaultISO.empty())
|
||||
else if ((!DVDInterface::VolumeIsValid() || !DVDInterface::GetVolume().IsWiiDisc()) && !_StartupPara.m_strDefaultISO.empty())
|
||||
{
|
||||
VolumeHandler::SetVolumeName(_StartupPara.m_strDefaultISO);
|
||||
DVDInterface::SetVolumeName(_StartupPara.m_strDefaultISO);
|
||||
BS2Success = EmulatedBS2(dolWii);
|
||||
}
|
||||
|
||||
if (!_StartupPara.m_strDVDRoot.empty())
|
||||
{
|
||||
NOTICE_LOG(BOOT, "Setting DVDRoot %s", _StartupPara.m_strDVDRoot.c_str());
|
||||
VolumeHandler::SetVolumeDirectory(_StartupPara.m_strDVDRoot, dolWii, _StartupPara.m_strApploader, _StartupPara.m_strFilename);
|
||||
DVDInterface::SetVolumeDirectory(_StartupPara.m_strDVDRoot, dolWii, _StartupPara.m_strApploader, _StartupPara.m_strFilename);
|
||||
BS2Success = EmulatedBS2(dolWii);
|
||||
}
|
||||
|
||||
DVDInterface::SetDiscInside(VolumeHandler::IsValid());
|
||||
DVDInterface::SetDiscInside(DVDInterface::VolumeIsValid());
|
||||
|
||||
if (!BS2Success)
|
||||
{
|
||||
|
@ -364,19 +362,19 @@ bool CBoot::BootUp()
|
|||
if (!_StartupPara.m_strDVDRoot.empty())
|
||||
{
|
||||
NOTICE_LOG(BOOT, "Setting DVDRoot %s", _StartupPara.m_strDVDRoot.c_str());
|
||||
VolumeHandler::SetVolumeDirectory(_StartupPara.m_strDVDRoot, _StartupPara.bWii);
|
||||
DVDInterface::SetVolumeDirectory(_StartupPara.m_strDVDRoot, _StartupPara.bWii);
|
||||
}
|
||||
else if (!_StartupPara.m_strDefaultISO.empty())
|
||||
{
|
||||
NOTICE_LOG(BOOT, "Loading default ISO %s", _StartupPara.m_strDefaultISO.c_str());
|
||||
VolumeHandler::SetVolumeName(_StartupPara.m_strDefaultISO);
|
||||
DVDInterface::SetVolumeName(_StartupPara.m_strDefaultISO);
|
||||
}
|
||||
else
|
||||
{
|
||||
VolumeHandler::SetVolumeDirectory(_StartupPara.m_strFilename, _StartupPara.bWii);
|
||||
DVDInterface::SetVolumeDirectory(_StartupPara.m_strFilename, _StartupPara.bWii);
|
||||
}
|
||||
|
||||
DVDInterface::SetDiscInside(VolumeHandler::IsValid());
|
||||
DVDInterface::SetDiscInside(DVDInterface::VolumeIsValid());
|
||||
|
||||
// Poor man's bootup
|
||||
if(_StartupPara.bWii)
|
||||
|
@ -402,18 +400,18 @@ bool CBoot::BootUp()
|
|||
|
||||
// load default image or create virtual drive from directory
|
||||
if (!_StartupPara.m_strDVDRoot.empty())
|
||||
VolumeHandler::SetVolumeDirectory(_StartupPara.m_strDVDRoot, true);
|
||||
DVDInterface::SetVolumeDirectory(_StartupPara.m_strDVDRoot, true);
|
||||
else if (!_StartupPara.m_strDefaultISO.empty())
|
||||
VolumeHandler::SetVolumeName(_StartupPara.m_strDefaultISO);
|
||||
DVDInterface::SetVolumeName(_StartupPara.m_strDefaultISO);
|
||||
|
||||
DVDInterface::SetDiscInside(VolumeHandler::IsValid());
|
||||
DVDInterface::SetDiscInside(DVDInterface::VolumeIsValid());
|
||||
break;
|
||||
|
||||
|
||||
// Bootstrap 2 (AKA: Initial Program Loader, "BIOS")
|
||||
case SCoreStartupParameter::BOOT_BS2:
|
||||
{
|
||||
DVDInterface::SetDiscInside(VolumeHandler::IsValid());
|
||||
DVDInterface::SetDiscInside(DVDInterface::VolumeIsValid());
|
||||
if (Load_BS2(_StartupPara.m_strBootROM))
|
||||
{
|
||||
if (LoadMapFromFilename())
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "Core/Core.h"
|
||||
#include "Core/MemTools.h"
|
||||
#include "Core/PatchEngine.h"
|
||||
#include "Core/VolumeHandler.h"
|
||||
#include "Core/Boot/Boot.h"
|
||||
#include "Core/HLE/HLE.h"
|
||||
#include "Core/HW/CPU.h"
|
||||
|
@ -84,9 +83,10 @@ bool CBoot::EmulatedBS2_GC(bool skipAppLoader)
|
|||
|
||||
// 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();
|
||||
u32 iAppLoaderOffset = 0x2440;
|
||||
u32 iAppLoaderEntry = VolumeHandler::Read32(iAppLoaderOffset + 0x10, false);
|
||||
u32 iAppLoaderSize = VolumeHandler::Read32(iAppLoaderOffset + 0x14, false) + VolumeHandler::Read32(iAppLoaderOffset + 0x18, false);
|
||||
u32 iAppLoaderEntry = volume.Read32(iAppLoaderOffset + 0x10, false);
|
||||
u32 iAppLoaderSize = volume.Read32(iAppLoaderOffset + 0x14, false) + volume.Read32(iAppLoaderOffset + 0x18, false);
|
||||
if ((iAppLoaderEntry == (u32)-1) || (iAppLoaderSize == (u32)-1) || skipAppLoader)
|
||||
{
|
||||
INFO_LOG(BOOT, "GC BS2: Not running apploader!");
|
||||
|
@ -308,8 +308,8 @@ bool CBoot::EmulatedBS2_Wii()
|
|||
|
||||
// setup Wii memory
|
||||
DiscIO::IVolume::ECountry country_code = DiscIO::IVolume::COUNTRY_UNKNOWN;
|
||||
if (VolumeHandler::IsValid())
|
||||
country_code = VolumeHandler::GetVolume()->GetCountry();
|
||||
if (DVDInterface::VolumeIsValid())
|
||||
country_code = DVDInterface::GetVolume().GetCountry();
|
||||
if (SetupWiiMemory(country_code) == false)
|
||||
return false;
|
||||
|
||||
|
@ -321,7 +321,7 @@ bool CBoot::EmulatedBS2_Wii()
|
|||
|
||||
// Execute the apploader
|
||||
bool apploaderRan = false;
|
||||
if (VolumeHandler::IsValid() && VolumeHandler::IsWiiDisc())
|
||||
if (DVDInterface::VolumeIsValid() && DVDInterface::GetVolume().IsWiiDisc())
|
||||
{
|
||||
// Set up MSR and the BAT SPR registers.
|
||||
UReg_MSR& m_MSR = ((UReg_MSR&)PowerPC::ppcState.msr);
|
||||
|
@ -353,8 +353,9 @@ bool CBoot::EmulatedBS2_Wii()
|
|||
u32 iAppLoaderOffset = 0x2440; // 0x1c40;
|
||||
|
||||
// Load Apploader to Memory
|
||||
u32 iAppLoaderEntry = VolumeHandler::Read32(iAppLoaderOffset + 0x10, true);
|
||||
u32 iAppLoaderSize = VolumeHandler::Read32(iAppLoaderOffset + 0x14, true);
|
||||
const DiscIO::IVolume& volume = DVDInterface::GetVolume();
|
||||
u32 iAppLoaderEntry = volume.Read32(iAppLoaderOffset + 0x10, true);
|
||||
u32 iAppLoaderSize = volume.Read32(iAppLoaderOffset + 0x14, true);
|
||||
if ((iAppLoaderEntry == (u32)-1) || (iAppLoaderSize == (u32)-1))
|
||||
{
|
||||
ERROR_LOG(BOOT, "Invalid apploader. Probably your image is corrupted.");
|
||||
|
|
|
@ -16,7 +16,6 @@ set(SRCS ActionReplay.cpp
|
|||
NetPlayServer.cpp
|
||||
PatchEngine.cpp
|
||||
State.cpp
|
||||
VolumeHandler.cpp
|
||||
Boot/Boot_BS2Emu.cpp
|
||||
Boot/Boot.cpp
|
||||
Boot/Boot_DOL.cpp
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
#include "Core/NetPlayProto.h"
|
||||
#include "Core/PatchEngine.h"
|
||||
#include "Core/State.h"
|
||||
#include "Core/VolumeHandler.h"
|
||||
#include "Core/Boot/Boot.h"
|
||||
#include "Core/FifoPlayer/FifoPlayer.h"
|
||||
|
||||
|
@ -542,7 +541,6 @@ void EmuThread()
|
|||
if (core_parameter.bCPUThread)
|
||||
g_video_backend->Video_Cleanup();
|
||||
|
||||
VolumeHandler::EjectVolume();
|
||||
FileMon::Close();
|
||||
|
||||
// Stop audio thread - Actually this does nothing when using HLE
|
||||
|
|
|
@ -253,7 +253,6 @@
|
|||
<ClCompile Include="PowerPC\Profiler.cpp" />
|
||||
<ClCompile Include="PowerPC\SignatureDB.cpp" />
|
||||
<ClCompile Include="State.cpp" />
|
||||
<ClCompile Include="VolumeHandler.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ActionReplay.h" />
|
||||
|
@ -437,7 +436,6 @@
|
|||
<ClInclude Include="PowerPC\Profiler.h" />
|
||||
<ClInclude Include="PowerPC\SignatureDB.h" />
|
||||
<ClInclude Include="State.h" />
|
||||
<ClInclude Include="VolumeHandler.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="CMakeLists.txt" />
|
||||
|
|
|
@ -154,7 +154,6 @@
|
|||
<ClCompile Include="NetPlayServer.cpp" />
|
||||
<ClCompile Include="PatchEngine.cpp" />
|
||||
<ClCompile Include="State.cpp" />
|
||||
<ClCompile Include="VolumeHandler.cpp" />
|
||||
<ClCompile Include="ActionReplay.cpp">
|
||||
<Filter>ActionReplay</Filter>
|
||||
</ClCompile>
|
||||
|
@ -751,7 +750,6 @@
|
|||
<ClInclude Include="NetPlayServer.h" />
|
||||
<ClInclude Include="PatchEngine.h" />
|
||||
<ClInclude Include="State.h" />
|
||||
<ClInclude Include="VolumeHandler.h" />
|
||||
<ClInclude Include="ActionReplay.h">
|
||||
<Filter>ActionReplay</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
#include <cinttypes>
|
||||
#include <cmath>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "AudioCommon/AudioCommon.h"
|
||||
|
||||
|
@ -12,7 +14,6 @@
|
|||
#include "Core/ConfigManager.h"
|
||||
#include "Core/CoreTiming.h"
|
||||
#include "Core/Movie.h"
|
||||
#include "Core/VolumeHandler.h"
|
||||
#include "Core/HW/AudioInterface.h"
|
||||
#include "Core/HW/DVDInterface.h"
|
||||
#include "Core/HW/Memmap.h"
|
||||
|
@ -22,6 +23,9 @@
|
|||
#include "Core/HW/SystemTimers.h"
|
||||
#include "Core/PowerPC/PowerPC.h"
|
||||
|
||||
#include "DiscIO/Volume.h"
|
||||
#include "DiscIO/VolumeCreator.h"
|
||||
|
||||
static const double PI = 3.14159265358979323846264338328;
|
||||
|
||||
// Rate the drive can transfer data to main memory, given the data
|
||||
|
@ -229,6 +233,7 @@ struct DVDReadCommand
|
|||
int callback_event_type;
|
||||
};
|
||||
|
||||
static std::unique_ptr<DiscIO::IVolume> s_inserted_volume;
|
||||
|
||||
// STATE_TO_SAVE
|
||||
// hardware registers
|
||||
|
@ -373,7 +378,7 @@ static u32 ProcessDTKSamples(short *tempPCM, u32 num_samples)
|
|||
|
||||
u8 tempADPCM[NGCADPCM::ONE_BLOCK_SIZE];
|
||||
// TODO: What if we can't read from AudioPos?
|
||||
VolumeHandler::ReadToPtr(tempADPCM, AudioPos, sizeof(tempADPCM), false);
|
||||
s_inserted_volume->Read(AudioPos, sizeof(tempADPCM), tempADPCM, false);
|
||||
AudioPos += sizeof(tempADPCM);
|
||||
NGCADPCM::DecodeBlock(tempPCM + samples_processed * 2, tempADPCM);
|
||||
samples_processed += NGCADPCM::SAMPLES_PER_BLOCK;
|
||||
|
@ -449,6 +454,29 @@ void Init()
|
|||
|
||||
void Shutdown()
|
||||
{
|
||||
s_inserted_volume.reset();
|
||||
}
|
||||
|
||||
const DiscIO::IVolume& GetVolume()
|
||||
{
|
||||
return *s_inserted_volume;
|
||||
}
|
||||
|
||||
bool SetVolumeName(const std::string& disc_path)
|
||||
{
|
||||
s_inserted_volume = std::unique_ptr<DiscIO::IVolume>(DiscIO::CreateVolumeFromFilename(disc_path));
|
||||
return VolumeIsValid();
|
||||
}
|
||||
|
||||
bool SetVolumeDirectory(const std::string& full_path, bool is_wii, const std::string& apploader_path, const std::string& DOL_path)
|
||||
{
|
||||
s_inserted_volume = std::unique_ptr<DiscIO::IVolume>(DiscIO::CreateVolumeFromDirectory(full_path, is_wii, apploader_path, DOL_path));
|
||||
return VolumeIsValid();
|
||||
}
|
||||
|
||||
bool VolumeIsValid()
|
||||
{
|
||||
return s_inserted_volume != nullptr;
|
||||
}
|
||||
|
||||
void SetDiscInside(bool _DiscInside)
|
||||
|
@ -472,7 +500,7 @@ void EjectDiscCallback(u64 userdata, int cyclesLate)
|
|||
{
|
||||
// Empty the drive
|
||||
SetDiscInside(false);
|
||||
VolumeHandler::EjectVolume();
|
||||
s_inserted_volume.reset();
|
||||
}
|
||||
|
||||
void InsertDiscCallback(u64 userdata, int cyclesLate)
|
||||
|
@ -480,13 +508,13 @@ void InsertDiscCallback(u64 userdata, int cyclesLate)
|
|||
std::string& SavedFileName = SConfig::GetInstance().m_LocalCoreStartupParameter.m_strFilename;
|
||||
std::string *_FileName = (std::string *)userdata;
|
||||
|
||||
if (!VolumeHandler::SetVolumeName(*_FileName))
|
||||
if (!SetVolumeName(*_FileName))
|
||||
{
|
||||
// Put back the old one
|
||||
VolumeHandler::SetVolumeName(SavedFileName);
|
||||
SetVolumeName(SavedFileName);
|
||||
PanicAlertT("Invalid file");
|
||||
}
|
||||
SetDiscInside(VolumeHandler::IsValid());
|
||||
SetDiscInside(VolumeIsValid());
|
||||
delete _FileName;
|
||||
}
|
||||
|
||||
|
@ -518,7 +546,12 @@ void SetLidOpen(bool _bOpen)
|
|||
|
||||
bool DVDRead(u64 _iDVDOffset, u32 _iRamAddress, u32 _iLength, bool decrypt)
|
||||
{
|
||||
return VolumeHandler::ReadToPtr(Memory::GetPointer(_iRamAddress), _iDVDOffset, _iLength, decrypt);
|
||||
return s_inserted_volume->Read(_iDVDOffset, _iLength, Memory::GetPointer(_iRamAddress), decrypt);
|
||||
}
|
||||
|
||||
bool ChangePartition(u64 offset)
|
||||
{
|
||||
return s_inserted_volume->ChangePartition(offset);
|
||||
}
|
||||
|
||||
void RegisterMMIO(MMIO::Mapping* mmio, u32 base)
|
||||
|
@ -1398,7 +1431,7 @@ s64 CalculateRawDiscReadTime(u64 offset, s64 length)
|
|||
// Note that the speed at a track (in bytes per second) is the same as
|
||||
// the radius of that track because of the length unit used.
|
||||
double speed;
|
||||
if (VolumeHandler::IsWiiDisc())
|
||||
if (s_inserted_volume->IsWiiDisc())
|
||||
{
|
||||
speed = std::sqrt(((average_offset - WII_DISC_LOCATION_1_OFFSET) /
|
||||
WII_BYTES_PER_AREA_UNIT + WII_DISC_AREA_UP_TO_LOCATION_1) / PI);
|
||||
|
|
|
@ -5,7 +5,9 @@
|
|||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "DiscIO/Volume.h"
|
||||
|
||||
class PointerWrap;
|
||||
namespace MMIO { class Mapping; }
|
||||
|
@ -91,6 +93,12 @@ void DoState(PointerWrap &p);
|
|||
|
||||
void RegisterMMIO(MMIO::Mapping* mmio, u32 base);
|
||||
|
||||
// Direct disc access
|
||||
const DiscIO::IVolume& GetVolume();
|
||||
bool SetVolumeName(const std::string& disc_path);
|
||||
bool SetVolumeDirectory(const std::string& disc_path, bool is_wii, const std::string& apploader_path = "", const std::string& DOL_path = "");
|
||||
bool VolumeIsValid();
|
||||
|
||||
// Disc detection and swapping
|
||||
void SetDiscInside(bool _DiscInside);
|
||||
bool IsDiscInside();
|
||||
|
@ -99,6 +107,7 @@ void ChangeDisc(const std::string& fileName);
|
|||
// DVD Access Functions
|
||||
bool DVDRead(u64 _iDVDOffset, u32 _iRamAddress, u32 _iLength, bool decrypt);
|
||||
extern bool g_bStream;
|
||||
bool ChangePartition(u64 offset);
|
||||
void ExecuteCommand(u32 command_0, u32 command_1, u32 command_2, u32 output_address, u32 output_length,
|
||||
bool write_to_DIIMMBUF, int callback_event_type);
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/CoreTiming.h"
|
||||
#include "Core/VolumeHandler.h"
|
||||
#include "Core/HW/DVDInterface.h"
|
||||
#include "Core/HW/Memmap.h"
|
||||
#include "Core/HW/SystemTimers.h"
|
||||
|
@ -162,13 +161,13 @@ IPCCommandResult CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress)
|
|||
_dbg_assert_msg_(WII_IPC_DVD, CommandBuffer.InBuffer[2].m_Address == 0, "DVDLowOpenPartition with cert chain");
|
||||
|
||||
u64 const partition_offset = ((u64)Memory::Read_U32(CommandBuffer.InBuffer[0].m_Address + 4) << 2);
|
||||
VolumeHandler::GetVolume()->ChangePartition(partition_offset);
|
||||
DVDInterface::ChangePartition(partition_offset);
|
||||
|
||||
INFO_LOG(WII_IPC_DVD, "DVDLowOpenPartition: partition_offset 0x%016" PRIx64, partition_offset);
|
||||
|
||||
// Read TMD to the buffer
|
||||
u32 tmd_size;
|
||||
std::unique_ptr<u8[]> tmd_buf = VolumeHandler::GetVolume()->GetTMD(&tmd_size);
|
||||
std::unique_ptr<u8[]> tmd_buf = DVDInterface::GetVolume().GetTMD(&tmd_size);
|
||||
Memory::CopyToEmu(CommandBuffer.PayloadBuffer[0].m_Address, tmd_buf.get(), tmd_size);
|
||||
WII_IPC_HLE_Interface::ES_DIVerify(tmd_buf.get(), tmd_size);
|
||||
|
||||
|
|
|
@ -48,8 +48,8 @@
|
|||
#include "Core/ConfigManager.h"
|
||||
#include "Core/ec_wii.h"
|
||||
#include "Core/Movie.h"
|
||||
#include "Core/VolumeHandler.h"
|
||||
#include "Core/Boot/Boot_DOL.h"
|
||||
#include "Core/HW/DVDInterface.h"
|
||||
#include "Core/IPC_HLE/WII_IPC_HLE_Device_es.h"
|
||||
#include "Core/IPC_HLE/WII_IPC_HLE_Device_usb.h"
|
||||
#include "Core/PowerPC/PowerPC.h"
|
||||
|
@ -110,11 +110,11 @@ void CWII_IPC_HLE_Device_es::OpenInternal()
|
|||
// m_TitleIDsOwned.clear();
|
||||
// DiscIO::cUIDsys::AccessInstance().GetTitleIDs(m_TitleIDsOwned, true);
|
||||
}
|
||||
else if (VolumeHandler::IsValid())
|
||||
else if (DVDInterface::VolumeIsValid())
|
||||
{
|
||||
// blindly grab the titleID from the disc - it's unencrypted at:
|
||||
// offset 0x0F8001DC and 0x0F80044C
|
||||
VolumeHandler::GetVolume()->GetTitleID((u8*)&m_TitleID);
|
||||
DVDInterface::GetVolume().GetTitleID((u8*)&m_TitleID);
|
||||
m_TitleID = Common::swap64(m_TitleID);
|
||||
}
|
||||
else
|
||||
|
@ -1093,7 +1093,7 @@ u32 CWII_IPC_HLE_Device_es::ES_DIVerify(u8* _pTMD, u32 _sz)
|
|||
{
|
||||
u64 titleID = 0xDEADBEEFDEADBEEFull;
|
||||
u64 tmdTitleID = Common::swap64(*(u64*)(_pTMD+0x18c));
|
||||
VolumeHandler::GetVolume()->GetTitleID((u8*)&titleID);
|
||||
DVDInterface::GetVolume().GetTitleID((u8*)&titleID);
|
||||
if (Common::swap64(titleID) != tmdTitleID)
|
||||
{
|
||||
return -1;
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include "Common/NandPaths.h"
|
||||
#include "Common/StringUtil.h"
|
||||
|
||||
#include "Core/VolumeHandler.h"
|
||||
#include "Core/HW/SystemTimers.h"
|
||||
#include "Core/IPC_HLE/WII_IPC_HLE_Device_FileIO.h"
|
||||
#include "Core/IPC_HLE/WII_IPC_HLE_Device_fs.h"
|
||||
|
|
|
@ -1,88 +0,0 @@
|
|||
// Copyright 2013 Dolphin Emulator Project
|
||||
// Licensed under GPLv2
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "Common/CommonFuncs.h"
|
||||
#include "Core/VolumeHandler.h"
|
||||
#include "DiscIO/VolumeCreator.h"
|
||||
|
||||
namespace VolumeHandler
|
||||
{
|
||||
|
||||
static DiscIO::IVolume* g_pVolume = nullptr;
|
||||
|
||||
DiscIO::IVolume *GetVolume()
|
||||
{
|
||||
return g_pVolume;
|
||||
}
|
||||
|
||||
void EjectVolume()
|
||||
{
|
||||
if (g_pVolume)
|
||||
{
|
||||
// This code looks scary. Can the try/catch stuff be removed?
|
||||
// This cause a "Unhandled exception ... Access violation
|
||||
// reading location ..." after you have started and stopped two
|
||||
// or three games
|
||||
delete g_pVolume;
|
||||
g_pVolume = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool SetVolumeName(const std::string& _rFullPath)
|
||||
{
|
||||
if (g_pVolume)
|
||||
{
|
||||
delete g_pVolume;
|
||||
g_pVolume = nullptr;
|
||||
}
|
||||
|
||||
g_pVolume = DiscIO::CreateVolumeFromFilename(_rFullPath);
|
||||
|
||||
return (g_pVolume != nullptr);
|
||||
}
|
||||
|
||||
void SetVolumeDirectory(const std::string& _rFullPath, bool _bIsWii, const std::string& _rApploader, const std::string& _rDOL)
|
||||
{
|
||||
if (g_pVolume)
|
||||
{
|
||||
delete g_pVolume;
|
||||
g_pVolume = nullptr;
|
||||
}
|
||||
|
||||
g_pVolume = DiscIO::CreateVolumeFromDirectory(_rFullPath, _bIsWii, _rApploader, _rDOL);
|
||||
}
|
||||
|
||||
u32 Read32(u64 _Offset, bool decrypt)
|
||||
{
|
||||
if (g_pVolume != nullptr)
|
||||
{
|
||||
u32 Temp;
|
||||
g_pVolume->Read(_Offset, 4, (u8*)&Temp, decrypt);
|
||||
return Common::swap32(Temp);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool ReadToPtr(u8* ptr, u64 _dwOffset, u64 _dwLength, bool decrypt)
|
||||
{
|
||||
if (g_pVolume != nullptr && ptr)
|
||||
return g_pVolume->Read(_dwOffset, _dwLength, ptr, decrypt);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsValid()
|
||||
{
|
||||
return (g_pVolume != nullptr);
|
||||
}
|
||||
|
||||
bool IsWiiDisc()
|
||||
{
|
||||
if (g_pVolume)
|
||||
return g_pVolume->IsWiiDisc();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
} // end of namespace VolumeHandler
|
|
@ -1,34 +0,0 @@
|
|||
// Copyright 2013 Dolphin Emulator Project
|
||||
// Licensed under GPLv2
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
|
||||
// Disc volume handler. It's here because Wii discs can consist of multiple volumes.
|
||||
// GC discs are seen as one big volume.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "DiscIO/Volume.h"
|
||||
|
||||
namespace VolumeHandler
|
||||
{
|
||||
|
||||
bool SetVolumeName(const std::string& _rFullPath);
|
||||
void SetVolumeDirectory(const std::string& _rFullPath, bool _bIsWii, const std::string& _rApploader = "", const std::string& _rDOL = "");
|
||||
|
||||
// decrypt parameter must be false if not reading a Wii disc
|
||||
u32 Read32(u64 _Offset, bool decrypt);
|
||||
// decrypt parameter must be false if not reading a Wii disc
|
||||
bool ReadToPtr(u8* ptr, u64 _dwOffset, u64 _dwLength, bool decrypt);
|
||||
|
||||
bool IsValid();
|
||||
bool IsWiiDisc();
|
||||
|
||||
DiscIO::IVolume *GetVolume();
|
||||
|
||||
void EjectVolume();
|
||||
|
||||
} // end of namespace VolumeHandler
|
|
@ -20,6 +20,12 @@ public:
|
|||
|
||||
// decrypt parameter must be false if not reading a Wii disc
|
||||
virtual bool Read(u64 _Offset, u64 _Length, u8* _pBuffer, bool decrypt) const = 0;
|
||||
virtual u32 Read32(u64 _Offset, bool decrypt) const
|
||||
{
|
||||
u32 temp;
|
||||
Read(_Offset, sizeof(u32), (u8*)&temp, decrypt);
|
||||
return Common::swap32(temp);
|
||||
}
|
||||
|
||||
virtual bool GetTitleID(u8*) const { return false; }
|
||||
virtual std::unique_ptr<u8[]> GetTMD(u32 *_sz) const
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
#include "Common/CommonTypes.h"
|
||||
#include "Common/FileUtil.h"
|
||||
#include "Common/MathUtil.h"
|
||||
#include "Core/VolumeHandler.h"
|
||||
#include "DiscIO/FileBlob.h"
|
||||
#include "DiscIO/FileMonitor.h"
|
||||
#include "DiscIO/Volume.h"
|
||||
|
|
Loading…
Reference in New Issue