X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2FStandardMicroInstructionMemory.java;h=519c9b3af9e1c31a92d1232695b2de2bc29f2540;hb=8bed58cd47f4e53a0a83e066d38864aa6875502f;hp=c983561a3d37a83736d441ab36f4e19396425c2d;hpb=7958e659b3ea9aac43c1a67a0b2921c5323e4c84;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 c983561a..519c9b3a 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMicroInstructionMemory.java @@ -10,27 +10,28 @@ public class StandardMicroInstructionMemory implements MicroInstructionMemory private MicroInstruction[] data; private MicroInstructionMemoryDefinition definition; private HashSet observers = new HashSet<>(); - + public StandardMicroInstructionMemory(MicroInstructionMemoryDefinition definition) { - if(definition.size() > Integer.MAX_VALUE) + if (definition.size() > Integer.MAX_VALUE) throw new MemoryException("Size of MicroInstructionMemory must be an int, not a long"); this.definition = definition; data = new MicroInstruction[(int) definition.size()]; } - + private int translate(long address) { return (int) (address - definition.getMinimalAddress()); } - + @Override public MicroInstruction getCell(long address) { int translatedAddress = translate(address); MicroInstruction actual = data[translatedAddress]; - if(actual == null) - actual = data[translatedAddress] = definition.getMicroInstructionDefinition().createDefaultInstruction(); + if (actual == null) + actual = data[translatedAddress] = definition.getMicroInstructionDefinition() + .createDefaultInstruction(() -> notifyObservers(address)); return actual; }