comparison serialize.h @ 1427:4e5797b3935a

WIP - New savestate format
author Michael Pavone <pavone@retrodev.com>
date Sun, 06 Aug 2017 00:06:36 -0700
parents
children c886c54d8cf1
comparison
equal deleted inserted replaced
1426:957325c990d5 1427:4e5797b3935a
1 #ifndef SERIALIZE_H_
2 #define SERIALIZE_H_
3
4 #include <stdint.h>
5 #include <stddef.h>
6
7 typedef struct {
8 size_t size;
9 size_t storage;
10 size_t current_section_start;
11 uint8_t *data;
12 } serialize_buffer;
13
14 typedef struct deserialize_buffer deserialize_buffer;
15 typedef void (*section_fun)(deserialize_buffer *buf, void *data);
16
17 typedef struct {
18 section_fun fun;
19 void *data;
20 } section_handler;
21
22 struct deserialize_buffer {
23 size_t size;
24 size_t cur_pos;
25 uint8_t *data;
26 section_handler *handlers;
27 uint16_t max_handler;
28 };
29
30 enum {
31 SECTION_HEADER,
32 SECTION_68000,
33 SECTION_Z80,
34 SECTION_VDP,
35 SECTION_YM2612,
36 SECTION_PSG,
37 SECTION_GEN_BUS_ARBITER,
38 SECTION_SEGA_IO_1,
39 SECTION_SEGA_IO_2,
40 SECTION_SEGA_IO_EXT,
41 SECTION_MAIN_RAM,
42 SECTION_SOUND_RAM,
43 SECTION_SEGA_MAPPER,
44 SECTION_SMS_MAPPER,
45 SECTION_EEPROM
46 };
47
48 void init_serialize(serialize_buffer *buf);
49 void save_int32(serialize_buffer *buf, uint32_t val);
50 void save_int16(serialize_buffer *buf, uint16_t val);
51 void save_int8(serialize_buffer *buf, uint8_t val);
52 void save_string(serialize_buffer *buf, char *val);
53 void save_buffer8(serialize_buffer *buf, void *val, size_t len);
54 void save_buffer16(serialize_buffer *buf, uint16_t *val, size_t len);
55 void save_buffer32(serialize_buffer *buf, uint32_t *val, size_t len);
56 void start_section(serialize_buffer *buf, uint16_t section_id);
57 void end_section(serialize_buffer *buf);
58 void register_section_handler(deserialize_buffer *buf, section_handler handler, uint16_t section_id);
59 void init_deserialize(deserialize_buffer *buf, uint8_t *data, size_t size);
60 uint32_t load_int32(deserialize_buffer *buf);
61 uint16_t load_int16(deserialize_buffer *buf);
62 uint8_t load_int8(deserialize_buffer *buf);
63 void load_buffer8(deserialize_buffer *buf, void *dst, size_t len);
64 void load_buffer16(deserialize_buffer *buf, uint16_t *dst, size_t len);
65 void load_buffer32(deserialize_buffer *buf, uint32_t *dst, size_t len);
66 void load_section(deserialize_buffer *buf);
67 uint8_t save_to_file(serialize_buffer *buf, char *path);
68 uint8_t load_from_file(deserialize_buffer *buf, char *path);
69 #endif //SERIALIZE_H