]> Witch of Git - jade-mouse/blob - toolchain/src/cpu.rs
Start adding framework for encoding and decoding
[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 init: bool,
33 pc: u16,
34 reg: RegFile,
35 memory: Vec<u8>,
36 }
37
38 impl Cpu {
39 pub fn new() -> Self {
40 Cpu {
41 init: false,
42 pc: 0,
43 reg: RegFile { values: [0; 4] },
44 memory: vec![0; 1 << 16],
45 }
46 }
47
48 pub fn mem(&self) -> &[u8] {
49 &self.memory[..]
50 }
51
52 pub fn mem_mut(&mut self) -> &mut [u8] {
53 &mut self.memory[..]
54 }
55 }