From ee5821b45dba0fb37cb0e718265bf73c51938da0 Mon Sep 17 00:00:00 2001 From: Chris Moeller Date: Mon, 28 Oct 2013 23:17:14 -0700 Subject: [PATCH] Fixed SFM writing --- Frameworks/GME/gme/Spc_Sfm.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Frameworks/GME/gme/Spc_Sfm.cpp b/Frameworks/GME/gme/Spc_Sfm.cpp index 71a447449..8912782f6 100644 --- a/Frameworks/GME/gme/Spc_Sfm.cpp +++ b/Frameworks/GME/gme/Spc_Sfm.cpp @@ -111,6 +111,7 @@ struct Sfm_File : Gme_Info_ { blargg_vector data; Bml_Parser metadata; + unsigned long original_metadata_size; Sfm_File() { set_type( gme_sfm_type ); } @@ -126,6 +127,7 @@ struct Sfm_File : Gme_Info_ return "SFM file too small"; int metadata_size = get_le32( data.begin() + 4 ); metadata.parseDocument( (const char *)data.begin() + 8, metadata_size ); + original_metadata_size = metadata_size; return blargg_ok; } @@ -147,9 +149,17 @@ struct Sfm_File : Gme_Info_ return blargg_ok; } - blargg_err_t save_( gme_writer_t writer, void* your_data ) + blargg_err_t save_( gme_writer_t writer, void* your_data ) const { - + std::string metadata_serialized; + metadata.serialize( metadata_serialized ); + uint8_t meta_length[4]; + set_le32( meta_length, (unsigned int) metadata_serialized.length() ); + writer( your_data, "SFM1", 4 ); + writer( your_data, meta_length, 4 ); + writer( your_data, metadata_serialized.c_str(), metadata_serialized.length() ); + writer( your_data, data.begin() + 4 + 4 + original_metadata_size, data.size() - (4 + 4 + original_metadata_size) ); + return blargg_ok; } }; @@ -458,7 +468,7 @@ void Sfm_Emu::create_updated_metadata( Bml_Parser &out ) const oss.str(""); oss.clear(); - oss << smp.status.ram00f8 << "," << smp.status.ram00f9; + oss << (unsigned long)smp.status.ram00f8 << "," << (unsigned long)smp.status.ram00f9; out.setValue( "smp:ram", oss.str().c_str() ); name = "smp:regs:";