main serialize.h
 1#ifndef SERIALIZE_H_
 2#define SERIALIZE_H_
 3
 4#include <stdint.h>
 5#include <stddef.h>
 6
 7typedef struct {
 8	size_t  size;
 9	size_t  storage;
10	size_t  current_section_start;
11	uint8_t *data;
12} serialize_buffer;
13
14typedef struct deserialize_buffer deserialize_buffer;
15typedef void (*section_fun)(deserialize_buffer *buf, void *data);
16
17typedef struct  {
18	section_fun fun;
19	void        *data;
20} section_handler;
21
22struct 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
30enum {
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_MAPPER,
44	SECTION_EEPROM,
45	SECTION_CART_RAM
46};
47
48void init_serialize(serialize_buffer *buf);
49void save_int32(serialize_buffer *buf, uint32_t val);
50void save_int16(serialize_buffer *buf, uint16_t val);
51void save_int8(serialize_buffer *buf, uint8_t val);
52void save_string(serialize_buffer *buf, char *val);
53void save_buffer8(serialize_buffer *buf, void *val, size_t len);
54void save_buffer16(serialize_buffer *buf, uint16_t *val, size_t len);
55void save_buffer32(serialize_buffer *buf, uint32_t *val, size_t len);
56void start_section(serialize_buffer *buf, uint16_t section_id);
57void end_section(serialize_buffer *buf);
58void register_section_handler(deserialize_buffer *buf, section_handler handler, uint16_t section_id);
59void init_deserialize(deserialize_buffer *buf, uint8_t *data, size_t size);
60uint32_t load_int32(deserialize_buffer *buf);
61uint16_t load_int16(deserialize_buffer *buf);
62uint8_t load_int8(deserialize_buffer *buf);
63void load_buffer8(deserialize_buffer *buf, void *dst, size_t len);
64void load_buffer16(deserialize_buffer *buf, uint16_t *dst, size_t len);
65void load_buffer32(deserialize_buffer *buf, uint32_t *dst, size_t len);
66void load_section(deserialize_buffer *buf);
67uint8_t save_to_file(serialize_buffer *buf, char *path);
68uint8_t load_from_file(deserialize_buffer *buf, char *path);
69#endif //SERIALIZE_H