diff --git a/build.rs b/build.rs index c478485..44fd098 100644 --- a/build.rs +++ b/build.rs @@ -23,6 +23,9 @@ fn main() -> Result<(), Box> { .define("VB_LITTLE_ENDIAN", None) .define("VB_SIGNED_PROPAGATE", None) .define("VB_DIV_GENERIC", None) + .define("VB_DIRECT_EXECUTE", "on_execute") + .define("VB_DIRECT_READ", "on_read") + .define("VB_DIRECT_WRITE", "on_write") .file(Path::new("shrooms-vb-core/core/vb.c")) .compile("vb"); diff --git a/src/emulator/shrooms_vb_core.rs b/src/emulator/shrooms_vb_core.rs index c6952cd..b27b9d8 100644 --- a/src/emulator/shrooms_vb_core.rs +++ b/src/emulator/shrooms_vb_core.rs @@ -178,6 +178,7 @@ extern "C" fn on_frame(sim: *mut VB) -> c_int { 1 } +#[no_mangle] extern "C" fn on_execute(sim: *mut VB, address: u32, _code: *const u16, _length: c_int) -> c_int { // SAFETY: the *mut VB owns its userdata. // There is no way for the userdata to be null or otherwise invalid. @@ -201,6 +202,7 @@ extern "C" fn on_execute(sim: *mut VB, address: u32, _code: *const u16, _length: } } +#[no_mangle] extern "C" fn on_read( sim: *mut VB, address: u32, @@ -226,6 +228,7 @@ extern "C" fn on_read( 0 } +#[no_mangle] extern "C" fn on_write( sim: *mut VB, address: u32,