aboutsummaryrefslogtreecommitdiff
path: root/components/ram.py
diff options
context:
space:
mode:
authorLoic GUEGAN <loic.guegan@yahoo.fr>2018-08-31 18:42:12 +0200
committerLoic GUEGAN <loic.guegan@yahoo.fr>2018-08-31 18:42:12 +0200
commit27268a12532a3f332bb06ff71c947e15755734c8 (patch)
tree59e44879f685423eeebf6710e7673650a2c7de6c /components/ram.py
parenta31c5667846b291056f29d3ef7bdf0f4bf175e10 (diff)
Add source code
Diffstat (limited to 'components/ram.py')
-rw-r--r--components/ram.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/components/ram.py b/components/ram.py
new file mode 100644
index 0000000..c6d05bb
--- /dev/null
+++ b/components/ram.py
@@ -0,0 +1,66 @@
+from components.ijvm import ijvm
+
+class Ram:
+
+ def __init__(self,components,size):
+ self.data=dict()
+ self.lastAddr=size-1
+ self.c=components
+
+ def loadRamFile(self,filepath):
+ data=dict()
+ addr=0
+ f=open(filepath,"r")
+ for line in f.readlines():
+ line=line.rstrip() # remove \n
+ if line in ijvm:
+ data[addr]=int(ijvm[line])
+ else:
+ data[addr]=int(line,0)
+ addr+=1
+ f.close()
+ self.data=data
+
+ def write(self):
+ addr=self.c["MAR"]
+ if addr>self.lastAddr:
+ raise ValueError("You get out of the ram by trying to set a value at address {}, max address is {}".format(addr,self.lastAddr))
+ self.data[addr]=self.c["MDR"]
+
+ def read(self):
+ addr=self.c["MAR"]
+ value=None
+ try:
+ value=self.data[addr]
+ except:
+ if addr>self.lastAddr:
+ raise ValueError("You get out of the ram by trying to get value at address {}, max address is {}".format(addr,self.lastAddr))
+ if(value==None):
+ return(0)
+ return(value)
+
+ def fetch(self):
+ addr=self.c["PC"]
+ value=None
+ try:
+ value=self.data[addr]
+ except:
+ if addr>self.lastAddr:
+ raise ValueError("You get out of the ram by trying to get value at address {}, max address is {}".format(addr,self.lastAddr))
+ if(value==None):
+ return(0)
+ return(value)
+
+ def dump(self):
+ print("------- RAM --------")
+ for key,value in self.data.items():
+ #print("{}:{}".format(key,bin(value)[2:]))
+ print("{}:{}".format(key,value))
+ print("--------------------")
+
+ def dump(self,start,end):
+ for i in range(start,end+1):
+ try:
+ print("{}:{}".format(i,self.data[i]))
+ except:
+ print("{}:0".format(i))