Let sims link/unlink/reset independently

This commit is contained in:
2024-11-15 21:50:21 -05:00
parent 8f62ec1c52
commit 09e39b37f5
3 changed files with 149 additions and 52 deletions
+15
View File
@@ -58,6 +58,8 @@ type OnFrame = extern "C" fn(sim: *mut VB) -> c_int;
#[link(name = "vb")]
extern "C" {
#[link_name = "vbEmulate"]
fn vb_emulate(sim: *mut VB, cycles: *mut u32) -> c_int;
#[link_name = "vbEmulateEx"]
fn vb_emulate_ex(sims: *mut *mut VB, count: c_uint, cycles: *mut u32) -> c_int;
#[link_name = "vbGetCartROM"]
@@ -202,6 +204,19 @@ impl Sim {
unsafe { vb_set_peer(self.sim, peer.sim) };
}
pub fn unlink(&mut self) {
let peer = unsafe { vb_get_peer(self.sim) };
if !peer.is_null() {
unsafe { vb_set_peer(peer, ptr::null_mut()) };
unsafe { vb_set_peer(self.sim, ptr::null_mut()) };
}
}
pub fn emulate(&mut self) {
let mut cycles = 20_000_000;
unsafe { vb_emulate(self.sim, &mut cycles) };
}
pub fn emulate_many(sims: &mut [Sim]) {
let mut cycles = 20_000_000;
let count = sims.len() as c_uint;