diff options
author | Michael Pavone <pavone@retrodev.com> | 2017-08-06 00:06:36 -0700 |
---|---|---|
committer | Michael Pavone <pavone@retrodev.com> | 2017-08-06 00:06:36 -0700 |
commit | 581601741c3b94bc66a03eece1774618312b260a (patch) | |
tree | b554582c4e697996207ceb7bf207177f6ade235d /serialize.h | |
parent | 3b9d676e5bc08488d54b2479201ede060f727b68 (diff) |
WIP - New savestate format
Diffstat (limited to 'serialize.h')
-rw-r--r-- | serialize.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/serialize.h b/serialize.h new file mode 100644 index 0000000..df57075 --- /dev/null +++ b/serialize.h @@ -0,0 +1,69 @@ +#ifndef SERIALIZE_H_ +#define SERIALIZE_H_ + +#include <stdint.h> +#include <stddef.h> + +typedef struct { + size_t size; + size_t storage; + size_t current_section_start; + uint8_t *data; +} serialize_buffer; + +typedef struct deserialize_buffer deserialize_buffer; +typedef void (*section_fun)(deserialize_buffer *buf, void *data); + +typedef struct { + section_fun fun; + void *data; +} section_handler; + +struct deserialize_buffer { + size_t size; + size_t cur_pos; + uint8_t *data; + section_handler *handlers; + uint16_t max_handler; +}; + +enum { + SECTION_HEADER, + SECTION_68000, + SECTION_Z80, + SECTION_VDP, + SECTION_YM2612, + SECTION_PSG, + SECTION_GEN_BUS_ARBITER, + SECTION_SEGA_IO_1, + SECTION_SEGA_IO_2, + SECTION_SEGA_IO_EXT, + SECTION_MAIN_RAM, + SECTION_SOUND_RAM, + SECTION_SEGA_MAPPER, + SECTION_SMS_MAPPER, + SECTION_EEPROM +}; + +void init_serialize(serialize_buffer *buf); +void save_int32(serialize_buffer *buf, uint32_t val); +void save_int16(serialize_buffer *buf, uint16_t val); +void save_int8(serialize_buffer *buf, uint8_t val); +void save_string(serialize_buffer *buf, char *val); +void save_buffer8(serialize_buffer *buf, void *val, size_t len); +void save_buffer16(serialize_buffer *buf, uint16_t *val, size_t len); +void save_buffer32(serialize_buffer *buf, uint32_t *val, size_t len); +void start_section(serialize_buffer *buf, uint16_t section_id); +void end_section(serialize_buffer *buf); +void register_section_handler(deserialize_buffer *buf, section_handler handler, uint16_t section_id); +void init_deserialize(deserialize_buffer *buf, uint8_t *data, size_t size); +uint32_t load_int32(deserialize_buffer *buf); +uint16_t load_int16(deserialize_buffer *buf); +uint8_t load_int8(deserialize_buffer *buf); +void load_buffer8(deserialize_buffer *buf, void *dst, size_t len); +void load_buffer16(deserialize_buffer *buf, uint16_t *dst, size_t len); +void load_buffer32(deserialize_buffer *buf, uint32_t *dst, size_t len); +void load_section(deserialize_buffer *buf); +uint8_t save_to_file(serialize_buffer *buf, char *path); +uint8_t load_from_file(deserialize_buffer *buf, char *path); +#endif //SERIALIZE_H |