/src/video/mem.rs
pub const ROWS: usize = 30;
pub const COLS: usize = 40;
pub const CHAR_RAM_SIZE: usize = ROWS * COLS;

pub struct VideoRam {
    chars: [u8; CHAR_RAM_SIZE],
}

impl VideoRam {
    pub const fn new() -> VideoRam {
        VideoRam {
            chars: [0; CHAR_RAM_SIZE],
        }
    }

    pub fn row_address(&self, y: usize) -> *const u8 {
        &self.chars[y * COLS] as *const u8
    }

    pub fn set_cell(&mut self, x: usize, y: usize, c: u8) {
        self.chars[x + y * COLS] = c;
    }

    pub fn get_cell(&self, x: usize, y: usize) -> u8 {
        self.chars[x + y * COLS]
    }
}

#[link_section = ".kgbss"]
pub static mut VIDEO_RAM: VideoRam = VideoRam::new();