]> Witch of Git - jade-mouse/blob - toolchain/src/cpu.rs
Run cargo fmt
[jade-mouse] / toolchain / src / cpu.rs
1 use crate::inst::Reg;
2 use std::ops::{Index, IndexMut};
3
4 #[cfg(test)]
5 mod test;
6
7 struct RegFile {
8 values: [u8; 4],
9 }
10
11 impl Index<Reg> for RegFile {
12 type Output = u8;
13 fn index(&self, index: Reg) -> &u8 {
14 match index {
15 Reg::R0 => &self.values[0],
16 Reg::R1 => &self.values[1],
17 Reg::R2 => &self.values[2],
18 Reg::R3 => &self.values[3],
19 }
20 }
21 }
22
23 impl IndexMut<Reg> for RegFile {
24 fn index_mut(&mut self, index: Reg) -> &mut u8 {
25 match index {
26 Reg::R0 => &mut self.values[0],
27 Reg::R1 => &mut self.values[1],
28 Reg::R2 => &mut self.values[2],
29 Reg::R3 => &mut self.values[3],
30 }
31 }
32 }
33
34 pub struct Cpu {
35 init: bool,
36 pc: u16,
37 reg: RegFile,
38 memory: Vec<u8>,
39 }
40
41 impl Cpu {
42 pub fn new() -> Self {
43 Cpu {
44 init: false,
45 pc: 0,
46 reg: RegFile { values: [0; 4] },
47 memory: vec![0; 1 << 16],
48 }
49 }
50
51 pub fn mem(&self) -> &[u8] {
52 &self.memory[..]
53 }
54
55 pub fn mem_mut(&mut self) -> &mut [u8] {
56 &mut self.memory[..]
57 }
58 }