use std::collections::HashSet;
mod memory;
mod stack;
mod interrupts;
mod io;
mod addressing;
mod execution;
#[derive(Debug, Clone)]
pub struct MachineW {
pub memory: Vec<u16>,
pub ak: u16,
pub l: u16,
pub ad: u16,
pub kod: u8,
pub ws: u16,
pub is_running: bool,
pub interrupts_enabled: bool,
pub interrupt_mask: u16,
pub pending_interrupt: Option<u16>,
pub registers: [u16; 8],
pub input_buffer: Vec<u16>,
pub output_buffer: Vec<u16>,
pub breakpoints: HashSet<u16>,
pub interactive_mode: bool,
}
impl Default for MachineW {
fn default() -> Self {
Self::new()
}
}
impl MachineW {
pub fn new() -> Self {
Self {
memory: vec![0; 2048],
ak: 0,
l: 0,
ad: 0,
kod: 0,
ws: 2047, is_running: false,
interrupts_enabled: true,
interrupt_mask: 0,
pending_interrupt: None,
registers: [0; 8],
input_buffer: Vec::new(),
output_buffer: Vec::new(),
breakpoints: HashSet::new(),
interactive_mode: false,
}
}
pub fn set_interactive_mode(&mut self, enabled: bool) {
self.interactive_mode = enabled;
}
pub fn reset(&mut self) {
self.memory.fill(0);
self.ak = 0;
self.l = 0;
self.ad = 0;
self.kod = 0;
self.ws = 2047;
self.is_running = false;
self.interrupts_enabled = true;
self.interrupt_mask = 0;
self.pending_interrupt = None;
self.registers.fill(0);
self.input_buffer.clear();
self.output_buffer.clear();
self.breakpoints.clear();
}
}