copyleft: gplv3 added and set repo to public
[calu.git] / 3b_sim / cpmem.hpp
1 /*   `Deep Thought', a softcore CPU implemented on a FPGA
2
3     Copyright (C) 2010 Markus Hofstaetter <markus.manrow@gmx.at>
4     Copyright (C) 2010 Martin Perner <e0725782@student.tuwien.ac.at>
5     Copyright (C) 2010 Stefan Rebernig <stefan.rebernig@gmail.com>
6     Copyright (C) 2010 Manfred Schwarz <e0725898@student.tuwien.ac.at>
7     Copyright (C) 2010 Bernhard Urban <lewurm@gmail.com>
8
9     This program is free software: you can redistribute it and/or modify
10     it under the terms of the GNU General Public License as published by
11     the Free Software Foundation, either version 3 of the License, or
12     (at your option) any later version.
13
14     This program is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17     GNU General Public License for more details.
18
19     You should have received a copy of the GNU General Public License
20     along with this program.  If not, see <http://www.gnu.org/licenses/>. */
21
22 #ifndef __CPMEM_H__
23 #define __CPMEM_H__
24
25 template <typename T>
26 class CPMem;
27
28 #include "cdat.hpp"
29 #include <vector>
30 #include <stdexcept>
31 #include <stdlib.h>
32
33 #include "Iinstr.hpp"
34
35 typedef int MEMORY_ADDRESS;
36
37 /**
38  * Name:    CMem
39  * Purpose: Class representing the memory of our emulated machine
40  */
41 template <typename T>
42 class CPMem
43 {
44 private:
45         //MAX_MEMORY-1 zugreifbare Speicherzellen aus BYTE_COUNT Bytes
46         //adressierung erfolgt aber byteweise
47         const int MAX_MEMORY;
48         std::vector<T> m_memory;
49 public:
50         //wert aus referenz auslesen und in vetor speichern (index zugriff!)
51         //address 0 ist ProgramCounter
52         void set(const MEMORY_ADDRESS address, const T data);
53         //retuniert referenz eines cdat objekts mit dem Wert von address
54         T get(const MEMORY_ADDRESS address) const;
55         T getByte(const MEMORY_ADDRESS address) const;
56         CPMem(int size) : MAX_MEMORY(size), m_memory(size, (T)NULL) {};
57         ~CPMem();
58 };
59
60 #endif