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_