disasm/sim: changed interface, branch => br, features++
[calu.git] / 3b_sim / cpmem.cpp
1
2 //i'm sorry
3 //pervert forwarding
4 //didn't know (or was to lazy) to find another fix
5 #define __CPU__H__
6 class CCpu;
7
8 #include "cpmem.hpp"
9
10 using namespace std;
11
12 template <typename T>
13 void CPMem<T>::set(const MEMORY_ADDRESS address, const T data)
14 {
15         if(address >= MAX_MEMORY) {
16                 stringstream error;
17                 error << "memoryaddress " << address << " out of range";
18                 throw out_of_range(error.str());
19         }
20
21         MEMORY_ADDRESS temp = address;
22         auto iter = m_memory.begin();
23         while(temp > 0) {
24                 ++iter;
25                 temp--;
26         }
27
28         iter = m_memory.insert(iter, data);
29         ++iter;
30         m_memory.erase(iter);
31 }
32
33 template <typename T>
34 T CPMem<T>::get(const MEMORY_ADDRESS address) const
35 {
36         if(address >= MAX_MEMORY) {
37                 stringstream error;
38                 error << "memoryaddress " << address << " out of range";
39                 throw out_of_range(error.str());
40         }
41         return m_memory[address];
42 }
43
44 template <typename T>
45 CPMem<T>::~CPMem()
46 {
47         for(auto iter = m_memory.begin(); iter != m_memory.end(); ++iter) {
48                 delete (*iter);
49         }
50 }
51
52
53 template class CPMem<Iinstr*>;