13#include "absl/status/status.h"
14#include "absl/status/statusor.h"
26class ScopedRomReadOnly;
84 const std::vector<uint8_t>&
data,
126 absl::StatusOr<uint8_t>
ReadByte(
int offset)
const;
127 absl::StatusOr<uint16_t>
ReadWord(
int offset)
const;
128 absl::StatusOr<uint32_t>
ReadLong(
int offset)
const;
143 template <
typename...
Args>
150 template <
typename T,
typename...
Args>
156 if constexpr (
sizeof...(args) > 0) {
164 std::variant<int, uint8_t, uint16_t, short, std::vector<uint8_t>,
172 template <
typename T>
174 if constexpr (std::is_same_v<T, uint8_t>) {
177 return result.status();
179 }
else if constexpr (std::is_same_v<T, uint16_t>) {
182 return result.status();
184 }
else if constexpr (std::is_same_v<T, std::vector<uint8_t>>) {
187 return result.status();
190 return absl::OkStatus();
195 throw std::out_of_range(
"Rom index out of range");
260 const std::vector<uint8_t>&
image)
const;
264 std::vector<std::pair<uint32_t, std::vector<uint8_t>>>
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
absl::StatusOr< std::vector< uint8_t > > ReadByteVector(uint32_t offset, uint32_t length) const
CopierHeaderReason copier_header_reason() const
void PushWriteFence(rom::WriteFence *fence)
uint64_t object_tile_revision() const
project::ResourceLabelManager * resource_label()
absl::Status ReadTransaction(T &var, int address, Args &&... args)
absl::Status LoadFromFile(const std::string &filename, const LoadOptions &options=LoadOptions::Defaults())
std::vector< uint8_t > rom_data_
absl::Status CheckLayoutWritable() const
absl::Status AttachLyraPrivateReservation(const core::HackManifest &manifest)
absl::StatusOr< gfx::Tile16 > ReadTile16(uint32_t tile16_id, uint32_t tile16_ptr)
absl::Status WriteColor(uint32_t address, const gfx::SnesColor &color)
void PopWriteFence(rom::WriteFence *fence)
absl::Status WriteByte(int addr, uint8_t value)
rom::LyraLayoutInspection InspectLyraLayout() const
absl::StatusOr< uint8_t > ReadByte(int offset) const
absl::Status WriteTile16(int tile16_id, uint32_t tile16_ptr, const gfx::Tile16 &tile)
void set_dirty(bool dirty)
std::vector< std::pair< uint32_t, std::vector< uint8_t > > > private_lyra_preimages_
const auto & vector() const
std::shared_ptr< rom::WriteFence > private_lyra_fence_
std::vector< uint8_t > copier_header_
absl::Status WriteVector(int addr, std::vector< uint8_t > data)
absl::Status CapturePrivateLyraReservation()
absl::Status WriteTransaction(Args... args)
bool private_lyra_attached_
absl::Status SaveToFile(const SaveSettings &settings)
absl::StatusOr< uint16_t > ReadWord(int offset) const
static void SetStagingFailureForTesting(bool fail)
CopierHeaderReason copier_header_reason_
const std::vector< uint8_t > & copier_header() const
std::vector< rom::WriteFence * > write_fence_stack_
absl::Status SaveToFileUnchecked(const SaveSettings &settings)
Rom & operator=(const Rom &other)
void CaptureLyraTerrainBaseline()
absl::Status LoadFromData(const std::vector< uint8_t > &data, const LoadOptions &options=LoadOptions::Defaults())
void AdvanceObjectTileRevision()
std::vector< uint8_t > lyra_terrain_baseline_
absl::Status ReadHelper(T &var, int address)
absl::Status ValidateLyraPrivateReservation() const
absl::Status WriteShort(int addr, uint16_t value)
absl::Status ValidatePrivateLyraImage(const std::vector< uint8_t > &image) const
project::ResourceLabelManager resource_label_manager_
absl::Status SaveLyraA0TerrainAs(const std::array< uint16_t, 256 > &tiles, const std::string &filename)
uint8_t & operator[](unsigned long i)
bool has_copier_header() const
absl::Status CheckPrivateLyraWrite(uint32_t pc, const uint8_t *bytes, size_t size) const
size_t read_only_scope_depth_
auto set_filename(std::string_view name)
uint64_t object_tile_revision_
absl::Status WriteWord(int addr, uint16_t value)
virtual absl::Status WriteHelper(const WriteAction &action)
bool has_lyra_private_reservation() const
size_t write_fence_depth() const
absl::Status WriteLong(uint32_t addr, uint32_t value)
absl::StatusOr< uint32_t > ReadLong(int offset) const
bool lyra_attributed_at_load_
ScopedRomReadOnly & operator=(const ScopedRomReadOnly &)=delete
ScopedRomReadOnly(const ScopedRomReadOnly &)=delete
ScopedRomReadOnly & operator=(ScopedRomReadOnly &&)=delete
ScopedRomReadOnly(Rom &rom)
ScopedRomReadOnly(ScopedRomReadOnly &&)=delete
Loads and queries the hack manifest JSON for yaze-ASM integration.
Tile composition of four 8x8 tiles.
Rom * rom()
Get the current ROM instance.
CopierHeaderReason DetectCopierHeader(const uint8_t *data, size_t size)
CopierHeaderReason
Why a copier header was recognized at the start of a ROM file.
constexpr size_t kCopierHeaderSize
Size of the SMC/SWC copier header that some ROM dumps start with.
const char * CopierHeaderReasonName(CopierHeaderReason reason)
static LoadOptions Defaults()
bool load_resource_labels
std::variant< int, uint8_t, uint16_t, short, std::vector< uint8_t >, gfx::SnesColor, std::vector< gfx::SnesColor > > ValueType