use crate::{
smallnum::{U1, U2, U3},
RegName8,
};
#[allow(clippy::upper_case_acronyms)]
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum Prefix {
None,
CB,
DD,
ED,
FD,
}
impl Prefix {
pub fn from_byte(data: u8) -> Prefix {
match data {
0xCB => Prefix::CB,
0xDD => Prefix::DD,
0xED => Prefix::ED,
0xFD => Prefix::FD,
_ => Prefix::None,
}
}
pub fn to_byte(self) -> Option<u8> {
match self {
Prefix::DD => Some(0xDD),
Prefix::FD => Some(0xFD),
Prefix::ED => Some(0xED),
Prefix::CB => Some(0xCB),
Prefix::None => None,
}
}
}
pub enum LoadOperand8 {
Indirect(u16),
Reg(RegName8),
}
pub enum BitOperand8 {
Indirect(u16),
Reg(RegName8),
}
pub enum BlockDir {
Inc,
Dec,
}
#[derive(Clone, Copy)]
pub struct Opcode {
pub byte: u8,
pub x: U2,
pub y: U3,
pub z: U3,
pub p: U2,
pub q: U1,
}
impl Opcode {
pub(crate) fn from_byte(data: u8) -> Opcode {
Opcode {
byte: data,
x: U2::from_byte(data, 6),
y: U3::from_byte(data, 3),
z: U3::from_byte(data, 0),
p: U2::from_byte(data, 4),
q: U1::from_byte(data, 3),
}
}
}