1 /* `Deep Thought', a softcore CPU implemented on a FPGA
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>
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.
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.
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/>. */
27 void CMem<T>::set(const MEMORY_ADDRESS address, const T data)
29 if(address >= MAX_MEMORY) {
31 error << "memoryaddress " << address << " out of range";
32 throw out_of_range(error.str());
35 MEMORY_ADDRESS temp = (address & (~(BYTE_COUNT-1))) / BYTE_COUNT;
36 auto iter = m_memory.begin();
42 iter = m_memory.insert(iter, data);
48 T CMem<T>::get(const MEMORY_ADDRESS address) const
50 if(address >= MAX_MEMORY) {
52 error << "memoryaddress " << address << " out of range";
53 throw out_of_range(error.str());
55 MEMORY_ADDRESS temp = (address & (~(BYTE_COUNT-1))) / BYTE_COUNT;
56 return m_memory[temp];
60 void CMem<T>::setDirect(const MEMORY_ADDRESS address, const T data)
62 if(address >= MAX_MEMORY) {
64 error << "memoryaddress " << address << " out of range";
65 throw out_of_range(error.str());
68 MEMORY_ADDRESS temp = address;
69 auto iter = m_memory.begin();
75 iter = m_memory.insert(iter, data);
81 T CMem<T>::getDirect(const MEMORY_ADDRESS address) const
83 if(address >= MAX_MEMORY) {
85 error << "memoryaddress " << address << " out of range";
86 throw out_of_range(error.str());
88 return m_memory[address];
92 template class CMem<CDat>;