asmachina 0.1.0

Machine W emulator core - 16-bit architecture with full instruction set support
Documentation
use crate::error::MachineError;
use super::MachineW;

impl MachineW {
    pub(crate) fn push_to_stack(&mut self, value: u16) -> Result<(), MachineError> {
        if self.ws == 0 {
            return Err(MachineError::StackOverflow);
        }
        self.write_memory(self.ws, value)?;
        self.ws = self.ws.wrapping_sub(1);
        Ok(())
    }

    pub(crate) fn pop_from_stack(&mut self) -> Result<u16, MachineError> {
        if self.ws >= 2047 {
            return Err(MachineError::StackUnderflow);
        }
        self.ws = self.ws.wrapping_add(1);
        let value = self.read_memory(self.ws)?;
        Ok(value)
    }
}