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