1pub use libc::{c_char, c_int, c_long, c_schar, c_short, c_uchar, c_uint, c_ulong, c_ushort};
2
3#[allow(non_camel_case_types)]
4pub type c_bool = c_int;
5
6pub type MemoryCbFnc = Option<extern "C" fn(addr: c_uint, size: c_int) -> c_bool>;
7
8#[repr(u32)]
9#[allow(clippy::upper_case_acronyms)]
10pub enum StartFrom {
11 Blank = 0,
12 SRAM = 1,
13 Savestate = 2,
14}
15
16pub const GPU_FRAMEBUFFER_NATIVE_WIDTH: usize = 256;
17pub const GPU_FRAMEBUFFER_NATIVE_HEIGHT: usize = 192;
18pub const FRAMEBUFFER_SIZE: usize = ((GPU_FRAMEBUFFER_NATIVE_WIDTH
22 * GPU_FRAMEBUFFER_NATIVE_HEIGHT)
23 + (GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT))
24 * 2;
25
26#[repr(C)]
27#[derive(Debug, Copy, Clone)]
28pub struct SimpleDate {
29 pub year: c_int,
30 pub month: c_int,
31 pub day: c_int,
32 pub hour: c_int,
33 pub minute: c_int,
34 pub second: c_int,
35 pub millisecond: c_int,
36}
37
38#[link(name = "desmume")]
39extern "C" {
40 pub fn desmume_init() -> c_int;
41
42 pub fn desmume_free();
43
44 pub fn desmume_set_language(language: u8);
45
46 pub fn desmume_open(filename: *const c_char) -> c_int;
47
48 pub fn desmume_set_savetype(type_: c_int);
49
50 pub fn desmume_pause();
51
52 pub fn desmume_resume();
53
54 pub fn desmume_reset();
55
56 pub fn desmume_running() -> c_bool;
57
58 pub fn desmume_skip_next_frame();
59
60 pub fn desmume_cycle(with_joystick: c_bool);
61
62 pub fn desmume_sdl_get_ticks() -> c_int;
63
64 pub fn desmume_has_opengl() -> c_bool;
65
66 pub fn desmume_draw_window_init(auto_pause: c_bool, use_opengl_if_possible: c_bool) -> c_int;
67
68 pub fn desmume_draw_window_input();
69
70 pub fn desmume_draw_window_frame();
71
72 pub fn desmume_draw_window_has_quit() -> c_bool;
73
74 pub fn desmume_draw_window_free();
75
76 pub fn desmume_draw_raw() -> *mut u16;
77
78 pub fn desmume_draw_raw_as_rgbx(buffer: *mut u8);
79
80 pub fn desmume_savestate_clear();
81
82 pub fn desmume_savestate_load(file_name: *const c_char) -> c_bool;
83
84 pub fn desmume_savestate_save(file_name: *const c_char) -> c_bool;
85
86 pub fn desmume_savestate_scan();
87
88 pub fn desmume_savestate_slot_load(index: c_int);
89
90 pub fn desmume_savestate_slot_save(index: c_int);
91
92 pub fn desmume_savestate_slot_exists(index: c_int) -> c_bool;
93
94 pub fn desmume_savestate_slot_date(index: c_int) -> *mut c_char;
95
96 pub fn desmume_gpu_get_layer_main_enable_state(layer_index: c_int) -> c_bool;
97
98 pub fn desmume_gpu_get_layer_sub_enable_state(layer_index: c_int) -> c_bool;
99
100 pub fn desmume_gpu_set_layer_main_enable_state(layer_index: c_int, the_state: c_bool);
101
102 pub fn desmume_gpu_set_layer_sub_enable_state(layer_index: c_int, the_state: c_bool);
103
104 pub fn desmume_volume_get() -> c_int;
105
106 pub fn desmume_volume_set(volume: c_int);
107
108 pub fn desmume_memory_read_byte(address: c_int) -> c_uchar;
109
110 pub fn desmume_memory_read_byte_signed(address: c_int) -> c_schar;
111
112 pub fn desmume_memory_read_short(address: c_int) -> c_ushort;
113
114 pub fn desmume_memory_read_short_signed(address: c_int) -> c_short;
115
116 pub fn desmume_memory_read_long(address: c_int) -> c_ulong;
117
118 pub fn desmume_memory_read_long_signed(address: c_int) -> c_long;
119
120 pub fn desmume_memory_write_byte(address: c_int, value: c_uchar);
121
122 pub fn desmume_memory_write_short(address: c_int, value: c_ushort);
123
124 pub fn desmume_memory_write_long(address: c_int, value: c_ulong);
125
126 pub fn desmume_memory_read_register(register_name: *mut c_char) -> u32;
127
128 pub fn desmume_memory_write_register(register_name: *mut c_char, value: u32);
129
130 pub fn desmume_memory_get_next_instruction() -> u32;
131
132 pub fn desmume_memory_set_next_instruction(value: u32);
133
134 pub fn desmume_memory_register_write(address: c_int, size: c_int, cb: MemoryCbFnc);
135
136 pub fn desmume_memory_register_read(address: c_int, size: c_int, cb: MemoryCbFnc);
137
138 pub fn desmume_memory_register_exec(address: c_int, size: c_int, cb: MemoryCbFnc);
139
140 pub fn desmume_screenshot(screenshot_buffer: *mut c_char);
141
142 pub fn desmume_input_joy_init() -> c_bool;
143
144 pub fn desmume_input_joy_uninit();
145
146 pub fn desmume_input_joy_number_connected() -> u16;
147
148 pub fn desmume_input_joy_get_key(index: c_int) -> u16;
149
150 pub fn desmume_input_joy_get_set_key(index: c_int) -> u16;
151
152 pub fn desmume_input_joy_set_key(index: c_int, joystick_key_index: c_int);
153
154 pub fn desmume_input_keypad_update(keys: u16);
155
156 pub fn desmume_input_keypad_get() -> u16;
157
158 pub fn desmume_input_set_touch_pos(x: u16, y: u16);
159
160 pub fn desmume_input_release_touch();
161
162 pub fn desmume_movie_is_active() -> c_bool;
163
164 pub fn desmume_movie_is_recording() -> c_bool;
165
166 pub fn desmume_movie_is_playing() -> c_bool;
167
168 pub fn desmume_movie_is_finished() -> c_bool;
169
170 pub fn desmume_movie_get_length() -> c_int;
171
172 pub fn desmume_movie_get_name() -> *mut c_char;
173
174 pub fn desmume_movie_get_rerecord_count() -> c_int;
175
176 pub fn desmume_movie_set_rerecord_count(count: c_int);
177
178 pub fn desmume_movie_get_readonly() -> c_bool;
179
180 pub fn desmume_movie_set_readonly(state: c_bool);
181
182 pub fn desmume_movie_play(file_name: *const c_char) -> *const c_char;
183
184 pub fn desmume_movie_record_simple(save_file_name: *const c_char, author_name: *const c_char);
185
186 pub fn desmume_movie_record(
187 save_file_name: *const c_char,
188 author_name: *const c_char,
189 start_from: StartFrom,
190 sram_file_name: *const c_char,
191 );
192
193 pub fn desmume_movie_record_from_date(
194 save_file_name: *const c_char,
195 author_name: *const c_char,
196 start_from: StartFrom,
197 sram_file_name: *const c_char,
198 date: SimpleDate,
199 );
200
201 pub fn desmume_movie_replay();
202
203 pub fn desmume_movie_stop();
204}