uart: swap status with config half word
[calu.git] / 3b_sim / cmem.hpp
index 195fe6c1077cbda3e6e6dca735d233cab393d397..09f42937dc899b305309ba6148cd197d04739df6 100644 (file)
@@ -5,13 +5,15 @@
 #include <vector>
 #include <stdexcept>
 
+
 typedef int MEMORY_ADDRESS;
 
+
 /**
  * Name:    CMem
  * Purpose: Class representing the memory of our emulated machine
  */
-template <class T>
+template <typename T>
 class CMem
 {
 private:
@@ -19,12 +21,14 @@ private:
        const int MAX_MEMORY;
        std::vector<T> 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