const ICW1_CONST: u8 = 1 << 4;
const OCW3_CONST: u8 = 1 << 3;
bitflags::bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ICW1: u8 {
const IC4 = 1 | ICW1_CONST;
const SNGL = 1 << 1 | ICW1_CONST;
const ADI = 1 << 2 | ICW1_CONST;
const LTIM = 1 << 3 | ICW1_CONST;
const INTERRUPT_VECTOR_ADDRESS = 5;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ICW2: u8 {
const INTERRUPT_VECTOR_ADDRESS_8085 = 0b111;
const INTERRUPT_VECTOR_ADDRESS_8086_8088 = 0b11111000;
}
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ICW3_MASTER: u8 {
const SLAVE0 = 1;
const SLAVE1 = 1 << 1;
const SLAVE2 = 1 << 2;
const SLAVE3 = 1 << 3;
const SLAVE4 = 1 << 4;
const SLAVE5 = 1 << 5;
const SLAVE6 = 1 << 6;
const SLAVE7 = 1 << 7;
}
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ICW3_SLAVE: u8 {
const MASTER0 = 0;
const MASTER1 = 1;
const MASTER2 = 2;
const MASTER3 = 3;
const MASTER4 = 4;
const MASTER5 = 5;
const MASTER6 = 6;
const MASTER7 = 7;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ICW4: u8 {
const MPM = 1;
const AEOI = 1 << 1;
const NON_BUFFERED_MODE = 0 << 2;
const BUFFERED_MODE_SLAVE = 2 << 2;
const BUFFERED_MODE_MASTER = 3 << 2;
const SFNM = 1 << 4;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct OCW1: u8 {
const MASK_IRQ_0 = 1;
const MASK_IRQ_1 = 1 << 1;
const MASK_IRQ_2 = 1 << 2;
const MASK_IRQ_3 = 1 << 3;
const MASK_IRQ_4 = 1 << 4;
const MASK_IRQ_5 = 1 << 5;
const MASK_IRQ_6 = 1 << 6;
const MASK_IRQ_7 = 1 << 7;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct OCW2: u8 {
const LEVEL = 0;
const NON_SPECIFIC_EOI_COMMAND = 0b001 << 5;
const SPECIFIC_EOI_COMMAND = 0b011 << 5;
const ROTATE_ON_NON_SPECIFIC_EOI_COMMAND = 0b101 << 5;
const ROTATE_IN_AUTOMATIC_EOI_MODE_SET = 0b100 << 5;
const ROTATE_IN_AUTOMATIC_EOI_MODE_CLEAR = 0x000 << 5;
const ROTATE_ON_SPECIFIC_EOI_COMMAND = 0b111 << 5;
const SET_PRIORITY_COMMAND = 0b110 << 5;
const NO_OPERATION = 0b010 << 5;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct OCW3: u8 {
const READ_REG_IRR = 0b10 | OCW3_CONST;
const READ_REG_ISR = 0b11 | OCW3_CONST;
const POLL = 1 << 2 | OCW3_CONST;
const RESET_SPECIAL_MASK = 0b10 << 5 | OCW3_CONST;
const SET_SPECIAL_MASK = 0b10 << 5 | OCW3_CONST;
}
}