X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2FStandardMicroInstructionMemory.java;fp=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2FStandardMicroInstructionMemory.java;h=6d38491cec33844989d4e94ca2a0065d3941c8dc;hb=259c5b8d38b6ed641fd9b5d78fe20969c67015dc;hp=6ef54bdb1ec0d9a1854fe293726ba21ae68a7f98;hpb=2fe86b9ccd64afbe485b8290db9f11b93d9943bf;p=Mograsim.git diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java b/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java index 6ef54bdb..6d38491c 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java @@ -2,17 +2,16 @@ package net.mograsim.machine.mi; import java.util.HashSet; -import net.mograsim.machine.MemoryDefinition; import net.mograsim.machine.MemoryObserver; import net.mograsim.machine.standard.memory.MemoryException; -class StandardMicroInstructionMemory implements MicroInstructionMemory +public class StandardMicroInstructionMemory implements MicroInstructionMemory { private MicroInstruction[] data; - private MemoryDefinition definition; + private MicroInstructionMemoryDefinition definition; private HashSet observers = new HashSet<>(); - StandardMicroInstructionMemory(MemoryDefinition definition) + public StandardMicroInstructionMemory(MicroInstructionMemoryDefinition definition) { if(definition.size() > Integer.MAX_VALUE) throw new MemoryException("Size of MicroInstructionMemory must be an int, not a long"); @@ -28,7 +27,11 @@ class StandardMicroInstructionMemory implements MicroInstructionMemory @Override public MicroInstruction getCell(long address) { - return data[translate(address)]; + int translatedAddress = translate(address); + MicroInstruction actual = data[translatedAddress]; + if(actual == null) + actual = data[translatedAddress] = definition.getMicroInstructionDefinition().createDefaultInstruction(); + return actual; } @Override @@ -56,7 +59,7 @@ class StandardMicroInstructionMemory implements MicroInstructionMemory } @Override - public MemoryDefinition getDefinition() + public MicroInstructionMemoryDefinition getDefinition() { return definition; }