diff options
author | Siddarth Suresh <155843085+SiddarthSuresh98@users.noreply.github.com> | 2025-03-08 21:07:09 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-08 21:07:09 -0500 |
commit | 212a47482c5c037720aef726fcb2b7bb3a3acd67 (patch) | |
tree | e76871ceee74d36a660d5347c694493411426a7b /src/storage/storage.cc | |
parent | f8ed20ddbcb602ca0c5eea57fb78fb42d008f797 (diff) | |
parent | 5a24c4b2012cd2d5fe954deb3b973cb6125e860d (diff) |
Merge pull request #14 from bdunahu/bdunahuer
Storage.view + Dram.store methods, tests
Diffstat (limited to 'src/storage/storage.cc')
-rw-r--r-- | src/storage/storage.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/storage/storage.cc b/src/storage/storage.cc new file mode 100644 index 0000000..e3067a2 --- /dev/null +++ b/src/storage/storage.cc @@ -0,0 +1,32 @@ +#include "storage.h" +#include "definitions.h" +#include <algorithm> + +std::vector<std::array<signed int, LINE_SIZE>> +Storage::view(int base, int lines) +{ + base = (base / LINE_SIZE) * LINE_SIZE; + std::vector<std::array<signed int, LINE_SIZE>> ret(lines + 1); + std::copy( + this->data->begin() + base, this->data->begin() + base + lines, + ret.begin()); + return ret; +} + +void Storage::do_write(signed data, int address) +{ + int line = address / LINE_SIZE; + int word = address % LINE_SIZE; + + this->data->at(line).at(word) = data; +} + +void Storage::resolve() +{ + if (this->wait_time == 0) { + this->requester = IDLE; + this->wait_time = delay; + } else if (this->requester != IDLE) { + --this->wait_time; + } +} |