summaryrefslogtreecommitdiff
path: root/src/devices/screen/sprite_data.rs
blob: aade2c6b0a4c8b1ce5820e2bca106e985a9af181 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
pub struct SpriteData {
    data: [u8; 16],
    pointer: usize,
}

impl SpriteData {
    pub fn new() -> Self {
        Self { data: [0; 16], pointer: 0 }
    }

    pub fn push(&mut self, val: u8) {
        self.data[self.pointer] = val;
        self.pointer = (self.pointer + 1) % 16;
    }

    pub fn get_1bit_sprite(&self) -> [u8; 8] {
        let mut sprite = [0u8; 8];
        for (i, r) in sprite.iter_mut().enumerate() {
            *r = self.data[(self.pointer + i + 8) % 16]
        }
        return sprite;
    }

    pub fn get_2bit_sprite(&self) -> [u8; 16] {
        let mut sprite = [0u8; 16];
        for (i, r) in sprite.iter_mut().enumerate() {
            *r = self.data[(self.pointer + i) % 16]
        }
        return sprite;
    }
}