diff options
| author | Loic GUEGAN <loic.guegan@yahoo.fr> | 2018-09-02 16:31:49 +0200 |
|---|---|---|
| committer | Loic GUEGAN <loic.guegan@yahoo.fr> | 2018-09-02 16:31:49 +0200 |
| commit | a110465a4261e582025b6344facb7fa65c0acd56 (patch) | |
| tree | 69f92f3186d47e2dc4a6b811c35238b02b0ec37d /MicSim/components/caretaker.py | |
| parent | cec2994481b3df8422603f864c1286524d5b3eff (diff) | |
Add unit tests, refactoring
Diffstat (limited to 'MicSim/components/caretaker.py')
| -rw-r--r-- | MicSim/components/caretaker.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/MicSim/components/caretaker.py b/MicSim/components/caretaker.py new file mode 100644 index 0000000..ab20fba --- /dev/null +++ b/MicSim/components/caretaker.py @@ -0,0 +1,34 @@ +#!/usr/bin/python + +class Caretaker: + + def __init__(self): + self.objects=dict() # Create empty objects pool + # Add registers to pool + for reg in ["MAR","MDR", "PC", "MBR", "SP","LV","CPP","TOS","OPC","H"]: + self.objects[reg]=0 + self.objects["RAM"]=None + + def __getitem__(self,key): + if key=="MBRU": # If we ask for unsigned + return(abs(self.objects["MBR"])) + elif key== "MBR": + if (self.objects[key]>>7)==1: # If it a negative number (2 complement) + return(-((self.objects[key]-1)^0xFF)) # transforme bin negative number to python negative number + else: + return(self.objects[key]) + return(self.objects[key]) + + def __setitem__(self,key,value): + if key!="RAM": + if value > (2**32) and key!="MBR" and key!="MBRU": # Check value fit in word + print("Warning word overflow: value {} on register {}".format(value,key)) + value=value%(2**32) # Force to fit in word + elif value > (2**8) and key=="MBR" and key=="MBRU": # Check value fit in byte + print("Warning byte overflow: value {} on register {}".format(value,key)) + value=value%256 # Force to fit in byte + self.objects[key]=value + + def items(self): + return(self.objects.items()) + |
