summaryrefslogtreecommitdiff
path: root/src/dram.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/dram.cc')
-rw-r--r--src/dram.cc27
1 files changed, 6 insertions, 21 deletions
diff --git a/src/dram.cc b/src/dram.cc
index 18c1a3e..264cadb 100644
--- a/src/dram.cc
+++ b/src/dram.cc
@@ -55,33 +55,18 @@ int
Dram::process(void *id, int address, std::function<void(int line, int word)> request_handler)
{
int r;
- r = this->is_access_cleared(id);
- if (r) {
- int line, word;
- get_memory_index(address, line, word);
- request_handler(line, word);
- }
- return r;
-}
-int
-Dram::is_access_cleared(void *id)
-{
- /* Do this first--then process the first cycle immediately. */
if (id == nullptr)
throw std::invalid_argument("Accessor cannot be nullptr.");
if (this->current_request == nullptr)
this->current_request = id;
- if (this->current_request == id) {
- if (this->wait_time == 0) {
- this->current_request = nullptr;
- this->wait_time = delay;
- return 1;
- } else {
- --this->wait_time;
- }
+ r = (this->current_request == id) ? this->is_access_cleared() : 0;
+ if (r) {
+ int line, word;
+ get_memory_index(address, line, word);
+ request_handler(line, word);
}
- return 0;
+ return r;
}
void