diff --git a/src/app/rom.cc b/src/app/rom.cc index 664372f5..5b3bb576 100644 --- a/src/app/rom.cc +++ b/src/app/rom.cc @@ -208,11 +208,6 @@ absl::Status Rom::LoadZelda3() { constexpr size_t baseROMSize = 1048576; // 1MB constexpr size_t headerSize = 0x200; // 512 bytes if (size_ % baseROMSize == headerSize) { - has_header_ = true; - } - - // Remove header if present - if (has_header_) { auto header = std::vector(rom_data_.begin(), rom_data_.begin() + 0x200); rom_data_.erase(rom_data_.begin(), rom_data_.begin() + 0x200); diff --git a/src/app/rom.h b/src/app/rom.h index 53f7f550..49d6efc3 100644 --- a/src/app/rom.h +++ b/src/app/rom.h @@ -212,7 +212,11 @@ class Rom : public core::ExperimentFlags { absl::Status ReadWritePreconditions() { if (!is_loaded_) { - return absl::FailedPreconditionError("ROM not loaded"); + return absl::FailedPreconditionError("ROM file not loaded"); + } + if (rom_data_.empty() || size_ == 0) { + return absl::FailedPreconditionError( + "File was loaded, but ROM data was empty."); } return absl::OkStatus(); } @@ -499,7 +503,6 @@ class Rom : public core::ExperimentFlags { } auto error_message = absl::StrFormat("Invalid write argument type: %s", typeid(action.value).name()); - throw std::runtime_error(error_message); return absl::InvalidArgumentError(error_message); } @@ -522,10 +525,16 @@ class Rom : public core::ExperimentFlags { absl::Status LoadGfxGroups(); absl::Status SaveGroupsToRom(); - long size_ = 0; + // ROM file loaded flag bool is_loaded_ = false; - bool has_header_ = false; - std::string title_ = "ROM Not Loaded"; + + // Size of the ROM data. + unsigned long size_ = 0; + + // Title of the ROM loaded from the header + std::string title_ = "ROM not loaded"; + + // Filename of the ROM std::string filename_ = ""; // Full contiguous rom space