698006a2fa7142b2af890eec2b04e3cf7cf5a3ca
[calu.git] / 3b_sim / cpmem.hpp
1 #ifndef __CPMEM_H__
2 #define __CPMEM_H__
3
4 template <typename T>
5 class CPMem;
6
7 #include "cdat.hpp"
8 #include <vector>
9 #include <stdexcept>
10 #include <stdlib.h>
11
12 #include "Iinstr.hpp"
13
14 typedef int MEMORY_ADDRESS;
15
16 /**
17  * Name:    CMem
18  * Purpose: Class representing the memory of our emulated machine
19  */
20 template <typename T>
21 class CPMem
22 {
23 private:
24         //MAX_MEMORY-1 zugreifbare Speicherzellen aus BYTE_COUNT Bytes
25         //adressierung erfolgt aber byteweise
26         const int MAX_MEMORY;
27         std::vector<T> m_memory;
28 public:
29         //wert aus referenz auslesen und in vetor speichern (index zugriff!)
30         //address 0 ist ProgramCounter
31         void set(const MEMORY_ADDRESS address, const T data);
32         //retuniert referenz eines cdat objekts mit dem Wert von address
33         T get(const MEMORY_ADDRESS address) const;
34         T getByte(const MEMORY_ADDRESS address) const;
35         CPMem(int size) : MAX_MEMORY(size), m_memory(size, (T)NULL) {};
36         ~CPMem();
37 };
38
39 #endif