annotate serialize.h @ 2013:dcdad92f84a4

Multiplying by zero and shifting by zero are very different. Fixes regression in Overdrive 2
author Michael Pavone <pavone@retrodev.com>
date Sun, 01 Nov 2020 13:28:31 -0800
parents c886c54d8cf1
children 3b8e29ef1145
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1427
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #ifndef SERIALIZE_H_
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #define SERIALIZE_H_
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include <stdint.h>
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 #include <stddef.h>
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 typedef struct {
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 size_t size;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 size_t storage;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 size_t current_section_start;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 uint8_t *data;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 } serialize_buffer;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 typedef struct deserialize_buffer deserialize_buffer;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 typedef void (*section_fun)(deserialize_buffer *buf, void *data);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17 typedef struct {
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 section_fun fun;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 void *data;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 } section_handler;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 struct deserialize_buffer {
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 size_t size;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24 size_t cur_pos;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 uint8_t *data;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26 section_handler *handlers;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 uint16_t max_handler;
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 };
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 enum {
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 SECTION_HEADER,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 SECTION_68000,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 SECTION_Z80,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 SECTION_VDP,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35 SECTION_YM2612,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 SECTION_PSG,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37 SECTION_GEN_BUS_ARBITER,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 SECTION_SEGA_IO_1,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 SECTION_SEGA_IO_2,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 SECTION_SEGA_IO_EXT,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41 SECTION_MAIN_RAM,
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 SECTION_SOUND_RAM,
1433
c886c54d8cf1 Added save states to SMS emulation
Michael Pavone <pavone@retrodev.com>
parents: 1427
diff changeset
43 SECTION_MAPPER,
c886c54d8cf1 Added save states to SMS emulation
Michael Pavone <pavone@retrodev.com>
parents: 1427
diff changeset
44 SECTION_EEPROM,
c886c54d8cf1 Added save states to SMS emulation
Michael Pavone <pavone@retrodev.com>
parents: 1427
diff changeset
45 SECTION_CART_RAM
1427
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 };
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 void init_serialize(serialize_buffer *buf);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49 void save_int32(serialize_buffer *buf, uint32_t val);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50 void save_int16(serialize_buffer *buf, uint16_t val);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51 void save_int8(serialize_buffer *buf, uint8_t val);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 void save_string(serialize_buffer *buf, char *val);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 void save_buffer8(serialize_buffer *buf, void *val, size_t len);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 void save_buffer16(serialize_buffer *buf, uint16_t *val, size_t len);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 void save_buffer32(serialize_buffer *buf, uint32_t *val, size_t len);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 void start_section(serialize_buffer *buf, uint16_t section_id);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 void end_section(serialize_buffer *buf);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 void register_section_handler(deserialize_buffer *buf, section_handler handler, uint16_t section_id);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 void init_deserialize(deserialize_buffer *buf, uint8_t *data, size_t size);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60 uint32_t load_int32(deserialize_buffer *buf);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 uint16_t load_int16(deserialize_buffer *buf);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 uint8_t load_int8(deserialize_buffer *buf);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63 void load_buffer8(deserialize_buffer *buf, void *dst, size_t len);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64 void load_buffer16(deserialize_buffer *buf, uint16_t *dst, size_t len);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
65 void load_buffer32(deserialize_buffer *buf, uint32_t *dst, size_t len);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 void load_section(deserialize_buffer *buf);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
67 uint8_t save_to_file(serialize_buffer *buf, char *path);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
68 uint8_t load_from_file(deserialize_buffer *buf, char *path);
4e5797b3935a WIP - New savestate format
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
69 #endif //SERIALIZE_H