Fixed a bug in Am2900; created dlatch8/80; relayouted some components
[Mograsim.git] / net.mograsim.machine / src / net / mograsim / machine / mi / StandardMicroInstructionMemory.java
index 6d38491..519c9b3 100644 (file)
@@ -10,27 +10,28 @@ public class StandardMicroInstructionMemory implements MicroInstructionMemory
        private MicroInstruction[] data;
        private MicroInstructionMemoryDefinition definition;
        private HashSet<MemoryObserver> 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