monistode_emulator/
common.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use monistode_binutils::Executable;

pub trait Processor<Byte, Pc, IOPort, IOItem> {
    fn next(&mut self) -> Byte;
    fn at_pc_plus(&self, offset: u16) -> Byte;
    fn pc(&self) -> Pc;
    fn run_command<T, U>(&mut self, output: T, input: U) -> ProcessorContinue
    where
        T: Fn(IOPort, IOItem),
        U: Fn(IOPort) -> IOItem;
    fn load_executable(&mut self, executable: &Executable) -> Result<(), String>;
}

pub enum ProcessorContinue {
    KeepRunning,
    Error,
    Halt,
}