summaryrefslogtreecommitdiff
path: root/inc/storage.h
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-03-05 14:17:45 -0500
committerbd <bdunahu@operationnull.com>2025-03-05 14:17:45 -0500
commitdb158de830e4fd4ab20ef5d357e24147c7a9281d (patch)
treea00ae7890a5b8eba91f81ac84d20a5ee0c5be0d6 /inc/storage.h
parentb4d1e8248400015f2fd0c4b0f04cf33dc867e9cd (diff)
constructors + method declarations for cache, dram, reponse, storage
Diffstat (limited to 'inc/storage.h')
-rw-r--r--inc/storage.h50
1 files changed, 47 insertions, 3 deletions
diff --git a/inc/storage.h b/inc/storage.h
index 8973016..bad9d10 100644
--- a/inc/storage.h
+++ b/inc/storage.h
@@ -1,15 +1,59 @@
#ifndef STORAGE_H
#define STORAGE_H
+#include "response.h"
#include <array>
#include <vector>
+enum Accessor {
+ MEMORY,
+ FETCH,
+ L1CACHE,
+};
+
class Storage
{
public:
- int **view(int base) { return nullptr; }
- virtual bool store();
+ /**
+ * Write `data` into `address`.
+ * @param the source making the request.
+ * @param the data (hexadecimal) to write.
+ * @param the address to write to.
+ * @return a status code reflecting the state of the storage level.
+ */
+ virtual Response *
+ write(Accessor accessor, signed int data, int address) = 0;
+ /**
+ * Get the data at `address`.
+ * @param the source making the request.
+ * @param the address being accessed.
+ * @return a status code reflecting the state of the storage level, and the
+ * data being returned.
+ */
+ virtual Response *read(Accessor accessor, int address) = 0;
+ /**
+ * Sidedoor view of `lines` of memory starting at `base`.
+ * @param The base line to start getting memory from.
+ * @param The amount of lines to fetch.
+ * @return A matrix of data values, where each row is a line and each column
+ * is a word.
+ */
+ virtual int **view(int base, int lines) = 0;
- std::vector<std::array<signed int, 4>> address_space;
+ protected:
+ /**
+ * The data currently stored in this level of storage.
+ */
+ std::vector<std::array<unsigned int, 4>> *data;
+ /**
+ * A pointer to the next lowest level of storage.
+ * Used in case of cache misses.
+ */
+ Storage *lower;
+ /**
+ * The number of clock cycles this level of storage takes to complete
+ * requests.
+ */
+ int delay;
};
#endif /* STORAGE_H_INCLUDED */