use crate::*;

pub trait DeviceBus {
    fn read_u8(&mut self, port: u8) -> u8;

    fn write_u8(&mut self, value: u8, port: u8) -> Option<Signal>;

    fn read_u16(&mut self, port: u8) -> u16 {
        let high = self.read_u8(port);
        let low = self.read_u8(port.wrapping_add(1));
        u16::from_be_bytes([high, low])
    }

    fn write_u16(&mut self, value: u16, port: u8) -> Option<Signal> {
        let [h, l] = value.to_be_bytes();
        self.write_u8(h, port);
        self.write_u8(l, port.wrapping_add(1))
    }
}