Read actual register values
This commit is contained in:
@@ -55,6 +55,13 @@ bitflags! {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub enum VBRegister {
|
||||
Program(u32),
|
||||
System(u32),
|
||||
PC,
|
||||
}
|
||||
|
||||
type OnFrame = extern "C" fn(sim: *mut VB) -> c_int;
|
||||
|
||||
#[link(name = "vb")]
|
||||
@@ -77,6 +84,10 @@ extern "C" {
|
||||
right_stride_x: c_int,
|
||||
right_stride_y: c_int,
|
||||
);
|
||||
#[link_name = "vbGetProgramCounter"]
|
||||
fn vb_get_program_counter(sim: *mut VB) -> u32;
|
||||
#[link_name = "vbGetProgramRegister"]
|
||||
fn vb_get_program_register(sim: *mut VB, index: c_uint) -> i32;
|
||||
#[link_name = "vbGetSamples"]
|
||||
fn vb_get_samples(
|
||||
sim: *mut VB,
|
||||
@@ -84,6 +95,8 @@ extern "C" {
|
||||
capacity: *mut c_uint,
|
||||
position: *mut c_uint,
|
||||
) -> *mut c_void;
|
||||
#[link_name = "vbGetSystemRegister"]
|
||||
fn vb_get_system_register(sim: *mut VB, index: c_uint) -> i32;
|
||||
#[link_name = "vbGetUserData"]
|
||||
fn vb_get_user_data(sim: *mut VB) -> *mut c_void;
|
||||
#[link_name = "vbInit"]
|
||||
@@ -291,6 +304,16 @@ impl Sim {
|
||||
pub fn set_keys(&mut self, keys: VBKey) {
|
||||
unsafe { vb_set_keys(self.sim, keys.bits()) };
|
||||
}
|
||||
|
||||
pub fn read_register(&mut self, register: VBRegister) -> u32 {
|
||||
match register {
|
||||
VBRegister::Program(index) => unsafe {
|
||||
vb_get_program_register(self.sim, index) as u32
|
||||
},
|
||||
VBRegister::System(index) => unsafe { vb_get_system_register(self.sim, index) as u32 },
|
||||
VBRegister::PC => unsafe { vb_get_program_counter(self.sim) },
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for Sim {
|
||||
|
||||
Reference in New Issue
Block a user