Mercurial > repos > blastem
comparison system.h @ 2544:99e59fdddbc3
Better cassette tape UX
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 09 Dec 2024 13:45:35 -0800 |
parents | f4a471730ba4 |
children | 6aa3025bbf5f |
comparison
equal
deleted
inserted
replaced
2543:9a07d299604b | 2544:99e59fdddbc3 |
---|---|
41 enum { | 41 enum { |
42 CASSETTE_PLAY, | 42 CASSETTE_PLAY, |
43 CASSETTE_RECORD, | 43 CASSETTE_RECORD, |
44 CASSETTE_STOP, | 44 CASSETTE_STOP, |
45 CASSETTE_REWIND | 45 CASSETTE_REWIND |
46 }; | |
47 | |
48 typedef void (*system_fun)(system_header *); | |
49 typedef uint16_t (*system_fun_r16)(system_header *); | |
50 typedef void (*system_str_fun)(system_header *, char *); | |
51 typedef uint8_t (*system_str_fun_r8)(system_header *, char *); | |
52 typedef void (*system_u32_fun)(system_header *, uint32_t); | |
53 typedef void (*system_u8_fun)(system_header *, uint8_t); | |
54 typedef uint8_t (*system_u8_fun_r8)(system_header *, uint8_t); | |
55 typedef void (*system_u8_u8_fun)(system_header *, uint8_t, uint8_t); | |
56 typedef void (*system_mabs_fun)(system_header *, uint8_t, uint16_t, uint16_t); | |
57 typedef void (*system_mrel_fun)(system_header *, uint8_t, int32_t, int32_t); | |
58 typedef uint8_t *(*system_ptrszt_fun_rptr8)(system_header *, size_t *); | |
59 typedef void (*system_ptr8_sizet_fun)(system_header *, uint8_t *, size_t); | |
60 | |
61 #include "arena.h" | |
62 #include "romdb.h" | |
63 typedef struct event_reader event_reader; | |
64 | |
65 struct system_header { | |
66 system_header *next_context; | |
67 system_str_fun start_context; | |
68 system_fun resume_context; | |
69 system_fun load_save; | |
70 system_fun persist_save; | |
71 system_u8_fun_r8 load_state; | |
72 system_fun request_exit; | |
73 system_fun soft_reset; | |
74 system_fun free_context; | |
75 system_fun_r16 get_open_bus_value; | |
76 system_u32_fun set_speed_percent; | |
77 system_fun inc_debug_mode; | |
78 system_u8_u8_fun gamepad_down; | |
79 system_u8_u8_fun gamepad_up; | |
80 system_u8_u8_fun mouse_down; | |
81 system_u8_u8_fun mouse_up; | |
82 system_mabs_fun mouse_motion_absolute; | |
83 system_mrel_fun mouse_motion_relative; | |
84 system_u8_fun keyboard_down; | |
85 system_u8_fun keyboard_up; | |
86 system_fun config_updated; | |
87 system_ptrszt_fun_rptr8 serialize; | |
88 system_ptr8_sizet_fun deserialize; | |
89 system_str_fun start_vgm_log; | |
90 system_fun stop_vgm_log; | |
91 system_u8_fun toggle_debug_view; | |
92 system_u8_fun cassette_action; | |
93 rom_info info; | |
94 arena *arena; | |
95 char *next_rom; | |
96 char *save_dir; | |
97 char *paste_buffer; | |
98 uint32_t paste_cur_char; | |
99 int enter_debugger_frames; | |
100 uint8_t enter_debugger; | |
101 uint8_t should_exit; | |
102 uint8_t save_state; | |
103 uint8_t delayed_load_slot; | |
104 uint8_t has_keyboard; | |
105 uint8_t vgm_logging; | |
106 uint8_t force_release; | |
107 debugger_type debugger_type; | |
108 system_type type; | |
109 }; | 46 }; |
110 | 47 |
111 typedef enum { | 48 typedef enum { |
112 MEDIA_CART, | 49 MEDIA_CART, |
113 MEDIA_CDROM | 50 MEDIA_CDROM |
162 media_type type; | 99 media_type type; |
163 uint8_t in_fake_pregap; | 100 uint8_t in_fake_pregap; |
164 uint8_t byte_storage[3]; | 101 uint8_t byte_storage[3]; |
165 }; | 102 }; |
166 | 103 |
104 typedef void (*system_fun)(system_header *); | |
105 typedef uint16_t (*system_fun_r16)(system_header *); | |
106 typedef void (*system_str_fun)(system_header *, char *); | |
107 typedef uint8_t (*system_str_fun_r8)(system_header *, char *); | |
108 typedef void (*system_u32_fun)(system_header *, uint32_t); | |
109 typedef void (*system_u8_fun)(system_header *, uint8_t); | |
110 typedef uint8_t (*system_u8_fun_r8)(system_header *, uint8_t); | |
111 typedef void (*system_u8_u8_fun)(system_header *, uint8_t, uint8_t); | |
112 typedef void (*system_mabs_fun)(system_header *, uint8_t, uint16_t, uint16_t); | |
113 typedef void (*system_mrel_fun)(system_header *, uint8_t, int32_t, int32_t); | |
114 typedef uint8_t *(*system_ptrszt_fun_rptr8)(system_header *, size_t *); | |
115 typedef void (*system_ptr8_sizet_fun)(system_header *, uint8_t *, size_t); | |
116 typedef void (*system_media_fun)(system_header *, system_media *); | |
117 | |
118 #include "arena.h" | |
119 #include "romdb.h" | |
120 typedef struct event_reader event_reader; | |
121 | |
122 struct system_header { | |
123 system_header *next_context; | |
124 system_str_fun start_context; | |
125 system_fun resume_context; | |
126 system_fun load_save; | |
127 system_fun persist_save; | |
128 system_u8_fun_r8 load_state; | |
129 system_fun request_exit; | |
130 system_fun soft_reset; | |
131 system_fun free_context; | |
132 system_fun_r16 get_open_bus_value; | |
133 system_u32_fun set_speed_percent; | |
134 system_fun inc_debug_mode; | |
135 system_u8_u8_fun gamepad_down; | |
136 system_u8_u8_fun gamepad_up; | |
137 system_u8_u8_fun mouse_down; | |
138 system_u8_u8_fun mouse_up; | |
139 system_mabs_fun mouse_motion_absolute; | |
140 system_mrel_fun mouse_motion_relative; | |
141 system_u8_fun keyboard_down; | |
142 system_u8_fun keyboard_up; | |
143 system_fun config_updated; | |
144 system_ptrszt_fun_rptr8 serialize; | |
145 system_ptr8_sizet_fun deserialize; | |
146 system_str_fun start_vgm_log; | |
147 system_fun stop_vgm_log; | |
148 system_u8_fun toggle_debug_view; | |
149 system_u8_fun cassette_action; | |
150 system_media_fun lockon_change; | |
151 rom_info info; | |
152 arena *arena; | |
153 char *next_rom; | |
154 char *save_dir; | |
155 char *paste_buffer; | |
156 uint32_t paste_cur_char; | |
157 int enter_debugger_frames; | |
158 uint8_t enter_debugger; | |
159 uint8_t should_exit; | |
160 uint8_t save_state; | |
161 uint8_t delayed_load_slot; | |
162 uint8_t has_keyboard; | |
163 uint8_t vgm_logging; | |
164 uint8_t force_release; | |
165 debugger_type debugger_type; | |
166 system_type type; | |
167 }; | |
168 | |
167 #define OPT_ADDRESS_LOG (1U << 31U) | 169 #define OPT_ADDRESS_LOG (1U << 31U) |
168 | 170 |
169 system_type detect_system_type(system_media *media); | 171 system_type detect_system_type(system_media *media); |
170 system_header *alloc_config_system(system_type stype, system_media *media, uint32_t opts, uint8_t force_region); | 172 system_header *alloc_config_system(system_type stype, system_media *media, uint32_t opts, uint8_t force_region); |
171 system_header *alloc_config_player(system_type stype, event_reader *reader); | 173 system_header *alloc_config_player(system_type stype, event_reader *reader); |