#[derive(Clone, Copy, PartialEq, Eq, Debug, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Registers {
pub pc: u16,
pub sp: u16,
pub af: u16,
pub bc: u16,
pub de: u16,
pub hl: u16,
pub af_alt: u16,
pub bc_alt: u16,
pub de_alt: u16,
pub hl_alt: u16,
pub ix: u16,
pub iy: u16,
pub wz: u16,
pub i: u8,
pub r: u8,
pub interrupt_mode: InterruptMode,
pub iff1: bool,
pub iff2: bool,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum UndocumentedFlags {
#[default]
Combined,
Accumulator,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum InterruptMode {
#[default]
Mode0,
Mode1,
Mode2,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum MachineCycle {
#[default]
M1,
M2,
M3,
M4,
M5,
IndexDisplacement,
IndexAddition,
}
impl MachineCycle {
pub(crate) fn number(self) -> u8 {
match self {
Self::M1 => 1,
Self::M2 => 2,
Self::M3 => 3,
Self::M4 => 4,
Self::M5 => 5,
Self::IndexDisplacement => 6,
Self::IndexAddition => 7,
}
}
pub(crate) fn from_number(number: u8) -> Self {
match number {
2 => Self::M2,
3 => Self::M3,
4 => Self::M4,
5 => Self::M5,
6 => Self::IndexDisplacement,
7 => Self::IndexAddition,
_ => Self::M1,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ClockEdge {
#[default]
Rising,
Falling,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum Z80nCommand {
NextRegWrite,
MulDe,
AddHlA,
AddDeA,
AddBcA,
SwapNibbleA,
PixelDown,
SetAE,
PixelAddress,
MirrorA,
LdPirx,
AddHlImmediate,
AddDeImmediate,
AddBcImmediate,
LdirScale,
BslaDeB,
BsraDeB,
BsrlDeB,
BsrfDeB,
BrlcDeB,
JpC,
NmiAcknowledgeLow,
NmiAcknowledgeHigh,
ReturnFromNmiLow,
ReturnFromNmiHigh,
}