use osiris_data::data::atomic::Word;
use osiris_data::data::composite::WordStack;
use osiris_data::data::identification::Address;
use crate::register::floating_point::Vector;
use crate::register::integral::Bank;
#[derive(Copy, Clone, Debug, Default)]
pub struct OperationState {
pub result: Word,
pub counter: Word,
pub compare: i64,
pub flag_zero: bool,
pub flag_overflow: bool,
}
impl OperationState {
pub fn reset(&mut self) {
self.result = Word::default();
self.counter = Word::default();
}
}
#[derive(Clone, Debug, Default)]
pub struct CpuState {
pub current: Address,
pub operation: OperationState,
pub stack: WordStack,
pub bank: Bank,
pub vector: Vector,
pub flag_debug: bool,
pub flag_skip: bool,
pub flag_halt: bool,
}
impl CpuState {
pub fn new() -> Self {
Self {
current: Address::default(),
operation: OperationState::default(),
stack: WordStack::default(),
bank: Bank::default(),
vector: Vector::default(),
flag_debug: false,
flag_skip: false,
flag_halt: false,
}
}
}
#[derive(Copy, Clone, Eq, PartialEq)]
pub enum TickState {
Executed,
Jumped,
Skipped,
Error,
}