pub mod condition_flag;
pub const PC_START: u16 = 0x3000;
#[derive(Debug)]
pub struct Registers {
pub r_00: u16, pub r_01: u16, pub r_02: u16, pub r_03: u16, pub r_04: u16, pub r_05: u16, pub r_06: u16, pub r_07: u16, pub r_pc: u16, pub r_cond: u16, }
impl Registers {
pub fn new() -> Registers {
Registers {
r_00: 0, r_01: 0, r_02: 0, r_03: 0, r_04: 0, r_05: 0, r_06: 0, r_07: 0, r_pc: PC_START, r_cond: 0, }
}
pub fn update(&mut self, index: u16, value: u16) {
match index {
0 => self.r_00 = value,
1 => self.r_01 = value,
2 => self.r_02 = value,
3 => self.r_03 = value,
4 => self.r_04 = value,
5 => self.r_05 = value,
6 => self.r_06 = value,
7 => self.r_07 = value,
8 => self.r_pc = value,
9 => self.r_cond = value,
_ => panic!("Inxed out of bound. "),
}
}
pub fn get(&self, index: u16) -> u16 {
match index {
0 => self.r_00,
1 => self.r_01,
2 => self.r_02,
3 => self.r_03,
4 => self.r_04,
5 => self.r_05,
6 => self.r_06,
7 => self.r_07,
8 => self.r_pc,
9 => self.r_cond,
_ => panic!("Inxed out of bound. "),
}
}
}
#[cfg(test)]
mod registers_test {
use super::*;
#[test]
fn value_of_r_pc_in_a_new_register_should_be_0x3000() {
let registers = Registers::new();
assert_eq!(0x3000, registers.r_pc);
}
}