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=6d38491cec33844989d4e94ca2a0065d3941c8dc;hpb=b32414f8406634aca730d724a011023c0da8bf22;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 6d38491c..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; } @@ -38,6 +39,7 @@ public class StandardMicroInstructionMemory implements MicroInstructionMemory public void setCell(long address, MicroInstruction data) { this.data[translate(address)] = data; + notifyObservers(address); } @Override