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
34
35
36
37
38
39
40
41
use self::{constants::DEFAULT_PROGRAM_ADDRESS, keyboard::KeyState};

mod constants;
mod cpu;
mod font;
mod instruction_set;
mod instructions;
mod keyboard;
mod memory;

pub struct Chip8 {
    memory: [u8; 4096],
    data_registers: [u8; 16],
    address_register: usize,
    keyboard: [KeyState; 16],
    stack: [usize; 32],
    stack_pointer: usize,
    screen: [[bool; 64]; 32],
    program_counter: usize,
    in_jump: bool,
    delay_timer: u8,
    sound_timer: u8,
}

impl Chip8 {
    pub fn new() -> Chip8 {
        Chip8 {
            data_registers: [0; 16],
            address_register: 0,
            keyboard: [KeyState::Released; 16],
            in_jump: false,
            delay_timer: 0,
            sound_timer: 0,
            stack: [0; 32],
            stack_pointer: 0,
            program_counter: DEFAULT_PROGRAM_ADDRESS,
            memory: [0; 4096],
            screen: [[false; 64]; 32],
        }
    }
}