+++ /dev/null
-package net.mograsim.machine.mi.components;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Consumer;
-
-import net.mograsim.logic.model.model.LogicModelModifiable;
-import net.mograsim.logic.model.model.wires.Pin;
-import net.mograsim.logic.model.model.wires.PinUsage;
-import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
-import net.mograsim.logic.model.serializing.IdentifyParams;
-import net.mograsim.logic.model.snippets.HighLevelStateHandler;
-import net.mograsim.machine.ModelMemory;
-import net.mograsim.machine.mi.MPROM;
-import net.mograsim.machine.mi.MPROMDefinition;
-
-public abstract class ModelMPROM extends ModelMemory
-{
- private final Pin addrPin, dataPin;
- private CoreMPROM memory;
- private final MPROMDefinition definition;
-
- private final List<Consumer<Object>> memoryBindingListeners;
-
- public ModelMPROM(LogicModelModifiable model, MPROMDefinition definition, String name)
- {
- super(model, 30, 80, name, "MPROM", false);
- this.definition = definition;
- addPin(addrPin = new Pin(model, this, "A", definition.getMemoryAddressBits(), PinUsage.INPUT, getWidth(), 30));
- addPin(dataPin = new Pin(model, this, "D", definition.getMicroInstructionMemoryAddressBits(), PinUsage.OUTPUT, getWidth(), 50));
-
- memoryBindingListeners = new ArrayList<>();
-
- setHighLevelStateHandler(new HighLevelStateHandler()
- {
- @Override
- public Object get(String stateID)
- {
- if (stateID.equals("memory_binding"))
- return memory.getMemory();
- throw new IllegalArgumentException("No high level state with ID " + stateID);
- }
-
- @Override
- public void set(String stateID, Object newState)
- {
- if (stateID.equals("memory_binding"))
- {
- memory.setMemory((MPROM) newState);
- memoryBindingListeners.forEach(l -> l.accept(newState));
- } else
- throw new IllegalArgumentException("No high level state with ID " + stateID);
- }
-
- @Override
- public void addListener(String stateID, Consumer<Object> stateChanged)
- {
- if (stateID.equals("memory_binding"))
- memoryBindingListeners.add(stateChanged);
- else
- throw new IllegalArgumentException("No high level state with ID " + stateID);
- }
-
- @Override
- public void removeListener(String stateID, Consumer<Object> stateChanged)
- {
- if (stateID.equals("memory_binding"))
- memoryBindingListeners.remove(stateChanged);
- else
- throw new IllegalArgumentException("No high level state with ID " + stateID);
- }
-
- @Override
- public String getIDForSerializing(IdentifyParams idParams)
- {
- return null;
- }
-
- @Override
- public Object getParamsForSerializing(IdentifyParams idParams)
- {
- return null;
- }
- });
-
- init();
- }
-
- public MPROMDefinition getDefinition()
- {
- return definition;
- }
-
- public Pin getAddressPin()
- {
- return addrPin;
- }
-
- public Pin getDataPin()
- {
- return dataPin;
- }
-
- public CoreMPROM getCoreMemory()
- {
- return memory;
- }
-
- public void setCoreModelBinding(CoreMPROM memory)
- {
- this.memory = memory;
- }
-
- static
- {
- LogicCoreAdapter.addComponentAdapter(new MPROMAdapter());
- }
-}
\ No newline at end of file