From 55a9ca94d64249280438da9b90186e0a4973f90d Mon Sep 17 00:00:00 2001
From: David Li
Date: Wed, 16 Dec 2015 16:15:29 -0500
Subject: Load and recognize a minimal set of instructions
---
src/memory.rs | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
(limited to 'src/memory.rs')
diff --git a/src/memory.rs b/src/memory.rs
index 854b0ea..3409ed4 100644
--- a/src/memory.rs
+++ b/src/memory.rs
@@ -1,21 +1,28 @@
use isa::{Instruction};
+use binary::{Binary};
pub struct Memory {
memory: Vec,
}
impl Memory {
- pub fn new(size: usize) -> Memory {
+ pub fn new(size: usize, binary: Binary) -> Memory {
+ let mut memory = binary.words.clone();
+ if size > memory.len() {
+ let remainder = size - memory.len();
+ memory.reserve(remainder);
+ }
Memory {
- memory: Vec::with_capacity(size),
+ memory: memory,
}
}
pub fn read_word(&self, address: usize) -> Option {
- self.memory.get(address).map(Clone::clone)
+ // memory is word-addressed but addresses are byte-addressed
+ self.memory.get(address / 4).map(Clone::clone)
}
pub fn read_instruction(&self, pc: usize) -> Option {
- self.memory.get(pc).map(Clone::clone).map(Instruction::new)
+ self.memory.get(pc / 4).map(Clone::clone).map(Instruction::new)
}
}
--
cgit v1.2.3