Fixed SFM writing

CQTexperiment
Chris Moeller 2013-10-28 23:17:14 -07:00
parent bb0f0ed511
commit ee5821b45d
1 changed files with 13 additions and 3 deletions

View File

@ -111,6 +111,7 @@ struct Sfm_File : Gme_Info_
{ {
blargg_vector<byte> data; blargg_vector<byte> data;
Bml_Parser metadata; Bml_Parser metadata;
unsigned long original_metadata_size;
Sfm_File() { set_type( gme_sfm_type ); } Sfm_File() { set_type( gme_sfm_type ); }
@ -126,6 +127,7 @@ struct Sfm_File : Gme_Info_
return "SFM file too small"; return "SFM file too small";
int metadata_size = get_le32( data.begin() + 4 ); int metadata_size = get_le32( data.begin() + 4 );
metadata.parseDocument( (const char *)data.begin() + 8, metadata_size ); metadata.parseDocument( (const char *)data.begin() + 8, metadata_size );
original_metadata_size = metadata_size;
return blargg_ok; return blargg_ok;
} }
@ -147,9 +149,17 @@ struct Sfm_File : Gme_Info_
return blargg_ok; 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.str("");
oss.clear(); 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() ); out.setValue( "smp:ram", oss.str().c_str() );
name = "smp:regs:"; name = "smp:regs:";