Skip to content

Commit

Permalink
Merge pull request #248 from RachelBryk/dsp-rom-hash
Browse files Browse the repository at this point in the history
Add DSP rom hashes to movie header.
  • Loading branch information
neobrain committed Jun 8, 2014
2 parents b79482a + d9d292f commit 489534b
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 2 deletions.
2 changes: 1 addition & 1 deletion Source/Core/Core/DSP/DSPCore.cpp
Expand Up @@ -74,7 +74,7 @@ static bool LoadRom(const std::string& fname, int size_in_words, u16 *rom)
return false;
}

// Returns false iff the hash fails and the user hits "Yes"
// Returns false if the hash fails and the user hits "Yes"
static bool VerifyRoms(const std::string& irom_filename, const std::string& coef_filename)
{
struct DspRomHashes
Expand Down
41 changes: 41 additions & 0 deletions Source/Core/Core/Movie.cpp
Expand Up @@ -4,7 +4,9 @@

#include <polarssl/md5.h>

#include "Common/CommonPaths.h"
#include "Common/FileUtil.h"
#include "Common/Hash.h"
#include "Common/NandPaths.h"
#include "Common/Thread.h"
#include "Common/Timer.h"
Expand All @@ -14,6 +16,7 @@
#include "Core/Movie.h"
#include "Core/NetPlayProto.h"
#include "Core/State.h"
#include "Core/DSP/DSPCore.h"
#include "Core/HW/DVDInterface.h"
#include "Core/HW/EXI.h"
#include "Core/HW/EXI_Channel.h"
Expand Down Expand Up @@ -63,6 +66,8 @@ u64 g_titleID = 0;
unsigned char MD5[16];
u8 bongos;
u8 revision[20];
u32 DSPiromHash = 0;
u32 DSPcoefHash = 0;

bool g_bRecordingFromSaveState = false;
bool g_bPolled = false;
Expand Down Expand Up @@ -709,6 +714,8 @@ void ReadHeader()
g_discChange = (char*) tmpHeader.discChange;
author = (char*) tmpHeader.author;
memcpy(MD5, tmpHeader.md5, 16);
DSPiromHash = tmpHeader.DSPiromHash;
DSPcoefHash = tmpHeader.DSPcoefHash;
}

bool PlayInput(const std::string& filename)
Expand Down Expand Up @@ -1134,6 +1141,8 @@ void SaveRecording(const std::string& filename)
memcpy(header.md5,MD5,16);
header.bongos = bongos;
memcpy(header.revision, revision, ArraySize(header.revision));
header.DSPiromHash = DSPiromHash;
header.DSPcoefHash = DSPcoefHash;

// TODO
header.uniqueID = 0;
Expand Down Expand Up @@ -1198,6 +1207,38 @@ void GetSettings()
sscanf(&scm_rev_git_str[2 * i], "%02x", &tmp);
revision[i] = tmp;
}
if (!bDSPHLE)
{
std::string irom_file = File::GetUserPath(D_GCUSER_IDX) + DSP_IROM;
std::string coef_file = File::GetUserPath(D_GCUSER_IDX) + DSP_COEF;

if (!File::Exists(irom_file))
irom_file = File::GetSysDirectory() + GC_SYS_DIR DIR_SEP DSP_IROM;
if (!File::Exists(coef_file))
coef_file = File::GetSysDirectory() + GC_SYS_DIR DIR_SEP DSP_COEF;
std::vector<u16> irom(DSP_IROM_SIZE);
File::IOFile file_irom(irom_file, "rb");

file_irom.ReadArray(irom.data(), DSP_IROM_SIZE);
file_irom.Close();
for (int i = 0; i < DSP_IROM_SIZE; i++)
irom[i] = Common::swap16(irom[i]);

std::vector<u16> coef(DSP_COEF_SIZE);
File::IOFile file_coef(coef_file, "rb");

file_coef.ReadArray(coef.data(), DSP_COEF_SIZE);
file_coef.Close();
for (int i = 0; i < DSP_COEF_SIZE; i++)
coef[i] = Common::swap16(coef[i]);
DSPiromHash = HashAdler32((u8*)irom.data(), DSP_IROM_BYTE_SIZE);
DSPcoefHash = HashAdler32((u8*)coef.data(), DSP_COEF_BYTE_SIZE);
}
else
{
DSPiromHash = 0;
DSPcoefHash = 0;
}
}

void CheckMD5()
Expand Down
4 changes: 3 additions & 1 deletion Source/Core/Core/Movie.h
Expand Up @@ -114,7 +114,9 @@ struct DTMHeader
u8 reserved[13]; // Padding for any new config options
u8 discChange[40]; // Name of iso file to switch to, for two disc games.
u8 revision[20]; // Git hash
u8 reserved2[27]; // Make heading 256 bytes, just because we can
u32 DSPiromHash;
u32 DSPcoefHash;
u8 reserved2[19]; // Make heading 256 bytes, just because we can
};
static_assert(sizeof(DTMHeader) == 256, "DTMHeader should be 256 bytes");

Expand Down

0 comments on commit 489534b

Please sign in to comment.