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/>. */
25 //didn't know (or was to lazy) to find another fix
34 void CPMem<T>::set(const MEMORY_ADDRESS address, const T data)
36 if(address >= MAX_MEMORY) {
38 error << "memoryaddress " << address << " out of range";
39 throw out_of_range(error.str());
42 MEMORY_ADDRESS temp = (address & (~(BYTE_COUNT-1))) / BYTE_COUNT;
43 auto iter = m_memory.begin();
49 iter = m_memory.insert(iter, data);
55 T CPMem<T>::get(const MEMORY_ADDRESS address) const
57 if(address >= MAX_MEMORY) {
59 error << "memoryaddress " << address << " out of range";
60 throw out_of_range(error.str());
62 MEMORY_ADDRESS temp = (address & (~(BYTE_COUNT-1))) / BYTE_COUNT;
63 return m_memory[temp];
69 for(auto iter = m_memory.begin(); iter != m_memory.end(); ++iter) {
75 template class CPMem<Iinstr*>;