1 package net.mograsim.machine.mi;
3 import java.util.HashSet;
6 import net.mograsim.machine.Memory.MemoryCellModifiedListener;
8 public class AssignableMicroInstructionMemory implements MicroInstructionMemory, MemoryCellModifiedListener
11 private Set<MemoryCellModifiedListener> observers = new HashSet<>();
13 private Set<MIMemoryReassignedListener> reassignmentListeners = new HashSet<>();
14 private MicroInstructionMemory real = null;
16 public AssignableMicroInstructionMemory(StandardMicroInstructionMemory standardMicroInstructionMemory)
18 real = standardMicroInstructionMemory;
19 real.registerCellModifiedListener(this);
22 public void bind(MicroInstructionMemory real)
24 this.real.deregisterCellModifiedListener(this);
26 real.registerCellModifiedListener(this);
27 notifyMemoryChanged(-1);
28 notifyMemoryReassigned(real);
32 public MicroInstruction getCell(long address)
34 return real.getCell(address);
38 public void setCell(long address, MicroInstruction data)
40 real.setCell(address, data);
44 public void registerCellModifiedListener(MemoryCellModifiedListener ob)
50 public void deregisterCellModifiedListener(MemoryCellModifiedListener ob)
55 private void notifyMemoryChanged(long address)
57 observers.forEach(o -> o.update(address));
61 public MicroInstructionMemoryDefinition getDefinition()
63 return real.getDefinition();
67 public void update(long address)
69 notifyMemoryChanged(address);
72 public void registerMemoryReassignedListener(MIMemoryReassignedListener listener)
74 reassignmentListeners.add(listener);
77 public void deregisterMemoryReassignedListener(MIMemoryReassignedListener listener)
79 reassignmentListeners.remove(listener);
82 private void notifyMemoryReassigned(MicroInstructionMemory newAssignee)
84 reassignmentListeners.forEach(l -> l.reassigned(newAssignee));
87 public static interface MIMemoryReassignedListener
89 public void reassigned(MicroInstructionMemory newAssignee);