Implemented some infrastructure for MPROMs
[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.AssignableMPROM;
10 import net.mograsim.machine.mi.AssignableMicroInstructionMemory;
11 import net.mograsim.machine.registers.Register;
12 import net.mograsim.machine.standard.memory.AssignableMainMemory;
13
14 public interface Machine
15 {
16         MachineDefinition getDefinition();
17
18         void reset();
19
20         LogicModel getModel();
21
22         // TODO replace with HLS references
23         CoreClock getClock();
24
25         BitVector getRegister(Register r);
26
27         void setRegister(Register r, BitVector value);
28
29         void addRegisterListener(Register r, Consumer<BitVector> listener);
30
31         void removeRegisterListener(Register r, Consumer<BitVector> listener);
32
33         Timeline getTimeline();
34
35         AssignableMainMemory getMainMemory();
36
37         AssignableMicroInstructionMemory getMicroInstructionMemory();
38
39         AssignableMPROM getMPROM();
40
41         void addActiveMicroInstructionChangedListener(ActiveMicroInstructionChangedListener listener);
42
43         void removeActiveMicroInstructionChangedListener(ActiveMicroInstructionChangedListener listener);
44
45         long getActiveMicroInstructionAddress();
46
47         public interface ActiveMicroInstructionChangedListener
48         {
49                 public void instructionChanged(long oldAddress, long newAddress);
50         }
51 }