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_