Fixed a bug in Am2900; created dlatch8/80; relayouted some components
[Mograsim.git] / 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 BitVector getCell(long address)
25         {
26                 BitVector data = super.getCell(address);
27                 return data == null ? BitVector.of(Bit.ZERO, cellWidth) : data;
28         }
29
30         @Override
31         public BigInteger getCellAsBigInteger(long address)
32         {
33                 BitVector data = getCell(address);
34                 return data == null ? BigInteger.valueOf(0) : data.getUnsignedValue();
35         }
36
37         @Override
38         public void setCellAsBigInteger(long address, BigInteger data)
39         {
40                 setCell(address, BitVector.from(data, cellWidth));
41         }
42
43         @Override
44         public MainMemoryDefinition getDefinition()
45         {
46                 return definition;
47         }
48 }