diff options
| author | hyperiris <hyperiris@gmail.com> | 2009-02-22 13:59:06 +0000 |
|---|---|---|
| committer | hyperiris <hyperiris@gmail.com> | 2009-02-22 13:59:06 +0000 |
| commit | 42a7d2fc85baa49c5b47907d3ce8ddf440d2af99 (patch) | |
| tree | a7578c051c273526a2a8fbfd7344282cd064046c /Source/Core/DiscIO | |
| parent | 03a950a1e56fabe4d9a4508d74f308c25ff52d57 (diff) | |
Fix of issue 408, the game still can't boot.
Implement DVDLowUnencryptedRead, Medal Of Honor Heroes 2 use it to get DVD PartitionsInfo (disk offset 0x40000).
and the game try to use IOCtlV, code 0x8b, bushing point out, IOCtlV 0x8b is DVDLowOpenPartition too, so I just return 0 for success.
need further work on this.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2367 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DiscIO')
| -rw-r--r-- | Source/Core/DiscIO/Src/Volume.h | 1 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/VolumeDirectory.cpp | 5 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/VolumeDirectory.h | 1 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/VolumeGC.cpp | 5 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/VolumeGC.h | 1 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp | 13 | ||||
| -rw-r--r-- | Source/Core/DiscIO/Src/VolumeWiiCrypted.h | 1 |
7 files changed, 27 insertions, 0 deletions
diff --git a/Source/Core/DiscIO/Src/Volume.h b/Source/Core/DiscIO/Src/Volume.h index 8d2f4f9f05..d915f1f0a6 100644 --- a/Source/Core/DiscIO/Src/Volume.h +++ b/Source/Core/DiscIO/Src/Volume.h @@ -38,6 +38,7 @@ class IVolume virtual bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const = 0; + virtual bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const = 0; virtual std::string GetUniqueID() const = 0; virtual std::string GetMakerID() const = 0; virtual std::string GetName() const = 0; diff --git a/Source/Core/DiscIO/Src/VolumeDirectory.cpp b/Source/Core/DiscIO/Src/VolumeDirectory.cpp index 37fe0b8f4d..4619650b86 100644 --- a/Source/Core/DiscIO/Src/VolumeDirectory.cpp +++ b/Source/Core/DiscIO/Src/VolumeDirectory.cpp @@ -69,6 +69,11 @@ bool CVolumeDirectory::IsValidDirectory(const std::string& _rDirectory) return File::IsDirectory(directoryName.c_str()); } +bool CVolumeDirectory::RAWRead( u64 _Offset, u64 _Length, u8* _pBuffer ) const +{ + return false; +} + bool CVolumeDirectory::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const { if(_Offset < FST_ADDRESS) diff --git a/Source/Core/DiscIO/Src/VolumeDirectory.h b/Source/Core/DiscIO/Src/VolumeDirectory.h index 1cc0931031..6f8d827d0d 100644 --- a/Source/Core/DiscIO/Src/VolumeDirectory.h +++ b/Source/Core/DiscIO/Src/VolumeDirectory.h @@ -42,6 +42,7 @@ class CVolumeDirectory static bool IsValidDirectory(const std::string& _rDirectory); bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const; + bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const; std::string GetUniqueID() const; void SetUniqueID(std::string _ID); diff --git a/Source/Core/DiscIO/Src/VolumeGC.cpp b/Source/Core/DiscIO/Src/VolumeGC.cpp index 5d5a80ebd4..93ff459b52 100644 --- a/Source/Core/DiscIO/Src/VolumeGC.cpp +++ b/Source/Core/DiscIO/Src/VolumeGC.cpp @@ -55,6 +55,11 @@ bool CVolumeGC::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const return m_pReader->Read(_Offset, _Length, _pBuffer); } +bool CVolumeGC::RAWRead( u64 _Offset, u64 _Length, u8* _pBuffer ) const +{ + return false; +} + std::string CVolumeGC::GetUniqueID() const { static const std::string NO_UID("NO_UID"); diff --git a/Source/Core/DiscIO/Src/VolumeGC.h b/Source/Core/DiscIO/Src/VolumeGC.h index 33452c39f7..941ceb64ee 100644 --- a/Source/Core/DiscIO/Src/VolumeGC.h +++ b/Source/Core/DiscIO/Src/VolumeGC.h @@ -30,6 +30,7 @@ public: CVolumeGC(IBlobReader* _pReader); ~CVolumeGC(); bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const; + bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const; std::string GetUniqueID() const; std::string GetMakerID() const; std::string GetName() const; diff --git a/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp b/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp index 662f3f7f02..dfbf49f0d2 100644 --- a/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp +++ b/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp @@ -41,6 +41,17 @@ CVolumeWiiCrypted::~CVolumeWiiCrypted() m_pBuffer = NULL; } +bool CVolumeWiiCrypted::RAWRead( u64 _Offset, u64 _Length, u8* _pBuffer ) const +{ + // HyperIris: hack for DVDLowUnencryptedRead + // Medal Of Honor Heroes 2 read this DVD offset for PartitionsInfo + // and, PartitionsInfo is not encrypted, let's read it directly. + if (!m_pReader->Read(_Offset, _Length, _pBuffer)) + { + return(false); + } + return true; +} bool CVolumeWiiCrypted::Read(u64 _ReadOffset, u64 _Length, u8* _pBuffer) const @@ -255,4 +266,6 @@ CVolumeWiiCrypted::GetSize() const return(0); } } + + } // namespace diff --git a/Source/Core/DiscIO/Src/VolumeWiiCrypted.h b/Source/Core/DiscIO/Src/VolumeWiiCrypted.h index 696d609114..64435ba2cc 100644 --- a/Source/Core/DiscIO/Src/VolumeWiiCrypted.h +++ b/Source/Core/DiscIO/Src/VolumeWiiCrypted.h @@ -32,6 +32,7 @@ public: CVolumeWiiCrypted(IBlobReader* _pReader, u64 _VolumeOffset, const unsigned char* _pVolumeKey); ~CVolumeWiiCrypted(); bool Read(u64 _Offset, u64 _Length, u8* _pBuffer) const; + bool RAWRead(u64 _Offset, u64 _Length, u8* _pBuffer) const; std::string GetUniqueID() const; std::string GetMakerID() const; std::string GetName() const; |
