main system.h
 1#ifndef SYSTEM_H_
 2#define SYSTEM_H_
 3#include <stddef.h>
 4#include <stdint.h>
 5
 6typedef struct system_header system_header;
 7typedef struct system_media system_media;
 8
 9typedef enum {
10	SYSTEM_UNKNOWN,
11	SYSTEM_GENESIS,
12	SYSTEM_SMS
13} system_type;
14
15typedef enum {
16	DEBUGGER_NATIVE,
17	DEBUGGER_GDB
18} debugger_type;
19
20typedef void (*system_fun)(system_header *);
21typedef uint16_t (*system_fun_r16)(system_header *);
22typedef void (*system_str_fun)(system_header *, char *);
23typedef uint8_t (*system_str_fun_r8)(system_header *, char *);
24typedef void (*system_u32_fun)(system_header *, uint32_t);
25typedef void (*system_u8_fun)(system_header *, uint8_t);
26typedef uint8_t (*system_u8_fun_r8)(system_header *, uint8_t);
27typedef void (*system_u8_u8_fun)(system_header *, uint8_t, uint8_t);
28typedef void (*system_mabs_fun)(system_header *, uint8_t, uint16_t, uint16_t);
29typedef void (*system_mrel_fun)(system_header *, uint8_t, int32_t, int32_t);
30typedef uint8_t *(*system_ptrszt_fun_rptr8)(system_header *, size_t *);
31typedef void (*system_ptr8_sizet_fun)(system_header *, uint8_t *, size_t);
32
33#include "arena.h"
34#include "romdb.h"
35
36struct system_header {
37	system_header           *next_context;
38	system_str_fun          start_context;
39	system_fun              resume_context;
40	system_fun              load_save;
41	system_fun              persist_save;
42	system_u8_fun_r8        load_state;
43	system_fun              request_exit;
44	system_fun              soft_reset;
45	system_fun              free_context;
46	system_fun_r16          get_open_bus_value;
47	system_u32_fun          set_speed_percent;
48	system_fun              inc_debug_mode;
49	system_u8_u8_fun        gamepad_down;
50	system_u8_u8_fun        gamepad_up;
51	system_u8_u8_fun        mouse_down;
52	system_u8_u8_fun        mouse_up;
53	system_mabs_fun         mouse_motion_absolute;
54	system_mrel_fun         mouse_motion_relative;
55	system_u8_fun           keyboard_down;
56	system_u8_fun           keyboard_up;
57	system_fun              config_updated;
58	system_ptrszt_fun_rptr8 serialize;
59	system_ptr8_sizet_fun   deserialize;
60	rom_info                info;
61	arena                   *arena;
62	char                    *next_rom;
63	char                    *save_dir;
64	uint8_t                 enter_debugger;
65	uint8_t                 should_exit;
66	uint8_t                 save_state;
67	uint8_t                 delayed_load_slot;
68	uint8_t                 has_keyboard;
69	debugger_type           debugger_type;
70	system_type             type;
71};
72
73struct system_media {
74	void         *buffer;
75	char         *dir;
76	char         *name;
77	char         *extension;
78	system_media *chain;
79	uint32_t     size;
80};
81
82#define OPT_ADDRESS_LOG (1U << 31U)
83
84system_type detect_system_type(system_media *media);
85system_header *alloc_config_system(system_type stype, system_media *media, uint32_t opts, uint8_t force_region);
86
87#endif //SYSTEM_H_