Added register listeners
[Mograsim.git] / plugins / net.mograsim.machine / src / net / mograsim / machine / Machine.java
1 package net.mograsim.machine;
2
3 import java.util.function.Consumer;
4
5 import net.mograsim.logic.core.components.CoreClock;
6 import net.mograsim.logic.core.timeline.Timeline;
7 import net.mograsim.logic.core.types.BitVector;
8 import net.mograsim.logic.model.model.LogicModel;
9 import net.mograsim.machine.mi.AssignableMicroInstructionMemory;
10 import net.mograsim.machine.standard.memory.AssignableMainMemory;
11
12 public interface Machine
13 {
14         MachineDefinition getDefinition();
15
16         void reset();
17
18         LogicModel getModel();
19
20         // TODO replace with HLS references
21         CoreClock getClock();
22
23         BitVector getRegister(Register r);
24
25         void setRegister(Register r, BitVector value);
26
27         void addRegisterListener(Register r, Consumer<BitVector> listener);
28
29         void removeRegisterListener(Register r, Consumer<BitVector> listener);
30
31         Timeline getTimeline();
32
33         AssignableMainMemory getMainMemory();
34
35         AssignableMicroInstructionMemory getMicroInstructionMemory();
36
37         void addActiveMicroInstructionChangedListener(ActiveMicroInstructionChangedListener listener);
38
39         void removeActiveMicroInstructionChangedListener(ActiveMicroInstructionChangedListener listener);
40
41         long getActiveMicroInstructionAddress();
42
43         public interface ActiveMicroInstructionChangedListener
44         {
45                 public void instructionChanged(long oldAddress, long newAddress);
46         }
47 }