- delay_timer - keypad - sound_timers - video - util close - system_memory - registers - instructions
59 lines
1.1 KiB
Rust
59 lines
1.1 KiB
Rust
|
|
/// Registers. numbered 1-16 publicly.
|
|
/// Privately using zero base array so -1 to shift from pub to priv.
|
|
#[derive(Clone, Copy)]
|
|
pub struct Chip8Registers {
|
|
registers: [u8; 16],
|
|
i_register: u16,
|
|
pc: u16
|
|
}
|
|
|
|
impl Chip8Registers {
|
|
pub fn advance_pc(&mut self) {
|
|
self.pc += 2;
|
|
}
|
|
}
|
|
|
|
impl Default for Chip8Registers {
|
|
fn default() -> Self {
|
|
Chip8Registers {
|
|
registers: [0x00; 16],
|
|
i_register: 0x00,
|
|
pc: 0x200
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Chip8Registers {
|
|
pub fn poke_pc(&mut self, new_pc: u16) {
|
|
self.pc = new_pc
|
|
}
|
|
pub fn peek_i(&self) -> u16 {
|
|
self.i_register
|
|
}
|
|
|
|
pub fn poke_i(&mut self, new_value: u16) {
|
|
self.i_register = new_value;
|
|
}
|
|
pub fn peek(&self, register_number: u8) -> u8 {
|
|
self.registers[(register_number) as usize]
|
|
}
|
|
|
|
pub fn poke(&mut self, register_number: u8, value: u8) {
|
|
self.registers[(register_number) as usize] = value;
|
|
}
|
|
|
|
pub fn peek_pc(&self) -> u16 {
|
|
self.pc
|
|
}
|
|
|
|
pub fn set_pc(&mut self, new_pc: u16) {
|
|
self.pc = new_pc
|
|
}
|
|
}
|
|
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
|
|
} |