e8ce2452296395ca40af8242624e8c382fc1478e
[Mograsim.git] / plugins / net.mograsim.machine / src / net / mograsim / machine / standard / memory / WordAddressableMemory.java
1 package net.mograsim.machine.standard.memory;
2
3 import java.math.BigInteger;
4
5 import net.mograsim.logic.core.types.Bit;
6 import net.mograsim.logic.core.types.BitVector;
7 import net.mograsim.machine.GenericMemory;
8 import net.mograsim.machine.MainMemory;
9 import net.mograsim.machine.MainMemoryDefinition;
10
11 public class WordAddressableMemory extends GenericMemory<BitVector> implements MainMemory
12 {
13         private final int cellWidth;
14         private final MainMemoryDefinition definition;
15
16         public WordAddressableMemory(MainMemoryDefinition definition)
17         {
18                 super(definition);
19                 this.cellWidth = definition.getCellWidth();
20                 this.definition = definition;
21         }
22
23         @Override
24         public void setCell(long address, BitVector data)
25         {
26                 if (data.isBinary())
27                         super.setCell(address, data);
28         }
29
30         @Override
31         public BitVector getCell(long address)
32         {
33                 BitVector data = super.getCell(address);
34                 return data == null ? BitVector.of(Bit.ZERO, cellWidth) : data;
35         }
36
37         @Override
38         public BigInteger getCellAsBigInteger(long address)
39         {
40                 BitVector data = getCell(address);
41                 return data == null ? BigInteger.valueOf(0) : data.getUnsignedValue();
42         }
43
44         @Override
45         public void setCellAsBigInteger(long address, BigInteger data)
46         {
47                 setCell(address, BitVector.from(data, cellWidth));
48         }
49
50         @Override
51         public MainMemoryDefinition getDefinition()
52         {
53                 return definition;
54         }
55 }