X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=3b_sim%2Fcmem.hpp;h=b0f4611ac61399017717653c1da9beeb077c4965;hb=HEAD;hp=195fe6c1077cbda3e6e6dca735d233cab393d397;hpb=31d88f201bf427d70924b9737ecdb6e0611939d3;p=calu.git diff --git a/3b_sim/cmem.hpp b/3b_sim/cmem.hpp index 195fe6c..b0f4611 100644 --- a/3b_sim/cmem.hpp +++ b/3b_sim/cmem.hpp @@ -1,3 +1,24 @@ +/* `Deep Thought', a softcore CPU implemented on a FPGA + + Copyright (C) 2010 Markus Hofstaetter + Copyright (C) 2010 Martin Perner + Copyright (C) 2010 Stefan Rebernig + Copyright (C) 2010 Manfred Schwarz + Copyright (C) 2010 Bernhard Urban + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + #ifndef __CMEM_H__ #define __CMEM_H__ @@ -5,13 +26,15 @@ #include #include + typedef int MEMORY_ADDRESS; + /** * Name: CMem * Purpose: Class representing the memory of our emulated machine */ -template +template class CMem { private: @@ -19,12 +42,14 @@ private: const int MAX_MEMORY; std::vector m_memory; public: - //wert aus referenz auslesen und in vetor speichern (index zugriff!) - //address 0 ist ProgramCounter - void set(const MEMORY_ADDRESS address, const T& data); - //retuniert referenz eines cdat objekts mit dem Wert von address - void get(const MEMORY_ADDRESS address, T& data) const; - CMem(int size) : MAX_MEMORY(size), m_memory(size) {}; + /* aligns to BIT_LEN words, aka. does calc direct memorycell from address */ + void set(const MEMORY_ADDRESS address, const T data); + T get(const MEMORY_ADDRESS address) const; + + /* doesn't align, user has to do */ + void setDirect(const MEMORY_ADDRESS address, const T data); + T getDirect(const MEMORY_ADDRESS address) const; + CMem(int size) : MAX_MEMORY(size), m_memory(size,(T)NULL) {}; }; #endif