From 07c9ab83f8e5769879e90c6de378b132ce7b5768 Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Sun, 7 Aug 2022 00:28:49 -0400 Subject: [PATCH] add ROM::SaveToFile --- src/app/rom.cc | 13 +++++++++++++ src/app/rom.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/src/app/rom.cc b/src/app/rom.cc index 4c9e9fd2..c53f32c6 100644 --- a/src/app/rom.cc +++ b/src/app/rom.cc @@ -570,6 +570,7 @@ absl::StatusOr ROM::SNES3bppTo8bppSheet(Bytes sheet, int size) { } absl::Status ROM::LoadFromFile(const absl::string_view& filename) { + filename_ = filename; std::ifstream file(filename.data(), std::ios::binary); if (!file.is_open()) { return absl::InternalError( @@ -607,6 +608,18 @@ absl::Status ROM::LoadFromBytes(Bytes data) { return absl::OkStatus(); } +absl::Status ROM::SaveToFile() { + std::fstream file(filename_.data(), std::ios::binary | std::ios::out); + if (!file.is_open()) { + return absl::InternalError( + absl::StrCat("Could not open ROM file: ", filename_)); + } + for (auto i = 0; i < size_; ++i) { + file << rom_data_[i]; + } + return absl::OkStatus(); +} + // 0-112 -> compressed 3bpp bgr -> (decompressed each) 0x600 chars // 113-114 -> compressed 2bpp -> (decompressed each) 0x800 chars // 115-126 -> uncompressed 3bpp sprites -> (each) 0x600 chars diff --git a/src/app/rom.h b/src/app/rom.h index 15ca1011..9f95f8a2 100644 --- a/src/app/rom.h +++ b/src/app/rom.h @@ -83,6 +83,8 @@ class ROM { absl::Status LoadFromPointer(uchar* data, size_t length); absl::Status LoadFromBytes(Bytes data); + absl::Status SaveToFile(); + auto GetSize() const { return size_; } auto GetTitle() const { return title; } auto GetGraphicsBin() const { return graphics_bin_; } @@ -112,6 +114,7 @@ class ROM { private: long size_ = 0; + std::string filename_; uchar title[21] = "ROM Not Loaded"; bool is_loaded_ = false;