diff --git a/src/app/rom.cc b/src/app/rom.cc index 6baaafc3..151f582a 100644 --- a/src/app/rom.cc +++ b/src/app/rom.cc @@ -219,7 +219,7 @@ absl::Status Rom::LoadFromFile(const std::string& filename, bool z3_load) { return absl::OkStatus(); } -absl::Status Rom::LoadFromPointer(uchar* data, size_t length) { +absl::Status Rom::LoadFromPointer(uchar* data, size_t length, bool z3_load) { if (!data) return absl::InvalidArgumentError( "Could not load ROM: parameter `data` is empty."); @@ -228,17 +228,19 @@ absl::Status Rom::LoadFromPointer(uchar* data, size_t length) { size_ = length; - // Copy ROM title - constexpr uint32_t kTitleStringOffset = 0x7FC0; - constexpr uint32_t kTitleStringLength = 20; - memcpy(title_, rom_data_.data() + kTitleStringOffset, kTitleStringLength); - if (rom_data_[kTitleStringOffset + 0x19] == 0) { - version_ = Z3_Version::JP; - } else { - version_ = Z3_Version::US; + if (z3_load) { + // Copy ROM title + constexpr uint32_t kTitleStringOffset = 0x7FC0; + constexpr uint32_t kTitleStringLength = 20; + memcpy(title_, rom_data_.data() + kTitleStringOffset, kTitleStringLength); + if (rom_data_[kTitleStringOffset + 0x19] == 0) { + version_ = Z3_Version::JP; + } else { + version_ = Z3_Version::US; + } + RETURN_IF_ERROR(gfx::LoadAllPalettes(rom_data_, palette_groups_)); + LoadGfxGroups(); } - RETURN_IF_ERROR(gfx::LoadAllPalettes(rom_data_, palette_groups_)); - LoadGfxGroups(); // Set is_loaded_ flag and return success is_loaded_ = true; diff --git a/src/app/rom.h b/src/app/rom.h index 111be3c4..699af27e 100644 --- a/src/app/rom.h +++ b/src/app/rom.h @@ -171,7 +171,7 @@ class Rom : public core::ExperimentFlags { * */ absl::Status LoadFromFile(const std::string& filename, bool z3_load = true); - absl::Status LoadFromPointer(uchar* data, size_t length); + absl::Status LoadFromPointer(uchar* data, size_t length, bool z3_load = true); absl::Status LoadFromBytes(const Bytes& data); /** diff --git a/src/test/gfx/compression_test.cc b/src/test/gfx/compression_test.cc index 2056cd65..98c4b21c 100644 --- a/src/test/gfx/compression_test.cc +++ b/src/test/gfx/compression_test.cc @@ -33,7 +33,7 @@ using ::testing::TypedEq; namespace { Bytes ExpectCompressOk(Rom& rom, uchar* in, int in_size) { - auto load_status = rom.LoadFromPointer(in, in_size); + auto load_status = rom.LoadFromPointer(in, in_size, false); EXPECT_TRUE(load_status.ok()); auto compression_status = CompressV3(rom.vector(), 0, in_size); EXPECT_TRUE(compression_status.ok()); @@ -51,7 +51,7 @@ Bytes ExpectDecompressBytesOk(Rom& rom, Bytes& in) { } Bytes ExpectDecompressOk(Rom& rom, uchar* in, int in_size) { - auto load_status = rom.LoadFromPointer(in, in_size); + auto load_status = rom.LoadFromPointer(in, in_size, false); EXPECT_TRUE(load_status.ok()); auto decompression_status = DecompressV2(rom.data(), 0, in_size); EXPECT_TRUE(decompression_status.ok());