use crate::zx::constants::{ATTR_BASE_REL, ATTR_COLS, ATTR_MAX_REL, CANVAS_HEIGHT};
pub fn bitmap_line_addr(line: usize) -> u16 {
assert!(line < CANVAS_HEIGHT);
(0x4000 | (line << 5) & 0x1800 | (line << 8) & 0x0700 | (line << 2) & 0x00E0) as u16
}
pub fn bitmap_line_rel(addr: u16) -> usize {
assert!(addr < ATTR_BASE_REL);
let [l, h] = addr.to_le_bytes();
let y = (h & 0x07) | ((l >> 2) & 0x38) | ((h << 3) & 0xC0);
y as usize
}
pub fn bitmap_col_rel(addr: u16) -> usize {
assert!(addr < ATTR_BASE_REL);
let [l, _] = addr.to_le_bytes();
(l & 0x1F) as usize
}
pub fn attr_row_rel(addr: u16) -> usize {
assert!((ATTR_BASE_REL..=ATTR_MAX_REL).contains(&addr));
((addr - ATTR_BASE_REL) / ATTR_COLS as u16) as usize
}
pub fn attr_col_rel(addr: u16) -> usize {
assert!((ATTR_BASE_REL..=ATTR_MAX_REL).contains(&addr));
((addr - ATTR_BASE_REL) % ATTR_COLS as u16) as usize
}