Read actual register values

This commit is contained in:
2025-01-01 21:48:33 -05:00
parent 8707a5196b
commit 82c3104ab9
4 changed files with 69 additions and 14 deletions
+24 -11
View File
@@ -1,5 +1,7 @@
use crate::emulator::VBRegister;
pub struct RegisterInfo {
index: usize,
dwarf: u32,
name: &'static str,
set: &'static str,
alt_name: Option<&'static str>,
@@ -14,48 +16,59 @@ impl RegisterInfo {
}
string.push_str(&format!(
";bitsize:32;offset:{};encoding:uint;format:hex;set:{};dwarf:{}",
self.index * 4,
self.dwarf * 4,
self.set,
self.index
self.dwarf
));
if let Some(generic) = self.generic {
string.push_str(&format!(";generic:{}", generic));
}
string
}
pub fn to_vb_register(&self) -> VBRegister {
match self.dwarf {
0..32 => VBRegister::Program(self.dwarf),
32..40 => VBRegister::System(self.dwarf - 32),
40..42 => VBRegister::System(self.dwarf - 16),
42..45 => VBRegister::System(self.dwarf - 13),
45 => VBRegister::PC,
other => panic!("unexpected DWARF register {other}"),
}
}
}
macro_rules! register {
($set:expr, $index:expr, $name:expr) => {
($set:expr, $dwarf:expr, $name:expr) => {
RegisterInfo {
index: $index,
dwarf: $dwarf,
name: $name,
set: $set,
alt_name: None,
generic: None,
}
};
($set:expr, $index:expr, $name:expr, alt: $alt:expr) => {
($set:expr, $dwarf:expr, $name:expr, alt: $alt:expr) => {
RegisterInfo {
index: $index,
dwarf: $dwarf,
name: $name,
set: $set,
alt_name: Some($alt),
generic: None,
}
};
($set:expr, $index:expr, $name:expr, generic: $generic:expr) => {
($set:expr, $dwarf:expr, $name:expr, generic: $generic:expr) => {
RegisterInfo {
index: $index,
dwarf: $dwarf,
name: $name,
set: $set,
alt_name: None,
generic: Some($generic),
}
};
($set:expr, $index:expr, $name:expr, alt: $alt:expr, generic: $generic:expr) => {
($set:expr, $dwarf:expr, $name:expr, alt: $alt:expr, generic: $generic:expr) => {
RegisterInfo {
index: $index,
dwarf: $dwarf,
name: $name,
set: $set,
alt_name: Some($alt),