package net.mograsim.machine;
+import java.util.function.Consumer;
+
import net.mograsim.logic.core.components.CoreClock;
import net.mograsim.logic.core.timeline.Timeline;
import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.machine.mi.MicroInstructionMemory;
import net.mograsim.logic.model.model.LogicModel;
+import net.mograsim.machine.mi.AssignableMicroInstructionMemory;
+import net.mograsim.machine.registers.Register;
+import net.mograsim.machine.standard.memory.AssignableMainMemory;
public interface Machine
{
LogicModel getModel();
+ // TODO replace with HLS references
CoreClock getClock();
BitVector getRegister(Register r);
void setRegister(Register r, BitVector value);
+ void addRegisterListener(Register r, Consumer<BitVector> listener);
+
+ void removeRegisterListener(Register r, Consumer<BitVector> listener);
+
Timeline getTimeline();
- MainMemory getMainMemory();
+ AssignableMainMemory getMainMemory();
+
+ AssignableMicroInstructionMemory getMicroInstructionMemory();
+
+ void addActiveMicroInstructionChangedListener(ActiveMicroInstructionChangedListener listener);
+
+ void removeActiveMicroInstructionChangedListener(ActiveMicroInstructionChangedListener listener);
- MicroInstructionMemory getMicroInstructionMemory();
+ long getActiveMicroInstructionAddress();
-}
+ public interface ActiveMicroInstructionChangedListener
+ {
+ public void instructionChanged(long oldAddress, long newAddress);
+ }
+}
\ No newline at end of file