main romdb.h
 1#ifndef ROMDB_H_
 2#define ROMDB_H_
 3
 4#define REGION_J 1
 5#define REGION_U 2
 6#define REGION_E 4
 7
 8#define RAM_FLAG_ODD  0x18
 9#define RAM_FLAG_EVEN 0x10
10#define RAM_FLAG_BOTH 0x00
11#define RAM_FLAG_MASK RAM_FLAG_ODD
12#define SAVE_I2C      0x01
13#define SAVE_NOR      0x02
14#define SAVE_NONE     0xFF
15
16#include "tern.h"
17#include "serialize.h"
18
19typedef struct {
20	uint32_t     start;
21	uint32_t     end;
22	uint16_t     sda_write_mask;
23	uint16_t     scl_mask;
24	uint8_t      sda_read_bit;
25} eeprom_map;
26
27typedef struct {
28	uint8_t     *buffer;
29	uint8_t     *page_buffer;
30	uint32_t    size;
31	uint32_t    page_size;
32	uint32_t    current_page;
33	uint32_t    last_write_cycle;
34	uint32_t    cmd_address1;
35	uint32_t    cmd_address2;
36	uint16_t    product_id;
37	uint8_t     mode;
38	uint8_t     cmd_state;
39	uint8_t     alt_cmd;
40	uint8_t     bus_flags;
41} nor_state;
42
43enum {
44	MAPPER_NONE,
45	MAPPER_SEGA,
46	MAPPER_REALTEC,
47	MAPPER_XBAND,
48	MAPPER_MULTI_GAME,
49	MAPPER_JCART
50};
51
52
53typedef struct rom_info rom_info;
54
55#include "memmap.h"
56
57struct rom_info {
58	char          *name;
59	memmap_chunk  *map;
60	uint8_t       *save_buffer;
61	void          *rom;
62	eeprom_map    *eeprom_map;
63	char          *port1_override;
64	char          *port2_override;
65	char          *ext_override;
66	char          *mouse_mode;
67	nor_state     *nor;
68	uint32_t      num_eeprom;
69	uint32_t      map_chunks;
70	uint32_t      rom_size;
71	uint32_t      save_size;
72	uint32_t      save_mask;
73	uint16_t      mapper_start_index;
74	uint8_t       save_type;
75	uint8_t       save_bus; //only used for NOR currently
76	uint8_t       mapper_type;
77	uint8_t       regions;
78	uint8_t       is_save_lock_on; //Does the save buffer actually belong to a lock-on cart?
79};
80
81#define GAME_ID_OFF 0x183
82#define GAME_ID_LEN 8
83
84tern_node *load_rom_db();
85rom_info configure_rom(tern_node *rom_db, void *vrom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, memmap_chunk const *base_map, uint32_t base_chunks);
86rom_info configure_rom_heuristics(uint8_t *rom, uint32_t rom_size, memmap_chunk const *base_map, uint32_t base_chunks);
87uint8_t translate_region_char(uint8_t c);
88char const *save_type_name(uint8_t save_type);
89//Note: free_rom_info only frees things pointed to by a rom_info struct, not the struct itself
90//this is because rom_info structs are typically stack allocated
91void free_rom_info(rom_info *info);
92typedef struct system_header system_header;
93void cart_serialize(system_header *sys, serialize_buffer *buf);
94void cart_deserialize(deserialize_buffer *buf, void *vcontext);
95
96#endif //ROMDB_H_