mod exec;
mod read_image;
mod render_signal;
use crate::vm::{Int, Mem, Regs};
#[derive(Debug)]
pub struct Vm {
regs: Regs,
mem: Mem,
}
impl Vm {
pub const ENTRY_ADDR: Int<4> = Int::from_u32(0x100);
#[expect(clippy::new_without_default)]
#[inline]
#[must_use]
pub fn new() -> Self {
let mem = Mem::with_capacity(Mem::DEFAULT_SIZE);
Self { regs: Default::default(), mem }
}
#[inline(always)]
#[must_use]
pub fn regs(&self) -> &Regs {
&self.regs
}
#[inline(always)]
#[must_use]
pub fn regs_mut(&mut self) -> &mut Regs {
&mut self.regs
}
#[inline(always)]
#[must_use]
pub fn mem(&self) -> &Mem {
&self.mem
}
#[inline(always)]
#[must_use]
pub fn mem_mut(&mut self) -> &mut Mem {
&mut self.mem
}
#[inline]
pub fn reboot(&mut self) {
*self.regs.pc_mut() = Self::ENTRY_ADDR;
}
}