]> git.sesse.net Git - pistorm/blob - config_file/config_file.h
54931aece0cb27357bb73105a28defc72ecf2762
[pistorm] / config_file / config_file.h
1 #ifndef _CONFIG_FILE_H
2 #define _CONFIG_FILE_H
3
4 #include "m68k.h"
5
6 #include <unistd.h>
7
8 #define MAX_NUM_MAPPED_ITEMS 8
9 #define SIZE_KILO 1024
10 #define SIZE_MEGA (1024 * 1024)
11 #define SIZE_GIGA (1024 * 1024 * 1024)
12
13 typedef enum {
14   MAPTYPE_NONE,
15   MAPTYPE_ROM,
16   MAPTYPE_RAM,
17   MAPTYPE_REGISTER,
18   MAPTYPE_NUM,
19 } map_types;
20
21 typedef enum {
22   MAPCMD_UNKNOWN,
23   MAPCMD_TYPE,
24   MAPCMD_ADDRESS,
25   MAPCMD_SIZE,
26   MAPCMD_RANGE,
27   MAPCMD_FILENAME,
28   MAPCMD_OVL_REMAP,
29   MAPCMD_MAP_ID,
30   MAPCMD_NUM,
31 } map_cmds;
32
33 typedef enum {
34   CONFITEM_NONE,
35   CONFITEM_CPUTYPE,
36   CONFITEM_MAP,
37   CONFITEM_LOOPCYCLES,
38   CONFITEM_MOUSE,
39   CONFITEM_KEYBOARD,
40   CONFITEM_PLATFORM,
41   CONFITEM_SETVAR,
42   CONFITEM_KBFILE,
43   CONFITEM_NUM,
44 } config_items;
45
46 typedef enum {
47   OP_TYPE_BYTE,
48   OP_TYPE_WORD,
49   OP_TYPE_LONGWORD,
50   OP_TYPE_MEM,
51   OP_TYPE_NUM,
52 } map_op_types;
53
54 struct emulator_config {
55   unsigned int cpu_type;
56
57   unsigned char map_type[MAX_NUM_MAPPED_ITEMS];
58   unsigned long map_offset[MAX_NUM_MAPPED_ITEMS];
59   unsigned long map_high[MAX_NUM_MAPPED_ITEMS];
60   unsigned int map_size[MAX_NUM_MAPPED_ITEMS];
61   unsigned int rom_size[MAX_NUM_MAPPED_ITEMS];
62   unsigned char *map_data[MAX_NUM_MAPPED_ITEMS];
63   unsigned int map_mirror[MAX_NUM_MAPPED_ITEMS];
64   char *map_id[MAX_NUM_MAPPED_ITEMS];
65
66   struct platform_config *platform;
67
68   char *mouse_file, *keyboard_file;
69
70   char mouse_toggle_key, keyboard_toggle_key;
71   unsigned char mouse_enabled, mouse_autoconnect, keyboard_enabled, keyboard_grab, keyboard_autoconnect;
72
73   unsigned int loop_cycles;
74   unsigned int mapped_low, mapped_high;
75   unsigned int custom_low, custom_high;
76 };
77
78 struct platform_config {
79   char *subsys;
80   unsigned char id;
81
82   int (*custom_read)(struct emulator_config *cfg, unsigned int addr, unsigned int *val, unsigned char type);
83   int (*custom_write)(struct emulator_config *cfg, unsigned int addr, unsigned int val, unsigned char type);
84
85   int (*register_read)(unsigned int addr, unsigned char type, unsigned int *val);
86   int (*register_write)(unsigned int addr, unsigned int value, unsigned char type);
87
88   int (*platform_initial_setup)(struct emulator_config *cfg);
89   void (*handle_reset)(struct emulator_config *cfg);
90   void (*shutdown)(struct emulator_config *cfg);
91   void (*setvar)(struct emulator_config *cfg, char *var, char *val);
92 };
93
94 unsigned int get_m68k_cpu_type(char *name);
95 struct emulator_config *load_config_file(char *filename);
96
97 int handle_mapped_read(struct emulator_config *cfg, unsigned int addr, unsigned int *val, unsigned char type);
98 int handle_mapped_write(struct emulator_config *cfg, unsigned int addr, unsigned int value, unsigned char type);
99 int get_named_mapped_item(struct emulator_config *cfg, char *name);
100 int get_mapped_item_by_address(struct emulator_config *cfg, uint32_t address);
101 unsigned int get_int(char *str);
102
103 #endif /* _CONFIG_FILE_H */