add ROM::SaveToFile

This commit is contained in:
Justin Scofield
2022-08-07 00:28:49 -04:00
parent ebe586c7ae
commit 07c9ab83f8
2 changed files with 16 additions and 0 deletions

View File

@@ -570,6 +570,7 @@ absl::StatusOr<Bytes> 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

View File

@@ -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;