desmume_sys/
lib.rs

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;
18// The framebuffer *may* be bigger (more pages etc.) but this is the only relevant parts of it.
19// Also yes this constant is defined is a bit weird, but I just took it from the DeSmuME source
20// (see _displayInfo.framebufferPageSize = ... in GPU.cpp).
21pub 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}